Skip to content

Commit 9a883c9

Browse files
[CLOUDP-332196] Move kubectl-mongodb plugin to cmd dir for atomic releases (#271)
# Summary In the efforts towards atomic releases this PR tries to move the `kubectl-mongodb` plugin code from the directory `public/tools/multicluster` to the root of the project `cmd/`. This is to align the project with how other Go based projects are structured. Apart from that this PR also moves the `.goreleaser.yaml` for the `kubectl-mongodb` plugin from `public/tools/multicluster/.goreleaser.yaml` directory to the root of the repo. This is also done in order to align how `.goreleaser.yaml` is kept in other Go based opensource projects. This PR also moves the evergreen file that releases `kubectl-mongodb` plugin from the location `public/.evergreen.yml` to the root of the repo and is renamed to `.evergreen-kubectlplugin.yml`. This is to make sure the evergreen files are kept at the same location, i.e. the root of the repo. ### Note on LICENSE-THIRD-PARTY The licenses that are used by the third party go libraries that we use in our kubectl plugin, are documented in public docs at [this link](https://www.mongodb.com/docs/mongocli/current/third-party-licenses/). When we generated the file (`LICENSE-THIRD-PARTY`) after moving the kubectl-mongodb code to `cmd/` directory, we can only see a new package added, that is `sigs.k8s.io/yaml/goyaml` this seems to be part of the module `sigs.k8s.io/yaml` which was already part of the `LICENSE-THIRD-PARTY`, that's why we don't need to re-publish the docs for third party licenses. To generate the `LICENSE-THIRD-PARTY`, `make precommit` can be run after setting env var `export MDB_UPDATE_LICENSES=true`. This PR also fixes https://jira.mongodb.org/browse/CLOUDP-332234 ## Proof of Work Run goreleaser command locally and verify the binaries that are generated in the `dist` directory that they output the correct subcommands. ``` ~/work/opensource/mongodb-kubernetes/dist/kubectl-mongodb_darwin_arm64_v8.0 (mongodb-kubectlplugin-refactor*) » ./kubectl-mongodb This application is a tool to simplify maintenance tasks of MongoDB resources in your kubernetes cluster. Build: 1cd782d97de76ed25d6170a1d0aaa50382022c08, 2025-07-17T12:10:32Z Usage: kubectl-mongodb [command] Available Commands: completion Generate the autocompletion script for the specified shell debug Downloads all resources required for debugging and stores them into the disk help Help about any command multicluster Manage MongoDB multicluster environments on k8s Flags: -h, --help help for kubectl-mongodb Use "kubectl-mongodb [command] --help" for more information about a command. ``` **Testing via evergreen:** Since we are experiencing [some issues](https://mongodb.slack.com/archives/CGLP6R2PQ/p1752765888938289) while testing the entire release process I am planning to merge this PR to master and then would test the release from master. Jira: https://jira.mongodb.org/browse/CLOUDP-332196 ## Checklist - [x] Have you linked a jira ticket and/or is the ticket in the title? - [x] Have you checked whether your jira ticket required DOCSP changes? - [x] Have you checked for release_note changes?
1 parent c9b30be commit 9a883c9

32 files changed

+233
-159
lines changed

public/.evergreen.yml renamed to .evergreen-kubectlplugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ functions:
4545
- command: shell.exec
4646
type: setup
4747
params:
48-
working_dir: src/github.com/mongodb/mongodb-kubernetes/public/tools/multicluster
48+
working_dir: src/github.com/mongodb/mongodb-kubernetes
4949
include_expansions_in_env:
5050
- GRS_USERNAME
5151
- GRS_PASSWORD

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,6 @@ logs-debug/
9494

9595
docs/**/log/*
9696
docs/**/test.sh.run.log
97+
98+
# goreleaser generated files
99+
dist

public/tools/multicluster/.goreleaser.yaml renamed to .goreleaser.yaml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ before:
77
builds:
88
- env:
99
- CGO_ENABLED=0
10+
main: ./cmd/kubectl-mongodb
1011
goos:
1112
- linux
1213
- darwin
@@ -16,9 +17,9 @@ builds:
1617
hooks:
1718
# This will notarize Apple binaries and replace goreleaser bins with the notarized ones
1819
post:
19-
- cmd: ./kubectl_mac_notarize.sh
20+
- cmd: ./scripts/release/kubectl-mongodb/kubectl_mac_notarize.sh
2021
output: true
21-
- cmd: ./sign.sh {{ .Path }}
22+
- cmd: ./scripts/release/kubectl-mongodb/sign.sh {{ .Path }}
2223
env:
2324
- GRS_USERNAME={{ .Env.GRS_USERNAME }}
2425
- GRS_PASSWORD={{ .Env.GRS_PASSWORD }}
@@ -27,7 +28,7 @@ builds:
2728
- SIGNING_IMAGE_URI={{ .Env.SIGNING_IMAGE_URI }}
2829
- ARTIFACTORY_USERNAME=mongodb-enterprise-kubernetes-operator
2930
- ARTIFACTORY_PASSWORD={{ .Env.ARTIFACTORY_PASSWORD }}
30-
- cmd: ./verify.sh {{ .Path }} && echo "VERIFIED OK"
31+
- cmd: ./scripts/release/kubectl-mongodb/verify.sh {{ .Path }} && echo "VERIFIED OK"
3132

3233
archives:
3334
- format: tar.gz
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
2+
github.com/davecgh/go-spew/spew,v1.1.1,https://github.com/davecgh/go-spew/blob/v1.1.1/LICENSE,ISC
3+
github.com/emicklei/go-restful/v3,v3.11.0,https://github.com/emicklei/go-restful/blob/v3.11.0/LICENSE,MIT
4+
github.com/ghodss/yaml,v1.0.0,https://github.com/ghodss/yaml/blob/v1.0.0/LICENSE,MIT
5+
github.com/go-logr/logr,v1.4.2,https://github.com/go-logr/logr/blob/v1.4.2/LICENSE,Apache-2.0
6+
github.com/go-openapi/jsonpointer,v0.19.6,https://github.com/go-openapi/jsonpointer/blob/v0.19.6/LICENSE,Apache-2.0
7+
github.com/go-openapi/jsonreference,v0.20.2,https://github.com/go-openapi/jsonreference/blob/v0.20.2/LICENSE,Apache-2.0
8+
github.com/go-openapi/swag,v0.22.3,https://github.com/go-openapi/swag/blob/v0.22.3/LICENSE,Apache-2.0
9+
github.com/gogo/protobuf,v1.3.2,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
10+
github.com/golang/protobuf,v1.5.4,https://github.com/golang/protobuf/blob/v1.5.4/LICENSE,BSD-3-Clause
11+
github.com/google/gnostic-models,v0.6.8,https://github.com/google/gnostic-models/blob/v0.6.8/LICENSE,Apache-2.0
12+
github.com/google/gofuzz,v1.2.0,https://github.com/google/gofuzz/blob/v1.2.0/LICENSE,Apache-2.0
13+
github.com/google/uuid,v1.6.0,https://github.com/google/uuid/blob/v1.6.0/LICENSE,BSD-3-Clause
14+
github.com/gorilla/websocket,v1.5.0,https://github.com/gorilla/websocket/blob/v1.5.0/LICENSE,BSD-2-Clause
15+
github.com/imdario/mergo,v0.3.15,https://github.com/imdario/mergo/blob/v0.3.15/LICENSE,BSD-3-Clause
16+
github.com/josharian/intern,v1.0.0,https://github.com/josharian/intern/blob/v1.0.0/license.md,MIT
17+
github.com/json-iterator/go,v1.1.12,https://github.com/json-iterator/go/blob/v1.1.12/LICENSE,MIT
18+
github.com/mailru/easyjson,v0.7.7,https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE,MIT
19+
github.com/moby/spdystream,v0.2.0,https://github.com/moby/spdystream/blob/v0.2.0/LICENSE,Apache-2.0
20+
github.com/modern-go/concurrent,v0.0.0-20180306012644-bacd9c7ef1dd,https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE,Apache-2.0
21+
github.com/modern-go/reflect2,v1.0.2,https://github.com/modern-go/reflect2/blob/v1.0.2/LICENSE,Apache-2.0
22+
github.com/munnerz/goautoneg,v0.0.0-20191010083416-a7dc8b61c822,https://github.com/munnerz/goautoneg/blob/a7dc8b61c822/LICENSE,BSD-3-Clause
23+
github.com/mxk/go-flowrate/flowrate,v0.0.0-20140419014527-cca7078d478f,https://github.com/mxk/go-flowrate/blob/cca7078d478f/LICENSE,BSD-3-Clause
24+
github.com/spf13/cobra,v1.7.0,https://github.com/spf13/cobra/blob/v1.7.0/LICENSE.txt,Apache-2.0
25+
github.com/spf13/pflag,v1.0.5,https://github.com/spf13/pflag/blob/v1.0.5/LICENSE,BSD-3-Clause
26+
google.golang.org/protobuf,v1.36.5,https://github.com/protocolbuffers/protobuf-go/blob/v1.36.5/LICENSE,BSD-3-Clause
27+
gopkg.in/inf.v0,v0.9.1,https://github.com/go-inf/inf/blob/v0.9.1/LICENSE,BSD-3-Clause
28+
gopkg.in/yaml.v2,v2.4.0,https://github.com/go-yaml/yaml/blob/v2.4.0/LICENSE,Apache-2.0
29+
gopkg.in/yaml.v3,v3.0.1,https://github.com/go-yaml/yaml/blob/v3.0.1/LICENSE,MIT
30+
k8s.io/api,v0.30.10,https://github.com/kubernetes/api/blob/v0.30.10/LICENSE,Apache-2.0
31+
k8s.io/apimachinery/pkg,v0.30.10,https://github.com/kubernetes/apimachinery/blob/v0.30.10/LICENSE,Apache-2.0
32+
k8s.io/apimachinery/third_party/forked/golang,v0.30.10,https://github.com/kubernetes/apimachinery/blob/v0.30.10/third_party/forked/golang/LICENSE,BSD-3-Clause
33+
k8s.io/client-go,v0.30.10,https://github.com/kubernetes/client-go/blob/v0.30.10/LICENSE,Apache-2.0
34+
k8s.io/klog/v2,v2.130.1,https://github.com/kubernetes/klog/blob/v2.130.1/LICENSE,Apache-2.0
35+
k8s.io/kube-openapi/pkg,v0.0.0-20240228011516-70dd3763d340,https://github.com/kubernetes/kube-openapi/blob/70dd3763d340/LICENSE,Apache-2.0
36+
k8s.io/kube-openapi/pkg/internal/third_party/go-json-experiment/json,v0.0.0-20240228011516-70dd3763d340,https://github.com/kubernetes/kube-openapi/blob/70dd3763d340/pkg/internal/third_party/go-json-experiment/json/LICENSE,BSD-3-Clause
37+
k8s.io/kube-openapi/pkg/validation/spec,v0.0.0-20240228011516-70dd3763d340,https://github.com/kubernetes/kube-openapi/blob/70dd3763d340/pkg/validation/spec/LICENSE,Apache-2.0
38+
k8s.io/utils,v0.0.0-20240502163921-fe8a2dddb1d0,https://github.com/kubernetes/utils/blob/fe8a2dddb1d0/LICENSE,Apache-2.0
39+
k8s.io/utils/internal/third_party/forked/golang/net,v0.0.0-20240502163921-fe8a2dddb1d0,https://github.com/kubernetes/utils/blob/fe8a2dddb1d0/internal/third_party/forked/golang/LICENSE,BSD-3-Clause
40+
sigs.k8s.io/json,v0.0.0-20221116044647-bc3834ca7abd,https://github.com/kubernetes-sigs/json/blob/bc3834ca7abd/LICENSE,Apache-2.0
41+
sigs.k8s.io/structured-merge-diff/v4,v4.4.1,https://github.com/kubernetes-sigs/structured-merge-diff/blob/v4.4.1/LICENSE,Apache-2.0
42+
sigs.k8s.io/yaml,v1.4.0,https://github.com/kubernetes-sigs/yaml/blob/v1.4.0/LICENSE,Apache-2.0
43+
sigs.k8s.io/yaml/goyaml.v2,v1.4.0,https://github.com/kubernetes-sigs/yaml/blob/v1.4.0/goyaml.v2/LICENSE,Apache-2.0

public/tools/multicluster/cmd/debug.go renamed to cmd/kubectl-mongodb/debug/debug.go

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
package cmd
1+
package debug
22

33
import (
44
"fmt"
55
"os"
66
"strings"
77

8+
"github.com/spf13/cobra"
89
"k8s.io/client-go/tools/clientcmd"
910

10-
"github.com/mongodb/mongodb-kubernetes/multi/pkg/common"
11-
"github.com/mongodb/mongodb-kubernetes/multi/pkg/debug"
12-
"github.com/spf13/cobra"
11+
"github.com/mongodb/mongodb-kubernetes/pkg/kubectl-mongodb/common"
12+
"github.com/mongodb/mongodb-kubernetes/pkg/kubectl-mongodb/debug"
1313
)
1414

1515
type Flags struct {
@@ -39,18 +39,16 @@ func (f *Flags) ParseDebugFlags() error {
3939
var debugFlags = &Flags{}
4040

4141
func init() {
42-
rootCmd.AddCommand(debugCmd)
43-
44-
debugCmd.Flags().StringVar(&common.MemberClusters, "member-clusters", "", "Comma separated list of member clusters. [optional]")
45-
debugCmd.Flags().StringVar(&debugFlags.CentralCluster, "central-cluster", "", "The central cluster the operator will be deployed in. [optional]")
46-
debugCmd.Flags().StringVar(&debugFlags.MemberClusterNamespace, "member-cluster-namespace", "", "The namespace the member cluster resources will be deployed to. [optional]")
47-
debugCmd.Flags().StringVar(&debugFlags.CentralClusterNamespace, "central-cluster-namespace", "", "The namespace the Operator will be deployed to. [optional]")
48-
debugCmd.Flags().StringVar(&common.MemberClustersApiServers, "member-clusters-api-servers", "", "Comma separated list of api servers addresses. [optional, default will take addresses from KUBECONFIG env var]")
49-
debugCmd.Flags().BoolVar(&debugFlags.Anonymize, "anonymize", true, "True if anonymization should be turned on")
50-
debugCmd.Flags().BoolVar(&debugFlags.UseOwnerRef, "ownerRef", false, "True if the collection should be made with owner references (consider turning it on after CLOUDP-176772 is fixed)")
42+
DebugCmd.Flags().StringVar(&common.MemberClusters, "member-clusters", "", "Comma separated list of member clusters. [optional]")
43+
DebugCmd.Flags().StringVar(&debugFlags.CentralCluster, "central-cluster", "", "The central cluster the operator will be deployed in. [optional]")
44+
DebugCmd.Flags().StringVar(&debugFlags.MemberClusterNamespace, "member-cluster-namespace", "", "The namespace the member cluster resources will be deployed to. [optional]")
45+
DebugCmd.Flags().StringVar(&debugFlags.CentralClusterNamespace, "central-cluster-namespace", "", "The namespace the Operator will be deployed to. [optional]")
46+
DebugCmd.Flags().StringVar(&common.MemberClustersApiServers, "member-clusters-api-servers", "", "Comma separated list of api servers addresses. [optional, default will take addresses from KUBECONFIG env var]")
47+
DebugCmd.Flags().BoolVar(&debugFlags.Anonymize, "anonymize", true, "True if anonymization should be turned on")
48+
DebugCmd.Flags().BoolVar(&debugFlags.UseOwnerRef, "ownerRef", false, "True if the collection should be made with owner references (consider turning it on after CLOUDP-176772 is fixed)")
5149
}
5250

53-
var debugCmd = &cobra.Command{
51+
var DebugCmd = &cobra.Command{
5452
Use: "debug",
5553
Short: "Downloads all resources required for debugging and stores them into the disk",
5654
Long: `'debug' downloads all resources required for debugging and stores them into the disk.

cmd/kubectl-mongodb/main.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package main
2+
3+
import (
4+
"context"
5+
6+
"github.com/mongodb/mongodb-kubernetes/cmd/kubectl-mongodb/root"
7+
)
8+
9+
func main() {
10+
ctx := context.Background()
11+
root.Execute(ctx)
12+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package multicluster
2+
3+
import (
4+
"github.com/spf13/cobra"
5+
6+
"github.com/mongodb/mongodb-kubernetes/cmd/kubectl-mongodb/multicluster/recover"
7+
"github.com/mongodb/mongodb-kubernetes/cmd/kubectl-mongodb/multicluster/setup"
8+
)
9+
10+
// MulticlusterCmd represents the multicluster command
11+
var MulticlusterCmd = &cobra.Command{
12+
Use: "multicluster",
13+
Short: "Manage MongoDB multicluster environments on k8s",
14+
Long: `'multicluster' is the toplevel command for managing
15+
multicluster environments that hold MongoDB resources.`,
16+
}
17+
18+
func init() {
19+
MulticlusterCmd.AddCommand(setup.SetupCmd)
20+
MulticlusterCmd.AddCommand(recover.RecoverCmd)
21+
}

public/tools/multicluster/cmd/recover.go renamed to cmd/kubectl-mongodb/multicluster/recover/recover.go

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,35 @@
1-
package cmd
1+
package recover
22

33
import (
44
"fmt"
55
"os"
66
"slices"
77
"strings"
88

9-
"github.com/mongodb/mongodb-kubernetes/multi/pkg/common"
10-
119
"github.com/spf13/cobra"
1210
"golang.org/x/xerrors"
1311
"k8s.io/client-go/tools/clientcmd"
12+
13+
"github.com/mongodb/mongodb-kubernetes/pkg/kubectl-mongodb/common"
1414
)
1515

1616
func init() {
17-
multiclusterCmd.AddCommand(recoverCmd)
18-
19-
recoverCmd.Flags().StringVar(&common.MemberClusters, "member-clusters", "", "Comma separated list of member clusters. [required]")
20-
recoverCmd.Flags().StringVar(&RecoverFlags.ServiceAccount, "service-account", "mongodb-kubernetes-operator-multi-cluster", "Name of the service account which should be used for the Operator to communicate with the member clusters. [optional, default: mongodb-kubernetes-operator-multi-cluster]")
21-
recoverCmd.Flags().StringVar(&RecoverFlags.CentralCluster, "central-cluster", "", "The central cluster the operator will be deployed in. [required]")
22-
recoverCmd.Flags().StringVar(&RecoverFlags.MemberClusterNamespace, "member-cluster-namespace", "", "The namespace the member cluster resources will be deployed to. [required]")
23-
recoverCmd.Flags().StringVar(&RecoverFlags.CentralClusterNamespace, "central-cluster-namespace", "", "The namespace the Operator will be deployed to. [required]")
24-
recoverCmd.Flags().BoolVar(&RecoverFlags.Cleanup, "cleanup", false, "Delete all previously created resources except for namespaces. [optional default: false]")
25-
recoverCmd.Flags().BoolVar(&RecoverFlags.ClusterScoped, "cluster-scoped", false, "Create ClusterRole and ClusterRoleBindings for member clusters. [optional default: false]")
26-
recoverCmd.Flags().StringVar(&RecoverFlags.OperatorName, "operator-name", common.DefaultOperatorName, "Name used to identify the deployment of the operator. [optional, default: mongodb-kubernetes-operator]")
27-
recoverCmd.Flags().BoolVar(&RecoverFlags.InstallDatabaseRoles, "install-database-roles", false, "Install the ServiceAccounts and Roles required for running database workloads in the member clusters. [optional default: false]")
28-
recoverCmd.Flags().StringVar(&RecoverFlags.SourceCluster, "source-cluster", "", "The source cluster for recovery. This has to be one of the healthy member cluster that is the source of truth for new cluster configuration. [required]")
29-
recoverCmd.Flags().BoolVar(&RecoverFlags.CreateServiceAccountSecrets, "create-service-account-secrets", true, "Create service account token secrets. [optional default: true]")
30-
recoverCmd.Flags().StringVar(&common.MemberClustersApiServers, "member-clusters-api-servers", "", "Comma separated list of api servers addresses. [optional, default will take addresses from KUBECONFIG env var]")
17+
RecoverCmd.Flags().StringVar(&common.MemberClusters, "member-clusters", "", "Comma separated list of member clusters. [required]")
18+
RecoverCmd.Flags().StringVar(&RecoverFlags.ServiceAccount, "service-account", "mongodb-kubernetes-operator-multi-cluster", "Name of the service account which should be used for the Operator to communicate with the member clusters. [optional, default: mongodb-kubernetes-operator-multi-cluster]")
19+
RecoverCmd.Flags().StringVar(&RecoverFlags.CentralCluster, "central-cluster", "", "The central cluster the operator will be deployed in. [required]")
20+
RecoverCmd.Flags().StringVar(&RecoverFlags.MemberClusterNamespace, "member-cluster-namespace", "", "The namespace the member cluster resources will be deployed to. [required]")
21+
RecoverCmd.Flags().StringVar(&RecoverFlags.CentralClusterNamespace, "central-cluster-namespace", "", "The namespace the Operator will be deployed to. [required]")
22+
RecoverCmd.Flags().BoolVar(&RecoverFlags.Cleanup, "cleanup", false, "Delete all previously created resources except for namespaces. [optional default: false]")
23+
RecoverCmd.Flags().BoolVar(&RecoverFlags.ClusterScoped, "cluster-scoped", false, "Create ClusterRole and ClusterRoleBindings for member clusters. [optional default: false]")
24+
RecoverCmd.Flags().StringVar(&RecoverFlags.OperatorName, "operator-name", common.DefaultOperatorName, "Name used to identify the deployment of the operator. [optional, default: mongodb-kubernetes-operator]")
25+
RecoverCmd.Flags().BoolVar(&RecoverFlags.InstallDatabaseRoles, "install-database-roles", false, "Install the ServiceAccounts and Roles required for running database workloads in the member clusters. [optional default: false]")
26+
RecoverCmd.Flags().StringVar(&RecoverFlags.SourceCluster, "source-cluster", "", "The source cluster for recovery. This has to be one of the healthy member cluster that is the source of truth for new cluster configuration. [required]")
27+
RecoverCmd.Flags().BoolVar(&RecoverFlags.CreateServiceAccountSecrets, "create-service-account-secrets", true, "Create service account token secrets. [optional default: true]")
28+
RecoverCmd.Flags().StringVar(&common.MemberClustersApiServers, "member-clusters-api-servers", "", "Comma separated list of api servers addresses. [optional, default will take addresses from KUBECONFIG env var]")
3129
}
3230

33-
// recoverCmd represents the recover command
34-
var recoverCmd = &cobra.Command{
31+
// RecoverCmd represents the recover command
32+
var RecoverCmd = &cobra.Command{
3533
Use: "recover",
3634
Short: "Recover the multicluster environment for MongoDB resources after a dataplane failure",
3735
Long: `'recover' re-configures a failed multicluster environment to a enable the shuffling of dataplane

0 commit comments

Comments
 (0)