From bbdb259925be189bc0e3b597067eece2e470d761 Mon Sep 17 00:00:00 2001 From: zhangtao <111836083+sophon-zt@users.noreply.github.com> Date: Fri, 26 Apr 2024 17:23:27 +0800 Subject: [PATCH] chore: update new monitor api for kbcli (#7015) (#316) (cherry picked from commit 7f7a69e009fe88916fe9fef9ff54a6f1465c52c2) --- docs/user_docs/cli/kbcli_cluster_create.md | 2 +- docs/user_docs/cli/kbcli_cluster_update.md | 2 +- go.mod | 40 +++---- go.sum | 101 +++++++++--------- pkg/cluster/helper.go | 10 +- pkg/cluster/helper_test.go | 3 +- pkg/cmd/builder/template/component_wrapper.go | 5 +- pkg/cmd/cluster/create.go | 40 +++---- pkg/cmd/cluster/create_test.go | 28 ++--- pkg/cmd/cluster/update.go | 69 +++++++++++- pkg/cmd/cluster/update_test.go | 7 +- pkg/cmd/clusterversion/clusterversion.go | 4 +- pkg/cmd/clusterversion/set_default.go | 4 +- pkg/cmd/clusterversion/set_default_test.go | 5 +- pkg/cmd/kubeblocks/status.go | 4 +- pkg/cmd/playground/init.go | 8 +- pkg/cmd/plugin/plugin.go | 2 +- pkg/types/types.go | 9 ++ .../breakingchange/upgradehandlerto0.7.go | 2 +- 19 files changed, 213 insertions(+), 132 deletions(-) diff --git a/docs/user_docs/cli/kbcli_cluster_create.md b/docs/user_docs/cli/kbcli_cluster_create.md index 1b1c5060f..3f5b9e6e5 100644 --- a/docs/user_docs/cli/kbcli_cluster_create.md +++ b/docs/user_docs/cli/kbcli_cluster_create.md @@ -116,7 +116,7 @@ kbcli cluster create [NAME] [flags] -h, --help help for create --label stringArray Set labels for cluster resources --memory-oversell-ratio float Set oversell ratio of memory, set to 10 means 10 times oversell (default 1) - --monitoring-interval uint8 The monitoring interval of cluster, 0 is disabled, the unit is second, any non-zero value means enabling monitoring. + --monitor-enabled Enable or disable monitoring --node-labels stringToString Node label selector (default []) -o, --output format Prints the output in the specified format. Allowed values: JSON and YAML (default yaml) --pitr-enabled Specify whether enabled point in time recovery diff --git a/docs/user_docs/cli/kbcli_cluster_update.md b/docs/user_docs/cli/kbcli_cluster_update.md index a4d7b83bd..a96544b57 100644 --- a/docs/user_docs/cli/kbcli_cluster_update.md +++ b/docs/user_docs/cli/kbcli_cluster_update.md @@ -68,7 +68,7 @@ kbcli cluster update NAME [flags] --edit Edit the API resource --enable-all-logs Enable advanced application all log extraction, set to true will ignore enabledLogs of component level, default is false -h, --help help for update - --monitoring-interval uint8 The monitoring interval of cluster, 0 is disabled, the unit is second, any non-zero value means enabling monitoring. + --monitor-enabled Enable or disable monitoring --node-labels stringToString Node label selector (default []) -o, --output string Output format. One of: (json, yaml, name, go-template, go-template-file, template, templatefile, jsonpath, jsonpath-as-json, jsonpath-file). --pitr-enabled Specify whether enabled point in time recovery diff --git a/go.mod b/go.mod index 0ec7712ff..b5f196921 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/99designs/keyring v1.2.2 github.com/Masterminds/semver/v3 v3.2.1 github.com/apecloud/kubebench v0.0.0-20240327101848-6a031d3f4ebe - github.com/apecloud/kubeblocks v0.9.0-beta.1 + github.com/apecloud/kubeblocks v0.9.0-beta.12 github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 github.com/benbjohnson/clock v1.3.5 github.com/briandowns/spinner v1.23.0 @@ -36,7 +36,7 @@ require ( github.com/mattn/go-isatty v0.0.19 github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 github.com/onsi/ginkgo/v2 v2.13.0 - github.com/onsi/gomega v1.27.10 + github.com/onsi/gomega v1.29.0 github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 github.com/prometheus/alertmanager v0.26.0 @@ -59,15 +59,15 @@ require ( golang.org/x/sync v0.6.0 gopkg.in/yaml.v2 v2.4.0 helm.sh/helm/v3 v3.12.3 - k8s.io/api v0.28.3 + k8s.io/api v0.28.8 k8s.io/apiextensions-apiserver v0.28.3 - k8s.io/apimachinery v0.28.3 - k8s.io/cli-runtime v0.28.2 - k8s.io/client-go v0.28.3 - k8s.io/component-base v0.28.3 + k8s.io/apimachinery v0.28.8 + k8s.io/cli-runtime v0.28.3 + k8s.io/client-go v0.28.8 + k8s.io/component-base v0.28.8 k8s.io/klog v1.0.0 - k8s.io/klog/v2 v2.100.1 - k8s.io/kube-openapi v0.0.0-20230918164632-68afd615200d + k8s.io/klog/v2 v2.110.1 + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 k8s.io/kubectl v0.28.2 k8s.io/metrics v0.28.2 k8s.io/utils v0.0.0-20230726121419-3b25d923346b @@ -134,7 +134,7 @@ require ( github.com/dlclark/regexp2 v1.10.0 // indirect github.com/docker/cli v24.0.7+incompatible // indirect github.com/docker/distribution v2.8.2+incompatible // indirect - github.com/docker/docker v24.0.7+incompatible // indirect + github.com/docker/docker v24.0.9+incompatible // indirect github.com/docker/docker-credential-helpers v0.8.0 // indirect github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c // indirect github.com/docker/go-metrics v0.0.1 // indirect @@ -147,7 +147,7 @@ require ( github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fatih/camelcase v1.0.0 // indirect github.com/felixge/httpsnoop v1.0.3 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fvbommel/sortorder v1.1.0 // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-git/gcfg v1.5.0 // indirect @@ -171,11 +171,11 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/goodhosts/hostsfile v0.1.1 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/cel-go v0.16.1 // indirect + github.com/google/cel-go v0.17.7 // indirect github.com/google/certificate-transparency-go v1.1.5 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect @@ -203,7 +203,7 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.4.3 // indirect + github.com/jackc/pgx/v5 v5.5.4 // indirect github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -302,9 +302,9 @@ require ( github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect github.com/yusufpapurcu/wmi v1.2.3 // indirect github.com/zclconf/go-cty v1.12.1 // indirect - go.etcd.io/etcd/api/v3 v3.5.9 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect - go.etcd.io/etcd/client/v3 v3.5.9 // indirect + go.etcd.io/etcd/api/v3 v3.5.10 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect + go.etcd.io/etcd/client/v3 v3.5.10 // indirect go.mongodb.org/mongo-driver v1.13.1 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 // indirect @@ -330,19 +330,19 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/grpc v1.59.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/apiserver v0.28.3 // indirect - k8s.io/component-helpers v0.28.2 // indirect + k8s.io/component-helpers v0.28.3 // indirect oras.land/oras-go v1.2.4 // indirect periph.io/x/host/v3 v3.8.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect ) replace ( diff --git a/go.sum b/go.sum index 76c110fc0..37afc9ca7 100644 --- a/go.sum +++ b/go.sum @@ -274,8 +274,8 @@ github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/apecloud/kubebench v0.0.0-20240327101848-6a031d3f4ebe h1:OFkCAToRcNt0VqgCndw0mw1Ke3P2XgRJLrXsNOyc3sQ= github.com/apecloud/kubebench v0.0.0-20240327101848-6a031d3f4ebe/go.mod h1:5IZiDkFdgiZRGLsL+FOlvPsiF9LbyU55DVj4/5vT7+4= -github.com/apecloud/kubeblocks v0.9.0-beta.1 h1:spCqfGH53vXVQhrvemZeSGJpx+D60TJ36PGVJvCXENQ= -github.com/apecloud/kubeblocks v0.9.0-beta.1/go.mod h1:l2pwRoBU560naATQrKe6/jaWU4JGg3TWGwQ2GcrpC5c= +github.com/apecloud/kubeblocks v0.9.0-beta.12 h1:5CBaxlJKpF3jxlrfGcm/YxUm9h39q+r5TRLk9LJhX14= +github.com/apecloud/kubeblocks v0.9.0-beta.12/go.mod h1:RsLwGOD0SmBCoGjm+nyaWZQvyAJ2uELBL5pqg0fI1I4= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= @@ -510,8 +510,8 @@ github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0X github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQmYw= github.com/fvbommel/sortorder v1.1.0/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -547,7 +547,6 @@ github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNV github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= @@ -651,8 +650,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -670,8 +669,8 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/cel-go v0.16.1 h1:3hZfSNiAU3KOiNtxuFXVp5WFy4hf/Ly3Sa4/7F8SXNo= -github.com/google/cel-go v0.16.1/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/cel-go v0.17.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ= +github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/certificate-transparency-go v1.0.10-0.20180222191210-5ab67e519c93/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.5 h1:EVfYyOiMSdwwXd6FJxnh0jYgYj/Dh5n9sXtgIr5+Vj0= github.com/google/certificate-transparency-go v1.1.5/go.mod h1:CnNCSPt9ptZQ8jDSrqyTmh2dT2MQLKymfGYwXqjQ7YY= @@ -847,8 +846,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= -github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jackc/pgx/v5 v5.5.4 h1:Xp2aQS8uXButQdnCMWNmvx6UysWQQC+u1EoizjguY+8= +github.com/jackc/pgx/v5 v5.5.4/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A= github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -891,9 +890,8 @@ github.com/k3d-io/k3d/v5 v5.6.0 h1:XMRSQXyPErOcDCdOJVi6HUPjJZuWd/N6Dss7QeCDRhk= github.com/k3d-io/k3d/v5 v5.6.0/go.mod h1:t/hRD2heCSkO9TJJdzFT72jXGCY8PjsCsClgjcmMoAA= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= -github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI= -github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= @@ -1103,8 +1101,8 @@ github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGV github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -1396,25 +1394,25 @@ github.com/zclconf/go-cty v1.12.1 h1:PcupnljUm9EIvbgSHQnHhUr3fO6oFmkOrvs2BAFNXXY github.com/zclconf/go-cty v1.12.1/go.mod h1:s9IfD1LK5ccNMSWCVFCE2rJfHiZgi7JijgeWIMfhLvA= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= -go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= +go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k= +go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= -go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= +go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0= +go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.9 h1:YZ2OLi0OvR0H75AcgSUajjd5uqKDKocQUqROTG11jIo= -go.etcd.io/etcd/client/v2 v2.305.9/go.mod h1:0NBdNx9wbxtEQLwAQtrDHwx58m02vXpDcgSYI2seohQ= -go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= -go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= -go.etcd.io/etcd/pkg/v3 v3.5.9 h1:6R2jg/aWd/zB9+9JxmijDKStGJAPFsX3e6BeJkMi6eQ= -go.etcd.io/etcd/pkg/v3 v3.5.9/go.mod h1:BZl0SAShQFk0IpLWR78T/+pyt8AruMHhTNNX73hkNVY= -go.etcd.io/etcd/raft/v3 v3.5.9 h1:ZZ1GIHoUlHsn0QVqiRysAm3/81Xx7+i2d7nSdWxlOiI= -go.etcd.io/etcd/raft/v3 v3.5.9/go.mod h1:WnFkqzFdZua4LVlVXQEGhmooLeyS7mqzS4Pf4BCVqXg= -go.etcd.io/etcd/server/v3 v3.5.9 h1:vomEmmxeztLtS5OEH7d0hBAg4cjVIu9wXuNzUZx2ZA0= -go.etcd.io/etcd/server/v3 v3.5.9/go.mod h1:GgI1fQClQCFIzuVjlvdbMxNbnISt90gdfYyqiAIt65g= +go.etcd.io/etcd/client/v2 v2.305.10 h1:MrmRktzv/XF8CvtQt+P6wLUlURaNpSDJHFZhe//2QE4= +go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA= +go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao= +go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= +go.etcd.io/etcd/pkg/v3 v3.5.10 h1:WPR8K0e9kWl1gAhB5A7gEa5ZBTNkT9NdNWrR8Qpo1CM= +go.etcd.io/etcd/pkg/v3 v3.5.10/go.mod h1:TKTuCKKcF1zxmfKWDkfz5qqYaE3JncKKZPFf8c1nFUs= +go.etcd.io/etcd/raft/v3 v3.5.10 h1:cgNAYe7xrsrn/5kXMSaH8kM/Ky8mAdMqGOxyYwpP0LA= +go.etcd.io/etcd/raft/v3 v3.5.10/go.mod h1:odD6kr8XQXTy9oQnyMPBOr0TVe+gT0neQhElQ6jbGRc= +go.etcd.io/etcd/server/v3 v3.5.10 h1:4NOGyOwD5sUZ22PiWYKmfxqoeh72z6EhYjNosKGLmZg= +go.etcd.io/etcd/server/v3 v3.5.10/go.mod h1:gBplPHfs6YI0L+RpGkTQO7buDbHv5HJGG/Bst0/zIPo= go.mongodb.org/mongo-driver v1.13.1 h1:YIc7HTYsKndGK4RFzJ3covLz1byri52x0IoMB0Pt/vk= go.mongodb.org/mongo-driver v1.13.1/go.mod h1:wcDf1JBCXy2mOW0bWHwO/IOYqdca1MPCwDtFu/Z9+eo= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= @@ -1743,7 +1741,6 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221013171732-95e765b1cc43/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2087,8 +2084,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII= @@ -2149,36 +2146,36 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= -k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM= -k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc= +k8s.io/api v0.28.8 h1:G0/G7yX1puRAcon/+XPLsKXZ9A5L7Ds6oKbDIe027xw= +k8s.io/api v0.28.8/go.mod h1:rU8f1t9CNUAXlk/1j/wMJ7XnaxkR1g1AlZGQAOOL+sw= k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08= k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= -k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A= -k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8= +k8s.io/apimachinery v0.28.8 h1:hi/nrxHwk4QLV+W/SHve1bypTE59HCDorLY1stBIxKQ= +k8s.io/apimachinery v0.28.8/go.mod h1:cBnwIM3fXoRo28SqbV/Ihxf/iviw85KyXOrzxvZQ83U= k8s.io/apiserver v0.28.3 h1:8Ov47O1cMyeDzTXz0rwcfIIGAP/dP7L8rWbEljRcg5w= k8s.io/apiserver v0.28.3/go.mod h1:YIpM+9wngNAv8Ctt0rHG4vQuX/I5rvkEMtZtsxW2rNM= -k8s.io/cli-runtime v0.28.2 h1:64meB2fDj10/ThIMEJLO29a1oujSm0GQmKzh1RtA/uk= -k8s.io/cli-runtime v0.28.2/go.mod h1:bTpGOvpdsPtDKoyfG4EG041WIyFZLV9qq4rPlkyYfDA= +k8s.io/cli-runtime v0.28.3 h1:lvuJYVkwCqHEvpS6KuTZsUVwPePFjBfSGvuaLl2SxzA= +k8s.io/cli-runtime v0.28.3/go.mod h1:jeX37ZPjIcENVuXDDTskG3+FnVuZms5D9omDXS/2Jjc= k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= -k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4= -k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo= +k8s.io/client-go v0.28.8 h1:TE59Tjd87WKvS2FPBTfIKLFX0nQJ4SSHsnDo5IHjgOw= +k8s.io/client-go v0.28.8/go.mod h1:uDVQ/rPzWpWIy40c6lZ4mUwaEvRWGnpoqSO4FM65P3o= k8s.io/code-generator v0.19.0/go.mod h1:moqLn7w0t9cMs4+5CQyxnfA/HV8MF6aAVENF+WZZhgk= -k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI= -k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8= -k8s.io/component-helpers v0.28.2 h1:r/XJ265PMirW9EcGXr/F+2yWrLPo2I69KdvcY/h9HAo= -k8s.io/component-helpers v0.28.2/go.mod h1:pF1R5YWQ+sgf0i6EbVm+MQCzkYuqutDUibdrkvAa6aI= +k8s.io/component-base v0.28.8 h1:N/c5L6Ty5rcrFyhsMYsqRFUOVGrqGQsLfjB0yj6npqM= +k8s.io/component-base v0.28.8/go.mod h1:9PjQ4nM1Hth6WGe/O+wgLF32eSwf4oPOoN5elmFznJM= +k8s.io/component-helpers v0.28.3 h1:te9ieTGzcztVktUs92X53P6BamAoP73MK0qQP0WmDqc= +k8s.io/component-helpers v0.28.3/go.mod h1:oJR7I9ist5UAQ3y/CTdbw6CXxdMZ1Lw2Ua/EZEwnVLs= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= -k8s.io/kube-openapi v0.0.0-20230918164632-68afd615200d h1:/CFeJBjBrZvHX09rObS2+2iEEDevMWYc1v3aIYAjIYI= -k8s.io/kube-openapi v0.0.0-20230918164632-68afd615200d/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/kubectl v0.28.2 h1:fOWOtU6S0smdNjG1PB9WFbqEIMlkzU5ahyHkc7ESHgM= k8s.io/kubectl v0.28.2/go.mod h1:6EQWTPySF1fn7yKoQZHYf9TPwIl2AygHEcJoxFekr64= k8s.io/kubelet v0.26.1 h1:wQyCQYmLW6GN3v7gVTxnc3jAE4zMYDlzdF3FZV4rKas= @@ -2207,8 +2204,8 @@ sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3/go.mod h sigs.k8s.io/kustomize/kyaml v0.14.3 h1:WpabVAKZe2YEp/irTSHwD6bfjwZnTtSDewd2BVJGMZs= sigs.k8s.io/kustomize/kyaml v0.14.3/go.mod h1:npvh9epWysfQ689Rtt/U+dpOJDTBn8kUnF1O6VzvmZA= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= diff --git a/pkg/cluster/helper.go b/pkg/cluster/helper.go index 3ca6f0a93..3b17062a7 100644 --- a/pkg/cluster/helper.go +++ b/pkg/cluster/helper.go @@ -176,6 +176,14 @@ func GetClusterDefByName(dynamic dynamic.Interface, name string) (*appsv1alpha1. return clusterDef, nil } +func GetComponentDefByName(dynamic dynamic.Interface, name string) (*appsv1alpha1.ComponentDefinition, error) { + componentDef := &appsv1alpha1.ComponentDefinition{} + if err := util.GetK8SClientObject(dynamic, componentDef, types.CompDefGVR(), "", name); err != nil { + return nil, err + } + return componentDef, nil +} + func GetDefaultCompName(cd *appsv1alpha1.ClusterDefinition) (string, error) { if len(cd.Spec.ComponentDefs) >= 1 { return cd.Spec.ComponentDefs[0].Name, nil @@ -284,7 +292,7 @@ func GetDefaultVersion(dynamic dynamic.Interface, clusterDef string) (string, er defaultVersion := "" for _, item := range versionList.Items { - if k, ok := item.Annotations[constant.DefaultClusterVersionAnnotationKey]; !ok || k != "true" { + if k, ok := item.Annotations[types.KBDefaultClusterVersionAnnotationKey]; !ok || k != "true" { continue } if defaultVersion != "" { diff --git a/pkg/cluster/helper_test.go b/pkg/cluster/helper_test.go index 1e0d13191..606201a01 100644 --- a/pkg/cluster/helper_test.go +++ b/pkg/cluster/helper_test.go @@ -27,6 +27,7 @@ import ( "github.com/apecloud/kubeblocks/pkg/constant" "github.com/apecloud/kbcli/pkg/testing" + "github.com/apecloud/kbcli/pkg/types" ) var _ = Describe("helper", func() { @@ -101,7 +102,7 @@ var _ = Describe("helper", func() { Expect(defaultVer).Should(BeEmpty()) By("set default version, should return default version") - cv1.Annotations = map[string]string{constant.DefaultClusterVersionAnnotationKey: "true"} + cv1.Annotations = map[string]string{types.KBDefaultClusterVersionAnnotationKey: "true"} dynamic = testing.FakeDynamicClient(testing.FakeClusterDef(), testing.FakeClusterVersion(), cv1, cv2) defaultVer, err = GetDefaultVersion(dynamic, clusterDefName) Expect(err).Should(Succeed()) diff --git a/pkg/cmd/builder/template/component_wrapper.go b/pkg/cmd/builder/template/component_wrapper.go index 0aa7ae8cc..88231dc32 100644 --- a/pkg/cmd/builder/template/component_wrapper.go +++ b/pkg/cmd/builder/template/component_wrapper.go @@ -45,6 +45,7 @@ import ( "github.com/apecloud/kubeblocks/pkg/generics" "github.com/apecloud/kbcli/pkg/printer" + "github.com/apecloud/kbcli/pkg/types" ) type templateRenderWorkflow struct { @@ -213,7 +214,7 @@ func NewWorkflowTemplateRender(helmTemplateDir string, opts RenderedOptions, clu if clusterVersion != "" { return object.GetName() == clusterVersion } - return object.GetAnnotations() != nil && object.GetAnnotations()[constant.DefaultClusterVersionAnnotationKey] == "true" + return object.GetAnnotations() != nil && object.GetAnnotations()[types.KBDefaultClusterVersionAnnotationKey] == "true" }) if clusterVersion == "" && cvObj == nil { cvObj = GetTypedResourceObjectBySignature(allObjects, generics.ClusterVersionSignature) @@ -327,7 +328,7 @@ func generateComponentObjects(w *templateRenderWorkflow, reqCtx intctrlutil.Requ return nil, nil, err } dag := graph.NewDAG() - root := builder.NewReplicatedStateMachineBuilder(cluster.Namespace, fmt.Sprintf("%s-%s", cluster.Name, compName)).GetObject() + root := builder.NewInstanceSetBuilder(cluster.Namespace, fmt.Sprintf("%s-%s", cluster.Name, compName)).GetObject() model.NewGraphClient(nil).Root(dag, nil, root, nil) compSpec := cluster.Spec.GetComponentByName(compName) diff --git a/pkg/cmd/cluster/create.go b/pkg/cmd/cluster/create.go index 9c84ace77..52f12d122 100755 --- a/pkg/cmd/cluster/create.go +++ b/pkg/cmd/cluster/create.go @@ -53,6 +53,7 @@ import ( appsv1alpha1 "github.com/apecloud/kubeblocks/apis/apps/v1alpha1" dpv1alpha1 "github.com/apecloud/kubeblocks/apis/dataprotection/v1alpha1" + cfgutil "github.com/apecloud/kubeblocks/pkg/configuration/util" "github.com/apecloud/kubeblocks/pkg/constant" "github.com/apecloud/kubeblocks/pkg/dataprotection/restore" @@ -171,7 +172,7 @@ const ( keySwitchPolicy setKey = "switchPolicy" keyCompNum setKey = "compNum" keyUnknown setKey = "unknown" - keyMonitor setKey = "monitor" + keyMonitor setKey = "monitorEnabled" ) var setKeyCfg = map[setKey]string{ @@ -217,8 +218,8 @@ type UpdatableFlags struct { TerminationPolicy string `json:"terminationPolicy"` // Add-on switches for cluster observability - MonitoringInterval uint8 `json:"monitor"` - EnableAllLogs bool `json:"enableAllLogs"` + EnableMetrics bool `json:"monitor"` + EnableAllLogs bool `json:"enableAllLogs"` // Configuration and options for cluster affinity and tolerations PodAntiAffinity string `json:"podAntiAffinity"` @@ -392,9 +393,9 @@ func fillClusterInfoFromBackup(o *CreateOptions, cls **appsv1alpha1.Cluster) err return nil } -func setBackup(o *CreateOptions, components []map[string]interface{}) error { +func setBackup(o *CreateOptions, cluster *appsv1alpha1.Cluster) error { backupName := o.Backup - if len(backupName) == 0 || len(components) == 0 { + if len(backupName) == 0 { return nil } backup := &dpv1alpha1.Backup{} @@ -409,13 +410,13 @@ func setBackup(o *CreateOptions, components []map[string]interface{}) error { if err != nil { return err } - var componentSpecs []appsv1alpha1.ClusterComponentSpec - for _, v := range components { - compSpec := appsv1alpha1.ClusterComponentSpec{} - _ = runtime.DefaultUnstructuredConverter.FromUnstructured(v, &compSpec) - componentSpecs = append(componentSpecs, compSpec) - } - restoreAnnotation, err := restore.GetRestoreFromBackupAnnotation(backup, componentSpecs, o.VolumeRestorePolicy, restoreTimeStr, false) + // var componentSpecs []appsv1alpha1.ClusterComponentSpec + // for _, v := range components { + // compSpec := appsv1alpha1.ClusterComponentSpec{} + // _ = runtime.DefaultUnstructuredConverter.FromUnstructured(v, &compSpec) + // componentSpecs = append(componentSpecs, compSpec) + // } + restoreAnnotation, err := restore.GetRestoreFromBackupAnnotation(backup, cluster, o.VolumeRestorePolicy, restoreTimeStr, false) if err != nil { return err } @@ -547,7 +548,7 @@ func (o *CreateOptions) Complete() error { return err } - if err = setBackup(o, components); err != nil { + if err = setBackup(o, cls); err != nil { return err } o.ComponentSpecs = components @@ -624,7 +625,7 @@ func (o *CreateOptions) buildComponents(clusterCompSpecs []appsv1alpha1.ClusterC } if clusterCompSpecs != nil { - setsCompSpecs, err := buildClusterComp(cd, compSets, o.MonitoringInterval, o.CreateOnlySet) + setsCompSpecs, err := buildClusterComp(cd, compSets, o.EnableMetrics, o.CreateOnlySet) if err != nil { return nil, err } @@ -638,7 +639,7 @@ func (o *CreateOptions) buildComponents(clusterCompSpecs []appsv1alpha1.ClusterC compSpecs = append(compSpecs, &comp) } } else { - compSpecs, err = buildClusterComp(cd, compSets, o.MonitoringInterval, o.CreateOnlySet) + compSpecs, err = buildClusterComp(cd, compSets, o.EnableMetrics, o.CreateOnlySet) if err != nil { return nil, err } @@ -992,7 +993,7 @@ func setEnableAllLogs(c *appsv1alpha1.Cluster, cd *appsv1alpha1.ClusterDefinitio func buildClusterComp(cd *appsv1alpha1.ClusterDefinition, setsMap map[string]map[setKey]string, - monitoringInterval uint8, + monitorEnabled bool, createOnlySet bool) ([]*appsv1alpha1.ClusterComponentSpec, error) { // get value from set values and environment variables, the second return value is // true if the value is from environment variables @@ -1134,12 +1135,13 @@ func buildClusterComp(cd *appsv1alpha1.ClusterDefinition, // set component monitor monitor := getVal(&c, keyMonitor, sets) if monitor == "" { - compObj.Monitor = monitoringInterval != 0 + compObj.MonitorEnabled = cfgutil.ToPointer(monitorEnabled) } else { - compObj.Monitor, err = strconv.ParseBool(monitor) + enabled, err := strconv.ParseBool(monitor) if err != nil { return nil, fmt.Errorf("parsing monitor failed: %s", err.Error()) } + compObj.MonitorEnabled = cfgutil.ToPointer(enabled) } comps = append(comps, compObj) compNum := 0 @@ -1264,7 +1266,7 @@ func generateClusterName(dynamic dynamic.Interface, namespace string) (string, e func (f *UpdatableFlags) addFlags(cmd *cobra.Command) { cmd.Flags().StringVar(&f.PodAntiAffinity, "pod-anti-affinity", "Preferred", "Pod anti-affinity type, one of: (Preferred, Required)") - cmd.Flags().Uint8Var(&f.MonitoringInterval, "monitoring-interval", 0, "The monitoring interval of cluster, 0 is disabled, the unit is second, any non-zero value means enabling monitoring.") + cmd.Flags().BoolVar(&f.EnableMetrics, "monitor-enabled", false, "Enable or disable monitoring") cmd.Flags().BoolVar(&f.EnableAllLogs, "enable-all-logs", false, "Enable advanced application all log extraction, set to true will ignore enabledLogs of component level, default is false") cmd.Flags().StringVar(&f.TerminationPolicy, "termination-policy", "Delete", "Termination policy, one of: (DoNotTerminate, Halt, Delete, WipeOut)") cmd.Flags().StringArrayVar(&f.TopologyKeys, "topology-keys", nil, "Topology keys for affinity") diff --git a/pkg/cmd/cluster/create_test.go b/pkg/cmd/cluster/create_test.go index d4419afd0..89bf4d58b 100644 --- a/pkg/cmd/cluster/create_test.go +++ b/pkg/cmd/cluster/create_test.go @@ -142,7 +142,7 @@ var _ = Describe("create", func() { It("build default cluster component without environment", func() { dynamic := testing.FakeDynamicClient(testing.FakeClusterDef()) cd, _ := cluster.GetClusterDefByName(dynamic, testing.ClusterDefName) - comps, err := buildClusterComp(cd, nil, 15, false) + comps, err := buildClusterComp(cd, nil, true, false) Expect(err).ShouldNot(HaveOccurred()) checkComponent(comps, "20Gi", 1, "1", "1Gi", "", 0) }) @@ -154,7 +154,7 @@ var _ = Describe("create", func() { viper.Set(types.CfgKeyClusterDefaultMemory, "2Gi") dynamic := testing.FakeDynamicClient(testing.FakeClusterDef()) cd, _ := cluster.GetClusterDefByName(dynamic, testing.ClusterDefName) - comps, err := buildClusterComp(cd, nil, 15, false) + comps, err := buildClusterComp(cd, nil, true, false) Expect(err).ShouldNot(HaveOccurred()) checkComponent(comps, "5Gi", 1, "2", "2Gi", "", 0) }) @@ -171,13 +171,13 @@ var _ = Describe("create", func() { keyStorageClass: "test", }, } - comps, err := buildClusterComp(cd, setsMap, 0, false) + comps, err := buildClusterComp(cd, setsMap, false, false) Expect(err).Should(Succeed()) checkComponent(comps, "10Gi", 10, "10", "2Gi", "test", 0) setsMap[testing.ComponentDefName][keySwitchPolicy] = "invalid" cd.Spec.ComponentDefs[0].WorkloadType = appsv1alpha1.Replication - _, err = buildClusterComp(cd, setsMap, 0, false) + _, err = buildClusterComp(cd, setsMap, false, false) Expect(err).Should(HaveOccurred()) }) @@ -199,13 +199,13 @@ var _ = Describe("create", func() { keyStorageClass: "test-other", }, } - comps, err := buildClusterComp(cd, setsMap, 15, false) + comps, err := buildClusterComp(cd, setsMap, true, false) Expect(err).Should(Succeed()) checkComponent(comps, "10Gi", 10, "10", "2Gi", "test", 0) checkComponent(comps, "5Gi", 5, "5", "1Gi", "test-other", 1) setsMap[testing.ComponentDefName][keySwitchPolicy] = "invalid" cd.Spec.ComponentDefs[0].WorkloadType = appsv1alpha1.Replication - _, err = buildClusterComp(cd, setsMap, 15, false) + _, err = buildClusterComp(cd, setsMap, true, false) Expect(err).Should(HaveOccurred()) }) @@ -386,16 +386,16 @@ var _ = Describe("create", func() { o.Dynamic = dynamic o.Namespace = testing.Namespace o.Backup = backupName - components := []map[string]interface{}{ - { - "name": "mysql", - }, - } - Expect(setBackup(o, components).Error()).Should(ContainSubstring("is not completed")) + // components := []map[string]interface{}{ + // { + // "name": "mysql", + // }, + // } + Expect(setBackup(o, cluster).Error()).Should(ContainSubstring("is not completed")) By("test backup is completed") mockBackupInfo(dynamic, backupName, clusterName, nil, "") - Expect(setBackup(o, components)).Should(Succeed()) + Expect(setBackup(o, cluster)).Should(Succeed()) }) It("test fillClusterMetadataFromBackup", func() { @@ -643,7 +643,7 @@ var _ = Describe("create", func() { }) It("rebuild clusterComponentSpec VolumeClaimTemplates by --pvc", func() { - comps, err := buildClusterComp(mockCD([]string{"comp1", "comp2"}), nil, 0, false) + comps, err := buildClusterComp(mockCD([]string{"comp1", "comp2"}), nil, false, false) Expect(err).Should(Succeed()) Expect(comps).ShouldNot(BeNil()) diff --git a/pkg/cmd/cluster/update.go b/pkg/cmd/cluster/update.go index d56eb8780..1f55e7168 100644 --- a/pkg/cmd/cluster/update.go +++ b/pkg/cmd/cluster/update.go @@ -25,6 +25,7 @@ import ( "encoding/csv" "encoding/json" "fmt" + "slices" "strconv" "strings" "text/template" @@ -47,6 +48,7 @@ import ( appsv1beta1 "github.com/apecloud/kubeblocks/apis/apps/v1beta1" dpv1alpha1 "github.com/apecloud/kubeblocks/apis/dataprotection/v1alpha1" cfgcore "github.com/apecloud/kubeblocks/pkg/configuration/core" + cfgutil "github.com/apecloud/kubeblocks/pkg/configuration/util" "github.com/apecloud/kubeblocks/pkg/constant" "github.com/apecloud/kubeblocks/pkg/controller/configuration" "github.com/apecloud/kubeblocks/pkg/dataprotection/utils" @@ -283,8 +285,8 @@ func (o *UpdateOptions) buildPatch() error { "tolerations": {field: "tolerations", obj: spec, fn: buildTolObj}, // monitor and logs - "monitoring-interval": {field: "monitor", obj: nil, fn: buildComps}, - "enable-all-logs": {field: "enable-all-logs", obj: nil, fn: buildComps}, + "monitor-enabled": {field: "monitor", obj: nil, fn: buildComps}, + "enable-all-logs": {field: "enable-all-logs", obj: nil, fn: buildComps}, // backup config "backup-enabled": {field: "enabled", obj: nil, fn: buildBackup}, @@ -603,13 +605,30 @@ func buildLogsReconfiguringOps(clusterName, namespace, compName, configName, key } func (o *UpdateOptions) updateMonitor(val string) error { - intVal, err := strconv.ParseInt(val, 10, 32) + enabled, err := strconv.ParseBool(val) if err != nil { return err } + var cd *appsv1alpha1.ClusterDefinition + if o.cluster.Spec.ClusterDefRef != "" { + cd, err = cluster.GetClusterDefByName(o.dynamic, o.cluster.Spec.ClusterDefRef) + if err != nil { + return err + } + } + for i := range o.cluster.Spec.ComponentSpecs { - o.cluster.Spec.ComponentSpecs[i].Monitor = intVal != 0 + // 1. add metrics sidecar to the component + // 2. enable monitor + component := &o.cluster.Spec.ComponentSpecs[i] + component.MonitorEnabled = cfgutil.ToPointer(enabled) + if !enabled { + continue + } + if err := o.updateMetricsSidecar(component, cd); err != nil { + return err + } } return nil } @@ -677,3 +696,45 @@ func (o *UpdateOptions) updateBackupPitrEnabled(val string) error { o.cluster.Spec.Backup.PITREnabled = &boolVal return nil } + +func (o *UpdateOptions) updateMetricsSidecar(component *appsv1alpha1.ClusterComponentSpec, cd *appsv1alpha1.ClusterDefinition) error { + var sidecars []appsv1alpha1.SidecarContainerSpec + var builtinMonitor bool + + if cd != nil && component.ComponentDefRef != "" { + componentDef := cd.GetComponentDefByName(component.ComponentDefRef) + if componentDef == nil { + return fmt.Errorf("not fount component[%s] in clusterdefinitions[%s]", component.ComponentDefRef, cd.Name) + } + builtinMonitor = componentDef.BuiltinMonitorContainer != nil + sidecars = componentDef.SidecarContainerSpecs + } else if component.ComponentDef != "" { + componentDef, err := cluster.GetComponentDefByName(o.dynamic, component.ComponentDef) + if err != nil { + return err + } + builtinMonitor = componentDef.Spec.BuiltinMonitorContainer != nil + sidecars = componentDef.Spec.SidecarContainerSpecs + } + + // builtin monitor container + if builtinMonitor { + return nil + } + + // sidecar monitor container + for _, sidecar := range sidecars { + if isMetricsContainer(&sidecar) { + if !slices.Contains(component.Sidecars, sidecar.Name) { + component.Sidecars = append(component.Sidecars, sidecar.Name) + } + } + } + return nil +} + +func isMetricsContainer(sidecarContainer *appsv1alpha1.SidecarContainerSpec) bool { + return sidecarContainer.Monitor != nil && + sidecarContainer.Monitor.SidecarKind == appsv1alpha1.MetricsKind && + sidecarContainer.Monitor.ScrapeConfig != nil +} diff --git a/pkg/cmd/cluster/update_test.go b/pkg/cmd/cluster/update_test.go index d54b53c28..a4b47d7f2 100644 --- a/pkg/cmd/cluster/update_test.go +++ b/pkg/cmd/cluster/update_test.go @@ -88,11 +88,12 @@ var _ = Describe("cluster update", func() { It("set monitoring interval", func() { fakeCluster := testing.FakeCluster("c1", "default") - tf.FakeDynamicClient = testing.FakeDynamicClient(fakeCluster) - Expect(cmd.Flags().Set("monitoring-interval", "15")).Should(Succeed()) + fakeClusterDef := testing.FakeClusterDef() + tf.FakeDynamicClient = testing.FakeDynamicClient(fakeCluster, fakeClusterDef) + Expect(cmd.Flags().Set("monitor-enabled", "true")).Should(Succeed()) Expect(o.CmdComplete(cmd, args)).Should(Succeed()) Expect(o.Complete()).Should(Succeed()) - Expect(o.Patch).Should(ContainSubstring("\"monitor\":true")) + Expect(o.Patch).Should(ContainSubstring("\"monitorEnabled\":true")) }) It("set enable-all-logs", func() { diff --git a/pkg/cmd/clusterversion/clusterversion.go b/pkg/cmd/clusterversion/clusterversion.go index e3aff3d32..904645f1e 100644 --- a/pkg/cmd/clusterversion/clusterversion.go +++ b/pkg/cmd/clusterversion/clusterversion.go @@ -119,8 +119,8 @@ func isDefault(cv *v1alpha1.ClusterVersion) string { if cv.Annotations == nil { return "false" } - if _, ok := cv.Annotations[constant.DefaultClusterVersionAnnotationKey]; !ok { + if _, ok := cv.Annotations[types.KBDefaultClusterVersionAnnotationKey]; !ok { return "false" } - return cv.Annotations[constant.DefaultClusterVersionAnnotationKey] + return cv.Annotations[types.KBDefaultClusterVersionAnnotationKey] } diff --git a/pkg/cmd/clusterversion/set_default.go b/pkg/cmd/clusterversion/set_default.go index 0fb340865..a153c82ed 100644 --- a/pkg/cmd/clusterversion/set_default.go +++ b/pkg/cmd/clusterversion/set_default.go @@ -159,7 +159,7 @@ func patchDefaultClusterVersionAnnotations(client dynamic.Interface, cvName stri patchData := map[string]interface{}{ "metadata": map[string]interface{}{ "annotations": map[string]interface{}{ - constant.DefaultClusterVersionAnnotationKey: value, + types.KBDefaultClusterVersionAnnotationKey: value, }, }, } @@ -189,7 +189,7 @@ func getMapsBetweenCvAndCd(client dynamic.Interface) (map[string]string, map[str if annotations == nil { continue } - if annotations[constant.DefaultClusterVersionAnnotationKey] == annotationTrueValue { + if annotations[types.KBDefaultClusterVersionAnnotationKey] == annotationTrueValue { cdToDefaultCv[labels[constant.ClusterDefLabelKey]] = name } } diff --git a/pkg/cmd/clusterversion/set_default_test.go b/pkg/cmd/clusterversion/set_default_test.go index 9c3bb65d8..44165f3c4 100644 --- a/pkg/cmd/clusterversion/set_default_test.go +++ b/pkg/cmd/clusterversion/set_default_test.go @@ -37,6 +37,7 @@ import ( "github.com/apecloud/kubeblocks/pkg/constant" "github.com/apecloud/kbcli/pkg/testing" + "github.com/apecloud/kbcli/pkg/types" ) var _ = Describe("set-default", func() { @@ -116,10 +117,10 @@ var _ = Describe("set-default", func() { cv := testing.FakeClusterVersion() Expect(isDefault(cv)).Should(Equal(annotationFalseValue)) cv.SetAnnotations(map[string]string{ - constant.DefaultClusterVersionAnnotationKey: annotationFalseValue, + types.KBDefaultClusterVersionAnnotationKey: annotationFalseValue, }) Expect(isDefault(cv)).Should(Equal(annotationFalseValue)) - cv.Annotations[constant.DefaultClusterVersionAnnotationKey] = annotationTrueValue + cv.Annotations[types.KBDefaultClusterVersionAnnotationKey] = annotationTrueValue Expect(isDefault(cv)).Should(Equal(annotationTrueValue)) }) diff --git a/pkg/cmd/kubeblocks/status.go b/pkg/cmd/kubeblocks/status.go index 6cedfe14e..f2af19e46 100644 --- a/pkg/cmd/kubeblocks/status.go +++ b/pkg/cmd/kubeblocks/status.go @@ -248,7 +248,7 @@ func (o *statusOptions) showAddons() { for _, addon := range o.addons { if addon.Labels == nil { provider = notAvailable - } else if provider, ok = addon.Labels[constant.AddonProviderLabelKey]; !ok { + } else if provider, ok = addon.Labels[types.KBAddonProviderLabelKey]; !ok { provider = notAvailable } tbl.AddRow(addon.Name, addon.Status.Phase, addon.Spec.Type, provider) @@ -497,7 +497,7 @@ func computeMetricByWorkloads(ctx context.Context, ns string, workloads []*unstr computeMetrics := func(namespace, name string, matchLabels string) { if pods, err := mc.MetricsV1beta1().PodMetricses(namespace).List(ctx, metav1.ListOptions{LabelSelector: matchLabels}); err != nil { if klog.V(1).Enabled() { - klog.Errorf("failed to get pod metrics for %s/%s, selector: , error: %v", namespace, name, matchLabels, err) + klog.Errorf("failed to get pod metrics for %s/%s, selector: %v, error: %v", namespace, name, matchLabels, err) } } else { cpuUsage, memUsage := int64(0), int64(0) diff --git a/pkg/cmd/playground/init.go b/pkg/cmd/playground/init.go index 4612c05c3..f648371bf 100644 --- a/pkg/cmd/playground/init.go +++ b/pkg/cmd/playground/init.go @@ -506,10 +506,10 @@ func (o *initOptions) createCluster() error { c.Namespace = defaultNamespace c.Name = kbClusterName c.UpdatableFlags = cmdcluster.UpdatableFlags{ - TerminationPolicy: "WipeOut", - MonitoringInterval: 15, - PodAntiAffinity: "Preferred", - Tenancy: "SharedNode", + TerminationPolicy: "WipeOut", + EnableMetrics: false, + PodAntiAffinity: "Preferred", + Tenancy: "SharedNode", } // if we are running on local, create cluster with one replica diff --git a/pkg/cmd/plugin/plugin.go b/pkg/cmd/plugin/plugin.go index c44c0d92b..8e53fc200 100644 --- a/pkg/cmd/plugin/plugin.go +++ b/pkg/cmd/plugin/plugin.go @@ -164,7 +164,7 @@ func (o *PluginListOptions) ListPlugins() ([]string, []error) { files, err := os.ReadDir(dir) if err != nil { if _, ok := err.(*os.PathError); ok { - klog.V(1).Info("Unable to read directory %q from your PATH: %v. Skipping...\n", dir, err) + klog.V(1).Infof("Unable to read directory %q from your PATH: %v. Skipping...\n", dir, err) continue } diff --git a/pkg/types/types.go b/pkg/types/types.go index b3386da07..802a089c6 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -235,6 +235,15 @@ const ( ImageRegistryKey = "image.registry" ) +// Migrate some const from kubeblocks to kbcli +const ( + // KBDefaultClusterVersionAnnotationKey specifies the default cluster version. + KBDefaultClusterVersionAnnotationKey = "kubeblocks.io/is-default-cluster-version" + + // KBAddonProviderLabelKey marks the addon provider + KBAddonProviderLabelKey = "kubeblocks.io/provider" +) + var ( // KubeBlocksRepoName helm repo name for kubeblocks KubeBlocksRepoName = "kubeblocks" diff --git a/pkg/util/breakingchange/upgradehandlerto0.7.go b/pkg/util/breakingchange/upgradehandlerto0.7.go index 6c3a88d42..4a7532b16 100644 --- a/pkg/util/breakingchange/upgradehandlerto0.7.go +++ b/pkg/util/breakingchange/upgradehandlerto0.7.go @@ -482,7 +482,7 @@ func (u *upgradeHandlerTo7) transformStatefulSet(dynamic dynamic.Interface, obj return err } updateStrategy, _, _ := unstructured.NestedString(obj.Object, "spec", "updateStrategy") - rsm := builder.NewReplicatedStateMachineBuilder(obj.GetNamespace(), obj.GetName()). + rsm := builder.NewInstanceSetBuilder(obj.GetNamespace(), obj.GetName()). AddAnnotationsInMap(obj.GetAnnotations()). AddLabelsInMap(obj.GetLabels()). SetServiceName(serviceName).