feat(crds): change api group name

change api group name to seaweedfs.com
This commit is contained in:
HZ89 2019-11-20 11:33:30 +08:00
parent b4c0822298
commit f8c94e43bb
15 changed files with 408 additions and 176 deletions

View File

@ -8,7 +8,7 @@ install: ## Install all resources (CR/CRD's, RBCA and Operator)
@echo ....... Creating namespace ....... @echo ....... Creating namespace .......
- kubectl create namespace ${NAMESPACE} - kubectl create namespace ${NAMESPACE}
@echo ....... Applying CRDS and Operator ....... @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 ....... @echo ....... Applying Rules and Service Account .......
- kubectl apply -f deploy/role.yaml -n ${NAMESPACE} - kubectl apply -f deploy/role.yaml -n ${NAMESPACE}
- kubectl apply -f deploy/role_binding.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 ....... @echo ....... Applying Operator .......
- kubectl apply -f deploy/operator.yaml -n ${NAMESPACE} - kubectl apply -f deploy/operator.yaml -n ${NAMESPACE}
@echo ....... Creating the Database ....... @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 uninstall: ## Uninstall all that all performed in the $ make install
@echo ....... Uninstalling ....... @echo ....... Uninstalling .......
@echo ....... Deleting CRDs....... @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 ....... @echo ....... Deleting Rules and Service Account .......
- kubectl delete -f deploy/role.yaml -n ${NAMESPACE} - kubectl delete -f deploy/role.yaml -n ${NAMESPACE}
- kubectl delete -f deploy/role_binding.yaml -n ${NAMESPACE} - kubectl delete -f deploy/role_binding.yaml -n ${NAMESPACE}

View File

@ -1,9 +1,9 @@
apiVersion: apiextensions.k8s.io/v1beta1 apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition kind: CustomResourceDefinition
metadata: metadata:
name: seaweedfsclusters.cluster.seaweedfs.com name: seaweedfsclusters.seaweedfs.com
spec: spec:
group: cluster.seaweedfs.com group: seaweedfs.com
names: names:
kind: SeaweedfsCluster kind: SeaweedfsCluster
listKind: SeaweedfsClusterList listKind: SeaweedfsClusterList
@ -32,14 +32,14 @@ spec:
description: SeaweedfsClusterSpec defines the desired state of SeaweedfsCluster description: SeaweedfsClusterSpec defines the desired state of SeaweedfsCluster
properties: properties:
filer: filer:
description: SeaweedfsFilerSpec defines the desired state of filer server description: FilerSpec defines the desired state of filer server in
in cluster cluster
properties: properties:
dir_list_limit: dirListLimit:
description: DirListLimit limit sub dir listing size, default 100000 description: DirListLimit limit sub dir listing size, default 100000
format: int32 format: int32
type: integer type: integer
disable_dir_listing: disableDirListing:
description: DisableDirListing turn off directory listing description: DisableDirListing turn off directory listing
type: boolean type: boolean
max_mb: max_mb:
@ -56,14 +56,14 @@ spec:
type: integer type: integer
type: object type: object
master: master:
description: SeaweedfsMasterSpec defines the desired state of master description: MasterSpec defines the desired state of master server in
server in cluster cluster
properties: properties:
default_replication: default_replication:
description: DefaultReplication set the data replication policy description: DefaultReplication set the data replication policy
in volumes. default "000" in volumes. default "000"
type: string type: string
disable_http: disableHttp:
description: DisableHTTP if disable http proto, only gRPC operations description: DisableHTTP if disable http proto, only gRPC operations
are allowed. GRPC port is http port + 10000 are allowed. GRPC port is http port + 10000
type: boolean type: boolean
@ -72,7 +72,7 @@ spec:
is 9333 Master servers also use it identify each other. is 9333 Master servers also use it identify each other.
format: int32 format: int32
type: integer type: integer
replication_size: replicas:
description: Replicas a size of a raft cluster. The master servers description: Replicas a size of a raft cluster. The master servers
are coordinated by Raft protocol, to elect a leader. are coordinated by Raft protocol, to elect a leader.
format: int32 format: int32
@ -82,15 +82,15 @@ spec:
type: string type: string
volumes: volumes:
items: items:
description: SeaweedfsVolumeSpec defines the desired state of volume description: VolumeSpec defines the desired state of volume servers
servers in cluster in cluster
properties: properties:
compaction_mbps: compaction_mbps:
description: CompactionMbps limit background compaction or copying description: CompactionMbps limit background compaction or copying
speed in mega bytes per second speed in mega bytes per second
format: int32 format: int32
type: integer type: integer
data_center: dataCenter:
description: DataCenter current volume server's data center name description: DataCenter current volume server's data center name
type: string type: string
max: max:

View File

@ -1,4 +1,4 @@
apiVersion: cluster.seaweedfs.com/v1alpha1 apiVersion: seaweedfs.com/v1alpha1
kind: SeaweedfsCluster kind: SeaweedfsCluster
metadata: metadata:
name: example-seaweedfscluster name: example-seaweedfscluster

View File

@ -54,7 +54,7 @@ rules:
verbs: verbs:
- get - get
- apiGroups: - apiGroups:
- cluster.seaweedfs.com - seaweedfs.com
resources: resources:
- '*' - '*'
- seaweedfsclusters - seaweedfsclusters

2
go.mod
View File

@ -2,7 +2,7 @@ module github.com/seaweedfs/seaweedfs-operator
require ( require (
github.com/go-openapi/spec v0.17.2 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 github.com/spf13/pflag v1.0.3
k8s.io/api v0.0.0-20190918155943-95b840bb6a1f k8s.io/api v0.0.0-20190918155943-95b840bb6a1f
k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655 k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655

View File

@ -1,7 +1,7 @@
package apis package apis
import ( import (
"github.com/seaweedfs/seaweedfs-operator/pkg/apis/cluster/v1alpha1" "github.com/seaweedfs/seaweedfs-operator/pkg/apis/seaweedfs/v1alpha1"
) )
func init() { func init() {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,8 +1,8 @@
// NOTE: Boilerplate only. Ignore this file. // 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 // +k8s:deepcopy-gen=package,register
// +groupName=cluster.seaweedfs.com // +groupName=seaweedfs.com
package v1alpha1 package v1alpha1
import ( import (
@ -12,7 +12,7 @@ import (
var ( var (
// SchemeGroupVersion is group version used to register these objects // 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 is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion} SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}

View File

@ -1,6 +1,7 @@
package v1alpha1 package v1alpha1
import ( import (
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
) )
@ -8,30 +9,30 @@ import (
// +k8s:openapi-gen=true // +k8s:openapi-gen=true
type SeaweedfsClusterSpec struct { type SeaweedfsClusterSpec struct {
Version string `json:"version,omitempty"` Version string `json:"version,omitempty"`
Master SeaweedfsMasterSpec `json:"master,omitempty"` Master MasterSpec `json:"master,omitempty"`
Volumes []SeaweedfsVolumeSpec `json:"volumes,omitempty"` Volumes []VolumeSpec `json:"volumes,omitempty"`
Filer SeaweedfsFilerSpec `json:"filer,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 // +k8s:openapi-gen=true
type SeaweedfsMasterSpec struct { type MasterSpec struct {
// Replicas a size of a raft cluster. // Replicas a size of a raft cluster.
// The master servers are coordinated by Raft protocol, to elect a leader. // 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 // Port set master server http api service port. default is 9333
// Master servers also use it identify each other. // Master servers also use it identify each other.
Port int32 `json:"port,omitempty"` Port int32 `json:"port,omitempty"`
// DisableHTTP if disable http proto, only gRPC operations are allowed. // DisableHTTP if disable http proto, only gRPC operations are allowed.
// GRPC port is http port + 10000 // 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 set the data replication policy in volumes. default "000"
DefaultReplication string `json:"default_replication,omitempty"` 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 // +k8s:openapi-gen=true
type SeaweedfsVolumeSpec struct { type VolumeSpec struct {
// Max set the maximum numbers of volumes management by this server. // 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 // Each volume is a 30G size file in under layer filesystem. Default is 7
Max int32 `json:"max,omitempty"` Max int32 `json:"max,omitempty"`
@ -40,20 +41,20 @@ type SeaweedfsVolumeSpec struct {
//Rack current volume server's rack name //Rack current volume server's rack name
Rack string `json:"rack,omitempty"` Rack string `json:"rack,omitempty"`
// DataCenter current volume server's data center name // 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 volume server api http listen port
Port int32 `json:"port,omitempty"` 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 // +k8s:openapi-gen=true
type SeaweedfsFilerSpec struct { type FilerSpec struct {
// Replicas a size of filer replications // Replicas a size of filer replications
Replicas int32 `json:"replicas,omitempty"` Replicas int32 `json:"replicas,omitempty"`
// DirListLimit limit sub dir listing size, default 100000 // 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 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 split files larger than the limit, default 32
MaxMB int32 `json:"max_mb,omitempty"` MaxMB int32 `json:"max_mb,omitempty"`
// Port filer server http listen port // Port filer server http listen port
@ -63,9 +64,49 @@ type SeaweedfsFilerSpec struct {
// SeaweedfsClusterStatus defines the observed state of SeaweedfsCluster // SeaweedfsClusterStatus defines the observed state of SeaweedfsCluster
// +k8s:openapi-gen=true // +k8s:openapi-gen=true
type SeaweedfsClusterStatus struct { type SeaweedfsClusterStatus struct {
// INSERT ADDITIONAL STATUS FIELD - define observed state of cluster ClusterID string
// Important: Run "operator-sdk generate k8s" to regenerate code after modifying this file Master MasterStatus
// Add custom validation using kubebuilder tags: https://book-v1.book.kubebuilder.io/beyond_basics/generating_crd.html 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 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

View File

@ -8,13 +8,121 @@ import (
runtime "k8s.io/apimachinery/pkg/runtime" 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. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *SeaweedfsCluster) DeepCopyInto(out *SeaweedfsCluster) { func (in *SeaweedfsCluster) DeepCopyInto(out *SeaweedfsCluster) {
*out = *in *out = *in
out.TypeMeta = in.TypeMeta out.TypeMeta = in.TypeMeta
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
in.Spec.DeepCopyInto(&out.Spec) in.Spec.DeepCopyInto(&out.Spec)
out.Status = in.Status in.Status.DeepCopyInto(&out.Status)
return return
} }
@ -75,7 +183,7 @@ func (in *SeaweedfsClusterSpec) DeepCopyInto(out *SeaweedfsClusterSpec) {
out.Master = in.Master out.Master = in.Master
if in.Volumes != nil { if in.Volumes != nil {
in, out := &in.Volumes, &out.Volumes in, out := &in.Volumes, &out.Volumes
*out = make([]SeaweedfsVolumeSpec, len(*in)) *out = make([]VolumeSpec, len(*in))
copy(*out, *in) copy(*out, *in)
} }
out.Filer = in.Filer 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. // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *SeaweedfsClusterStatus) DeepCopyInto(out *SeaweedfsClusterStatus) { func (in *SeaweedfsClusterStatus) DeepCopyInto(out *SeaweedfsClusterStatus) {
*out = *in *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 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. // 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 *out = *in
return return
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeaweedfsFilerSpec. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeSpec.
func (in *SeaweedfsFilerSpec) DeepCopy() *SeaweedfsFilerSpec { func (in *VolumeSpec) DeepCopy() *VolumeSpec {
if in == nil { if in == nil {
return nil return nil
} }
out := new(SeaweedfsFilerSpec) out := new(VolumeSpec)
in.DeepCopyInto(out) in.DeepCopyInto(out)
return out return out
} }
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. // 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 *out = *in
in.ContainerSpec.DeepCopyInto(&out.ContainerSpec)
return return
} }
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SeaweedfsMasterSpec. // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumesStatus.
func (in *SeaweedfsMasterSpec) DeepCopy() *SeaweedfsMasterSpec { func (in *VolumesStatus) DeepCopy() *VolumesStatus {
if in == nil { if in == nil {
return nil return nil
} }
out := new(SeaweedfsMasterSpec) out := new(VolumesStatus)
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)
in.DeepCopyInto(out) in.DeepCopyInto(out)
return out return out
} }

View File

@ -11,16 +11,161 @@ import (
func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition {
return map[string]common.OpenAPIDefinition{ return map[string]common.OpenAPIDefinition{
"./pkg/apis/cluster/v1alpha1.SeaweedfsCluster": schema_pkg_apis_cluster_v1alpha1_SeaweedfsCluster(ref), "./pkg/apis/seaweedfs/v1alpha1.FilerSpec": schema_pkg_apis_seaweedfs_v1alpha1_FilerSpec(ref),
"./pkg/apis/cluster/v1alpha1.SeaweedfsClusterSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref), "./pkg/apis/seaweedfs/v1alpha1.MasterSpec": schema_pkg_apis_seaweedfs_v1alpha1_MasterSpec(ref),
"./pkg/apis/cluster/v1alpha1.SeaweedfsClusterStatus": schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterStatus(ref), "./pkg/apis/seaweedfs/v1alpha1.MasterStatus": schema_pkg_apis_seaweedfs_v1alpha1_MasterStatus(ref),
"./pkg/apis/cluster/v1alpha1.SeaweedfsFilerSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsFilerSpec(ref), "./pkg/apis/seaweedfs/v1alpha1.ResourceRequirement": schema_pkg_apis_seaweedfs_v1alpha1_ResourceRequirement(ref),
"./pkg/apis/cluster/v1alpha1.SeaweedfsMasterSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsMasterSpec(ref), "./pkg/apis/seaweedfs/v1alpha1.SeaweedfsCluster": schema_pkg_apis_seaweedfs_v1alpha1_SeaweedfsCluster(ref),
"./pkg/apis/cluster/v1alpha1.SeaweedfsVolumeSpec": schema_pkg_apis_cluster_v1alpha1_SeaweedfsVolumeSpec(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{ return common.OpenAPIDefinition{
Schema: spec.Schema{ Schema: spec.Schema{
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
@ -48,23 +193,23 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsCluster(ref common.ReferenceCallb
}, },
"spec": { "spec": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsClusterSpec"), Ref: ref("./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterSpec"),
}, },
}, },
"status": { "status": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsClusterStatus"), Ref: ref("./pkg/apis/seaweedfs/v1alpha1.SeaweedfsClusterStatus"),
}, },
}, },
}, },
}, },
}, },
Dependencies: []string{ 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{ return common.OpenAPIDefinition{
Schema: spec.Schema{ Schema: spec.Schema{
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
@ -79,7 +224,7 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref common.ReferenceC
}, },
"master": { "master": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsMasterSpec"), Ref: ref("./pkg/apis/seaweedfs/v1alpha1.MasterSpec"),
}, },
}, },
"volumes": { "volumes": {
@ -88,7 +233,7 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsClusterSpec(ref common.ReferenceC
Items: &spec.SchemaOrArray{ Items: &spec.SchemaOrArray{
Schema: &spec.Schema{ Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{ 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": { "filer": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Ref: ref("./pkg/apis/cluster/v1alpha1.SeaweedfsFilerSpec"), Ref: ref("./pkg/apis/seaweedfs/v1alpha1.FilerSpec"),
}, },
}, },
}, },
}, },
}, },
Dependencies: []string{ 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{ return common.OpenAPIDefinition{
Schema: spec.Schema{ Schema: spec.Schema{
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Description: "SeaweedfsClusterStatus defines the observed state of SeaweedfsCluster", Description: "SeaweedfsClusterStatus defines the observed state of SeaweedfsCluster",
Type: []string{"object"}, 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{ Properties: map[string]spec.Schema{
"replicas": { "ClusterID": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Description: "Replicas a size of filer replications",
Type: []string{"integer"},
Format: "int32",
},
},
"dir_list_limit": {
SchemaProps: spec.SchemaProps{
Description: "DirListLimit limit sub dir listing size, default 100000",
Type: []string{"integer"},
Format: "int32",
},
},
"disable_dir_listing": {
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_cluster_v1alpha1_SeaweedfsMasterSpec(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"}, Type: []string{"string"},
Format: "", Format: "",
}, },
}, },
"Master": {
SchemaProps: spec.SchemaProps{
Ref: ref("./pkg/apis/seaweedfs/v1alpha1.MasterStatus"),
},
},
"Volumes": {
SchemaProps: spec.SchemaProps{
Type: []string{"array"},
Items: &spec.SchemaOrArray{
Schema: &spec.Schema{
SchemaProps: spec.SchemaProps{
Ref: ref("./pkg/apis/seaweedfs/v1alpha1.VolumesStatus"),
}, },
}, },
}, },
},
},
"Filer": {
SchemaProps: spec.SchemaProps{
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_SeaweedfsVolumeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { func schema_pkg_apis_seaweedfs_v1alpha1_VolumeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition {
return common.OpenAPIDefinition{ return common.OpenAPIDefinition{
Schema: spec.Schema{ Schema: spec.Schema{
SchemaProps: spec.SchemaProps{ 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"}, Type: []string{"object"},
Properties: map[string]spec.Schema{ Properties: map[string]spec.Schema{
"max": { "max": {
@ -235,7 +324,7 @@ func schema_pkg_apis_cluster_v1alpha1_SeaweedfsVolumeSpec(ref common.ReferenceCa
Format: "", Format: "",
}, },
}, },
"data_center": { "dataCenter": {
SchemaProps: spec.SchemaProps{ SchemaProps: spec.SchemaProps{
Description: "DataCenter current volume server's data center name", Description: "DataCenter current volume server's data center name",
Type: []string{"string"}, Type: []string{"string"},

View File

@ -3,7 +3,7 @@ package seaweedfscluster
import ( import (
"context" "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" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 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 // 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 { if err != nil {
return err 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 // Watch for changes to secondary resource Pods and requeue the owner SeaweedfsCluster
err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForOwner{ err = c.Watch(&source.Kind{Type: &corev1.Pod{}}, &handler.EnqueueRequestForOwner{
IsController: true, IsController: true,
OwnerType: &clusterv1alpha1.SeaweedfsCluster{}, OwnerType: &seaweedfsv1alpha1.SeaweedfsCluster{},
}) })
if err != nil { if err != nil {
return err return err
@ -87,7 +87,7 @@ func (r *ReconcileSeaweedfsCluster) Reconcile(request reconcile.Request) (reconc
reqLogger.Info("Reconciling SeaweedfsCluster") reqLogger.Info("Reconciling SeaweedfsCluster")
// Fetch the SeaweedfsCluster instance // Fetch the SeaweedfsCluster instance
instance := &clusterv1alpha1.SeaweedfsCluster{} instance := &seaweedfsv1alpha1.SeaweedfsCluster{}
err := r.client.Get(context.TODO(), request.NamespacedName, instance) err := r.client.Get(context.TODO(), request.NamespacedName, instance)
if err != nil { if err != nil {
if errors.IsNotFound(err) { 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 // 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{ labels := map[string]string{
"app": cr.Name, "app": cr.Name,
} }