Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

controllers: Add OcsClient and StorageClassClaim controllers #1

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions PROJECT
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,23 @@ plugins:
scorecard.sdk.operatorframework.io/v2: {}
projectName: ocs-client-operator
repo: github.com/red-hat-storage/ocs-client-operator
resources:
- api:
crdVersion: v1
namespaced: true
controller: true
domain: openshift.io
group: odf
kind: OcsClient
path: github.com/red-hat-storage/ocs-client-operator/api/v1alpha1
version: v1alpha1
- api:
crdVersion: v1
namespaced: true
controller: true
domain: openshift.io
group: odf
kind: StorageClassClaim
path: github.com/red-hat-storage/ocs-client-operator/api/v1alpha1
version: v1alpha1
version: "3"
88 changes: 88 additions & 0 deletions api/v1alpha1/ocsclient_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*
Copyright 2022 Red Hat, Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1alpha1

import (
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type ocsClientPhase string

const (
// OcsClientInitializing represents Initializing state of OcsClient
OcsClientInitializing ocsClientPhase = "Initializing"
// OcsClientOnboarding represents Onboarding state of OcsClient
OcsClientOnboarding ocsClientPhase = "Onboarding"
// OcsClientConnected represents Onboarding state of OcsClient
OcsClientConnected ocsClientPhase = "Connected"
// OcsClientUpdating represents Onboarding state of OcsClient
OcsClientUpdating ocsClientPhase = "Updating"
// OcsClientOffboarding represents Onboarding state of OcsClient
OcsClientOffboarding ocsClientPhase = "Offboarding"
)

// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.

// OcsClientSpec defines the desired state of OcsClient
type OcsClientSpec struct {
// StorageProviderEndpoint holds info to establish connection with the storage providing cluster.
StorageProviderEndpoint string `json:"storageProviderEndpoint"`

// OnboardingTicket holds an identity information required for consumer to onboard.
OnboardingTicket string `json:"onboardingTicket"`

// RequestedCapacity Will define the desired capacity requested by a consumer cluster.
RequestedCapacity *resource.Quantity `json:"requestedCapacity,omitempty"`
}

// OcsClientStatus defines the observed state of OcsClient
type OcsClientStatus struct {
Phase ocsClientPhase `json:"phase,omitempty"`

// GrantedCapacity Will report the actual capacity
// granted to the consumer cluster by the provider cluster.
GrantedCapacity resource.Quantity `json:"grantedCapacity,omitempty"`

// ConsumerID will hold the identity of this cluster inside the attached provider cluster
ConsumerID string `json:"id,omitempty"`
}

//+kubebuilder:object:root=true
//+kubebuilder:subresource:status

// OcsClient is the Schema for the ocsclients API
type OcsClient struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec OcsClientSpec `json:"spec,omitempty"`
Status OcsClientStatus `json:"status,omitempty"`
}

//+kubebuilder:object:root=true

// OcsClientList contains a list of OcsClient
type OcsClientList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []OcsClient `json:"items"`
}

func init() {
SchemeBuilder.Register(&OcsClient{}, &OcsClientList{})
}
81 changes: 81 additions & 0 deletions api/v1alpha1/storageclassclaim_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
Copyright 2020 Red Hat, Inc.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2022?


Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// NOTE: json tags are required. Any new fields you add must have json tags for the fields to be serialized.

// StorageClassClaimSpec defines the desired state of StorageClassClaim
type StorageClassClaimSpec struct {
//+kubebuilder:validation:Enum=blockpool;sharedfilesystem
Type string `json:"type"`
EncryptionMethod string `json:"encryptionMethod,omitempty"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to add storageProfile to the spec

}

type storageClassClaimState string

const (
// StorageClassClaimInitializing represents Initializing state of StorageClassClaim
StorageClassClaimInitializing storageClassClaimState = "Initializing"
// StorageClassClaimValidating represents Validating state of StorageClassClaim
StorageClassClaimValidating storageClassClaimState = "Validating"
// StorageClassClaimFailed represents Failed state of StorageClassClaim
StorageClassClaimFailed storageClassClaimState = "Failed"
// StorageClassClaimCreating represents Configuring state of StorageClassClaim
StorageClassClaimCreating storageClassClaimState = "Creating"
// StorageClassClaimConfiguring represents Configuring state of StorageClassClaim
StorageClassClaimConfiguring storageClassClaimState = "Configuring"
// StorageClassClaimReady represents Ready state of StorageClassClaim
StorageClassClaimReady storageClassClaimState = "Ready"
// StorageClassClaimDeleting represents Deleting state of StorageClassClaim
StorageClassClaimDeleting storageClassClaimState = "Deleting"
)

// StorageClassClaimStatus defines the observed state of StorageClassClaim
type StorageClassClaimStatus struct {
Phase storageClassClaimState `json:"phase,omitempty"`
}

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="StorageType",type="string",JSONPath=".spec.type"
// +kubebuilder:printcolumn:name="Phase",type="string",JSONPath=".status.phase"

// StorageClassClaim is the Schema for the storageclassclaims API
type StorageClassClaim struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec StorageClassClaimSpec `json:"spec,omitempty"`
Status StorageClassClaimStatus `json:"status,omitempty"`
}

// +kubebuilder:object:root=true

// StorageClassClaimList contains a list of StorageClassClaim
type StorageClassClaimList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []StorageClassClaim `json:"items"`
}

func init() {
SchemeBuilder.Register(&StorageClassClaim{}, &StorageClassClaimList{})
}
Loading