From f8c94e43bb97635e3c9b2dafa676596933b9fb10 Mon Sep 17 00:00:00 2001 From: HZ89 Date: Wed, 20 Nov 2019 11:33:30 +0800 Subject: [PATCH] feat(crds): change api group name change api group name to seaweedfs.com --- Makefile | 6 +- ... seaweedfs.com_seaweedfsclusters_crd.yaml} | 26 +- ...dfs.com_v1alpha1_seaweedfscluster_cr.yaml} | 2 +- deploy/role.yaml | 2 +- go.mod | 2 +- ...1.go => addtoscheme_seaweedfs_v1alpha1.go} | 2 +- pkg/apis/cluster/group.go | 6 - pkg/apis/cluster/v1alpha1/doc.go | 4 - pkg/apis/seaweedfs/group.go | 6 + pkg/apis/seaweedfs/v1alpha1/doc.go | 4 + .../v1alpha1/register.go | 6 +- .../v1alpha1/seaweedfscluster_types.go | 77 +++-- .../v1alpha1/zz_generated.deepcopy.go | 154 ++++++++-- .../v1alpha1/zz_generated.openapi.go | 277 ++++++++++++------ .../seaweedfscluster_controller.go | 10 +- 15 files changed, 408 insertions(+), 176 deletions(-) rename deploy/crds/{cluster.seaweedfs.com_seaweedfsclusters_crd.yaml => seaweedfs.com_seaweedfsclusters_crd.yaml} (88%) rename deploy/crds/{cluster.seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml => seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml} (70%) rename pkg/apis/{addtoscheme_cluster_v1alpha1.go => addtoscheme_seaweedfs_v1alpha1.go} (75%) delete mode 100644 pkg/apis/cluster/group.go delete mode 100644 pkg/apis/cluster/v1alpha1/doc.go create mode 100644 pkg/apis/seaweedfs/group.go create mode 100644 pkg/apis/seaweedfs/v1alpha1/doc.go rename pkg/apis/{cluster => seaweedfs}/v1alpha1/register.go (65%) rename pkg/apis/{cluster => seaweedfs}/v1alpha1/seaweedfscluster_types.go (58%) rename pkg/apis/{cluster => seaweedfs}/v1alpha1/zz_generated.deepcopy.go (52%) rename pkg/apis/{cluster => seaweedfs}/v1alpha1/zz_generated.openapi.go (57%) diff --git a/Makefile b/Makefile index 4d6d1dc..5349e22 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ install: ## Install all resources (CR/CRD's, RBCA and Operator) @echo ....... Creating namespace ....... - kubectl create namespace ${NAMESPACE} @echo ....... Applying CRDS and Operator ....... - - kubectl apply -f deploy/crds/cluster.seaweedfs.com_seaweedfsclusters_crd.yaml -n ${NAMESPACE} + - kubectl apply -f deploy/crds/seaweedfs.com_seaweedfsclusters_crd.yaml -n ${NAMESPACE} @echo ....... Applying Rules and Service Account ....... - kubectl apply -f deploy/role.yaml -n ${NAMESPACE} - kubectl apply -f deploy/role_binding.yaml -n ${NAMESPACE} @@ -16,12 +16,12 @@ install: ## Install all resources (CR/CRD's, RBCA and Operator) @echo ....... Applying Operator ....... - kubectl apply -f deploy/operator.yaml -n ${NAMESPACE} @echo ....... Creating the Database ....... - - kubectl apply -f deploy/crds/cluster.seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml -n ${NAMESPACE} + - kubectl apply -f deploy/crds/seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml -n ${NAMESPACE} uninstall: ## Uninstall all that all performed in the $ make install @echo ....... Uninstalling ....... @echo ....... Deleting CRDs....... - - kubectl delete -f deploy/crds/cluster.seaweedfs.com_seaweedfsclusters_crd.yaml -n ${NAMESPACE} + - kubectl delete -f deploy/crds/seaweedfs.com_seaweedfsclusters_crd.yaml -n ${NAMESPACE} @echo ....... Deleting Rules and Service Account ....... - kubectl delete -f deploy/role.yaml -n ${NAMESPACE} - kubectl delete -f deploy/role_binding.yaml -n ${NAMESPACE} diff --git a/deploy/crds/cluster.seaweedfs.com_seaweedfsclusters_crd.yaml b/deploy/crds/seaweedfs.com_seaweedfsclusters_crd.yaml similarity index 88% rename from deploy/crds/cluster.seaweedfs.com_seaweedfsclusters_crd.yaml rename to deploy/crds/seaweedfs.com_seaweedfsclusters_crd.yaml index 2df6d62..50e9dd2 100644 --- a/deploy/crds/cluster.seaweedfs.com_seaweedfsclusters_crd.yaml +++ b/deploy/crds/seaweedfs.com_seaweedfsclusters_crd.yaml @@ -1,9 +1,9 @@ apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: - name: seaweedfsclusters.cluster.seaweedfs.com + name: seaweedfsclusters.seaweedfs.com spec: - group: cluster.seaweedfs.com + group: seaweedfs.com names: kind: SeaweedfsCluster listKind: SeaweedfsClusterList @@ -32,14 +32,14 @@ spec: description: SeaweedfsClusterSpec defines the desired state of SeaweedfsCluster properties: filer: - description: SeaweedfsFilerSpec defines the desired state of filer server - in cluster + description: FilerSpec defines the desired state of filer server in + cluster properties: - dir_list_limit: + dirListLimit: description: DirListLimit limit sub dir listing size, default 100000 format: int32 type: integer - disable_dir_listing: + disableDirListing: description: DisableDirListing turn off directory listing type: boolean max_mb: @@ -56,14 +56,14 @@ spec: type: integer type: object master: - description: SeaweedfsMasterSpec defines the desired state of master - server in cluster + description: MasterSpec defines the desired state of master server in + cluster properties: default_replication: description: DefaultReplication set the data replication policy in volumes. default "000" type: string - disable_http: + disableHttp: description: DisableHTTP if disable http proto, only gRPC operations are allowed. GRPC port is http port + 10000 type: boolean @@ -72,7 +72,7 @@ spec: is 9333 Master servers also use it identify each other. format: int32 type: integer - replication_size: + replicas: description: Replicas a size of a raft cluster. The master servers are coordinated by Raft protocol, to elect a leader. format: int32 @@ -82,15 +82,15 @@ spec: type: string volumes: items: - description: SeaweedfsVolumeSpec defines the desired state of volume - servers in cluster + description: VolumeSpec defines the desired state of volume servers + in cluster properties: compaction_mbps: description: CompactionMbps limit background compaction or copying speed in mega bytes per second format: int32 type: integer - data_center: + dataCenter: description: DataCenter current volume server's data center name type: string max: diff --git a/deploy/crds/cluster.seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml b/deploy/crds/seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml similarity index 70% rename from deploy/crds/cluster.seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml rename to deploy/crds/seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml index c0d81bd..150f419 100644 --- a/deploy/crds/cluster.seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml +++ b/deploy/crds/seaweedfs.com_v1alpha1_seaweedfscluster_cr.yaml @@ -1,4 +1,4 @@ -apiVersion: cluster.seaweedfs.com/v1alpha1 +apiVersion: seaweedfs.com/v1alpha1 kind: SeaweedfsCluster metadata: name: example-seaweedfscluster diff --git a/deploy/role.yaml b/deploy/role.yaml index 10d2f84..9b797ea 100644 --- a/deploy/role.yaml +++ b/deploy/role.yaml @@ -54,7 +54,7 @@ rules: verbs: - get - apiGroups: - - cluster.seaweedfs.com + - seaweedfs.com resources: - '*' - seaweedfsclusters diff --git a/go.mod b/go.mod index 4401f0d..c0ed762 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/seaweedfs/seaweedfs-operator require ( github.com/go-openapi/spec v0.17.2 - github.com/operator-framework/operator-sdk v0.11.1-0.20191027213559-041ec5463883 + github.com/operator-framework/operator-sdk v0.12.1-0.20191119193908-3b2f6845f05b github.com/spf13/pflag v1.0.3 k8s.io/api v0.0.0-20190918155943-95b840bb6a1f k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655 diff --git a/pkg/apis/addtoscheme_cluster_v1alpha1.go b/pkg/apis/addtoscheme_seaweedfs_v1alpha1.go similarity index 75% rename from pkg/apis/addtoscheme_cluster_v1alpha1.go rename to pkg/apis/addtoscheme_seaweedfs_v1alpha1.go index 059681a..93725ba 100644 --- a/pkg/apis/addtoscheme_cluster_v1alpha1.go +++ b/pkg/apis/addtoscheme_seaweedfs_v1alpha1.go @@ -1,7 +1,7 @@ package apis import ( - "github.com/seaweedfs/seaweedfs-operator/pkg/apis/cluster/v1alpha1" + "github.com/seaweedfs/seaweedfs-operator/pkg/apis/seaweedfs/v1alpha1" ) func init() { diff --git a/pkg/apis/cluster/group.go b/pkg/apis/cluster/group.go deleted file mode 100644 index 1f66bd5..0000000 --- a/pkg/apis/cluster/group.go +++ /dev/null @@ -1,6 +0,0 @@ -// Package cluster contains cluster API versions. -// -// This file ensures Go source parsers acknowledge the cluster package -// and any child packages. It can be removed if any other Go source files are -// added to this package. -package cluster diff --git a/pkg/apis/cluster/v1alpha1/doc.go b/pkg/apis/cluster/v1alpha1/doc.go deleted file mode 100644 index e215543..0000000 --- a/pkg/apis/cluster/v1alpha1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// Package v1alpha1 contains API Schema definitions for the cluster v1alpha1 API group -// +k8s:deepcopy-gen=package,register -// +groupName=cluster.seaweedfs.com -package v1alpha1 diff --git a/pkg/apis/seaweedfs/group.go b/pkg/apis/seaweedfs/group.go new file mode 100644 index 0000000..72c75c4 --- /dev/null +++ b/pkg/apis/seaweedfs/group.go @@ -0,0 +1,6 @@ +// Package seaweedfs contains seaweedfs API versions. +// +// This file ensures Go source parsers acknowledge the seaweedfs package +// and any child packages. It can be removed if any other Go source files are +// added to this package. +package seaweedfs diff --git a/pkg/apis/seaweedfs/v1alpha1/doc.go b/pkg/apis/seaweedfs/v1alpha1/doc.go new file mode 100644 index 0000000..a756609 --- /dev/null +++ b/pkg/apis/seaweedfs/v1alpha1/doc.go @@ -0,0 +1,4 @@ +// Package v1alpha1 contains API Schema definitions for the seaweedfs v1alpha1 API group +// +k8s:deepcopy-gen=package,register +// +groupName=seaweedfs.com +package v1alpha1 diff --git a/pkg/apis/cluster/v1alpha1/register.go b/pkg/apis/seaweedfs/v1alpha1/register.go similarity index 65% rename from pkg/apis/cluster/v1alpha1/register.go rename to pkg/apis/seaweedfs/v1alpha1/register.go index f227338..01a7b0f 100644 --- a/pkg/apis/cluster/v1alpha1/register.go +++ b/pkg/apis/seaweedfs/v1alpha1/register.go @@ -1,8 +1,8 @@ // NOTE: Boilerplate only. Ignore this file. -// Package v1alpha1 contains API Schema definitions for the cluster v1alpha1 API group +// Package v1alpha1 contains API Schema definitions for the seaweedfs v1alpha1 API group // +k8s:deepcopy-gen=package,register -// +groupName=cluster.seaweedfs.com +// +groupName=seaweedfs.com package v1alpha1 import ( @@ -12,7 +12,7 @@ import ( var ( // SchemeGroupVersion is group version used to register these objects - SchemeGroupVersion = schema.GroupVersion{Group: "cluster.seaweedfs.com", Version: "v1alpha1"} + SchemeGroupVersion = schema.GroupVersion{Group: "seaweedfs.com", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion} diff --git a/pkg/apis/cluster/v1alpha1/seaweedfscluster_types.go b/pkg/apis/seaweedfs/v1alpha1/seaweedfscluster_types.go similarity index 58% rename from pkg/apis/cluster/v1alpha1/seaweedfscluster_types.go rename to pkg/apis/seaweedfs/v1alpha1/seaweedfscluster_types.go index 2625de6..6c6aa29 100644 --- a/pkg/apis/cluster/v1alpha1/seaweedfscluster_types.go +++ b/pkg/apis/seaweedfs/v1alpha1/seaweedfscluster_types.go @@ -1,37 +1,38 @@ package v1alpha1 import ( + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) // SeaweedfsClusterSpec defines the desired state of SeaweedfsCluster // +k8s:openapi-gen=true type SeaweedfsClusterSpec struct { - Version string `json:"version,omitempty"` - Master SeaweedfsMasterSpec `json:"master,omitempty"` - Volumes []SeaweedfsVolumeSpec `json:"volumes,omitempty"` - Filer SeaweedfsFilerSpec `json:"filer,omitempty"` + Version string `json:"version,omitempty"` + Master MasterSpec `json:"master,omitempty"` + Volumes []VolumeSpec `json:"volumes,omitempty"` + Filer FilerSpec `json:"filer,omitempty"` } -// SeaweedfsMasterSpec defines the desired state of master server in cluster +// MasterSpec defines the desired state of master server in cluster // +k8s:openapi-gen=true -type SeaweedfsMasterSpec struct { +type MasterSpec struct { // Replicas a size of a raft cluster. // The master servers are coordinated by Raft protocol, to elect a leader. - Replicas int32 `json:"replication_size,omitempty"` + Replicas int32 `json:"replicas,omitempty"` // Port set master server http api service port. default is 9333 // Master servers also use it identify each other. Port int32 `json:"port,omitempty"` // DisableHTTP if disable http proto, only gRPC operations are allowed. // GRPC port is http port + 10000 - DisableHTTP bool `json:"disable_http,omitempty"` + DisableHTTP bool `json:"disableHttp,omitempty"` // DefaultReplication set the data replication policy in volumes. default "000" DefaultReplication string `json:"default_replication,omitempty"` } -// SeaweedfsVolumeSpec defines the desired state of volume servers in cluster +// VolumeSpec defines the desired state of volume servers in cluster // +k8s:openapi-gen=true -type SeaweedfsVolumeSpec struct { +type VolumeSpec struct { // Max set the maximum numbers of volumes management by this server. // Each volume is a 30G size file in under layer filesystem. Default is 7 Max int32 `json:"max,omitempty"` @@ -40,20 +41,20 @@ type SeaweedfsVolumeSpec struct { //Rack current volume server's rack name Rack string `json:"rack,omitempty"` // DataCenter current volume server's data center name - DataCenter string `json:"data_center,omitempty"` + DataCenter string `json:"dataCenter,omitempty"` // Port volume server api http listen port Port int32 `json:"port,omitempty"` } -// SeaweedfsFilerSpec defines the desired state of filer server in cluster +// FilerSpec defines the desired state of filer server in cluster // +k8s:openapi-gen=true -type SeaweedfsFilerSpec struct { +type FilerSpec struct { // Replicas a size of filer replications Replicas int32 `json:"replicas,omitempty"` // DirListLimit limit sub dir listing size, default 100000 - DirListLimit int32 `json:"dir_list_limit,omitempty"` + DirListLimit int32 `json:"dirListLimit,omitempty"` // DisableDirListing turn off directory listing - DisableDirListing bool `json:"disable_dir_listing,omitempty"` + DisableDirListing bool `json:"disableDirListing,omitempty"` // MaxMB split files larger than the limit, default 32 MaxMB int32 `json:"max_mb,omitempty"` // Port filer server http listen port @@ -63,9 +64,49 @@ type SeaweedfsFilerSpec struct { // SeaweedfsClusterStatus defines the observed state of SeaweedfsCluster // +k8s:openapi-gen=true type SeaweedfsClusterStatus struct { - // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster - // Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file - // Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html + ClusterID string + Master MasterStatus + Volumes []VolumesStatus + Filer FilerStatus +} + +// MasterStatus defines the observed state of SeaweedfsCluster master server +// +k8s:openapi-gen=true +type MasterStatus struct { + // +k8s:openapi-gen=false + ContainerSpec + Replicas int32 `json:"replicas"` +} + +type VolumesStatus struct { + // +k8s:openapi-gen=false + ContainerSpec +} + +type FilerStatus struct { + // +k8s:openapi-gen=false + ContainerSpec + Replicas int32 `json:"replicas"` +} + +// ContainerSpec is the container spec of a pod +// +k8s:openapi-gen=false +type ContainerSpec struct { + Image string `json:"image"` + ImagePullPolicy corev1.PullPolicy `json:"imagePullPolicy,omitempty"` + Requests *ResourceRequirement `json:"requests,omitempty"` + Limits *ResourceRequirement `json:"limits,omitempty"` +} + +// ResourceRequirement is resource requirements for a pod +// +k8s:openapi-gen=true +type ResourceRequirement struct { + // CPU is how many cores a pod requires + CPU string `json:"cpu,omitempty"` + // Memory is how much memory a pod requires + Memory string `json:"memory,omitempty"` + // Storage is storage size a pod requires + Storage string `json:"storage,omitempty"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/pkg/apis/cluster/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/seaweedfs/v1alpha1/zz_generated.deepcopy.go similarity index 52% rename from pkg/apis/cluster/v1alpha1/zz_generated.deepcopy.go rename to pkg/apis/seaweedfs/v1alpha1/zz_generated.deepcopy.go index ac3f5e8..3a5cb3e 100644 --- a/pkg/apis/cluster/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/seaweedfs/v1alpha1/zz_generated.deepcopy.go @@ -8,13 +8,121 @@ import ( runtime "k8s.io/apimachinery/pkg/runtime" ) +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContainerSpec) DeepCopyInto(out *ContainerSpec) { + *out = *in + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = new(ResourceRequirement) + **out = **in + } + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = new(ResourceRequirement) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerSpec. +func (in *ContainerSpec) DeepCopy() *ContainerSpec { + if in == nil { + return nil + } + out := new(ContainerSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FilerSpec) DeepCopyInto(out *FilerSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FilerSpec. +func (in *FilerSpec) DeepCopy() *FilerSpec { + if in == nil { + return nil + } + out := new(FilerSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *FilerStatus) DeepCopyInto(out *FilerStatus) { + *out = *in + in.ContainerSpec.DeepCopyInto(&out.ContainerSpec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FilerStatus. +func (in *FilerStatus) DeepCopy() *FilerStatus { + if in == nil { + return nil + } + out := new(FilerStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterSpec) DeepCopyInto(out *MasterSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterSpec. +func (in *MasterSpec) DeepCopy() *MasterSpec { + if in == nil { + return nil + } + out := new(MasterSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MasterStatus) DeepCopyInto(out *MasterStatus) { + *out = *in + in.ContainerSpec.DeepCopyInto(&out.ContainerSpec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MasterStatus. +func (in *MasterStatus) DeepCopy() *MasterStatus { + if in == nil { + return nil + } + out := new(MasterStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceRequirement) DeepCopyInto(out *ResourceRequirement) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceRequirement. +func (in *ResourceRequirement) DeepCopy() *ResourceRequirement { + if in == nil { + return nil + } + out := new(ResourceRequirement) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeaweedfsCluster) DeepCopyInto(out *SeaweedfsCluster) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status + in.Status.DeepCopyInto(&out.Status) return } @@ -75,7 +183,7 @@ func (in *SeaweedfsClusterSpec) DeepCopyInto(out *SeaweedfsClusterSpec) { out.Master = in.Master if in.Volumes != nil { in, out := &in.Volumes, &out.Volumes - *out = make([]SeaweedfsVolumeSpec, len(*in)) + *out = make([]VolumeSpec, len(*in)) copy(*out, *in) } out.Filer = in.Filer @@ -95,6 +203,15 @@ func (in *SeaweedfsClusterSpec) DeepCopy() *SeaweedfsClusterSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *SeaweedfsClusterStatus) DeepCopyInto(out *SeaweedfsClusterStatus) { *out = *in + in.Master.DeepCopyInto(&out.Master) + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]VolumesStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + in.Filer.DeepCopyInto(&out.Filer) return } @@ -109,49 +226,34 @@ func (in *SeaweedfsClusterStatus) DeepCopy() *SeaweedfsClusterStatus { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SeaweedfsFilerSpec) DeepCopyInto(out *SeaweedfsFilerSpec) { +func (in *VolumeSpec) DeepCopyInto(out *VolumeSpec) { *out = *in return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeaweedfsFilerSpec. -func (in *SeaweedfsFilerSpec) DeepCopy() *SeaweedfsFilerSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeSpec. +func (in *VolumeSpec) DeepCopy() *VolumeSpec { if in == nil { return nil } - out := new(SeaweedfsFilerSpec) + out := new(VolumeSpec) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SeaweedfsMasterSpec) DeepCopyInto(out *SeaweedfsMasterSpec) { +func (in *VolumesStatus) DeepCopyInto(out *VolumesStatus) { *out = *in + in.ContainerSpec.DeepCopyInto(&out.ContainerSpec) return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeaweedfsMasterSpec. -func (in *SeaweedfsMasterSpec) DeepCopy() *SeaweedfsMasterSpec { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumesStatus. +func (in *VolumesStatus) DeepCopy() *VolumesStatus { if in == nil { return nil } - out := new(SeaweedfsMasterSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SeaweedfsVolumeSpec) DeepCopyInto(out *SeaweedfsVolumeSpec) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeaweedfsVolumeSpec. -func (in *SeaweedfsVolumeSpec) DeepCopy() *SeaweedfsVolumeSpec { - if in == nil { - return nil - } - out := new(SeaweedfsVolumeSpec) + out := new(VolumesStatus) in.DeepCopyInto(out) return out } diff --git a/pkg/apis/cluster/v1alpha1/zz_generated.openapi.go b/pkg/apis/seaweedfs/v1alpha1/zz_generated.openapi.go similarity index 57% rename from pkg/apis/cluster/v1alpha1/zz_generated.openapi.go rename to pkg/apis/seaweedfs/v1alpha1/zz_generated.openapi.go index c545d3a..738dfdf 100644 --- a/pkg/apis/cluster/v1alpha1/zz_generated.openapi.go +++ b/pkg/apis/seaweedfs/v1alpha1/zz_generated.openapi.go @@ -11,16 +11,161 @@ import ( func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { return map[string]common.OpenAPIDefinition{ - "./pkg/apis/cluster/v1alpha1.SeaweedfsCluster": schema_pkg_apis_cluster_v1alpha1_SeaweedfsCluster(ref), - "./pkg/apis/cluster/v1alpha1.SeaweedfsClusterSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref), - "./pkg/apis/cluster/v1alpha1.SeaweedfsClusterStatus": schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterStatus(ref), - "./pkg/apis/cluster/v1alpha1.SeaweedfsFilerSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsFilerSpec(ref), - "./pkg/apis/cluster/v1alpha1.SeaweedfsMasterSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsMasterSpec(ref), - "./pkg/apis/cluster/v1alpha1.SeaweedfsVolumeSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsVolumeSpec(ref), + "./pkg/apis/seaweedfs/v1alpha1.FilerSpec": schema_pkg_apis_seaweedfs_v1alpha1_FilerSpec(ref), + "./pkg/apis/seaweedfs/v1alpha1.MasterSpec": schema_pkg_apis_seaweedfs_v1alpha1_MasterSpec(ref), + "./pkg/apis/seaweedfs/v1alpha1.MasterStatus": schema_pkg_apis_seaweedfs_v1alpha1_MasterStatus(ref), + "./pkg/apis/seaweedfs/v1alpha1.ResourceRequirement": schema_pkg_apis_seaweedfs_v1alpha1_ResourceRequirement(ref), + "./pkg/apis/seaweedfs/v1alpha1.SeaweedfsCluster": schema_pkg_apis_seaweedfs_v1alpha1_SeaweedfsCluster(ref), + "./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterSpec": schema_pkg_apis_seaweedfs_v1alpha1_SeaweedfsClusterSpec(ref), + "./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterStatus": schema_pkg_apis_seaweedfs_v1alpha1_SeaweedfsClusterStatus(ref), + "./pkg/apis/seaweedfs/v1alpha1.VolumeSpec": schema_pkg_apis_seaweedfs_v1alpha1_VolumeSpec(ref), } } -func schema_pkg_apis_cluster_v1alpha1_SeaweedfsCluster(ref common.ReferenceCallback) common.OpenAPIDefinition { +func schema_pkg_apis_seaweedfs_v1alpha1_FilerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "FilerSpec defines the desired state of filer server in cluster", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas a size of filer replications", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "dirListLimit": { + SchemaProps: spec.SchemaProps{ + Description: "DirListLimit limit sub dir listing size, default 100000", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "disableDirListing": { + SchemaProps: spec.SchemaProps{ + Description: "DisableDirListing turn off directory listing", + Type: []string{"boolean"}, + Format: "", + }, + }, + "max_mb": { + SchemaProps: spec.SchemaProps{ + Description: "MaxMB split files larger than the limit, default 32", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "Port filer server http listen port", + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_seaweedfs_v1alpha1_MasterSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MasterSpec defines the desired state of master server in cluster", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Description: "Replicas a size of a raft cluster. The master servers are coordinated by Raft protocol, to elect a leader.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "port": { + SchemaProps: spec.SchemaProps{ + Description: "Port set master server http api service port. default is 9333 Master servers also use it identify each other.", + Type: []string{"integer"}, + Format: "int32", + }, + }, + "disableHttp": { + SchemaProps: spec.SchemaProps{ + Description: "DisableHTTP if disable http proto, only gRPC operations are allowed. GRPC port is http port + 10000", + Type: []string{"boolean"}, + Format: "", + }, + }, + "default_replication": { + SchemaProps: spec.SchemaProps{ + Description: "DefaultReplication set the data replication policy in volumes. default \"000\"", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_seaweedfs_v1alpha1_MasterStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MasterStatus defines the observed state of SeaweedfsCluster master server", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "replicas": { + SchemaProps: spec.SchemaProps{ + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"replicas"}, + }, + }, + } +} + +func schema_pkg_apis_seaweedfs_v1alpha1_ResourceRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceRequirement is resource requirements for a pod", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "cpu": { + SchemaProps: spec.SchemaProps{ + Description: "CPU is how many cores a pod requires", + Type: []string{"string"}, + Format: "", + }, + }, + "memory": { + SchemaProps: spec.SchemaProps{ + Description: "Memory is how much memory a pod requires", + Type: []string{"string"}, + Format: "", + }, + }, + "storage": { + SchemaProps: spec.SchemaProps{ + Description: "Storage is storage size a pod requires", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + +func schema_pkg_apis_seaweedfs_v1alpha1_SeaweedfsCluster(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ @@ -48,23 +193,23 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsCluster(ref common.ReferenceCallb }, "spec": { SchemaProps: spec.SchemaProps{ - Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsClusterSpec"), + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterSpec"), }, }, "status": { SchemaProps: spec.SchemaProps{ - Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsClusterStatus"), + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterStatus"), }, }, }, }, }, Dependencies: []string{ - "./pkg/apis/cluster/v1alpha1.SeaweedfsClusterSpec", "./pkg/apis/cluster/v1alpha1.SeaweedfsClusterStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + "./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterSpec", "./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, } } -func schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { +func schema_pkg_apis_seaweedfs_v1alpha1_SeaweedfsClusterSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ @@ -79,7 +224,7 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref common.ReferenceC }, "master": { SchemaProps: spec.SchemaProps{ - Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsMasterSpec"), + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.MasterSpec"), }, }, "volumes": { @@ -88,7 +233,7 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref common.ReferenceC Items: &spec.SchemaOrArray{ Schema: &spec.Schema{ SchemaProps: spec.SchemaProps{ - Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsVolumeSpec"), + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.VolumeSpec"), }, }, }, @@ -96,122 +241,66 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref common.ReferenceC }, "filer": { SchemaProps: spec.SchemaProps{ - Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsFilerSpec"), + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.FilerSpec"), }, }, }, }, }, Dependencies: []string{ - "./pkg/apis/cluster/v1alpha1.SeaweedfsFilerSpec", "./pkg/apis/cluster/v1alpha1.SeaweedfsMasterSpec", "./pkg/apis/cluster/v1alpha1.SeaweedfsVolumeSpec"}, + "./pkg/apis/seaweedfs/v1alpha1.FilerSpec", "./pkg/apis/seaweedfs/v1alpha1.MasterSpec", "./pkg/apis/seaweedfs/v1alpha1.VolumeSpec"}, } } -func schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { +func schema_pkg_apis_seaweedfs_v1alpha1_SeaweedfsClusterStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ Description: "SeaweedfsClusterStatus defines the observed state of SeaweedfsCluster", Type: []string{"object"}, - }, - }, - } -} - -func schema_pkg_apis_cluster_v1alpha1_SeaweedfsFilerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SeaweedfsFilerSpec defines the desired state of filer server in cluster", - Type: []string{"object"}, Properties: map[string]spec.Schema{ - "replicas": { + "ClusterID": { SchemaProps: spec.SchemaProps{ - Description: "Replicas a size of filer replications", - Type: []string{"integer"}, - Format: "int32", + Type: []string{"string"}, + Format: "", }, }, - "dir_list_limit": { + "Master": { SchemaProps: spec.SchemaProps{ - Description: "DirListLimit limit sub dir listing size, default 100000", - Type: []string{"integer"}, - Format: "int32", + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.MasterStatus"), }, }, - "disable_dir_listing": { + "Volumes": { SchemaProps: spec.SchemaProps{ - Description: "DisableDirListing turn off directory listing", - Type: []string{"boolean"}, - Format: "", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.VolumesStatus"), + }, + }, + }, }, }, - "max_mb": { + "Filer": { SchemaProps: spec.SchemaProps{ - Description: "MaxMB split files larger than the limit, default 32", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "Port filer server http listen port", - Type: []string{"integer"}, - Format: "int32", + Ref: ref("./pkg/apis/seaweedfs/v1alpha1.FilerStatus"), }, }, }, + Required: []string{"ClusterID", "Master", "Volumes", "Filer"}, }, }, + Dependencies: []string{ + "./pkg/apis/seaweedfs/v1alpha1.FilerStatus", "./pkg/apis/seaweedfs/v1alpha1.MasterStatus", "./pkg/apis/seaweedfs/v1alpha1.VolumesStatus"}, } } -func schema_pkg_apis_cluster_v1alpha1_SeaweedfsMasterSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { +func schema_pkg_apis_seaweedfs_v1alpha1_VolumeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ - Description: "SeaweedfsMasterSpec defines the desired state of master server in cluster", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replication_size": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas a size of a raft cluster. The master servers are coordinated by Raft protocol, to elect a leader.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "Port set master server http api service port. default is 9333 Master servers also use it identify each other.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "disable_http": { - SchemaProps: spec.SchemaProps{ - Description: "DisableHTTP if disable http proto, only gRPC operations are allowed. GRPC port is http port + 10000", - Type: []string{"boolean"}, - Format: "", - }, - }, - "default_replication": { - SchemaProps: spec.SchemaProps{ - Description: "DefaultReplication set the data replication policy in volumes. default \"000\"", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_cluster_v1alpha1_SeaweedfsVolumeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SeaweedfsVolumeSpec defines the desired state of volume servers in cluster", + Description: "VolumeSpec defines the desired state of volume servers in cluster", Type: []string{"object"}, Properties: map[string]spec.Schema{ "max": { @@ -235,7 +324,7 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsVolumeSpec(ref common.ReferenceCa Format: "", }, }, - "data_center": { + "dataCenter": { SchemaProps: spec.SchemaProps{ Description: "DataCenter current volume server's data center name", Type: []string{"string"}, diff --git a/pkg/controller/seaweedfscluster/seaweedfscluster_controller.go b/pkg/controller/seaweedfscluster/seaweedfscluster_controller.go index f194571..24ee8de 100644 --- a/pkg/controller/seaweedfscluster/seaweedfscluster_controller.go +++ b/pkg/controller/seaweedfscluster/seaweedfscluster_controller.go @@ -3,7 +3,7 @@ package seaweedfscluster import ( "context" - clusterv1alpha1 "github.com/seaweedfs/seaweedfs-operator/pkg/apis/cluster/v1alpha1" + seaweedfsv1alpha1 "github.com/seaweedfs/seaweedfs-operator/pkg/apis/seaweedfs/v1alpha1" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -46,7 +46,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { } // Watch for changes to primary resource SeaweedfsCluster - err = c.Watch(&source.Kind{Type: &clusterv1alpha1.SeaweedfsCluster{}}, &handler.EnqueueRequestForObject{}) + err = c.Watch(&source.Kind{Type: &seaweedfsv1alpha1.SeaweedfsCluster{}}, &handler.EnqueueRequestForObject{}) if err != nil { return err } @@ -55,7 +55,7 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error { // Watch for changes to secondary resource Pods and requeue the owner SeaweedfsCluster err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForOwner{ IsController: true, - OwnerType: &clusterv1alpha1.SeaweedfsCluster{}, + OwnerType: &seaweedfsv1alpha1.SeaweedfsCluster{}, }) if err != nil { return err @@ -87,7 +87,7 @@ func (r *ReconcileSeaweedfsCluster) Reconcile(request reconcile.Request) (reconc reqLogger.Info("Reconciling SeaweedfsCluster") // Fetch the SeaweedfsCluster instance - instance := &clusterv1alpha1.SeaweedfsCluster{} + instance := &seaweedfsv1alpha1.SeaweedfsCluster{} err := r.client.Get(context.TODO(), request.NamespacedName, instance) if err != nil { if errors.IsNotFound(err) { @@ -130,7 +130,7 @@ func (r *ReconcileSeaweedfsCluster) Reconcile(request reconcile.Request) (reconc } // newPodForCR returns a busybox pod with the same name/namespace as the cr -func newPodForCR(cr *clusterv1alpha1.SeaweedfsCluster) *corev1.Pod { +func newPodForCR(cr *seaweedfsv1alpha1.SeaweedfsCluster) *corev1.Pod { labels := map[string]string{ "app": cr.Name, }