From 9beb99f28b44a09c7c7bf0d17e223c2905296886 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Fri, 17 Jan 2025 10:57:05 +0600 Subject: [PATCH] Collect the petset yamls (#786) Signed-off-by: Arnob kumar saha --- Makefile | 2 +- go.mod | 2 +- pkg/debug/elasticsearch.go | 38 ++++++ pkg/debug/mariadb.go | 38 ++++++ pkg/debug/mongodb.go | 38 ++++++ pkg/debug/mysql.go | 38 ++++++ pkg/debug/postgres.go | 38 ++++++ pkg/debug/redis.go | 38 ++++++ .../client/clientset/versioned/clientset.go | 121 ++++++++++++++++++ vendor/modules.txt | 1 + 10 files changed, 352 insertions(+), 2 deletions(-) create mode 100644 vendor/kubeops.dev/petset/client/clientset/versioned/clientset.go diff --git a/Makefile b/Makefile index f7bbd3e54..88575245c 100644 --- a/Makefile +++ b/Makefile @@ -221,7 +221,7 @@ lint: $(BUILD_DIRS) --env GO111MODULE=on \ --env GOFLAGS="-mod=vendor" \ $(BUILD_IMAGE) \ - golangci-lint run --enable $(ADDTL_LINTERS) --timeout=10m --skip-files="generated.*\.go$\" --skip-dirs-use-default + golangci-lint run --enable $(ADDTL_LINTERS) --timeout=10m --exclude-files="generated.*\.go$\" --exclude-dirs-use-default $(BUILD_DIRS): @mkdir -p $@ diff --git a/go.mod b/go.mod index 1af52e27c..f3ddaf5c2 100644 --- a/go.mod +++ b/go.mod @@ -31,6 +31,7 @@ require ( kmodules.xyz/monitoring-agent-api v0.30.2 kubedb.dev/apimachinery v0.51.0 kubedb.dev/db-client-go v0.6.0 + kubeops.dev/petset v0.0.7 sigs.k8s.io/controller-runtime v0.18.4 sigs.k8s.io/yaml v1.4.0 stash.appscode.dev/apimachinery v0.38.0 @@ -147,7 +148,6 @@ require ( kmodules.xyz/prober v0.29.0 // indirect kmodules.xyz/resource-metadata v0.24.1 // indirect kubeops.dev/csi-driver-cacerts v0.1.0 // indirect - kubeops.dev/petset v0.0.7 // indirect kubeops.dev/sidekick v0.0.10 // indirect kubestash.dev/apimachinery v0.15.0 // indirect sigs.k8s.io/gateway-api v1.1.0 // indirect diff --git a/pkg/debug/elasticsearch.go b/pkg/debug/elasticsearch.go index 2ce3bd6ea..bf6620043 100644 --- a/pkg/debug/elasticsearch.go +++ b/pkg/debug/elasticsearch.go @@ -34,11 +34,13 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth" "k8s.io/klog/v2" cmdutil "k8s.io/kubectl/pkg/cmd/util" + ps "kubeops.dev/petset/client/clientset/versioned" ) type elasticsearchOpts struct { db *dbapi.Elasticsearch dbClient *cs.Clientset + psClient *ps.Clientset podClient *kubernetes.Clientset operatorNamespace string @@ -80,6 +82,11 @@ func ElasticsearchDebugCMD(f cmdutil.Factory) *cobra.Command { log.Fatal(err) } + err = opts.collectForAllDBPetSets() + if err != nil { + log.Fatal(err) + } + err = opts.collectForAllDBPods() if err != nil { log.Fatal(err) @@ -107,6 +114,11 @@ func newElasticsearchOpts(f cmdutil.Factory, dbName, namespace, operatorNS strin return nil, err } + psClient, err := ps.NewForConfig(config) + if err != nil { + return nil, err + } + podClient, err := kubernetes.NewForConfig(config) if err != nil { return nil, err @@ -131,6 +143,7 @@ func newElasticsearchOpts(f cmdutil.Factory, dbName, namespace, operatorNS strin opts := &elasticsearchOpts{ db: db, dbClient: dbClient, + psClient: psClient, podClient: podClient, operatorNamespace: operatorNS, dir: dir, @@ -161,6 +174,31 @@ func (opts *elasticsearchOpts) collectOperatorLogs() error { return nil } +func (opts *elasticsearchOpts) collectForAllDBPetSets() error { + psLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() + petsets, err := opts.psClient.AppsV1().PetSets(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ + LabelSelector: psLabels, + }) + if err != nil { + return err + } + + psYamlDir := path.Join(opts.dir, yamlsDir, "petsets") + err = os.MkdirAll(psYamlDir, dirPerm) + if err != nil { + return err + } + + for _, p := range petsets.Items { + err = writeYaml(&p, psYamlDir) + if err != nil { + return err + } + + } + return nil +} + func (opts *elasticsearchOpts) collectForAllDBPods() error { dbLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() pods, err := opts.podClient.CoreV1().Pods(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ diff --git a/pkg/debug/mariadb.go b/pkg/debug/mariadb.go index a5840f0ab..df7c2c48c 100644 --- a/pkg/debug/mariadb.go +++ b/pkg/debug/mariadb.go @@ -34,11 +34,13 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth" "k8s.io/klog/v2" cmdutil "k8s.io/kubectl/pkg/cmd/util" + ps "kubeops.dev/petset/client/clientset/versioned" ) type mariadbOpts struct { db *dbapi.MariaDB dbClient *cs.Clientset + psClient *ps.Clientset podClient *kubernetes.Clientset operatorNamespace string @@ -80,6 +82,11 @@ func MariaDBDebugCMD(f cmdutil.Factory) *cobra.Command { log.Fatal(err) } + err = opts.collectForAllDBPetSets() + if err != nil { + log.Fatal(err) + } + err = opts.collectForAllDBPods() if err != nil { log.Fatal(err) @@ -107,6 +114,11 @@ func newMariadbOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*m return nil, err } + psClient, err := ps.NewForConfig(config) + if err != nil { + return nil, err + } + podClient, err := kubernetes.NewForConfig(config) if err != nil { return nil, err @@ -131,6 +143,7 @@ func newMariadbOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*m opts := &mariadbOpts{ db: db, dbClient: dbClient, + psClient: psClient, podClient: podClient, operatorNamespace: operatorNS, dir: dir, @@ -161,6 +174,31 @@ func (opts *mariadbOpts) collectOperatorLogs() error { return nil } +func (opts *mariadbOpts) collectForAllDBPetSets() error { + psLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() + petsets, err := opts.psClient.AppsV1().PetSets(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ + LabelSelector: psLabels, + }) + if err != nil { + return err + } + + psYamlDir := path.Join(opts.dir, yamlsDir, "petsets") + err = os.MkdirAll(psYamlDir, dirPerm) + if err != nil { + return err + } + + for _, p := range petsets.Items { + err = writeYaml(&p, psYamlDir) + if err != nil { + return err + } + + } + return nil +} + func (opts *mariadbOpts) collectForAllDBPods() error { dbLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() pods, err := opts.podClient.CoreV1().Pods(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ diff --git a/pkg/debug/mongodb.go b/pkg/debug/mongodb.go index 408f2189a..edfd4106b 100644 --- a/pkg/debug/mongodb.go +++ b/pkg/debug/mongodb.go @@ -34,11 +34,13 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth" "k8s.io/klog/v2" cmdutil "k8s.io/kubectl/pkg/cmd/util" + ps "kubeops.dev/petset/client/clientset/versioned" ) type mongodbOpts struct { db *dbapi.MongoDB dbClient *cs.Clientset + psClient *ps.Clientset podClient *kubernetes.Clientset operatorNamespace string @@ -80,6 +82,11 @@ func MongoDBDebugCMD(f cmdutil.Factory) *cobra.Command { log.Fatal(err) } + err = opts.collectForAllDBPetSets() + if err != nil { + log.Fatal(err) + } + err = opts.collectForAllDBPods() if err != nil { log.Fatal(err) @@ -107,6 +114,11 @@ func newMongodbOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*m return nil, err } + psClient, err := ps.NewForConfig(config) + if err != nil { + return nil, err + } + podClient, err := kubernetes.NewForConfig(config) if err != nil { return nil, err @@ -131,6 +143,7 @@ func newMongodbOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*m opts := &mongodbOpts{ db: db, dbClient: dbClient, + psClient: psClient, podClient: podClient, operatorNamespace: operatorNS, dir: dir, @@ -161,6 +174,31 @@ func (opts *mongodbOpts) collectOperatorLogs() error { return nil } +func (opts *mongodbOpts) collectForAllDBPetSets() error { + psLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() + petsets, err := opts.psClient.AppsV1().PetSets(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ + LabelSelector: psLabels, + }) + if err != nil { + return err + } + + psYamlDir := path.Join(opts.dir, yamlsDir, "petsets") + err = os.MkdirAll(psYamlDir, dirPerm) + if err != nil { + return err + } + + for _, p := range petsets.Items { + err = writeYaml(&p, psYamlDir) + if err != nil { + return err + } + + } + return nil +} + func (opts *mongodbOpts) collectForAllDBPods() error { dbLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() pods, err := opts.podClient.CoreV1().Pods(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ diff --git a/pkg/debug/mysql.go b/pkg/debug/mysql.go index 00abcef21..f85c5040b 100644 --- a/pkg/debug/mysql.go +++ b/pkg/debug/mysql.go @@ -34,11 +34,13 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth" "k8s.io/klog/v2" cmdutil "k8s.io/kubectl/pkg/cmd/util" + ps "kubeops.dev/petset/client/clientset/versioned" ) type mysqlOpts struct { db *dbapi.MySQL dbClient *cs.Clientset + psClient *ps.Clientset podClient *kubernetes.Clientset operatorNamespace string @@ -80,6 +82,11 @@ func MySQLDebugCMD(f cmdutil.Factory) *cobra.Command { log.Fatal(err) } + err = opts.collectForAllDBPetSets() + if err != nil { + log.Fatal(err) + } + err = opts.collectForAllDBPods() if err != nil { log.Fatal(err) @@ -107,6 +114,11 @@ func newMysqlOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*mys return nil, err } + psClient, err := ps.NewForConfig(config) + if err != nil { + return nil, err + } + podClient, err := kubernetes.NewForConfig(config) if err != nil { return nil, err @@ -131,6 +143,7 @@ func newMysqlOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*mys opts := &mysqlOpts{ db: db, dbClient: dbClient, + psClient: psClient, podClient: podClient, operatorNamespace: operatorNS, dir: dir, @@ -161,6 +174,31 @@ func (opts *mysqlOpts) collectOperatorLogs() error { return nil } +func (opts *mysqlOpts) collectForAllDBPetSets() error { + psLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() + petsets, err := opts.psClient.AppsV1().PetSets(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ + LabelSelector: psLabels, + }) + if err != nil { + return err + } + + psYamlDir := path.Join(opts.dir, yamlsDir, "petsets") + err = os.MkdirAll(psYamlDir, dirPerm) + if err != nil { + return err + } + + for _, p := range petsets.Items { + err = writeYaml(&p, psYamlDir) + if err != nil { + return err + } + + } + return nil +} + func (opts *mysqlOpts) collectForAllDBPods() error { dbLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() pods, err := opts.podClient.CoreV1().Pods(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ diff --git a/pkg/debug/postgres.go b/pkg/debug/postgres.go index ab3a7acef..70e9a78a5 100644 --- a/pkg/debug/postgres.go +++ b/pkg/debug/postgres.go @@ -34,11 +34,13 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth" "k8s.io/klog/v2" cmdutil "k8s.io/kubectl/pkg/cmd/util" + ps "kubeops.dev/petset/client/clientset/versioned" ) type postgresOpts struct { db *dbapi.Postgres dbClient *cs.Clientset + psClient *ps.Clientset podClient *kubernetes.Clientset operatorNamespace string @@ -80,6 +82,11 @@ func PostgresDebugCMD(f cmdutil.Factory) *cobra.Command { log.Fatal(err) } + err = opts.collectForAllDBPetSets() + if err != nil { + log.Fatal(err) + } + err = opts.collectForAllDBPods() if err != nil { log.Fatal(err) @@ -107,6 +114,11 @@ func newPostgresOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (* return nil, err } + psClient, err := ps.NewForConfig(config) + if err != nil { + return nil, err + } + podClient, err := kubernetes.NewForConfig(config) if err != nil { return nil, err @@ -131,6 +143,7 @@ func newPostgresOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (* opts := &postgresOpts{ db: db, dbClient: dbClient, + psClient: psClient, podClient: podClient, operatorNamespace: operatorNS, dir: dir, @@ -161,6 +174,31 @@ func (opts *postgresOpts) collectOperatorLogs() error { return nil } +func (opts *postgresOpts) collectForAllDBPetSets() error { + psLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() + petsets, err := opts.psClient.AppsV1().PetSets(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ + LabelSelector: psLabels, + }) + if err != nil { + return err + } + + psYamlDir := path.Join(opts.dir, yamlsDir, "petsets") + err = os.MkdirAll(psYamlDir, dirPerm) + if err != nil { + return err + } + + for _, p := range petsets.Items { + err = writeYaml(&p, psYamlDir) + if err != nil { + return err + } + + } + return nil +} + func (opts *postgresOpts) collectForAllDBPods() error { dbLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() pods, err := opts.podClient.CoreV1().Pods(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ diff --git a/pkg/debug/redis.go b/pkg/debug/redis.go index 2ea6361e1..d2adc12bb 100644 --- a/pkg/debug/redis.go +++ b/pkg/debug/redis.go @@ -34,11 +34,13 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth" "k8s.io/klog/v2" cmdutil "k8s.io/kubectl/pkg/cmd/util" + ps "kubeops.dev/petset/client/clientset/versioned" ) type redisOpts struct { db *dbapi.Redis dbClient *cs.Clientset + psClient *ps.Clientset podClient *kubernetes.Clientset operatorNamespace string @@ -80,6 +82,11 @@ func RedisDebugCMD(f cmdutil.Factory) *cobra.Command { log.Fatal(err) } + err = opts.collectForAllDBPetSets() + if err != nil { + log.Fatal(err) + } + err = opts.collectForAllDBPods() if err != nil { log.Fatal(err) @@ -107,6 +114,11 @@ func newRedisOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*red return nil, err } + psClient, err := ps.NewForConfig(config) + if err != nil { + return nil, err + } + podClient, err := kubernetes.NewForConfig(config) if err != nil { return nil, err @@ -131,6 +143,7 @@ func newRedisOpts(f cmdutil.Factory, dbName, namespace, operatorNS string) (*red opts := &redisOpts{ db: db, dbClient: dbClient, + psClient: psClient, podClient: podClient, operatorNamespace: operatorNS, dir: dir, @@ -161,6 +174,31 @@ func (opts *redisOpts) collectOperatorLogs() error { return nil } +func (opts *redisOpts) collectForAllDBPetSets() error { + psLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() + petsets, err := opts.psClient.AppsV1().PetSets(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ + LabelSelector: psLabels, + }) + if err != nil { + return err + } + + psYamlDir := path.Join(opts.dir, yamlsDir, "petsets") + err = os.MkdirAll(psYamlDir, dirPerm) + if err != nil { + return err + } + + for _, p := range petsets.Items { + err = writeYaml(&p, psYamlDir) + if err != nil { + return err + } + + } + return nil +} + func (opts *redisOpts) collectForAllDBPods() error { dbLabels := labels.SelectorFromSet(opts.db.OffshootLabels()).String() pods, err := opts.podClient.CoreV1().Pods(opts.db.Namespace).List(context.TODO(), metav1.ListOptions{ diff --git a/vendor/kubeops.dev/petset/client/clientset/versioned/clientset.go b/vendor/kubeops.dev/petset/client/clientset/versioned/clientset.go new file mode 100644 index 000000000..b6b66f75d --- /dev/null +++ b/vendor/kubeops.dev/petset/client/clientset/versioned/clientset.go @@ -0,0 +1,121 @@ +/* +Copyright AppsCode Inc. and Contributors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + "net/http" + + appsv1 "kubeops.dev/petset/client/clientset/versioned/typed/apps/v1" + + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + AppsV1() appsv1.AppsV1Interface +} + +// Clientset contains the clients for groups. +type Clientset struct { + *discovery.DiscoveryClient + appsV1 *appsv1.AppsV1Client +} + +// AppsV1 retrieves the AppsV1Client +func (c *Clientset) AppsV1() appsv1.AppsV1Interface { + return c.appsV1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + + // share the transport between all clients + httpClient, err := rest.HTTPClientFor(&configShallowCopy) + if err != nil { + return nil, err + } + + return NewForConfigAndClient(&configShallowCopy, httpClient) +} + +// NewForConfigAndClient creates a new Clientset for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfigAndClient will generate a rate-limiter in configShallowCopy. +func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + + var cs Clientset + var err error + cs.appsV1, err = appsv1.NewForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + cs, err := NewForConfig(c) + if err != nil { + panic(err) + } + return cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.appsV1 = appsv1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/modules.txt b/vendor/modules.txt index ad66ebaa0..d6e1e86eb 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1570,6 +1570,7 @@ kubeops.dev/csi-driver-cacerts/crds # kubeops.dev/petset v0.0.7 ## explicit; go 1.22.1 kubeops.dev/petset/apis/apps/v1 +kubeops.dev/petset/client/clientset/versioned kubeops.dev/petset/client/clientset/versioned/scheme kubeops.dev/petset/client/clientset/versioned/typed/apps/v1 kubeops.dev/petset/client/listers/apps/v1