From 8f1224c792bb3858f997ba5206a83da14e805a5b Mon Sep 17 00:00:00 2001 From: zyy17 Date: Mon, 14 Oct 2024 18:35:05 +0800 Subject: [PATCH 1/5] fix: compoents don't updated by modifying the fields of `cluster.base` Signed-off-by: zyy17 --- apis/v1alpha1/defaulting.go | 121 ++++++++---------- .../greptimedbcluster/test00/expect.yaml | 45 +------ .../greptimedbcluster/test01/expect.yaml | 54 +------- .../greptimedbcluster/test02/expect.yaml | 45 +------ controllers/greptimedbcluster/controller.go | 8 ++ 5 files changed, 75 insertions(+), 198 deletions(-) diff --git a/apis/v1alpha1/defaulting.go b/apis/v1alpha1/defaulting.go index 380a160..2473946 100644 --- a/apis/v1alpha1/defaulting.go +++ b/apis/v1alpha1/defaulting.go @@ -40,16 +40,63 @@ func (in *GreptimeDBCluster) SetDefaults() error { return err } - // Merge the Base field into the frontend/meta/datanode/flownode template. - if err := in.mergeTemplate(); err != nil { - return err + return nil +} + +// MergeTemplate merges the base template with the component's template. +func (in *GreptimeDBCluster) MergeTemplate() error { + mergeFuncs := []func() error{ + in.mergeFrontendTemplate, + in.mergeMetaTemplate, + in.mergeDatanodeTemplate, + in.mergeFlownodeTemplate, } - // Merge the logging settings into the GreptimeDBClusterSpec. - if err := in.mergeLogging(); err != nil { + for _, mergeFunc := range mergeFuncs { + if err := mergeFunc(); err != nil { + return err + } + } + + return nil +} + +// MergeLogging merges the logging settings into the component's logging settings. +func (in *GreptimeDBCluster) MergeLogging() error { + loggingSpecs := []*LoggingSpec{ + in.GetMeta().GetLogging(), + in.GetDatanode().GetLogging(), + in.GetFrontend().GetLogging(), + in.GetFlownode().GetLogging(), + } + + for _, logging := range loggingSpecs { + if logging == nil { + continue + } + + if err := in.doMergeLogging(logging, in.GetLogging(), in.GetMonitoring().IsEnabled()); err != nil { + return err + } + } + + return nil +} + +func (in *GreptimeDBCluster) doMergeLogging(input, global *LoggingSpec, isEnableMonitoring bool) error { + if input == nil || global == nil { + return nil + } + + if err := mergo.Merge(input, global.DeepCopy()); err != nil { return err } + if isEnableMonitoring { + // Set the default logging format to JSON if monitoring is enabled. + input.Format = LogFormatJSON + } + return nil } @@ -200,26 +247,6 @@ func (in *GreptimeDBCluster) defaultMonitoringStandaloneSpec() *GreptimeDBStanda return &standalone.Spec } -func (in *GreptimeDBCluster) mergeTemplate() error { - if err := in.mergeFrontendTemplate(); err != nil { - return err - } - - if err := in.mergeMetaTemplate(); err != nil { - return err - } - - if err := in.mergeDatanodeTemplate(); err != nil { - return err - } - - if err := in.mergeFlownodeTemplate(); err != nil { - return err - } - - return nil -} - func (in *GreptimeDBCluster) mergeFrontendTemplate() error { if in.Spec.Frontend != nil { // Use DeepCopy to avoid the same pointer. @@ -276,50 +303,6 @@ func (in *GreptimeDBCluster) mergeFlownodeTemplate() error { return nil } -func (in *GreptimeDBCluster) mergeLogging() error { - if logging := in.GetMeta().GetLogging(); logging != nil { - if err := mergo.Merge(logging, in.GetLogging().DeepCopy()); err != nil { - return err - } - if in.GetMonitoring().IsEnabled() { - // Set the default logging format to JSON if monitoring is enabled. - logging.Format = LogFormatJSON - } - } - - if logging := in.GetDatanode().GetLogging(); logging != nil { - if err := mergo.Merge(logging, in.GetLogging().DeepCopy()); err != nil { - return err - } - if in.GetMonitoring().IsEnabled() { - // Set the default logging format to JSON if monitoring is enabled. - logging.Format = LogFormatJSON - } - } - - if logging := in.GetFrontend().GetLogging(); logging != nil { - if err := mergo.Merge(logging, in.GetLogging().DeepCopy()); err != nil { - return err - } - if in.GetMonitoring().IsEnabled() { - // Set the default logging format to JSON if monitoring is enabled. - logging.Format = LogFormatJSON - } - } - - if logging := in.GetFlownode().GetLogging(); logging != nil { - if err := mergo.Merge(logging, in.GetLogging().DeepCopy()); err != nil { - return err - } - if in.GetMonitoring().IsEnabled() { - // Set the default logging format to JSON if monitoring is enabled. - logging.Format = LogFormatJSON - } - } - - return nil -} - func (in *GreptimeDBStandalone) SetDefaults() error { if in == nil { return nil diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/expect.yaml index e4b0bd8..2c04378 100644 --- a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/expect.yaml +++ b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/expect.yaml @@ -32,48 +32,20 @@ spec: rpcPort: 4001 service: type: ClusterIP - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + logging: {} + template: {} meta: etcdEndpoints: - etcd.etcd-cluster.svc.cluster.local:2379 enableRegionFailover: false - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false httpPort: 4000 rpcPort: 3002 replicas: 1 - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + logging: {} + template: {} datanode: httpPort: 4000 rpcPort: 4001 - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false replicas: 3 storage: dataHome: /data/greptimedb @@ -82,10 +54,5 @@ spec: mountPath: /data/greptimedb storageRetainPolicy: Retain storageSize: 10Gi - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + logging: {} + template: {} diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/expect.yaml index 26eff18..366053d 100644 --- a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/expect.yaml +++ b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/expect.yaml @@ -39,39 +39,18 @@ spec: rpcPort: 4001 service: type: ClusterIP - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false + logging: {} template: main: image: greptime/greptimedb:latest args: - --metasrv-addrs - meta.default:3002 - resources: - requests: - cpu: "500m" - memory: "256Mi" - limits: - cpu: "1" - memory: "1Gi" - livenessProbe: - httpGet: - path: /health - port: 4000 meta: enableRegionFailover: false etcdEndpoints: - etcd.etcd-cluster.svc.cluster.local:2379 - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false + logging: {} httpPort: 4000 rpcPort: 3002 replicas: 1 @@ -81,27 +60,11 @@ spec: args: - --store-addr - etcd.default:2379 - resources: - requests: - cpu: "500m" - memory: "256Mi" - limits: - cpu: "1" - memory: "1Gi" - livenessProbe: - httpGet: - path: /health - port: 4000 datanode: httpPort: 4000 rpcPort: 4001 replicas: 1 - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false + logging: {} storage: dataHome: /data/greptimedb fs: @@ -112,14 +75,3 @@ spec: template: main: image: greptime/greptimedb:latest - resources: - requests: - cpu: "500m" - memory: "256Mi" - limits: - cpu: "1" - memory: "1Gi" - livenessProbe: - httpGet: - path: /health - port: 4000 diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/expect.yaml index 468d29c..801e5a5 100644 --- a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/expect.yaml +++ b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/expect.yaml @@ -43,50 +43,23 @@ spec: rpcPort: 4001 service: type: ClusterIP - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + logging: {} + template: {} meta: etcdEndpoints: - etcd.etcd-cluster.svc.cluster.local:2379 # Should be true if wal.kafka is set. enableRegionFailover: true - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false + logging: {} httpPort: 4000 rpcPort: 3002 replicas: 1 - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + template: {} datanode: httpPort: 4000 rpcPort: 4001 replicas: 1 - logging: - format: text - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false + logging: {} storage: dataHome: /data/greptimedb fs: @@ -94,10 +67,4 @@ spec: mountPath: /data/greptimedb storageRetainPolicy: Retain storageSize: 10Gi - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + template: {} diff --git a/controllers/greptimedbcluster/controller.go b/controllers/greptimedbcluster/controller.go index 50ec344..36c0be3 100644 --- a/controllers/greptimedbcluster/controller.go +++ b/controllers/greptimedbcluster/controller.go @@ -163,6 +163,14 @@ func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Resu } } + if err := cluster.MergeTemplate(); err != nil { + return ctrl.Result{}, err + } + + if err := cluster.MergeLogging(); err != nil { + return ctrl.Result{}, err + } + return r.sync(ctx, cluster) } From ade98e55b95eaf673c6b0c7be1b8638005ecd303 Mon Sep 17 00:00:00 2001 From: zyy17 Date: Mon, 14 Oct 2024 19:21:42 +0800 Subject: [PATCH 2/5] chore: move 'greptimedbcluster/test03' directory --- .../greptimedbcluster/test03/expect.yaml | 51 ++++--------------- .../greptimedbcluster/test03/input.yaml | 2 +- 2 files changed, 12 insertions(+), 41 deletions(-) rename apis/v1alpha1/testdata/{ => defaulting}/greptimedbcluster/test03/expect.yaml (71%) rename apis/v1alpha1/testdata/{ => defaulting}/greptimedbcluster/test03/input.yaml (97%) diff --git a/apis/v1alpha1/testdata/greptimedbcluster/test03/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/expect.yaml similarity index 71% rename from apis/v1alpha1/testdata/greptimedbcluster/test03/expect.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/expect.yaml index 0476968..f06c473 100644 --- a/apis/v1alpha1/testdata/greptimedbcluster/test03/expect.yaml +++ b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/expect.yaml @@ -1,7 +1,7 @@ apiVersion: greptime.io/v1alpha1 kind: GreptimeDBCluster metadata: - name: test02 + name: test03 namespace: default spec: base: @@ -33,42 +33,24 @@ spec: persistentWithData: false frontend: replicas: 1 + httpPort: 4000 + rpcPort: 4001 + mysqlPort: 4002 + postgreSQLPort: 4003 service: type: ClusterIP - logging: - format: json - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + logging: {} + template: {} meta: etcdEndpoints: - etcd.etcd-cluster.svc.cluster.local:2379 # Should be true if wal.kafka is set. enableRegionFailover: false - logging: - format: json - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false httpPort: 4000 rpcPort: 3002 replicas: 1 - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + logging: {} + template: {} datanode: httpPort: 4000 rpcPort: 4001 @@ -80,19 +62,8 @@ spec: mountPath: /data/greptimedb storageRetainPolicy: Retain storageSize: 10Gi - logging: - format: json - level: info - logsDir: /data/greptimedb/logs - onlyLogToStdout: false - persistentWithData: false - template: - main: - image: greptime/greptimedb:latest - livenessProbe: - httpGet: - path: /health - port: 4000 + logging: {} + template: {} monitoring: enabled: true logsCollection: {} diff --git a/apis/v1alpha1/testdata/greptimedbcluster/test03/input.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/input.yaml similarity index 97% rename from apis/v1alpha1/testdata/greptimedbcluster/test03/input.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/input.yaml index b7dcabe..ece5361 100644 --- a/apis/v1alpha1/testdata/greptimedbcluster/test03/input.yaml +++ b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/input.yaml @@ -1,7 +1,7 @@ apiVersion: greptime.io/v1alpha1 kind: GreptimeDBCluster metadata: - name: test02 + name: test03 namespace: default spec: base: From 0d0de64bc110e84b031cae3fba228271fb3afeb4 Mon Sep 17 00:00:00 2001 From: zyy17 Date: Mon, 14 Oct 2024 19:36:34 +0800 Subject: [PATCH 3/5] test: add unit test for merge --- apis/v1alpha1/defaulting_test.go | 70 ++++++++++- .../merge/test00/expect.yaml | 119 ++++++++++++++++++ .../greptimedbcluster/merge/test00/input.yaml | 39 ++++++ .../{ => setdefaults}/test00/expect.yaml | 0 .../{ => setdefaults}/test00/input.yaml | 0 .../{ => setdefaults}/test01/expect.yaml | 0 .../{ => setdefaults}/test01/input.yaml | 0 .../{ => setdefaults}/test02/expect.yaml | 0 .../{ => setdefaults}/test02/input.yaml | 0 .../{ => setdefaults}/test03/expect.yaml | 0 .../{ => setdefaults}/test03/input.yaml | 0 11 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/expect.yaml create mode 100644 apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/input.yaml rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test00/expect.yaml (100%) rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test00/input.yaml (100%) rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test01/expect.yaml (100%) rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test01/input.yaml (100%) rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test02/expect.yaml (100%) rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test02/input.yaml (100%) rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test03/expect.yaml (100%) rename apis/v1alpha1/testdata/defaulting/greptimedbcluster/{ => setdefaults}/test03/input.yaml (100%) diff --git a/apis/v1alpha1/defaulting_test.go b/apis/v1alpha1/defaulting_test.go index 6a5df34..cf9d97f 100644 --- a/apis/v1alpha1/defaulting_test.go +++ b/apis/v1alpha1/defaulting_test.go @@ -26,7 +26,7 @@ import ( func TestClusterSetDefaults(t *testing.T) { const ( - testDir = "testdata/defaulting/greptimedbcluster" + testDir = "testdata/defaulting/greptimedbcluster/setdefaults" inputFileName = "input.yaml" expectFileName = "expect.yaml" ) @@ -84,6 +84,74 @@ func TestClusterSetDefaults(t *testing.T) { } } +func TestClusterMerge(t *testing.T) { + const ( + testDir = "testdata/defaulting/greptimedbcluster/merge" + inputFileName = "input.yaml" + expectFileName = "expect.yaml" + ) + + entries, err := os.ReadDir(testDir) + if err != nil { + t.Fatal(err) + } + + for _, entry := range entries { + if entry.IsDir() { + inputFile := filepath.Join(testDir, entry.Name(), inputFileName) + inputData, err := os.ReadFile(inputFile) + if err != nil { + t.Errorf("failed to read %s: %v", inputFile, err) + } + + expectFile := filepath.Join(testDir, entry.Name(), expectFileName) + expectData, err := os.ReadFile(expectFile) + if err != nil { + t.Fatalf("failed to read %s: %v", expectFile, err) + } + + var ( + input GreptimeDBCluster + expect GreptimeDBCluster + ) + if err := yaml.Unmarshal(inputData, &input); err != nil { + t.Fatalf("failed to unmarshal %s: %v", inputFile, err) + } + if err := yaml.Unmarshal(expectData, &expect); err != nil { + t.Fatalf("failed to unmarshal %s: %v", expectFile, err) + } + + if err := input.SetDefaults(); err != nil { + t.Fatalf("failed to set defaults: %v", err) + } + + if err := input.MergeTemplate(); err != nil { + t.Fatalf("failed to merge template: %v", err) + } + + if err := input.MergeLogging(); err != nil { + t.Fatalf("failed to merge logging: %v", err) + } + + if !reflect.DeepEqual(input, expect) { + rawInputData, err := yaml.Marshal(input) + if err != nil { + t.Fatalf("failed to marshal: %v", err) + } + + rawExpectData, err := yaml.Marshal(expect) + if err != nil { + t.Fatalf("failed to marshal: %v", err) + } + + // Use diffmatchpatch to get a human-readable diff. + dmp := diffmatchpatch.New() + t.Errorf("unexpected result for %s:\n%s", entry.Name(), dmp.DiffPrettyText(dmp.DiffMain(string(rawExpectData), string(rawInputData), false))) + } + } + } +} + func TestStandaloneSetDefaults(t *testing.T) { const ( testDir = "testdata/defaulting/greptimedbstandalone" diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/expect.yaml new file mode 100644 index 0000000..8e558ff --- /dev/null +++ b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/expect.yaml @@ -0,0 +1,119 @@ +apiVersion: greptime.io/v1alpha1 +kind: GreptimeDBCluster +metadata: + name: test00 + namespace: default +spec: + version: latest + initializer: + image: greptime/greptimedb-initializer:latest + httpPort: 5000 + rpcPort: 4001 + mysqlPort: 4002 + postgreSQLPort: 4003 + logging: + format: text + level: info + logsDir: /data/greptimedb/logs + onlyLogToStdout: false + persistentWithData: false + base: + main: + image: greptime/greptimedb:latest + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 100m + memory: 128Mi + livenessProbe: + httpGet: + path: /health + port: 4000 + frontend: + replicas: 1 + httpPort: 4000 + mysqlPort: 4002 + postgreSQLPort: 4003 + rpcPort: 4001 + service: + type: ClusterIP + logging: + format: text + level: info + logsDir: /data/greptimedb/logs + onlyLogToStdout: false + persistentWithData: false + template: + main: + image: greptime/greptimedb:test + livenessProbe: + httpGet: + path: /health + port: 4000 + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi + meta: + etcdEndpoints: + - etcd.etcd-cluster.svc.cluster.local:2379 + enableRegionFailover: false + httpPort: 4000 + rpcPort: 3002 + replicas: 1 + logging: + format: text + level: info + logsDir: /data/greptimedb/logs + onlyLogToStdout: false + persistentWithData: false + template: + main: + image: greptime/greptimedb:latest + livenessProbe: + httpGet: + path: /health + port: 4000 + resources: + limits: + cpu: 50m + memory: 64Mi + requests: + cpu: 50m + memory: 64Mi + datanode: + httpPort: 4000 + rpcPort: 4001 + replicas: 3 + storage: + dataHome: /data/greptimedb + fs: + name: datanode + mountPath: /data/greptimedb + storageRetainPolicy: Retain + storageSize: 10Gi + logging: + format: text + level: debug + logsDir: /data/greptimedb/logs + onlyLogToStdout: false + persistentWithData: false + template: + main: + image: greptime/greptimedb:latest + livenessProbe: + httpGet: + path: /health + port: 4000 + resources: + limits: + cpu: 100m + memory: 128Mi + requests: + cpu: 100m + memory: 128Mi diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/input.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/input.yaml new file mode 100644 index 0000000..ab5ba9f --- /dev/null +++ b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/merge/test00/input.yaml @@ -0,0 +1,39 @@ +apiVersion: greptime.io/v1alpha1 +kind: GreptimeDBCluster +metadata: + name: test00 + namespace: default +spec: + base: + main: + image: greptime/greptimedb:latest + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 100m + memory: 128Mi + frontend: + replicas: 1 + template: + main: + image: greptime/greptimedb:test + meta: + etcdEndpoints: + - etcd.etcd-cluster.svc.cluster.local:2379 + replicas: 1 + template: + main: + resources: + requests: + cpu: 50m + memory: 64Mi + limits: + cpu: 50m + memory: 64Mi + datanode: + replicas: 3 + logging: + level: debug + httpPort: 5000 diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test00/expect.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/expect.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test00/expect.yaml diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/input.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test00/input.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test00/input.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test00/input.yaml diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test01/expect.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/expect.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test01/expect.yaml diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/input.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test01/input.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test01/input.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test01/input.yaml diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test02/expect.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/expect.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test02/expect.yaml diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/input.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test02/input.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test02/input.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test02/input.yaml diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/expect.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test03/expect.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/expect.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test03/expect.yaml diff --git a/apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/input.yaml b/apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test03/input.yaml similarity index 100% rename from apis/v1alpha1/testdata/defaulting/greptimedbcluster/test03/input.yaml rename to apis/v1alpha1/testdata/defaulting/greptimedbcluster/setdefaults/test03/input.yaml From 9e8ed1890e4c676c5223f0e7079059093363c1f7 Mon Sep 17 00:00:00 2001 From: zyy17 Date: Tue, 15 Oct 2024 14:59:06 +0800 Subject: [PATCH 4/5] refactor: set spec.Version by base config --- apis/v1alpha1/defaulting.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/apis/v1alpha1/defaulting.go b/apis/v1alpha1/defaulting.go index 2473946..abc9a7c 100644 --- a/apis/v1alpha1/defaulting.go +++ b/apis/v1alpha1/defaulting.go @@ -25,15 +25,14 @@ import ( "k8s.io/utils/pointer" ) +// SetDefaults sets the default values for the GreptimeDBCluster. func (in *GreptimeDBCluster) SetDefaults() error { if in == nil { return nil } // Set the version of the GreptimeDBClusterSpec if it is not set. - if in.GetVersion() == "" && in.GetBaseMainContainer().GetImage() != "" { - in.Spec.Version = getVersionFromImage(in.GetBaseMainContainer().GetImage()) - } + in.Spec.Version = getVersionFromImage(in.GetBaseMainContainer().GetImage()) // Merge the default settings into the GreptimeDBClusterSpec. if err := mergo.Merge(&in.Spec, in.defaultSpec()); err != nil { @@ -308,9 +307,7 @@ func (in *GreptimeDBStandalone) SetDefaults() error { return nil } - if in.GetVersion() == "" && in.GetBaseMainContainer().GetImage() != "" { - in.Spec.Version = getVersionFromImage(in.GetBaseMainContainer().GetImage()) - } + in.Spec.Version = getVersionFromImage(in.GetBaseMainContainer().GetImage()) if err := mergo.Merge(&in.Spec, in.defaultSpec()); err != nil { return err From b48ba6c055eeb412478d2030066c1ada426d0253 Mon Sep 17 00:00:00 2001 From: zyy17 Date: Tue, 15 Oct 2024 15:00:12 +0800 Subject: [PATCH 5/5] refactor: make meta/frontend/datanode component optional --- apis/v1alpha1/greptimedbcluster_types.go | 12 ++++++------ .../resources/greptime.io_greptimedbclusters.yaml | 4 ---- manifests/bundle.yaml | 4 ---- manifests/crds.yaml | 4 ---- 4 files changed, 6 insertions(+), 18 deletions(-) diff --git a/apis/v1alpha1/greptimedbcluster_types.go b/apis/v1alpha1/greptimedbcluster_types.go index 7b022b4..8db5291 100644 --- a/apis/v1alpha1/greptimedbcluster_types.go +++ b/apis/v1alpha1/greptimedbcluster_types.go @@ -261,16 +261,16 @@ type GreptimeDBClusterSpec struct { Base *PodTemplateSpec `json:"base,omitempty"` // Frontend is the specification of frontend node. - // +required - Frontend *FrontendSpec `json:"frontend"` + // +optional + Frontend *FrontendSpec `json:"frontend,omitempty"` // Meta is the specification of meta node. - // +required - Meta *MetaSpec `json:"meta"` + // +optional + Meta *MetaSpec `json:"meta,omitempty"` // Datanode is the specification of datanode node. - // +required - Datanode *DatanodeSpec `json:"datanode"` + // +optional + Datanode *DatanodeSpec `json:"datanode,omitempty"` // Flownode is the specification of flownode node. // +optional diff --git a/config/crd/resources/greptime.io_greptimedbclusters.yaml b/config/crd/resources/greptime.io_greptimedbclusters.yaml index bf6a528..96dd4d3 100644 --- a/config/crd/resources/greptime.io_greptimedbclusters.yaml +++ b/config/crd/resources/greptime.io_greptimedbclusters.yaml @@ -17279,10 +17279,6 @@ spec: type: object type: object type: object - required: - - datanode - - frontend - - meta type: object status: properties: diff --git a/manifests/bundle.yaml b/manifests/bundle.yaml index 149c724..5359f4a 100644 --- a/manifests/bundle.yaml +++ b/manifests/bundle.yaml @@ -17285,10 +17285,6 @@ spec: type: object type: object type: object - required: - - datanode - - frontend - - meta type: object status: properties: diff --git a/manifests/crds.yaml b/manifests/crds.yaml index ca36d52..a52d945 100644 --- a/manifests/crds.yaml +++ b/manifests/crds.yaml @@ -17278,10 +17278,6 @@ spec: type: object type: object type: object - required: - - datanode - - frontend - - meta type: object status: properties: