diff --git a/.evergreen-functions.yml b/.evergreen-functions.yml index 5c7636210..9483c3c82 100644 --- a/.evergreen-functions.yml +++ b/.evergreen-functions.yml @@ -831,7 +831,7 @@ functions: working_dir: src/github.com/mongodb/mongodb-kubernetes binary: scripts/code_snippets/sample_commit_output.sh - # it executes a script by convention: ./scripts/code_snippets/${task_name}_test.sh + # it executes a script by convention: ./scripts/code_snippets/tests/${task_name} test_code_snippets: - *switch_context - command: shell.exec @@ -844,4 +844,4 @@ functions: - code_snippets_reset - task_name script: | - ./scripts/code_snippets/${task_name}_test.sh + ./scripts/code_snippets/tests/${task_name} diff --git a/.evergreen-snippets.yml b/.evergreen-snippets.yml new file mode 100644 index 000000000..2acaa2e0d --- /dev/null +++ b/.evergreen-snippets.yml @@ -0,0 +1,153 @@ +variables: + - &setup_and_teardown_group_gke_code_snippets + setup_task_can_fail_task: true + setup_group: + - func: clone + - func: setup_gcloud_cli + - func: setup_mongosh + - func: download_kube_tools + - func: build_multi_cluster_binary + teardown_task: + - func: upload_e2e_logs + - func: upload_code_snippets_logs + + - &setup_and_teardown_group_kind_code_snippets + setup_task_can_fail_task: true + setup_group_can_fail_task: true + setup_group: + - func: clone + - func: cleanup_exec_environment + - func: download_kube_tools + - func: configure_docker_auth + - func: setup_kubernetes_environment + - func: python_venv + - func: setup_cloud_qa + teardown_task: + - func: upload_e2e_logs + - func: upload_code_snippets_logs + - func: teardown_kubernetes_environment + - func: teardown_cloud_qa + +# This variable is copied over from .evergreen.yml because anchors don't work for included files + - &base_om8_dependency + depends_on: + - name: build_om_images + variant: build_om80_images + - name: build_operator_ubi + variant: init_test_run + - name: build_init_database_image_ubi + variant: init_test_run + - name: build_database_image_ubi + variant: init_test_run + - name: build_test_image + variant: init_test_run + - name: build_init_appdb_images_ubi + variant: init_test_run + - name: build_init_om_images_ubi + variant: init_test_run + - name: build_agent_images_ubi + variant: init_test_run + +tasks: + # Code snippets tasks + # Each scripts/code_snippets/tests/test_*.sh should have its task defined here. + # TODO: it should be autogenerated + # Each task executes test_code_snippets functon executes scripts/code_snippets/tests/${task_name} by task name convention + - name: test_gke_multi_cluster_snippets.sh + tags: [ "code_snippets" ] + commands: + - func: test_code_snippets + - func: sample_commit_output + + - name: test_gke_multi_cluster_no_mesh_snippets.sh + tags: [ "code_snippets" ] + commands: + - func: test_code_snippets + - func: sample_commit_output + + - name: test_kind_search_community_snippets.sh + tags: [ "code_snippets", "patch-run" ] + commands: + - func: test_code_snippets + - func: sample_commit_output + + - name: test_kind_search_enterprise_snippets.sh + tags: [ "code_snippets", "patch-run" ] + commands: + - func: test_code_snippets + - func: sample_commit_output + +task_groups: + - name: gke_code_snippets_task_group + <<: *setup_and_teardown_group_gke_code_snippets + max_hosts: -1 + tasks: + - test_gke_multi_cluster_snippets.sh + - test_gke_multi_cluster_no_mesh_snippets.sh + + - name: kind_code_snippets_task_group + <<: *setup_and_teardown_group_kind_code_snippets + max_hosts: -1 + tasks: + - test_kind_search_community_snippets.sh + - test_kind_search_enterprise_snippets.sh + +buildvariants: + # These variants are used to test the code snippets and each one can be used in patches + # Prerelease is especially used when the repo is tagged + # More details in the TD: https://docs.google.com/document/d/1fuTxfRtP8QPtn7sKYxQM_AGcD6xycTZH8svngGxyKhc/edit?tab=t.0#bookmark=id.e8uva0393mbe + - name: public_gke_code_snippets + display_name: public_gke_code_snippets + allowed_requesters: [ "patch" ] + run_on: + - ubuntu2204-small + tasks: + - name: gke_code_snippets_task_group + + - name: prerelease_gke_code_snippets + display_name: prerelease_gke_code_snippets + tags: [ "release" ] + allowed_requesters: [ "patch", "github_tag" ] + depends_on: + - variant: release_images + name: '*' + patch_optional: true + run_on: + - ubuntu2204-small + tasks: + - name: gke_code_snippets_task_group + + - name: private_gke_code_snippets + display_name: private_gke_code_snippets + allowed_requesters: [ "patch" ] + run_on: + - ubuntu2204-small + <<: *base_om8_dependency + tasks: + - name: gke_code_snippets_task_group + + - name: private_kind_code_snippets + display_name: private_kind_code_snippets + tags: [ "e2e_test_suite" ] + allowed_requesters: [ "patch", "github_pr" ] + run_on: + - ubuntu2204-large + <<: *base_om8_dependency + tasks: + - name: kind_code_snippets_task_group + + - name: prerelease_kind_code_snippets + display_name: prerelease_kind_code_snippets + allowed_requesters: [ "patch" ] + run_on: + - ubuntu2204-large + tasks: + - name: kind_code_snippets_task_group + + - name: public_kind_code_snippets + display_name: public_kind_code_snippets + allowed_requesters: [ "patch" ] + run_on: + - ubuntu2204-large + tasks: + - name: kind_code_snippets_task_group diff --git a/.evergreen-tasks.yml b/.evergreen-tasks.yml index 01305de88..644d2d451 100644 --- a/.evergreen-tasks.yml +++ b/.evergreen-tasks.yml @@ -84,7 +84,13 @@ tasks: - func: test_code_snippets - func: sample_commit_output - - name: task_kind_community_search_snippets + - name: task_kind_search_community_snippets + tags: [ "code_snippets", "patch-run" ] + commands: + - func: test_code_snippets + - func: sample_commit_output + + - name: task_kind_search_enterprise_snippets tags: [ "code_snippets", "patch-run" ] commands: - func: test_code_snippets @@ -1300,3 +1306,9 @@ tasks: tags: [ "patch-run" ] commands: - func: "e2e_test" + + - name: e2e_search_enterprise_basic + tags: [ "patch-run" ] + commands: + - func: "e2e_test" + diff --git a/.evergreen.yml b/.evergreen.yml index 2ad77df72..465007d1a 100644 --- a/.evergreen.yml +++ b/.evergreen.yml @@ -5,6 +5,7 @@ include: - filename: .evergreen-functions.yml - filename: .evergreen-tasks.yml - filename: .evergreen-mco.yml + - filename: .evergreen-snippets.yml variables: - &ops_manager_60_latest 6.0.27 # The order/index is important, since these are anchors. Please do not change @@ -86,29 +87,6 @@ variables: - func: setup_building_host - func: build_multi_cluster_binary - - &setup_and_teardown_group_gke_code_snippets - setup_task_can_fail_task: true - setup_group: - - func: clone - - func: setup_gcloud_cli - - func: setup_mongosh - - func: download_kube_tools - - func: build_multi_cluster_binary - teardown_group: - - func: upload_code_snippets_logs - - - &setup_and_teardown_group_kind_code_snippets - setup_task_can_fail_task: true - setup_group: - - func: clone - - func: cleanup_exec_environment - - func: download_kube_tools - - func: configure_docker_auth - - func: setup_kubernetes_environment - teardown_task: - - func: upload_e2e_logs - - func: upload_code_snippets_logs - - &setup_and_teardown_task_cloudqa setup_task_can_fail_task: true setup_task: @@ -172,6 +150,7 @@ variables: - name: build_init_om_images_ubi variant: init_test_run + # Any change to base_om8_dependency should be reflected to its copy in .evergreen-snippets.yml - &base_om8_dependency depends_on: - name: build_om_images @@ -667,19 +646,6 @@ task_groups: - unit_tests_python - sbom_tests - - name: gke_code_snippets_task_group - <<: *setup_and_teardown_group_gke_code_snippets - max_hosts: -1 - tasks: - - task_gke_multi_cluster_snippets - - task_gke_multi_cluster_no_mesh_snippets - - - name: kind_code_snippets_task_group - <<: *setup_and_teardown_group_kind_code_snippets - max_hosts: -1 - tasks: - - task_kind_community_search_snippets - # Task group for deploying mongodbcommunity resources and testing the (former) MCO - name: e2e_mdb_community_task_group max_hosts: -1 @@ -815,6 +781,8 @@ task_groups: - e2e_replica_set_oidc_workforce - e2e_sharded_cluster_oidc_m2m_group - e2e_sharded_cluster_oidc_m2m_user + # MongoDBSearch test group + - e2e_search_enterprise_basic <<: *teardown_group # this task group contains just a one task, which is smoke testing whether the operator @@ -1997,65 +1965,6 @@ buildvariants: tasks: - name: release_all_currently_used_agents_on_ecr - # These variants are used to test the code snippets and each one can be used in patches - # Prerelease is especially used when the repo is tagged - # More details in the TD: https://docs.google.com/document/d/1fuTxfRtP8QPtn7sKYxQM_AGcD6xycTZH8svngGxyKhc/edit?tab=t.0#bookmark=id.e8uva0393mbe - - name: public_gke_code_snippets - display_name: public_gke_code_snippets - allowed_requesters: ["patch"] - run_on: - - ubuntu2204-small - tasks: - - name: gke_code_snippets_task_group - - - name: prerelease_gke_code_snippets - display_name: prerelease_gke_code_snippets - tags: [ "release" ] - allowed_requesters: ["patch", "github_tag"] - depends_on: - - variant: release_images - name: '*' - patch_optional: true - run_on: - - ubuntu2204-small - tasks: - - name: gke_code_snippets_task_group - - - name: private_gke_code_snippets - display_name: private_gke_code_snippets - allowed_requesters: ["patch"] - run_on: - - ubuntu2204-small - <<: *base_om8_dependency - tasks: - - name: gke_code_snippets_task_group - - - name: private_kind_code_snippets - display_name: private_kind_code_snippets - tags: [ "e2e_test_suite" ] - allowed_requesters: ["patch", "github_pr"] - run_on: - - ubuntu2204-large - <<: *base_om8_dependency - tasks: - - name: kind_code_snippets_task_group - - - name: prerelease_kind_code_snippets - display_name: prerelease_kind_code_snippets - allowed_requesters: ["patch"] - run_on: - - ubuntu2204-large - tasks: - - name: kind_code_snippets_task_group - - - name: public_kind_code_snippets - display_name: public_kind_code_snippets - allowed_requesters: ["patch"] - run_on: - - ubuntu2204-large - tasks: - - name: kind_code_snippets_task_group - ### Build variants for manual patch only - name: backup_csv_images diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 681e2e229..e885c25f5 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -163,6 +163,10 @@ lint_code() { scripts/evergreen/lint_code.sh } +function validate_snippets() { + scripts/code_snippets/validate_snippets.py +} + # bg_job_ vars are global; run_job_in_background function is appending to them on each call bg_job_pids=() bg_job_pids_with_names=() @@ -217,6 +221,7 @@ pre_commit() { run_job_in_background "regenerate_public_rbac_multi_cluster" run_job_in_background "python_formatting" run_job_in_background "check_erroneous_kubebuilder_annotations" + run_job_in_background "validate_snippets" if wait_for_all_background_jobs; then echo -e "${GREEN}pre-commit: All checks passed!${NO_COLOR}" diff --git a/.gitignore b/.gitignore index ec7ebbab0..43e5d90b1 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,5 @@ docs/**/test.sh.run.log # goreleaser generated files dist +logs +*.run.log diff --git a/controllers/operator/mongodbreplicaset_controller.go b/controllers/operator/mongodbreplicaset_controller.go index a7d2943aa..36c8c5fcd 100644 --- a/controllers/operator/mongodbreplicaset_controller.go +++ b/controllers/operator/mongodbreplicaset_controller.go @@ -4,12 +4,16 @@ import ( "context" "fmt" + "github.com/blang/semver" "go.uber.org/zap" "golang.org/x/xerrors" "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller" + "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/handler" "sigs.k8s.io/controller-runtime/pkg/manager" @@ -22,6 +26,7 @@ import ( mdbv1 "github.com/mongodb/mongodb-kubernetes/api/v1/mdb" rolev1 "github.com/mongodb/mongodb-kubernetes/api/v1/role" + searchv1 "github.com/mongodb/mongodb-kubernetes/api/v1/search" mdbstatus "github.com/mongodb/mongodb-kubernetes/api/v1/status" "github.com/mongodb/mongodb-kubernetes/controllers/om" "github.com/mongodb/mongodb-kubernetes/controllers/om/backup" @@ -39,6 +44,7 @@ import ( "github.com/mongodb/mongodb-kubernetes/controllers/operator/recovery" "github.com/mongodb/mongodb-kubernetes/controllers/operator/watch" "github.com/mongodb/mongodb-kubernetes/controllers/operator/workflow" + "github.com/mongodb/mongodb-kubernetes/controllers/search_controller" mcoConstruct "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/controllers/construct" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/annotations" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/configmap" @@ -52,6 +58,7 @@ import ( "github.com/mongodb/mongodb-kubernetes/pkg/util/architectures" "github.com/mongodb/mongodb-kubernetes/pkg/util/env" util_int "github.com/mongodb/mongodb-kubernetes/pkg/util/int" + "github.com/mongodb/mongodb-kubernetes/pkg/util/maputil" "github.com/mongodb/mongodb-kubernetes/pkg/vault" "github.com/mongodb/mongodb-kubernetes/pkg/vault/vaultwatcher" ) @@ -219,6 +226,8 @@ func (r *ReconcileMongoDbReplicaSet) Reconcile(ctx context.Context, request reco return r.updateStatus(ctx, rs, workflow.Failed(xerrors.Errorf("Failed to reconcileHostnameOverrideConfigMap: %w", err)), log) } + shouldMirrorKeyfile := r.applySearchOverrides(ctx, rs, log) + sts := construct.DatabaseStatefulSet(*rs, rsConfig, log) if status := r.ensureRoles(ctx, rs.Spec.DbCommonSpec, r.enableClusterMongoDBRoles, conn, kube.ObjectKeyFromApiObject(rs), log); !status.IsOK() { return r.updateStatus(ctx, rs, status, log) @@ -238,7 +247,7 @@ func (r *ReconcileMongoDbReplicaSet) Reconcile(ctx context.Context, request reco // See CLOUDP-189433 and CLOUDP-229222 for more details. if recovery.ShouldTriggerRecovery(rs.Status.Phase != mdbstatus.PhaseRunning, rs.Status.LastTransition) { log.Warnf("Triggering Automatic Recovery. The MongoDB resource %s/%s is in %s state since %s", rs.Namespace, rs.Name, rs.Status.Phase, rs.Status.LastTransition) - automationConfigStatus := r.updateOmDeploymentRs(ctx, conn, rs.Status.Members, rs, sts, log, caFilePath, agentCertSecretSelector, prometheusCertHash, true).OnErrorPrepend("Failed to create/update (Ops Manager reconciliation phase):") + automationConfigStatus := r.updateOmDeploymentRs(ctx, conn, rs.Status.Members, rs, sts, log, caFilePath, agentCertSecretSelector, prometheusCertHash, true, shouldMirrorKeyfile).OnErrorPrepend("Failed to create/update (Ops Manager reconciliation phase):") deploymentError := create.DatabaseInKubernetes(ctx, r.client, *rs, sts, rsConfig, log) if deploymentError != nil { log.Errorf("Recovery failed because of deployment errors, %w", deploymentError) @@ -254,7 +263,7 @@ func (r *ReconcileMongoDbReplicaSet) Reconcile(ctx context.Context, request reco } status = workflow.RunInGivenOrder(publishAutomationConfigFirst(ctx, r.client, *rs, lastSpec, rsConfig, log), func() workflow.Status { - return r.updateOmDeploymentRs(ctx, conn, rs.Status.Members, rs, sts, log, caFilePath, agentCertSecretSelector, prometheusCertHash, false).OnErrorPrepend("Failed to create/update (Ops Manager reconciliation phase):") + return r.updateOmDeploymentRs(ctx, conn, rs.Status.Members, rs, sts, log, caFilePath, agentCertSecretSelector, prometheusCertHash, false, shouldMirrorKeyfile).OnErrorPrepend("Failed to create/update (Ops Manager reconciliation phase):") }, func() workflow.Status { workflowStatus := create.HandlePVCResize(ctx, r.client, &sts, log) @@ -408,6 +417,19 @@ func AddReplicaSetController(ctx context.Context, mgr manager.Manager, imageUrls zap.S().Errorf("Failed to watch for vault secret changes: %w", err) } } + + err = c.Watch(source.Kind(mgr.GetCache(), &searchv1.MongoDBSearch{}, + handler.TypedEnqueueRequestsFromMapFunc(func(ctx context.Context, search *searchv1.MongoDBSearch) []reconcile.Request { + source := search.GetMongoDBResourceRef() + if source == nil { + return []reconcile.Request{} + } + return []reconcile.Request{{NamespacedName: types.NamespacedName{Namespace: source.Namespace, Name: source.Name}}} + }))) + if err != nil { + return err + } + zap.S().Infof("Registered controller %s", util.MongoDbReplicaSetController) return nil @@ -415,7 +437,7 @@ func AddReplicaSetController(ctx context.Context, mgr manager.Manager, imageUrls // updateOmDeploymentRs performs OM registration operation for the replicaset. So the changes will be finally propagated // to automation agents in containers -func (r *ReconcileMongoDbReplicaSet) updateOmDeploymentRs(ctx context.Context, conn om.Connection, membersNumberBefore int, rs *mdbv1.MongoDB, set appsv1.StatefulSet, log *zap.SugaredLogger, caFilePath string, agentCertSecretSelector corev1.SecretKeySelector, prometheusCertHash string, isRecovering bool) workflow.Status { +func (r *ReconcileMongoDbReplicaSet) updateOmDeploymentRs(ctx context.Context, conn om.Connection, membersNumberBefore int, rs *mdbv1.MongoDB, set appsv1.StatefulSet, log *zap.SugaredLogger, caFilePath string, agentCertSecretSelector corev1.SecretKeySelector, prometheusCertHash string, isRecovering bool, shouldMirrorKeyfileForMongot bool) workflow.Status { log.Debug("Entering UpdateOMDeployments") // Only "concrete" RS members should be observed // - if scaling down, let's observe only members that will remain after scale-down operation @@ -469,6 +491,11 @@ func (r *ReconcileMongoDbReplicaSet) updateOmDeploymentRs(ctx context.Context, c err = conn.ReadUpdateDeployment( func(d om.Deployment) error { + if shouldMirrorKeyfileForMongot { + if err := r.mirrorKeyfileIntoSecretForMongot(ctx, d, rs, log); err != nil { + return err + } + } return ReconcileReplicaSetAC(ctx, d, rs.Spec.DbCommonSpec, lastRsConfig.ToMap(), rs.Name, replicaSet, caFilePath, internalClusterPath, &p, log) }, log, @@ -609,3 +636,70 @@ func getAllHostsRs(set appsv1.StatefulSet, clusterName string, membersCount int, hostnames, _ := dns.GetDnsForStatefulSetReplicasSpecified(set, clusterName, membersCount, externalDomain) return hostnames } + +func (r *ReconcileMongoDbReplicaSet) applySearchOverrides(ctx context.Context, rs *mdbv1.MongoDB, log *zap.SugaredLogger) bool { + search := r.lookupCorrespondingSearchResource(ctx, rs, log) + if search == nil { + log.Debugf("No MongoDBSearch resource found, skipping search overrides") + return false + } + + log.Infof("Applying search overrides from MongoDBSearch %s", search.NamespacedName()) + + if rs.Spec.AdditionalMongodConfig == nil { + rs.Spec.AdditionalMongodConfig = mdbv1.NewEmptyAdditionalMongodConfig() + } + searchMongodConfig := search_controller.GetMongodConfigParameters(search) + rs.Spec.AdditionalMongodConfig.AddOption("setParameter", searchMongodConfig["setParameter"]) + + mdbVersion, err := semver.ParseTolerant(rs.Spec.Version) + if err != nil { + log.Warnf("Failed to parse MongoDB version %q: %w. Proceeding without the automatic creation of the searchCoordinator role that's necessary for MongoDB <8.2", rs.Spec.Version, err) + } else if semver.MustParse("8.2.0").GT(mdbVersion) { + log.Infof("Polyfilling the searchCoordinator role for MongoDB %s", rs.Spec.Version) + + if rs.Spec.Security == nil { + rs.Spec.Security = &mdbv1.Security{} + } + rs.Spec.Security.Roles = append(rs.Spec.Security.Roles, search_controller.SearchCoordinatorRole()) + } + + return true +} + +func (r *ReconcileMongoDbReplicaSet) mirrorKeyfileIntoSecretForMongot(ctx context.Context, d om.Deployment, rs *mdbv1.MongoDB, log *zap.SugaredLogger) error { + keyfileContents := maputil.ReadMapValueAsString(d, "auth", "key") + keyfileSecret := &corev1.Secret{ObjectMeta: metav1.ObjectMeta{Name: fmt.Sprintf("%s-keyfile", rs.Name), Namespace: rs.Namespace}} + + log.Infof("Mirroring the replicaset %s's keyfile into the secret %s", rs.ObjectKey(), kube.ObjectKeyFromApiObject(keyfileSecret)) + + _, err := controllerutil.CreateOrUpdate(ctx, r.client, keyfileSecret, func() error { + keyfileSecret.StringData = map[string]string{"keyfile": keyfileContents} + return controllerutil.SetOwnerReference(rs, keyfileSecret, r.client.Scheme()) + }) + if err != nil { + return xerrors.Errorf("Failed to mirror the replicaset's keyfile into a secret: %w", err) + } else { + return nil + } +} + +func (r *ReconcileMongoDbReplicaSet) lookupCorrespondingSearchResource(ctx context.Context, rs *mdbv1.MongoDB, log *zap.SugaredLogger) *searchv1.MongoDBSearch { + var search *searchv1.MongoDBSearch + searchList := &searchv1.MongoDBSearchList{} + if err := r.client.List(ctx, searchList, &client.ListOptions{ + FieldSelector: fields.OneTermEqualSelector(search_controller.MongoDBSearchIndexFieldName, rs.GetNamespace()+"/"+rs.GetName()), + }); err != nil { + log.Debugf("Failed to list MongoDBSearch resources: %v", err) + } + // this validates that there is exactly one MongoDBSearch pointing to this resource, + // and that this resource passes search validations. If either fails, proceed without a search target + // for the mongod automation config. + if len(searchList.Items) == 1 { + searchSource := search_controller.NewEnterpriseResourceSearchSource(rs) + if searchSource.Validate() == nil { + search = &searchList.Items[0] + } + } + return search +} diff --git a/controllers/operator/mongodbsearch_controller.go b/controllers/operator/mongodbsearch_controller.go index b83791f1f..7d47f496f 100644 --- a/controllers/operator/mongodbsearch_controller.go +++ b/controllers/operator/mongodbsearch_controller.go @@ -14,12 +14,14 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" ctrl "sigs.k8s.io/controller-runtime" + mdbv1 "github.com/mongodb/mongodb-kubernetes/api/v1/mdb" searchv1 "github.com/mongodb/mongodb-kubernetes/api/v1/search" + "github.com/mongodb/mongodb-kubernetes/controllers/operator/watch" "github.com/mongodb/mongodb-kubernetes/controllers/search_controller" mdbcv1 "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/api/v1" - "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/controllers/watch" kubernetesClient "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/client" "github.com/mongodb/mongodb-kubernetes/pkg/kube/commoncontroller" "github.com/mongodb/mongodb-kubernetes/pkg/util" @@ -28,15 +30,14 @@ import ( type MongoDBSearchReconciler struct { kubeClient kubernetesClient.Client - mdbcWatcher *watch.ResourceWatcher + watch *watch.ResourceWatcher operatorSearchConfig search_controller.OperatorSearchConfig } func newMongoDBSearchReconciler(client client.Client, operatorSearchConfig search_controller.OperatorSearchConfig) *MongoDBSearchReconciler { - mdbcWatcher := watch.New() return &MongoDBSearchReconciler{ kubeClient: kubernetesClient.NewClient(client), - mdbcWatcher: &mdbcWatcher, + watch: watch.NewResourceWatcher(), operatorSearchConfig: operatorSearchConfig, } } @@ -51,36 +52,52 @@ func (r *MongoDBSearchReconciler) Reconcile(ctx context.Context, request reconci return result, err } - sourceResource, mdbc, err := getSourceMongoDBForSearch(ctx, r.kubeClient, mdbSearch) + searchSource, err := r.getSourceMongoDBForSearch(ctx, r.kubeClient, mdbSearch, log) if err != nil { return reconcile.Result{RequeueAfter: time.Second * util.RetryTimeSec}, err } - if mdbc != nil { - r.mdbcWatcher.Watch(ctx, mdbc.NamespacedName(), request.NamespacedName) - } + r.watch.AddWatchedResourceIfNotAdded(searchSource.KeyfileSecretName(), mdbSearch.Namespace, watch.Secret, mdbSearch.NamespacedName()) - reconcileHelper := search_controller.NewMongoDBSearchReconcileHelper(kubernetesClient.NewClient(r.kubeClient), mdbSearch, sourceResource, r.operatorSearchConfig) + reconcileHelper := search_controller.NewMongoDBSearchReconcileHelper(kubernetesClient.NewClient(r.kubeClient), mdbSearch, searchSource, r.operatorSearchConfig) return reconcileHelper.Reconcile(ctx, log).ReconcileResult() } -func getSourceMongoDBForSearch(ctx context.Context, kubeClient client.Client, search *searchv1.MongoDBSearch) (search_controller.SearchSourceDBResource, *mdbcv1.MongoDBCommunity, error) { +func (r *MongoDBSearchReconciler) getSourceMongoDBForSearch(ctx context.Context, kubeClient client.Client, search *searchv1.MongoDBSearch, log *zap.SugaredLogger) (search_controller.SearchSourceDBResource, error) { if search.IsExternalMongoDBSource() { - return search_controller.NewSearchSourceDBResourceFromExternal(search.Namespace, search.Spec.Source.ExternalMongoDBSource), nil, nil + return search_controller.NewExternalSearchSource(search.Namespace, search.Spec.Source.ExternalMongoDBSource), nil } sourceMongoDBResourceRef := search.GetMongoDBResourceRef() if sourceMongoDBResourceRef == nil { - return nil, nil, xerrors.New("MongoDBSearch source MongoDB resource reference is not set") + return nil, xerrors.New("MongoDBSearch source MongoDB resource reference is not set") + } + + sourceName := types.NamespacedName{Namespace: search.GetNamespace(), Name: sourceMongoDBResourceRef.Name} + log.Infof("Looking up Search source %s", sourceName) + + mdb := &mdbv1.MongoDB{} + if err := kubeClient.Get(ctx, sourceName, mdb); err != nil { + if !apierrors.IsNotFound(err) { + return nil, xerrors.Errorf("error getting MongoDB %s: %w", sourceName, err) + } + } else { + r.watch.AddWatchedResourceIfNotAdded(sourceMongoDBResourceRef.Name, sourceMongoDBResourceRef.Namespace, watch.MongoDB, search.NamespacedName()) + return search_controller.NewEnterpriseResourceSearchSource(mdb), nil } - mdbcName := types.NamespacedName{Namespace: search.GetNamespace(), Name: sourceMongoDBResourceRef.Name} mdbc := &mdbcv1.MongoDBCommunity{} - if err := kubeClient.Get(ctx, mdbcName, mdbc); err != nil { - return nil, nil, xerrors.Errorf("error getting MongoDBCommunity %s: %w", mdbcName, err) + if err := kubeClient.Get(ctx, sourceName, mdbc); err != nil { + if !apierrors.IsNotFound(err) { + return nil, xerrors.Errorf("error getting MongoDBCommunity %s: %w", sourceName, err) + } + } else { + r.watch.AddWatchedResourceIfNotAdded(sourceMongoDBResourceRef.Name, sourceMongoDBResourceRef.Namespace, "MongoDBCommunity", search.NamespacedName()) + return search_controller.NewCommunityResourceSearchSource(mdbc), nil } - return search_controller.NewSearchSourceDBResourceFromMongoDBCommunity(mdbc), mdbc, nil + + return nil, xerrors.Errorf("No database resource named %s found", sourceName) } func mdbcSearchIndexBuilder(rawObj client.Object) []string { @@ -103,7 +120,9 @@ func AddMongoDBSearchController(ctx context.Context, mgr manager.Manager, operat return ctrl.NewControllerManagedBy(mgr). WithOptions(controller.Options{MaxConcurrentReconciles: env.ReadIntOrDefault(util.MaxConcurrentReconcilesEnv, 1)}). // nolint:forbidigo For(&searchv1.MongoDBSearch{}). - Watches(&mdbcv1.MongoDBCommunity{}, r.mdbcWatcher). + Watches(&mdbv1.MongoDB{}, &watch.ResourcesHandler{ResourceType: watch.MongoDB, ResourceWatcher: r.watch}). + Watches(&mdbcv1.MongoDBCommunity{}, &watch.ResourcesHandler{ResourceType: "MongoDBCommunity", ResourceWatcher: r.watch}). + Watches(&corev1.Secret{}, &watch.ResourcesHandler{ResourceType: watch.Secret, ResourceWatcher: r.watch}). Owns(&appsv1.StatefulSet{}). Owns(&corev1.Secret{}). Complete(r) diff --git a/controllers/operator/mongodbsearch_controller_test.go b/controllers/operator/mongodbsearch_controller_test.go index ba3885042..28f966ff8 100644 --- a/controllers/operator/mongodbsearch_controller_test.go +++ b/controllers/operator/mongodbsearch_controller_test.go @@ -8,11 +8,8 @@ import ( "github.com/ghodss/yaml" "github.com/stretchr/testify/assert" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/util/workqueue" "k8s.io/utils/ptr" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/controller/controllertest" - "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/reconcile" appsv1 "k8s.io/api/apps/v1" @@ -29,6 +26,7 @@ import ( mdbcv1 "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/api/v1" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/api/v1/common" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/mongot" + "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/util/constants" ) func newMongoDBCommunity(name, namespace string) *mdbcv1.MongoDBCommunity { @@ -62,7 +60,16 @@ func newSearchReconcilerWithOperatorConfig( builder.WithIndex(&searchv1.MongoDBSearch{}, search_controller.MongoDBSearchIndexFieldName, mdbcSearchIndexBuilder) if mdbc != nil { - builder.WithObjects(mdbc) + keyfileSecret := &corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: mdbc.GetAgentKeyfileSecretNamespacedName().Name, + Namespace: mdbc.Namespace, + }, + StringData: map[string]string{ + constants.AgentKeyfileKey: "keyfile", + }, + } + builder.WithObjects(mdbc, keyfileSecret) } for _, search := range searches { @@ -183,10 +190,6 @@ func TestMongoDBSearchReconcile_Success(t *testing.T) { sts := &appsv1.StatefulSet{} err = c.Get(ctx, search.StatefulSetNamespacedName(), sts) assert.NoError(t, err) - - queue := controllertest.Queue{Interface: workqueue.New()} - reconciler.mdbcWatcher.Create(ctx, event.CreateEvent{Object: mdbc}, &queue) - assert.Equal(t, 1, queue.Len()) } func checkSearchReconcileFailed( diff --git a/controllers/operator/watch/config_change_handler.go b/controllers/operator/watch/config_change_handler.go index b5c36c364..cb6122859 100644 --- a/controllers/operator/watch/config_change_handler.go +++ b/controllers/operator/watch/config_change_handler.go @@ -14,8 +14,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" corev1 "k8s.io/api/core/v1" - - rolev1 "github.com/mongodb/mongodb-kubernetes/api/v1/role" ) // Type is an enum for all kubernetes types watched by controller for changes for configuration @@ -87,10 +85,14 @@ func (c *ResourcesHandler) doHandle(namespace, name string, q workqueue.RateLimi // Seems we don't need to react on config map/secret removal.. func (c *ResourcesHandler) Delete(ctx context.Context, e event.DeleteEvent, q workqueue.RateLimitingInterface) { - switch v := e.Object.(type) { - case *rolev1.ClusterMongoDBRole: - c.doHandle(v.GetNamespace(), v.GetName(), q) + switch e.Object.(type) { + case *corev1.ConfigMap: + return + case *corev1.Secret: + return } + + c.doHandle(e.Object.GetNamespace(), e.Object.GetName(), q) } func (c *ResourcesHandler) Generic(ctx context.Context, _ event.GenericEvent, _ workqueue.RateLimitingInterface) { diff --git a/controllers/search_controller/community_search_source.go b/controllers/search_controller/community_search_source.go new file mode 100644 index 000000000..e4f799c83 --- /dev/null +++ b/controllers/search_controller/community_search_source.go @@ -0,0 +1,65 @@ +package search_controller + +import ( + "fmt" + "strings" + + "github.com/blang/semver" + "golang.org/x/xerrors" + "k8s.io/apimachinery/pkg/types" + + mdbcv1 "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/api/v1" + "github.com/mongodb/mongodb-kubernetes/pkg/util" +) + +func NewCommunityResourceSearchSource(mdbc *mdbcv1.MongoDBCommunity) SearchSourceDBResource { + return &CommunitySearchSource{MongoDBCommunity: mdbc} +} + +type CommunitySearchSource struct { + *mdbcv1.MongoDBCommunity +} + +func (r *CommunitySearchSource) HostSeeds() []string { + seeds := make([]string, r.Spec.Members) + for i := range seeds { + seeds[i] = fmt.Sprintf("%s-%d.%s.%s.svc.cluster.local:%d", r.Name, i, r.ServiceName(), r.Namespace, r.GetMongodConfiguration().GetDBPort()) + } + return seeds +} + +func (r *CommunitySearchSource) KeyfileSecretName() string { + return r.MongoDBCommunity.GetAgentKeyfileSecretNamespacedName().Name +} + +func (r *CommunitySearchSource) IsSecurityTLSConfigEnabled() bool { + return r.Spec.Security.TLS.Enabled +} + +func (r *CommunitySearchSource) TLSOperatorCASecretNamespacedName() types.NamespacedName { + return r.MongoDBCommunity.TLSOperatorCASecretNamespacedName() +} + +func (r *CommunitySearchSource) Validate() error { + version, err := semver.ParseTolerant(r.GetMongoDBVersion()) + if err != nil { + return xerrors.Errorf("error parsing MongoDB version '%s': %w", r.Spec.Version, err) + } else if version.LT(semver.MustParse("8.0.10")) { + return xerrors.New("MongoDB version must be 8.0.10 or higher") + } + + foundScram := false + for _, authMode := range r.Spec.Security.Authentication.Modes { + // Check for SCRAM, SCRAM-SHA-1, or SCRAM-SHA-256 + if strings.HasPrefix(strings.ToUpper(string(authMode)), util.SCRAM) { + foundScram = true + break + } + } + + if !foundScram && len(r.Spec.Security.Authentication.Modes) > 0 { + return xerrors.New("MongoDBSearch requires SCRAM authentication to be enabled") + } + + return nil +} diff --git a/controllers/search_controller/community_search_source_test.go b/controllers/search_controller/community_search_source_test.go new file mode 100644 index 000000000..90bf9967e --- /dev/null +++ b/controllers/search_controller/community_search_source_test.go @@ -0,0 +1,208 @@ +package search_controller + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + mdbcv1 "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/api/v1" +) + +func newCommunitySearchSource(version string, authModes []mdbcv1.AuthMode) *CommunitySearchSource { + return &CommunitySearchSource{ + MongoDBCommunity: &mdbcv1.MongoDBCommunity{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-mongodb", + Namespace: "test-namespace", + }, + Spec: mdbcv1.MongoDBCommunitySpec{ + Version: version, + Security: mdbcv1.Security{ + Authentication: mdbcv1.Authentication{ + Modes: authModes, + }, + }, + }, + }, + } +} + +func TestCommunitySearchSource_Validate(t *testing.T) { + cases := []struct { + name string + version string + authModes []mdbcv1.AuthMode + expectError bool + expectedErrMsg string + }{ + // Version validation tests + { + name: "Invalid version", + version: "invalid.version", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: true, + expectedErrMsg: "error parsing MongoDB version", + }, + { + name: "Version too old", + version: "7.0.0", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: true, + expectedErrMsg: "MongoDB version must be 8.0.10 or higher", + }, + { + name: "Version just below minimum", + version: "8.0.9", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: true, + expectedErrMsg: "MongoDB version must be 8.0.10 or higher", + }, + { + name: "Valid minimum version", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: false, + }, + { + name: "Version above minimum", + version: "8.1.0", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: false, + }, + { + name: "Version with build number", + version: "8.1.0-rc1", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: false, + }, + // Authentication mode tests - empty/nil cases + { + name: "Empty auth modes", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{}, + expectError: false, + }, + { + name: "Nil auth modes", + version: "8.0.10", + authModes: nil, + expectError: false, + }, + { + name: "X509 mode only", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"X509"}, + expectError: true, + expectedErrMsg: "MongoDBSearch requires SCRAM authentication to be enabled", + }, + { + name: "X509 and SCRAM", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"X509", "SCRAM-SHA-256"}, + expectError: false, + }, + { + name: "Multiple auth modes with SCRAM first", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-1", "X509"}, + expectError: false, + }, + { + name: "Multiple auth modes with SCRAM last", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"PLAIN", "X509", "SCRAM-SHA-256"}, + expectError: false, + }, + { + name: "Multiple non-SCRAM modes", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"PLAIN", "X509"}, + expectError: true, + expectedErrMsg: "MongoDBSearch requires SCRAM authentication to be enabled", + }, + // SCRAM variant tests + { + name: "SCRAM only", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"SCRAM"}, + expectError: false, + }, + { + name: "SCRAM-SHA-1 only", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-1"}, + expectError: false, + }, + { + name: "SCRAM-SHA-256 only", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: false, + }, + { + name: "All SCRAM variants", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"SCRAM", "SCRAM-SHA-1", "SCRAM-SHA-256"}, + expectError: false, + }, + // Case-insensitive tests (now supported with ToUpper) + { + name: "Lowercase SCRAM", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"scram-sha-256"}, + expectError: false, + }, + { + name: "Mixed case SCRAM", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"Scram-Sha-256"}, + expectError: false, + }, + // Edge case tests + { + name: "PLAIN only", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"PLAIN"}, + expectError: true, + expectedErrMsg: "MongoDBSearch requires SCRAM authentication to be enabled", + }, + // Combined validation tests + { + name: "Invalid version with valid auth", + version: "7.0.0", + authModes: []mdbcv1.AuthMode{"SCRAM-SHA-256"}, + expectError: true, + expectedErrMsg: "MongoDB version must be 8.0.10 or higher", + }, + { + name: "Valid version with invalid auth", + version: "8.0.10", + authModes: []mdbcv1.AuthMode{"X509"}, + expectError: true, + expectedErrMsg: "MongoDBSearch requires SCRAM authentication to be enabled", + }, + { + name: "Invalid version with invalid auth", + version: "7.0.0", + authModes: []mdbcv1.AuthMode{"X509"}, + expectError: true, + expectedErrMsg: "MongoDB version must be 8.0.10 or higher", // Should fail on version first + }, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + src := newCommunitySearchSource(c.version, c.authModes) + err := src.Validate() + + if c.expectError { + assert.Error(t, err) + assert.Contains(t, err.Error(), c.expectedErrMsg) + } else { + assert.NoError(t, err) + } + }) + } +} diff --git a/controllers/search_controller/enterprise_search_source.go b/controllers/search_controller/enterprise_search_source.go new file mode 100644 index 000000000..87ad09e5f --- /dev/null +++ b/controllers/search_controller/enterprise_search_source.go @@ -0,0 +1,78 @@ +package search_controller + +import ( + "fmt" + "strings" + + "github.com/blang/semver" + "golang.org/x/xerrors" + "k8s.io/apimachinery/pkg/types" + + mdbv1 "github.com/mongodb/mongodb-kubernetes/api/v1/mdb" + "github.com/mongodb/mongodb-kubernetes/pkg/util" +) + +type EnterpriseResourceSearchSource struct { + *mdbv1.MongoDB +} + +func NewEnterpriseResourceSearchSource(mdb *mdbv1.MongoDB) SearchSourceDBResource { + return EnterpriseResourceSearchSource{mdb} +} + +func (r EnterpriseResourceSearchSource) HostSeeds() []string { + seeds := make([]string, r.Spec.Members) + for i := range seeds { + seeds[i] = fmt.Sprintf("%s-%d.%s.%s.svc.cluster.local:%d", r.Name, i, r.ServiceName(), r.Namespace, r.Spec.GetAdditionalMongodConfig().GetPortOrDefault()) + } + return seeds +} + +func (r EnterpriseResourceSearchSource) KeyfileSecretName() string { + return fmt.Sprintf("%s-keyfile", r.Name) +} + +func (r EnterpriseResourceSearchSource) IsSecurityTLSConfigEnabled() bool { + return r.Spec.Security.IsTLSEnabled() +} + +func (r EnterpriseResourceSearchSource) TLSOperatorCASecretNamespacedName() types.NamespacedName { + return types.NamespacedName{} +} + +func (r EnterpriseResourceSearchSource) Validate() error { + version, err := semver.ParseTolerant(r.Spec.GetMongoDBVersion()) + if err != nil { + return xerrors.Errorf("error parsing MongoDB version '%s': %w", r.Spec.GetMongoDBVersion(), err) + } else if version.LT(semver.MustParse("8.0.10")) { + return xerrors.New("MongoDB version must be 8.0.10 or higher") + } + + if r.Spec.GetTopology() != mdbv1.ClusterTopologySingleCluster { + return xerrors.Errorf("MongoDBSearch is only supported for %s topology", mdbv1.ClusterTopologySingleCluster) + } + + if r.GetResourceType() != mdbv1.ReplicaSet { + return xerrors.Errorf("MongoDBSearch is only supported for %s resources", mdbv1.ReplicaSet) + } + + authModes := r.Spec.GetSecurityAuthenticationModes() + foundScram := false + for _, authMode := range authModes { + // Check for SCRAM, SCRAM-SHA-1, or SCRAM-SHA-256 + if strings.HasPrefix(strings.ToUpper(authMode), util.SCRAM) { + foundScram = true + break + } + } + + if !foundScram && len(authModes) > 0 { + return xerrors.New("MongoDBSearch requires SCRAM authentication to be enabled") + } + + if r.Spec.Security.GetInternalClusterAuthenticationMode() == util.X509 { + return xerrors.New("MongoDBSearch does not support X.509 internal cluster authentication") + } + + return nil +} diff --git a/controllers/search_controller/enterprise_search_source_test.go b/controllers/search_controller/enterprise_search_source_test.go new file mode 100644 index 000000000..1362ab605 --- /dev/null +++ b/controllers/search_controller/enterprise_search_source_test.go @@ -0,0 +1,290 @@ +package search_controller + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + mdbv1 "github.com/mongodb/mongodb-kubernetes/api/v1/mdb" +) + +func newEnterpriseSearchSource(version string, topology string, resourceType mdbv1.ResourceType, authModes []string, internalClusterAuth string) EnterpriseResourceSearchSource { + authModesList := make([]mdbv1.AuthMode, len(authModes)) + for i, mode := range authModes { + authModesList[i] = mdbv1.AuthMode(mode) + } + + // Create security with authentication if needed + var security *mdbv1.Security + if len(authModes) > 0 || internalClusterAuth != "" { + security = &mdbv1.Security{ + Authentication: &mdbv1.Authentication{ + Enabled: len(authModes) > 0, + Modes: authModesList, + InternalCluster: internalClusterAuth, + }, + } + } + + src := EnterpriseResourceSearchSource{ + MongoDB: &mdbv1.MongoDB{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-mongodb", + Namespace: "test-namespace", + }, + Spec: mdbv1.MongoDbSpec{ + DbCommonSpec: mdbv1.DbCommonSpec{ + Version: version, + ResourceType: resourceType, + Security: security, + }, + }, + }, + } + + // Set topology directly since it's inlined from DbCommonSpec + src.Spec.Topology = topology + return src +} + +func TestEnterpriseResourceSearchSource_Validate(t *testing.T) { + cases := []struct { + name string + version string + topology string + resourceType mdbv1.ResourceType + authModes []string + internalClusterAuth string + expectError bool + expectedErrMsg string + }{ + // Version validation tests + { + name: "Invalid version", + version: "invalid.version", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: true, + expectedErrMsg: "error parsing MongoDB version", + }, + { + name: "Version too old", + version: "7.0.0", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: true, + expectedErrMsg: "MongoDB version must be 8.0.10 or higher", + }, + { + name: "Version just below minimum", + version: "8.0.9", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: true, + expectedErrMsg: "MongoDB version must be 8.0.10 or higher", + }, + { + name: "Valid minimum version", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: false, + }, + { + name: "Version above minimum", + version: "8.1.0", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: false, + }, + // Topology validation tests + { + name: "Invalid topology - MultiCluster", + version: "8.0.10", + topology: mdbv1.ClusterTopologyMultiCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: true, + expectedErrMsg: "MongoDBSearch is only supported for SingleCluster topology", + }, + { + name: "Valid topology - SingleCluster", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: false, + }, + { + name: "Empty topology defaults to SingleCluster", + version: "8.0.10", + topology: "", + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: false, + }, + // Resource type validation tests + { + name: "Invalid resource type - Standalone", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.Standalone, + authModes: []string{}, + expectError: true, + expectedErrMsg: "MongoDBSearch is only supported for ReplicaSet resources", + }, + { + name: "Invalid resource type - ShardedCluster", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ShardedCluster, + authModes: []string{}, + expectError: true, + expectedErrMsg: "MongoDBSearch is only supported for ReplicaSet resources", + }, + { + name: "Valid resource type - ReplicaSet", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: false, + }, + // Authentication mode tests + { + name: "No SCRAM authentication", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"X509"}, + expectError: true, + expectedErrMsg: "MongoDBSearch requires SCRAM authentication to be enabled", + }, + { + name: "Empty authentication modes", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: false, + }, + { + name: "Nil authentication modes", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: nil, + expectError: false, + }, + { + name: "Valid SCRAM authentication", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"SCRAM-SHA-256"}, + expectError: false, + }, + { + name: "Mixed auth modes with SCRAM", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"X509", "SCRAM-SHA-256"}, + expectError: false, + }, + { + name: "Case insensitive SCRAM", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"scram-sha-256"}, + expectError: false, + }, + { + name: "SCRAM variants", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"SCRAM", "SCRAM-SHA-1", "SCRAM-SHA-256"}, + expectError: false, + }, + // Internal cluster authentication tests + { + name: "X509 internal cluster auth not supported", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"SCRAM-SHA-256"}, + internalClusterAuth: "X509", + expectError: true, + expectedErrMsg: "MongoDBSearch does not support X.509 internal cluster authentication", + }, + { + name: "Valid internal cluster auth - empty", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"SCRAM-SHA-256"}, + internalClusterAuth: "", + expectError: false, + }, + { + name: "Valid internal cluster auth - SCRAM", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{"SCRAM-SHA-256"}, + internalClusterAuth: "SCRAM", + expectError: false, + }, + // Combined validation tests + { + name: "Multiple validation failures - version takes precedence", + version: "7.0.0", + topology: mdbv1.ClusterTopologyMultiCluster, + resourceType: mdbv1.Standalone, + authModes: []string{"X509"}, + expectError: true, + expectedErrMsg: "MongoDB version must be 8.0.10 or higher", + }, + { + name: "Valid version, invalid topology", + version: "8.0.10", + topology: mdbv1.ClusterTopologyMultiCluster, + resourceType: mdbv1.ReplicaSet, + authModes: []string{}, + expectError: true, + expectedErrMsg: "MongoDBSearch is only supported for SingleCluster topology", + }, + { + name: "Valid version and topology, invalid resource type", + version: "8.0.10", + topology: mdbv1.ClusterTopologySingleCluster, + resourceType: mdbv1.Standalone, + authModes: []string{}, + expectError: true, + expectedErrMsg: "MongoDBSearch is only supported for ReplicaSet resources", + }, + } + + for _, c := range cases { + t.Run(c.name, func(t *testing.T) { + src := newEnterpriseSearchSource(c.version, c.topology, c.resourceType, c.authModes, c.internalClusterAuth) + err := src.Validate() + + if c.expectError { + assert.Error(t, err) + assert.Contains(t, err.Error(), c.expectedErrMsg) + } else { + assert.NoError(t, err) + } + }) + } +} diff --git a/controllers/search_controller/external_search_source.go b/controllers/search_controller/external_search_source.go new file mode 100644 index 000000000..1e5fb5ab6 --- /dev/null +++ b/controllers/search_controller/external_search_source.go @@ -0,0 +1,46 @@ +package search_controller + +import ( + "k8s.io/apimachinery/pkg/types" + + searchv1 "github.com/mongodb/mongodb-kubernetes/api/v1/search" +) + +func NewExternalSearchSource(namespace string, spec *searchv1.ExternalMongoDBSource) SearchSourceDBResource { + return &externalSearchResource{namespace: namespace, spec: spec} +} + +// externalSearchResource implements SearchSourceDBResource for deployments managed outside the operator. +type externalSearchResource struct { + namespace string + spec *searchv1.ExternalMongoDBSource +} + +func (r *externalSearchResource) Validate() error { + return nil +} + +func (r *externalSearchResource) KeyfileSecretName() string { + if r.spec.KeyFileSecretKeyRef != nil { + return r.spec.KeyFileSecretKeyRef.Name + } + + return "" +} + +func (r *externalSearchResource) IsSecurityTLSConfigEnabled() bool { + return r.spec.TLS != nil && r.spec.TLS.Enabled +} + +func (r *externalSearchResource) TLSOperatorCASecretNamespacedName() types.NamespacedName { + if r.spec.TLS != nil && r.spec.TLS.CA != nil { + return types.NamespacedName{ + Name: r.spec.TLS.CA.Name, + Namespace: r.namespace, + } + } + + return types.NamespacedName{} +} + +func (r *externalSearchResource) HostSeeds() []string { return r.spec.HostAndPorts } diff --git a/controllers/search_controller/mongodbsearch_reconcile_helper.go b/controllers/search_controller/mongodbsearch_reconcile_helper.go index 1b0f33603..005b56175 100644 --- a/controllers/search_controller/mongodbsearch_reconcile_helper.go +++ b/controllers/search_controller/mongodbsearch_reconcile_helper.go @@ -18,8 +18,10 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + mdbv1 "github.com/mongodb/mongodb-kubernetes/api/v1/mdb" searchv1 "github.com/mongodb/mongodb-kubernetes/api/v1/search" "github.com/mongodb/mongodb-kubernetes/controllers/operator/workflow" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/automationconfig" @@ -29,6 +31,7 @@ import ( "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/service" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/mongot" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/tls" + "github.com/mongodb/mongodb-kubernetes/pkg/kube" "github.com/mongodb/mongodb-kubernetes/pkg/kube/commoncontroller" "github.com/mongodb/mongodb-kubernetes/pkg/statefulset" ) @@ -81,7 +84,7 @@ func (r *MongoDBSearchReconcileHelper) reconcile(ctx context.Context, log *zap.S log = log.With("MongoDBSearch", r.mdbSearch.NamespacedName()) log.Infof("Reconciling MongoDBSearch") - if err := r.db.ValidateMongoDBVersion(); err != nil { + if err := r.db.Validate(); err != nil { return workflow.Failed(err) } @@ -93,6 +96,13 @@ func (r *MongoDBSearchReconcileHelper) reconcile(ctx context.Context, log *zap.S return workflow.Failed(err) } + keyfileStsModification, err := r.ensureSourceKeyfile(ctx, log) + if apierrors.IsNotFound(err) { + return workflow.Pending("Waiting for keyfile secret to be created") + } else if err != nil { + return workflow.Failed(err) + } + if err := r.ensureSearchService(ctx, r.mdbSearch); err != nil { return workflow.Failed(err) } @@ -118,7 +128,7 @@ func (r *MongoDBSearchReconcileHelper) reconcile(ctx context.Context, log *zap.S }, )) - if err := r.createOrUpdateStatefulSet(ctx, log, CreateSearchStatefulSetFunc(r.mdbSearch, r.db, r.buildImageString()), configHashModification, ingressTlsStsModification, egressTlsStsModification); err != nil { + if err := r.createOrUpdateStatefulSet(ctx, log, CreateSearchStatefulSetFunc(r.mdbSearch, r.db, r.buildImageString()), configHashModification, keyfileStsModification, ingressTlsStsModification, egressTlsStsModification); err != nil { return workflow.Failed(err) } @@ -129,6 +139,23 @@ func (r *MongoDBSearchReconcileHelper) reconcile(ctx context.Context, log *zap.S return workflow.OK() } +func (r *MongoDBSearchReconcileHelper) ensureSourceKeyfile(ctx context.Context, log *zap.SugaredLogger) (statefulset.Modification, error) { + keyfileSecretName := kube.ObjectKey(r.mdbSearch.GetNamespace(), r.db.KeyfileSecretName()) + keyfileSecret := &corev1.Secret{} + if err := r.client.Get(ctx, keyfileSecretName, keyfileSecret); err != nil { + return nil, err + } + + return statefulset.Apply( + // make sure mongot pods get restarted if the keyfile changes + statefulset.WithPodSpecTemplate(podtemplatespec.WithAnnotations( + map[string]string{ + "keyfileHash": hashBytes(keyfileSecret.Data["keyfile"]), + }, + )), + ), nil +} + func (r *MongoDBSearchReconcileHelper) buildImageString() string { imageVersion := r.mdbSearch.Spec.Version if imageVersion == "" { @@ -196,7 +223,7 @@ func (r *MongoDBSearchReconcileHelper) ensureMongotConfig(ctx context.Context, l log.Debugf("Updated mongot config yaml config map: %v (%s) with the following configuration: %s", cmName, op, string(configData)) - return hashMongotConfig(configData), nil + return hashBytes(configData), nil } func (r *MongoDBSearchReconcileHelper) ensureIngressTlsConfig(ctx context.Context) (mongot.Modification, statefulset.Modification, error) { @@ -286,8 +313,8 @@ cp /mongot-community/bin/jdk/lib/security/cacerts /java/trust-store/cacerts return mongotModification, statefulsetModification, nil } -func hashMongotConfig(mongotConfigYaml []byte) string { - hashBytes := sha256.Sum256(mongotConfigYaml) +func hashBytes(bytes []byte) string { + hashBytes := sha256.Sum256(bytes) return base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(hashBytes[:]) } @@ -381,7 +408,7 @@ func GetMongodConfigParameters(search *searchv1.MongoDBSearch) map[string]any { "mongotHost": mongotHostAndPort(search), "searchIndexManagementHostAndPort": mongotHostAndPort(search), "skipAuthenticationToSearchIndexManagementServer": false, - "searchTLSMode": searchTLSMode, + "searchTLSMode": string(searchTLSMode), }, } } @@ -450,3 +477,51 @@ func (r *MongoDBSearchReconcileHelper) getMongotImage() string { return "" } + +func SearchCoordinatorRole() mdbv1.MongoDBRole { + // direct translation of https://github.com/10gen/mongo/blob/6f8d95a513eea8f91ea9f5d895dd8a288dfcf725/src/mongo/db/auth/builtin_roles.yml#L652 + return mdbv1.MongoDBRole{ + Role: "searchCoordinator", + Db: "admin", + Roles: []mdbv1.InheritedRole{ + { + Role: "clusterMonitor", + Db: "admin", + }, + { + Role: "directShardOperations", + Db: "admin", + }, + { + Role: "readAnyDatabase", + Db: "admin", + }, + }, + Privileges: []mdbv1.Privilege{ + { + Resource: mdbv1.Resource{ + Db: "__mdb_internal_search", + }, + Actions: []string{ + "changeStream", "collStats", "dbHash", "dbStats", "find", + "killCursors", "listCollections", "listIndexes", "listSearchIndexes", + // performRawDataOperations is available only on mongod master + // "performRawDataOperations", + "planCacheRead", "cleanupStructuredEncryptionData", + "compactStructuredEncryptionData", "convertToCapped", "createCollection", + "createIndex", "createSearchIndexes", "dropCollection", "dropIndex", + "dropSearchIndex", "insert", "remove", "renameCollectionSameDB", + "update", "updateSearchIndex", + }, + }, + // TODO: this causes the error "(BadValue) resource: {cluster: true} conflicts with resource type 'db'" + // { + // Resource: mdbv1.Resource{ + // Cluster: ptr.To(true), + // }, + // Actions: []string{"bypassDefaultMaxTimeMS"}, + // }, + }, + AuthenticationRestrictions: nil, + } +} diff --git a/controllers/search_controller/mongodbsearch_reconcile_helper_test.go b/controllers/search_controller/mongodbsearch_reconcile_helper_test.go index c7b4a8dc7..5a2a757ce 100644 --- a/controllers/search_controller/mongodbsearch_reconcile_helper_test.go +++ b/controllers/search_controller/mongodbsearch_reconcile_helper_test.go @@ -15,65 +15,6 @@ import ( kubernetesClient "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/client" ) -func TestMongoDBSearchReconcileHelper_ValidateSearchSource(t *testing.T) { - mdbcMeta := metav1.ObjectMeta{ - Name: "test-mongodb", - Namespace: "test", - } - - cases := []struct { - name string - mdbc mdbcv1.MongoDBCommunity - expectedError string - }{ - { - name: "Invalid version", - mdbc: mdbcv1.MongoDBCommunity{ - ObjectMeta: mdbcMeta, - Spec: mdbcv1.MongoDBCommunitySpec{ - Version: "4.4.0", - }, - }, - expectedError: "MongoDB version must be 8.0.10 or higher", - }, - { - name: "Valid version", - mdbc: mdbcv1.MongoDBCommunity{ - ObjectMeta: mdbcMeta, - Spec: mdbcv1.MongoDBCommunitySpec{ - Version: "8.0.10", - }, - }, - }, - { - name: "TLS enabled", - mdbc: mdbcv1.MongoDBCommunity{ - ObjectMeta: mdbcMeta, - Spec: mdbcv1.MongoDBCommunitySpec{ - Version: "8.0.10", - Security: mdbcv1.Security{ - TLS: mdbcv1.TLS{ - Enabled: true, - }, - }, - }, - }, - }, - } - - for _, c := range cases { - t.Run(c.name, func(t *testing.T) { - db := NewSearchSourceDBResourceFromMongoDBCommunity(&c.mdbc) - err := db.ValidateMongoDBVersion() - if c.expectedError == "" { - assert.NoError(t, err) - } else { - assert.EqualError(t, err, c.expectedError) - } - }) - } -} - func TestMongoDBSearchReconcileHelper_ValidateSingleMongoDBSearchForSearchSource(t *testing.T) { mdbSearchSpec := searchv1.MongoDBSearchSpec{ Source: &searchv1.MongoDBSource{ @@ -144,7 +85,7 @@ func TestMongoDBSearchReconcileHelper_ValidateSingleMongoDBSearchForSearchSource clientBuilder.WithObjects(v) } - helper := NewMongoDBSearchReconcileHelper(kubernetesClient.NewClient(clientBuilder.Build()), mdbSearch, NewSearchSourceDBResourceFromMongoDBCommunity(mdbc), OperatorSearchConfig{}) + helper := NewMongoDBSearchReconcileHelper(kubernetesClient.NewClient(clientBuilder.Build()), mdbSearch, NewCommunityResourceSearchSource(mdbc), OperatorSearchConfig{}) err := helper.ValidateSingleMongoDBSearchForSearchSource(t.Context()) if c.expectedError == "" { assert.NoError(t, err) diff --git a/controllers/search_controller/search_construction.go b/controllers/search_controller/search_construction.go index cf622c0d2..af26172c3 100644 --- a/controllers/search_controller/search_construction.go +++ b/controllers/search_controller/search_construction.go @@ -1,10 +1,6 @@ package search_controller import ( - "fmt" - - "github.com/blang/semver" - "golang.org/x/xerrors" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" @@ -13,7 +9,6 @@ import ( searchv1 "github.com/mongodb/mongodb-kubernetes/api/v1/search" "github.com/mongodb/mongodb-kubernetes/controllers/operator/construct" - mdbcv1 "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/api/v1" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/api/v1/common" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/container" "github.com/mongodb/mongodb-kubernetes/mongodb-community-operator/pkg/kube/podtemplatespec" @@ -39,113 +34,7 @@ type SearchSourceDBResource interface { IsSecurityTLSConfigEnabled() bool TLSOperatorCASecretNamespacedName() types.NamespacedName HostSeeds() []string - ValidateMongoDBVersion() error -} - -func NewSearchSourceDBResourceFromMongoDBCommunity(mdbc *mdbcv1.MongoDBCommunity) SearchSourceDBResource { - return &mdbcSearchResource{db: mdbc} -} - -func NewSearchSourceDBResourceFromExternal(namespace string, spec *searchv1.ExternalMongoDBSource) SearchSourceDBResource { - return &externalSearchResource{namespace: namespace, spec: spec} -} - -// externalSearchResource implements SearchSourceDBResource for deployments managed outside the operator. -type externalSearchResource struct { - namespace string - spec *searchv1.ExternalMongoDBSource -} - -func (r *externalSearchResource) ValidateMongoDBVersion() error { - return nil -} - -func (r *externalSearchResource) KeyfileSecretName() string { - if r.spec.KeyFileSecretKeyRef != nil { - return r.spec.KeyFileSecretKeyRef.Name - } - - return "" -} - -func (r *externalSearchResource) IsSecurityTLSConfigEnabled() bool { - return r.spec.TLS != nil && r.spec.TLS.Enabled -} - -func (r *externalSearchResource) TLSOperatorCASecretNamespacedName() types.NamespacedName { - if r.spec.TLS != nil && r.spec.TLS.CA != nil { - return types.NamespacedName{ - Name: r.spec.TLS.CA.Name, - Namespace: r.namespace, - } - } - - return types.NamespacedName{} -} - -func (r *externalSearchResource) HostSeeds() []string { return r.spec.HostAndPorts } - -type mdbcSearchResource struct { - db *mdbcv1.MongoDBCommunity -} - -func (r *mdbcSearchResource) ValidateMongoDBVersion() error { - version, err := semver.ParseTolerant(r.db.GetMongoDBVersion()) - if err != nil { - return xerrors.Errorf("error parsing MongoDB version '%s': %w", r.db.GetMongoDBVersion(), err) - } else if version.LT(semver.MustParse("8.0.10")) { - return xerrors.New("MongoDB version must be 8.0.10 or higher") - } - - return nil -} - -func (r *mdbcSearchResource) HostSeeds() []string { - seeds := make([]string, r.db.Spec.Members) - for i := range seeds { - seeds[i] = fmt.Sprintf("%s-%d.%s.%s.svc.cluster.local:%d", r.db.Name, i, r.db.ServiceName(), r.db.Namespace, r.db.GetMongodConfiguration().GetDBPort()) - } - return seeds -} - -func (r *mdbcSearchResource) Members() int { - return r.db.Spec.Members -} - -func (r *mdbcSearchResource) Name() string { - return r.db.Name -} - -func (r *mdbcSearchResource) NamespacedName() types.NamespacedName { - return r.db.NamespacedName() -} - -func (r *mdbcSearchResource) KeyfileSecretName() string { - return r.db.GetAgentKeyfileSecretNamespacedName().Name -} - -func (r *mdbcSearchResource) GetNamespace() string { - return r.db.Namespace -} - -func (r *mdbcSearchResource) HasSeparateDataAndLogsVolumes() bool { - return r.db.HasSeparateDataAndLogsVolumes() -} - -func (r *mdbcSearchResource) DatabaseServiceName() string { - return r.db.ServiceName() -} - -func (r *mdbcSearchResource) IsSecurityTLSConfigEnabled() bool { - return r.db.Spec.Security.TLS.Enabled -} - -func (r *mdbcSearchResource) DatabasePort() int { - return r.db.GetMongodConfiguration().GetDBPort() -} - -func (r *mdbcSearchResource) TLSOperatorCASecretNamespacedName() types.NamespacedName { - return r.db.TLSOperatorCASecretNamespacedName() + Validate() error } // ReplicaSetOptions returns a set of options which will configure a ReplicaSet StatefulSet diff --git a/docker/mongodb-kubernetes-tests/tests/common/search/search_tester.py b/docker/mongodb-kubernetes-tests/tests/common/search/search_tester.py index 8d8334ee9..6dccfb5ae 100644 --- a/docker/mongodb-kubernetes-tests/tests/common/search/search_tester.py +++ b/docker/mongodb-kubernetes-tests/tests/common/search/search_tester.py @@ -32,7 +32,7 @@ def mongorestore_from_url(self, archive_url: str, ns_include: str, mongodb_tools mongorestore_cmd += " --ssl" if ca_path := self.default_opts.get("tlsCAFile"): mongorestore_cmd += " --sslCAFile=" + ca_path - process_run_and_check(mongorestore_cmd.split()) + process_run_and_check(mongorestore_cmd.split(), capture_output=True) def create_search_index(self, database_name: str, collection_name: str): database = self.client[database_name] diff --git a/docker/mongodb-kubernetes-tests/tests/search/fixtures/enterprise-replicaset-sample-mflix.yaml b/docker/mongodb-kubernetes-tests/tests/search/fixtures/enterprise-replicaset-sample-mflix.yaml new file mode 100644 index 000000000..29d455b51 --- /dev/null +++ b/docker/mongodb-kubernetes-tests/tests/search/fixtures/enterprise-replicaset-sample-mflix.yaml @@ -0,0 +1,34 @@ +--- +apiVersion: mongodb.com/v1 +kind: MongoDB +metadata: + name: mdb-rs +spec: + members: 3 + version: 8.0.10 + type: ReplicaSet + opsManager: + configMapRef: + name: my-project + credentials: my-credentials + security: + authentication: + enabled: true + ignoreUnknownUsers: true + modes: + - SCRAM + agent: + logLevel: DEBUG + statefulSet: + spec: + template: + spec: + containers: + - name: mongodb-enterprise-database + resources: + limits: + cpu: "2" + memory: 2Gi + requests: + cpu: "1" + memory: 1Gi diff --git a/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-mdb-admin.yaml b/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-mdb-admin.yaml new file mode 100644 index 000000000..0b3fe4c77 --- /dev/null +++ b/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-mdb-admin.yaml @@ -0,0 +1,16 @@ +# admin user with root role +apiVersion: mongodb.com/v1 +kind: MongoDBUser +metadata: + name: mdb-admin +spec: + username: mdb-admin + db: admin + mongodbResourceRef: + name: mdb-rs + passwordSecretKeyRef: + name: mdb-admin-user-password + key: password + roles: + - name: root + db: admin \ No newline at end of file diff --git a/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-mdb-user.yaml b/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-mdb-user.yaml new file mode 100644 index 000000000..579cc58d0 --- /dev/null +++ b/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-mdb-user.yaml @@ -0,0 +1,16 @@ +# user performing search queries +apiVersion: mongodb.com/v1 +kind: MongoDBUser +metadata: + name: mdb-user +spec: + username: mdb-user + db: admin + mongodbResourceRef: + name: mdb-rs + passwordSecretKeyRef: + name: mdb-user-password + key: password + roles: + - name: readWrite + db: sample_mflix diff --git a/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-search-sync-source-user.yaml b/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-search-sync-source-user.yaml new file mode 100644 index 000000000..cd1eab1a5 --- /dev/null +++ b/docker/mongodb-kubernetes-tests/tests/search/fixtures/mongodbuser-search-sync-source-user.yaml @@ -0,0 +1,18 @@ +# user used by MongoDB Search to connect to MongoDB database to synchronize data from +# For MongoDB <8.2, the operator will be creating the searchCoordinator custom role automatically +# From MongoDB 8.2, searchCoordinator role will be a built-in role. +apiVersion: mongodb.com/v1 +kind: MongoDBUser +metadata: + name: search-sync-source-user +spec: + username: search-sync-source + db: admin + mongodbResourceRef: + name: mdb-rs + passwordSecretKeyRef: + name: mdb-rs-search-sync-source-password + key: password + roles: + - name: searchCoordinator + db: admin diff --git a/docker/mongodb-kubernetes-tests/tests/search/search_enterprise_basic.py b/docker/mongodb-kubernetes-tests/tests/search/search_enterprise_basic.py new file mode 100644 index 000000000..a3de8dcf8 --- /dev/null +++ b/docker/mongodb-kubernetes-tests/tests/search/search_enterprise_basic.py @@ -0,0 +1,183 @@ +import yaml +from kubetester import create_or_update_secret, try_load +from kubetester.kubetester import KubernetesTester +from kubetester.kubetester import fixture as yaml_fixture +from kubetester.mongodb import MongoDB +from kubetester.mongodb_search import MongoDBSearch +from kubetester.mongodb_user import MongoDBUser +from kubetester.phase import Phase +from pytest import fixture, mark +from tests import test_logger +from tests.common.search import movies_search_helper +from tests.common.search.movies_search_helper import SampleMoviesSearchHelper +from tests.common.search.search_tester import SearchTester +from tests.conftest import get_default_operator + +logger = test_logger.get_test_logger(__name__) + +ADMIN_USER_NAME = "mdb-admin-user" +ADMIN_USER_PASSWORD = f"{ADMIN_USER_NAME}-password" + +MONGOT_USER_NAME = "search-sync-source" +MONGOT_USER_PASSWORD = f"{MONGOT_USER_NAME}-password" + +USER_NAME = "mdb-user" +USER_PASSWORD = f"{USER_NAME}-password" + +MDB_RESOURCE_NAME = "mdb-rs" + + +@fixture(scope="function") +def mdb(namespace: str) -> MongoDB: + resource = MongoDB.from_yaml( + yaml_fixture("enterprise-replicaset-sample-mflix.yaml"), + name=MDB_RESOURCE_NAME, + namespace=namespace, + ) + + if try_load(resource): + return resource + + return resource + + +@fixture(scope="function") +def mdbs(namespace: str) -> MongoDBSearch: + resource = MongoDBSearch.from_yaml(yaml_fixture("search-minimal.yaml"), namespace=namespace, name=MDB_RESOURCE_NAME) + + if try_load(resource): + return resource + + return resource + + +@fixture(scope="function") +def admin_user(namespace: str) -> MongoDBUser: + resource = MongoDBUser.from_yaml( + yaml_fixture("mongodbuser-mdb-admin.yaml"), namespace=namespace, name=ADMIN_USER_NAME + ) + + if try_load(resource): + return resource + + resource["spec"]["username"] = resource.name + resource["spec"]["passwordSecretKeyRef"]["name"] = f"{resource.name}-password" + + return resource + + +@fixture(scope="function") +def user(namespace: str) -> MongoDBUser: + resource = MongoDBUser.from_yaml(yaml_fixture("mongodbuser-mdb-user.yaml"), namespace=namespace, name=USER_NAME) + + if try_load(resource): + return resource + + resource["spec"]["username"] = resource.name + resource["spec"]["passwordSecretKeyRef"]["name"] = f"{resource.name}-password" + + return resource + + +@fixture(scope="function") +def mongot_user(namespace: str, mdbs: MongoDBSearch) -> MongoDBUser: + resource = MongoDBUser.from_yaml( + yaml_fixture("mongodbuser-search-sync-source-user.yaml"), + namespace=namespace, + name=f"{mdbs.name}-{MONGOT_USER_NAME}", + ) + + if try_load(resource): + return resource + + resource["spec"]["username"] = MONGOT_USER_NAME + resource["spec"]["passwordSecretKeyRef"]["name"] = f"{resource.name}-password" + + return resource + + +@mark.e2e_search_enterprise_basic +def test_install_operator(namespace: str, operator_installation_config: dict[str, str]): + operator = get_default_operator(namespace, operator_installation_config=operator_installation_config) + operator.assert_is_running() + + +@mark.e2e_search_enterprise_basic +def test_create_database_resource(mdb: MongoDB): + mdb.update() + mdb.assert_reaches_phase(Phase.Running, timeout=1000) + + +@mark.e2e_search_enterprise_basic +def test_create_users( + namespace: str, admin_user: MongoDBUser, user: MongoDBUser, mongot_user: MongoDBUser, mdb: MongoDB +): + create_or_update_secret( + namespace, name=admin_user["spec"]["passwordSecretKeyRef"]["name"], data={"password": ADMIN_USER_PASSWORD} + ) + admin_user.create() + admin_user.assert_reaches_phase(Phase.Updated, timeout=300) + + create_or_update_secret( + namespace, name=user["spec"]["passwordSecretKeyRef"]["name"], data={"password": USER_PASSWORD} + ) + user.create() + user.assert_reaches_phase(Phase.Updated, timeout=300) + + create_or_update_secret( + namespace, name=mongot_user["spec"]["passwordSecretKeyRef"]["name"], data={"password": MONGOT_USER_PASSWORD} + ) + mongot_user.create() + # we deliberately don't wait for this user to be ready, because to be reconciled successfully it needs the searchCoordinator role + # which the ReplicaSet reconciler will only define in the automation config after the MongoDBSearch resource is created. + + +@mark.e2e_search_enterprise_basic +def test_create_search_resource(mdbs: MongoDBSearch): + mdbs.update() + mdbs.assert_reaches_phase(Phase.Running, timeout=300) + + +@mark.e2e_search_enterprise_basic +def test_wait_for_database_resource_ready(mdb: MongoDB): + mdb.assert_abandons_phase(Phase.Running, timeout=1800) + mdb.assert_reaches_phase(Phase.Running, timeout=1800) + + for idx in range(mdb.get_members()): + mongod_config = yaml.safe_load( + KubernetesTester.run_command_in_pod_container( + f"{mdb.name}-{idx}", mdb.namespace, ["cat", "/data/automation-mongod.conf"] + ) + ) + setParameter = mongod_config.get("setParameter", {}) + assert ( + "mongotHost" in setParameter and "searchIndexManagementHostAndPort" in setParameter + ), "mongot parameters not found in mongod config" + + +@mark.e2e_search_enterprise_basic +def test_search_restore_sample_database(mdb: MongoDB): + sample_movies_helper = movies_search_helper.SampleMoviesSearchHelper( + SearchTester(get_connection_string(mdb, ADMIN_USER_NAME, ADMIN_USER_PASSWORD)) + ) + sample_movies_helper.restore_sample_database() + + +@mark.e2e_search_enterprise_basic +def test_search_create_search_index(mdb: MongoDB): + sample_movies_helper = movies_search_helper.SampleMoviesSearchHelper( + SearchTester(get_connection_string(mdb, USER_NAME, USER_PASSWORD)) + ) + sample_movies_helper.create_search_index() + + +@mark.e2e_search_enterprise_basic +def test_search_assert_search_query(mdb: MongoDB): + sample_movies_helper = movies_search_helper.SampleMoviesSearchHelper( + SearchTester(get_connection_string(mdb, USER_NAME, USER_PASSWORD)) + ) + sample_movies_helper.assert_search_query(retry_timeout=60) + + +def get_connection_string(mdb: MongoDB, user_name: str, user_password: str) -> str: + return f"mongodb://{user_name}:{user_password}@{mdb.name}-0.{mdb.name}-svc.{mdb.namespace}.svc.cluster.local:27017/?replicaSet={mdb.name}" diff --git a/docs/community-search/quick-start/code_snippets/0045_create_namespaces.sh b/docs/community-search/quick-start/code_snippets/0045_create_namespaces.sh deleted file mode 100755 index 7d0899c63..000000000 --- a/docs/community-search/quick-start/code_snippets/0045_create_namespaces.sh +++ /dev/null @@ -1 +0,0 @@ -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" create namespace "${MDB_NAMESPACE}" diff --git a/docs/community-search/quick-start/code_snippets/0100_install_operator.sh b/docs/community-search/quick-start/code_snippets/0100_install_operator.sh deleted file mode 100755 index 36715a6a2..000000000 --- a/docs/community-search/quick-start/code_snippets/0100_install_operator.sh +++ /dev/null @@ -1,6 +0,0 @@ -helm upgrade --install --debug --kube-context "${K8S_CLUSTER_0_CONTEXT_NAME}" \ - --create-namespace \ - --namespace="${MDB_NAMESPACE}" \ - mongodb-kubernetes \ - --set "${OPERATOR_ADDITIONAL_HELM_VALUES:-"dummy=value"}" \ - "${OPERATOR_HELM_CHART}" diff --git a/docs/community-search/quick-start/code_snippets/0315_wait_for_community_resource.sh b/docs/community-search/quick-start/code_snippets/0315_wait_for_community_resource.sh deleted file mode 100755 index d1f423368..000000000 --- a/docs/community-search/quick-start/code_snippets/0315_wait_for_community_resource.sh +++ /dev/null @@ -1,6 +0,0 @@ -echo "Waiting for MongoDBCommunity resource to reach Running phase..." -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" wait --for=jsonpath='{.status.phase}'=Running mdbc/mdbc-rs --timeout=400s -echo; echo "MongoDBCommunity resource" -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get mdbc/mdbc-rs -echo; echo "Pods running in cluster ${K8S_CLUSTER_0_CONTEXT_NAME}" -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods diff --git a/docs/community-search/quick-start/code_snippets/0325_wait_for_search_resource.sh b/docs/community-search/quick-start/code_snippets/0325_wait_for_search_resource.sh deleted file mode 100755 index fe91e335e..000000000 --- a/docs/community-search/quick-start/code_snippets/0325_wait_for_search_resource.sh +++ /dev/null @@ -1,2 +0,0 @@ -echo "Waiting for MongoDBSearch resource to reach Running phase..." -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" wait --for=jsonpath='{.status.phase}'=Running mdbs/mdbc-rs --timeout=300s diff --git a/docs/community-search/quick-start/code_snippets/0330_wait_for_community_resource.sh b/docs/community-search/quick-start/code_snippets/0330_wait_for_community_resource.sh deleted file mode 100755 index 4490c3967..000000000 --- a/docs/community-search/quick-start/code_snippets/0330_wait_for_community_resource.sh +++ /dev/null @@ -1,2 +0,0 @@ -echo "Waiting for MongoDBCommunity resource to reach Running phase..." -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" wait --for=jsonpath='{.status.phase}'=Running mdbc/mdbc-rs --timeout=400s diff --git a/docs/community-search/quick-start/code_snippets/0335_show_running_pods.sh b/docs/community-search/quick-start/code_snippets/0335_show_running_pods.sh deleted file mode 100755 index d1c200adc..000000000 --- a/docs/community-search/quick-start/code_snippets/0335_show_running_pods.sh +++ /dev/null @@ -1,6 +0,0 @@ -echo; echo "MongoDBCommunity resource" -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get mdbc/mdbc-rs -echo; echo "MongoDBSearch resource" -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get mdbs/mdbc-rs -echo; echo "Pods running in cluster ${K8S_CLUSTER_0_CONTEXT_NAME}" -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" get pods diff --git a/docs/community-search/quick-start/code_snippets/0420_import_movies_mflix_database.sh b/docs/community-search/quick-start/code_snippets/0420_import_movies_mflix_database.sh deleted file mode 100755 index 1a5a9a0e6..000000000 --- a/docs/community-search/quick-start/code_snippets/0420_import_movies_mflix_database.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -kubectl exec -n "${MDB_NAMESPACE}" --context "${K8S_CLUSTER_0_CONTEXT_NAME}" mongodb-tools-pod -- /bin/bash -eu -c "$(cat < /tmp/mdb_script.js -mongosh --quiet "mongodb://mdb-user:${MDB_USER_PASSWORD}@mdbc-rs-0.mdbc-rs-svc.${MDB_NAMESPACE}.svc.cluster.local:27017/?replicaSet=mdbc-rs" < /tmp/mdb_script.js +mongosh --quiet "mongodb://mdb-user:${MDB_USER_PASSWORD}@mdbc-rs-0.mdbc-rs-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=mdbc-rs" < /tmp/mdb_script.js EOF )" -``` +``` \ No newline at end of file diff --git a/docs/community-search/quick-start/README.md.j2 b/docs/search/01-search-community-deploy/README.md.j2 similarity index 100% rename from docs/community-search/quick-start/README.md.j2 rename to docs/search/01-search-community-deploy/README.md.j2 diff --git a/docs/search/01-search-community-deploy/code_snippets/01_0045_create_namespaces.sh b/docs/search/01-search-community-deploy/code_snippets/01_0045_create_namespaces.sh new file mode 100755 index 000000000..076899281 --- /dev/null +++ b/docs/search/01-search-community-deploy/code_snippets/01_0045_create_namespaces.sh @@ -0,0 +1 @@ +kubectl --context "${K8S_CTX}" create namespace "${MDB_NS}" diff --git a/docs/community-search/quick-start/code_snippets/0046_create_image_pull_secrets.sh b/docs/search/01-search-community-deploy/code_snippets/01_0046_create_image_pull_secrets.sh old mode 100755 new mode 100644 similarity index 68% rename from docs/community-search/quick-start/code_snippets/0046_create_image_pull_secrets.sh rename to docs/search/01-search-community-deploy/code_snippets/01_0046_create_image_pull_secrets.sh index 270bdbe11..7158760c4 --- a/docs/community-search/quick-start/code_snippets/0046_create_image_pull_secrets.sh +++ b/docs/search/01-search-community-deploy/code_snippets/01_0046_create_image_pull_secrets.sh @@ -1,3 +1,3 @@ -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${MDB_NAMESPACE}" \ +kubectl --context "${K8S_CTX}" -n "${MDB_NS}" \ create secret generic "image-registries-secret" \ --from-file=.dockerconfigjson="${HOME}/.docker/config.json" --type=kubernetes.io/dockerconfigjson diff --git a/docs/search/01-search-community-deploy/code_snippets/01_0048_configure_prerelease_image_pullsecret.sh b/docs/search/01-search-community-deploy/code_snippets/01_0048_configure_prerelease_image_pullsecret.sh new file mode 100644 index 000000000..4cb9ccd8a --- /dev/null +++ b/docs/search/01-search-community-deploy/code_snippets/01_0048_configure_prerelease_image_pullsecret.sh @@ -0,0 +1,11 @@ +if [[ "${PRERELEASE_IMAGE_PULLSECRET:-""}" == "" ]]; then return 0; fi + +kubectl apply --context "${K8S_CTX}" -n "${MDB_NS}" -f - < /tmp/mdb_script.js -mongosh --quiet "mongodb://mdb-user:${MDB_USER_PASSWORD}@mdbc-rs-0.mdbc-rs-svc.${MDB_NAMESPACE}.svc.cluster.local:27017/?replicaSet=mdbc-rs" < /tmp/mdb_script.js +mongosh --quiet "${MDB_CONNECTION_STRING}" < /tmp/mdb_script.js EOF )" diff --git a/docs/search/03-search-query-usage/code_snippets/03_0455_execute_vector_search_query.sh b/docs/search/03-search-query-usage/code_snippets/03_0455_execute_vector_search_query.sh new file mode 100644 index 000000000..fb522d697 --- /dev/null +++ b/docs/search/03-search-query-usage/code_snippets/03_0455_execute_vector_search_query.sh @@ -0,0 +1,30 @@ +mdb_script=$(cat <<'EOF' +use sample_mflix; +db.embedded_movies.aggregate([ + { + "$vectorSearch": { + "index": "vector_index", + "path": "plot_embedding_voyage_3_large", + "queryVector": [-0.034731735,0.008558298,-0.0153717,-0.029912498,0.011549547,0.010261648,-0.011964999,-0.023265276,0.010303194,-0.006896493,-0.00054528,0.003926015,-0.025757983,0.027419789,0.001199616,-0.036227357,-0.005297005,0.021935832,0.010303194,-0.019193852,0.025093261,-0.040049512,-0.033900831,-0.011466458,-0.01827986,-0.0153717,0.023265276,0.007727395,0.000114249,0.005317777,-0.043871664,-0.02127111,-0.019609304,0.016368784,-0.004756918,0.003552109,0.006522586,-0.005400868,-0.015620971,-0.034565553,-0.018695312,-0.023099095,0.050851244,-0.034731735,0.004819236,0.022268193,-0.095719993,0.05517194,-0.046198189,-0.036393538,0.007187308,-0.02459472,-0.036725901,0.009472291,0.019027673,0.020938748,-0.011051006,0.027087428,0.04586583,-0.022600554,-0.05517194,0.044204023,0.01213118,0.047859997,-0.03938479,0.002928932,0.002056484,0.019443123,-0.028583053,0.013543714,0.022932915,0.011632638,0.004923099,0.000389486,0.020024756,-0.024096178,-0.022766734,0.011217186,-0.003198975,0.007104218,-0.047195274,-0.013377533,0.013294443,0.024096178,-0.056501385,-0.026755067,-0.008433662,-0.001911076,0.007976666,-0.008101301,-0.014042255,0.008641388,-0.02176965,0.010012378,-0.000607598,-0.024927082,0.024927082,-0.018612221,-0.001184036,0.005567048,0.001324251,-0.019526213,-0.023597637,0.060489718,-0.010178559,-0.019609304,0.004112968,-0.011217186,-0.031574301,-0.008766023,0.005483958,-0.061819162,-0.023431456,-0.040714234,0.015039339,0.026422706,0.016202603,0.004653055,0.041046593,-0.018030589,0.040381871,-0.002638116,0.013045172,0.004216831,0.005650138,0.027419789,0.003926015,-0.028749233,0.004798463,-0.030244859,0.063813329,0.007145763,-0.017448956,0.025591804,-0.045201108,0.010718645,0.002804297,0.014291527,0.04586583,-0.015205519,-0.021603471,-0.035230275,0.00760276,0.033236109,0.016534964,-0.043206941,-0.003115885,-0.026256526,0.005940954,0.016534964,0.024262359,-0.001630647,0.028084511,-0.012795902,0.007270399,0.001381376,-0.009763107,-0.006896493,0.008433662,-0.019360034,0.000386889,0.030411039,0.025591804,0.010469374,0.037722982,-0.001147684,-0.005400868,0.052845411,-0.052513052,0.00768585,-0.004299921,0.00922302,0.011881908,0.012962082,-0.068798743,0.003593654,0.020938748,-0.013792985,-0.034565553,-0.007519669,-0.04021569,-0.020689478,0.006273315,0.046862911,0.006107135,0.002638116,-0.013792985,-0.005400868,-0.020274026,0.007644305,-0.010801735,0.026422706,0.043871664,0.003780607,0.010261648,-0.064145692,0.011881908,-0.009056839,0.009347656,-0.02459472,0.026422706,0.033236109,0.041212775,0.019027673,-0.00315743,0.004424557,0.020689478,-0.0153717,-0.015205519,-0.034897912,0.020274026,0.016867325,0.040714234,-0.022766734,-0.010967916,0.026256526,0.007062673,-0.015953332,-0.007727395,0.031574301,-0.002887387,-0.00614868,0.004569965,0.019027673,0.012878992,0.011798819,0.004258377,-0.019193852,-0.021437289,-0.021603471,0.000301202,-0.051183607,-0.004985416,-0.030078677,0.012629721,0.065142773,-0.031740483,-0.021104928,-0.03938479,-0.003365156,-0.016036423,0.036393538,0.009804652,-0.018612221,0.060489718,-0.003697517,0.000547876,0.063480966,0.02758597,0.010053922,-0.003655972,-0.001485239,0.018362951,0.021104928,-0.003905243,0.019443123,-0.002658889,-0.00380138,-0.013626805,0.035894997,0.035396457,-0.005691683,0.002762751,0.012878992,-0.009596926,-0.009970833,-0.015953332,0.022434372,0.00614868,-0.021188019,0.001557943,-0.020190936,0.009763107,0.017448956,0.006730312,0.005567048,0.019692395,-0.00218112,-0.016867325,0.006854947,0.007976666,0.019193852,0.040880412,0.007353489,-0.02127111,-0.031906664,-0.026755067,-0.017947499,0.040381871,0.042209856,0.00913993,-0.0307434,-0.017781317,-0.015039339,0.03057722,0.017532047,0.0187784,-0.060822077,0.002928932,-0.026422706,-0.005899409,0.039717149,0.026588887,-0.000971118,0.004923099,-0.013626805,0.0187784,-0.031408124,-0.000695881,0.050851244,-0.014457707,-0.007311944,-0.001293092,-0.002139574,-0.019276943,0.00290816,0.019360034,-0.017781317,0.002160347,0.016618054,-0.006522586,0.011798819,0.029247776,-0.02775215,0.010344739,-0.018362951,-0.036725901,-0.015870241,0.015704062,-0.012463541,0.02459472,-0.024096178,0.001152877,-0.031408124,0.025425622,0.027087428,0.00922302,0.034565553,0.015704062,-0.020689478,-0.00517237,-0.014706978,-0.001589101,0.026090344,0.014956249,0.011715728,0.004299921,-0.00913993,0.022434372,-0.03705826,0.048524719,-0.030411039,0.008433662,0.017033506,-0.000511525,-0.031408124,0.005940954,-0.012962082,-0.031574301,0.017448956,0.010178559,-0.011383367,-0.020107845,-0.005151597,0.006647222,0.013128263,0.007145763,0.008059756,-0.045201108,-0.004943871,0.015787151,-0.045201108,-0.020772567,-0.020274026,0.028250692,-0.024262359,-0.004424557,0.009804652,0.000472576,-0.005691683,0.001443693,-0.013294443,0.001412535,0.013211353,-0.01213118,-0.002118802,0.017781317,-0.007353489,-0.031075761,-0.004923099,0.011383367,-0.004486875,-0.010178559,0.016618054,0.014457707,0.023763817,-0.02459472,-0.00388447,0.012546631,-0.007519669,0.015704062,-0.014291527,0.009680017,-0.035562634,0.023763817,0.053510133,-0.0555043,-0.003572882,0.022102011,0.021603471,-0.017282777,-0.001474852,-0.043539301,0.007810486,-0.025757983,-0.005400868,0.029912498,-0.00760276,0.014125346,0.030909581,-0.03340229,-0.009680017,0.018030589,0.008849114,0.03057722,0.019775484,0.014125346,0.031906664,-0.03057722,-0.027087428,-0.023597637,-0.022434372,-0.012878992,0.016285693,-0.021603471,-0.029746316,0.029746316,0.020357117,0.006314861,-0.001158071,0.028749233,-0.045201108,0.011383367,0.011134096,-0.021437289,-0.035728816,0.001827986,0.008267482,-0.057498466,0.01213118,-0.01213118,-0.040548053,0.010718645,0.004798463,-0.004881553,-0.019526213,-0.008558298,0.0059825,-0.000262254,-0.017615138,0.005193142,0.019692395,-0.00198378,-0.002845842,0.012546631,0.006107135,-0.008225936,-0.008890659,0.015870241,0.00517237,0.002596571,-0.010427829,-0.019110762,0.024262359,0.012048089,-0.032405205,0.006522586,0.013211353,0.013211353,-0.038221523,-0.007727395,-0.008267482,-0.019276943,0.001474852,0.031408124,-0.035562634,0.017532047,-0.023431456,-0.015454791,-0.011383367,0.016534964,-0.02176965,0.008682934,0.027253609,0.020190936,-0.0247609,-0.007311944,0.009555381,-0.01852913,-0.011632638,0.011549547,0.027419789,-0.034067012,-0.01229736,0.0307434,0.003946788,0.0046946,0.037722982,0.03057722,-0.010427829,0.002284982,0.033236109,0.030078677,-0.013377533,0.007395034,-0.012048089,0.040714234,-0.028749233,-0.000102565,-0.0059825,-0.041046593,0.017698228,-0.006356406,0.003178203,0.009056839,0.023099095,0.00606559,0.011881908,-0.02127111,-0.001126912,-0.027087428,0.011134096,0.001204809,-0.017033506,0.011051006,-0.014374617,0.017864408,0.023431456,-0.002077257,-0.026755067,-0.043871664,0.025757983,-0.006190225,0.001152877,0.011798819,-0.024262359,0.006564131,-0.070128188,-0.004362239,0.012962082,-0.013626805,-0.001402148,-0.012214269,0.011217186,-0.015953332,0.015787151,0.011134096,0.027253609,0.024262359,-0.048192356,0.009970833,0.018944582,-0.00517237,0.021935832,0.02775215,0.003406701,-0.010884825,0.075113602,-0.015953332,0.007727395,0.026755067,-0.006190225,-0.012712811,0.013377533,0.005940954,-0.008309027,0.02459472,0.002316141,-0.022434372,-0.012712811,0.03057722,-0.015787151,0.026755067,-0.001069787,0.03988333,-0.003697517,0.039550968,-0.019027673,-0.0059825,-0.00031029,-0.012546631,-0.003614427,0.007478124,0.005525503,0.032571387,-0.011798819,-0.011466458,-0.00606559,-0.011798819,0.018446039,0.007976666,0.018944582,-0.02176965,0.026588887,-0.006273315,-0.012463541,-0.007395034,0.012048089,-0.029247776,0.015454791,-0.007145763,0.006481041,-0.015620971,-0.00388447,-0.025757983,-0.001651419,-0.032903746,-0.005068507,0.03938479,0.003926015,0.004715373,0.022600554,-0.012546631,0.022932915,0.007810486,0.040714234,0.019941665,0.013543714,0.003406701,0.010884825,-0.03988333,0.042209856,-0.022766734,0.027419789,-0.029580137,0.043206941,0.022932915,0.021104928,-0.056833744,0.005193142,0.036061179,-0.012878992,0.008516753,-0.02758597,-0.030244859,-0.011798819,0.001111332,-0.014125346,-0.014125346,0.019027673,0.029081594,0.018861491,0.013626805,0.06846638,0.023099095,0.041378956,0.001599488,-0.028749233,0.017781317,0.016285693,0.021603471,-0.018113678,0.011300277,-0.032239024,0.022434372,-0.02459472,-0.013626805,0.005483958,0.013460624,-0.031574301,-0.015620971,0.016451873,0.014790068,-0.008849114,0.011134096,0.00461151,0.015122429,0.036227357,0.00206687,0.000877641,0.022102011,-0.028250692,0.022600554,-0.026422706,0.004029878,-0.032072846,0.017116595,0.010884825,0.019609304,0.00614868,0.005733229,0.016119512,0.002866614,-0.014540797,0.012463541,-0.003905243,0.003759835,-0.000485559,-0.022766734,-0.016285693,0.037722982,0.009513836,0.001506011,0.011964999,0.004029878,0.019941665,-0.000965924,0.002129188,0.015205519,0.071125269,0.022932915,0.005940954,-0.00044661,0.010220103,-0.03423319,-0.016285693,-0.016867325,-0.000659529,-0.008018211,-0.011383367,0.000016634,0.004071423,-0.029413955,0.019941665,-0.00913993,-0.024096178,0.010635555,0.010594009,0.001547556,0.036227357,-0.030078677,0.020772567,0.022268193,-0.014125346,0.008766023,-0.012962082,-0.007187308,0.017033506,-0.007187308,-0.015205519,-0.005608593,0.044536386,-0.001235968,0.007852031,0.001599488,0.005857864,-0.005940954,-0.010510919,-0.005567048,0.006730312,0.016285693,-0.010801735,-0.024428539,0.015122429,-0.02176965,0.01528861,-0.007436579,0.00226421,-0.004715373,0.004507647,0.004341467,0.005525503,-0.031075761,-0.005899409,0.037556801,0.014873158,-0.000342747,0.009970833,-0.019443123,0.023597637,-0.012048089,-0.025259443,0.006024044,-0.01827986,0.010012378,0.016784234,0.013211353,-0.005400868,-0.024428539,-0.02176965,-0.035230275,0.009347656,0.028583053,-0.015704062,-0.017781317,0.00226421,0.001199616,-0.003385928,0.008267482,0.002326528,0.022434372,-0.020190936,-0.015787151,0.000789358,0.031241942,0.011300277,0.001506011,-0.023265276,-0.010967916,0.009056839,0.011300277,-0.030244859,0.007478124,0.001111332,-0.035894997,0.0153717,0.002700434,0.021104928,0.010884825,-0.003344383,0.00768585,0.010386284,0.00452842,-0.014706978,0.028084511,0.013377533,0.014873158,0.046862911,-0.015454791,0.021188019,0.013959166,0.012629721,0.025924165,-0.018695312,-0.00922302,-0.0093892,0.007727395,0.036892079,0.007228854,-0.01229736,0.029247776,-0.004943871,-0.027253609,-0.008433662,0.043206941,0.002825069,0.028583053,-0.023431456,0.034897912,-0.041545134,-0.016534964,0.003053567,-0.012712811,0.002741979,-0.007187308,-0.025093261,-0.045201108,-0.004424557,-0.016618054,-0.008890659,0.008018211,-0.05184833,-0.019526213,-0.013377533,-0.010469374,0.030244859,-0.005068507,0.051183607,0.005483958,-0.006024044,0.035064094,-0.011134096,0.014956249,0.002284982,0.001724123,-0.01229736,0.012629721,0.010261648,0.014540797,0.048857078,-0.029580137,-0.024927082,-0.008350573,-0.03988333,0.000939959,0.013543714,0.013626805,-0.021437289,-0.012962082,0.006771857,0.013709894,-0.0059825,0.035396457,-0.006439496,-0.029580137,0.0046946,0.019609304,-0.007270399,0.014291527,-0.015620971,0.00118923,-0.00760276,-0.017199686,0.023265276,0.026588887,-0.030078677,-0.016701145,-0.025757983,0.004964644,0.026588887,0.043206941,0.011051006,-0.009846197,0.028915415,0.031574301,0.023763817,0.009264565,-0.008433662,-0.035064094,-0.000579035,-0.0247609,0.014125346,0.016618054,0.028749233,-0.052513052,-0.016867325,-0.01238045,0.002741979,0.013709894,0.010718645,0.013626805,0.009596926,-0.004403784,-0.02758597,-0.000945152,0.000420645,0.003759835,0.012546631,-0.011881908,0.008392117,0.012795902,0.005483958,-0.009763107,0.006397951,-0.010801735,0.012795902,-0.03938479,0.005733229,0.005733229,-0.000433627,0.015454791,0.002357686,-0.006564131,0.030244859,-0.024428539,0.016036423,0.014291527,-0.004964644,0.029413955,0.040381871,0.012629721,-0.033568468,-0.026422706,-0.037889164,-0.034399372,-0.03423319,0.021935832,0.004133741,-0.014623888,-0.013543714,-0.05517194,0.004736145,0.006314861,0.00006037,0.006356406,0.003323611,-0.010344739,0.007062673,0.005899409,-0.00623177,-0.001973394,-0.0555043,0.011881908,0.001350217,-0.033069927,-0.026921248,0.022268193,0.028583053,-0.021021837,0.010884825,0.019692395,-0.005442413,0.031574301,-0.014956249,0.01238045,-0.006356406,0.006273315,-0.003095113,-0.014540797,-0.02176965,0.005006189,-0.002658889,0.042542219,-0.02176965,0.017199686,-0.016701145,-0.001599488,0.016950415,-0.021188019,0.017864408,0.023763817,-0.000669915,0.025093261,0.021104928,0.008807569,0.037390623,-0.025591804,-0.003178203,-0.001319058,0.020523297,0.005255459,0.019276943,-0.00226421,0.00760276,-0.057166107,-0.006896493,-0.034067012,0.043871664,0.038221523,0.008101301,0.03988333,0.015870241,0.000955538,-0.004299921,-0.002928932,-0.002118802,-0.020523297,-0.001168457,-0.011134096,-0.000685495,0.003323611,0.011549547,0.034565553,0.029247776,-0.029746316,0.005213914,0.019110762,-0.003302838,0.026422706,0.028915415,-0.036227357,0.033236109,0.038387705,-0.035230275,0.004071423,-0.021935832,0.002928932,0.000976311,0.000527104,-0.006854947,-0.003822153,-0.001199616,0.019858574,-0.002762751,0.039052427,-0.008641388,0.032239024,-0.002295369,0.035396457,0.044536386,-0.029413955,0.025093261,-0.03423319,-0.016867325,-0.008849114,0.008433662,-0.004486875,0.017033506,0.006730312,-0.008599843,-0.008225936,-0.024428539,0.006564131,-0.007561215,-0.032072846,-0.019941665,0.035396457,0.019276943,0.010261648,0.005857864,0.032239024,-0.044204023,-0.018944582,0.002409618,0.032903746,0.05517194,-0.03655972,0.007976666,0.030909581,-0.023929998,0.016368784,0.01528861,-0.00768585,0.02176965,0.013626805,-0.02459472,0.04021569,-0.032737568,0.006854947,-0.011383367,0.014873158,-0.02176965,0.00243039,0.0093892,0.0093892,-0.029580137,0.019858574,0.01827986,0.024428539,0.017864408,-0.028250692,-0.001111332,0.056169022,0.007478124,-0.010718645,0.041046593,-0.015704062,0.034731735,0.002523867,-0.032571387,0.004341467,-0.023597637,-0.011881908,-0.035562634,0.006688767,0.007810486,-0.012712811,0.022600554,0.03057722,0.022600554,0.010552464,0.0307434,-0.009638472,0.02176965,-0.018030589,0.024262359,-0.036227357,-0.020772567,0.001641033,-0.022932915,-0.014623888,0.018362951,0.002575798,0.006190225,-0.011051006,0.021021837,0.019110762,0.02127111,-0.028583053,-0.052180689,-0.014291527,-0.010552464,0.036393538,0.042542219,-0.04586583,-0.001869531,0.008350573,-0.008516753,-0.020772567,0.000294711,0.015704062,-0.014457707,-0.020772567,0.008766023,-0.026588887,-0.004736145,-0.028084511,-0.007519669,0.010552464,-0.016534964,0.006190225,0.012962082,-0.016618054,0.012546631,0.02459472,0.022932915,0.020440206,-0.027918331,-0.008059756,0.020689478,-0.014623888,-0.011466458,-0.006896493,-0.020024756,-0.031408124,0.021603471,0.007270399,-0.03057722,0.008350573,-0.021437289,0.00072704,-0.043871664,0.006314861,-0.017199686,0.02176965,0.024262359,-0.020357117,-0.000542683,-0.005213914,0.001963008,-0.00064395,-0.022434372,0.022102011,-0.006688767,-0.028583053,0.002191506,-0.005047734,0.002368073,0.014956249,0.023929998,-0.003302838,-0.032239024,0.022268193,-0.013377533,-0.010801735,0.003676744,0.009015295,-0.039550968,0.010884825,-0.033568468,0.013709894,-0.029413955,-0.006356406,-0.020274026,0.023597637,0.030909581,0.02176965,0.016285693,0.045533467,-0.024096178,-0.030909581,-0.026422706,0.002783524,-0.010594009,0.004362239,-0.070792913,0.009472291,-0.022102011,0.011134096,-0.017448956,-0.011549547,-0.056833744,0.00082571,0.026588887,-0.013709894,0.002575798,0.02176965,-0.000568649,-0.007270399,0.004279149,-0.042874578,-0.026588887,0.016784234,0.036725901,-0.028915415,-0.009513836,0.017448956,0.002035712,-0.007228854,0.011383367,0.011134096,0.028915415,0.0153717,-0.027087428,0.043871664,-0.005089279,0.006314861,0.014291527,-0.003240521,0.025924165,-0.001230775,-0.015454791,-0.012629721,0.031740483,-0.039717149,-0.031075761,0.006605676,-0.008641388,-0.032239024,0.037722982,-0.03705826,-0.024096178,0.001911076,0.018196769,-0.007353489,-0.011300277,-0.029081594,0.004590738,-0.018030589,-0.026588887,0.010261648,0.038221523,0.008392117,-0.01213118,0.018362951,-0.034731735,-0.017781317,-0.011632638,0.005255459,0.000851675,0.014208436,-0.000039922,-0.000228498,0.014790068,0.00913993,0.0004544,-0.011798819,-0.020440206,0.005899409,0.008350573,0.006314861,0.040548053,0.003427474,-0.010801735,0.008599843,0.002586185,-0.041212775,-0.016368784,0.020024756,0.000965924,-0.021021837,-0.008475208,0.0307434,0.00760276,0.003614427,0.003489791,-0.025924165,0.000799744,0.013460624,-0.020440206,0.048857078,0.004320694,-0.048857078,0.015039339,-0.029580137,0.025924165,0.018861491,-0.014706978,0.000576439,-0.031241942,0.0307434,0.0153717,0.014706978,0.028084511,-0.01238045,-0.031241942,0.018196769,-0.034897912,0.008142847,0.010718645,0.00922302,0.047859997,-0.00072704,-0.010427829,0.007104218,0.026256526,0.012214269,-0.013377533,-0.05184833,0.005276232,0.021935832,-0.007021128,0.009804652,0.007893575,0.024096178,-0.002357686,0.033900831,-0.031740483,0.034565553,-0.036892079,-0.015454791,0.030411039,0.010552464,-0.022268193,-0.001391762,-0.008184392,-0.008558298,0.008475208,-0.009929287,0.010427829,0.041378956,-0.009555381,-0.008724478,-0.039052427,0.034731735,-0.014291527,0.023099095,0.029081594,0.007519669,0.010967916,-0.008142847,0.006190225,-0.031075761,0.033734649,-0.001672192,0.047859997,-0.022434372,-0.007395034,0.01213118,0.056169022,0.002762751,-0.029413955,-0.000763392,-0.015787151,0.010801735,0.008142847,0.029912498,-0.0018176,0.033236109,-0.046198189,-0.002492708,-0.006730312,0.008807569,-0.03655972,0.009430746,-0.053842496,-0.060489718,0.046862911,0.002783524,-0.0187784,0.000571246,0.00760276,0.002482322,0.001319058,-0.014291527,0.001464466,-0.011632638,-0.012463541,-0.004902326,0.000841289,0.006688767,0.030244859,0.018944582,0.000532297,-0.015620971,0.007104218,0.005608593,0.002035712,-0.023763817,0.003032795,0.010594009,-0.023597637,-0.042376038,-0.005255459,0.001199616,-0.0247609,-0.007893575,-0.011632638,0.013045172,-0.005691683,-0.007104218,0.027419789,-0.004320694,-0.005525503,-0.026090344,0.031408124,-0.012795902,-0.007062673,0.000939959,0.000030185,0.004175286,0.014291527,0.033236109,-0.038720068,0.074116521,-0.019692395,0.001589101,0.013792985,-0.056169022,-0.028749233,-0.001599488,0.004175286,0.014790068,0.00162026,-0.007519669,-0.041378956,0.016534964,-0.003572882,-0.002575798,-0.019526213,-0.00922302,-0.033900831,-0.042043675,-0.014208436,0.010178559,0.017698228,0.032239024,0.00913993,0.009264565,-0.012463541,-0.005857864,-0.015870241,0.004486875,0.018861491,-0.000176567,-0.029912498,0.016784234,0.012546631,0.051183607,0.023597637,0.032903746,0.0153717,-0.013377533,-0.000016634,-0.061486799,-0.034565553,0.016119512,0.00380138,-0.003863698,0.004362239,-0.017532047,-0.002762751,0.000102565,-0.021437289,0.029247776,-0.010718645,-0.015870241,-0.016285693,0.010220103,-0.000373906,0.012962082,0.010137013,-0.007228854,0.02127111,-0.029247776,0.018113678,0.009181475,0.002233051,0.014374617,-0.00396756,0.010801735,0.007644305,0.020855658,0.014790068,0.032737568,-0.037390623,0.003032795,0.010801735,-0.01553788,-0.014790068,0.019526213,-0.017947499,-0.007893575,-0.011964999,-0.00614868,-0.005857864,-0.032072846,-0.025924165,0.001163264,-0.013294443,-0.01553788,0.016701145,-0.013460624,-0.001111332,0.00760276,0.01553788,-0.033734649,0.048192356,-0.003282066,0.031906664,0.002845842,0.003240521,0.017116595,-0.01827986,0.006896493,-0.00760276,-0.009680017,-0.02459472,-0.020689478,-0.053510133,0.00614868,-0.010552464,-0.032405205,-0.0307434,0.025093261,0.003635199,-0.008101301,-0.00606559,-0.007436579,0.00606559,-0.012962082,0.026921248,0.009098385,0.046530552,-0.011632638,0.032571387,-0.033900831,0.009846197,0.002866614,0.032903746,0.008973749,0.012712811,0.040049512,0.013626805,-0.026256526,-0.031408124,0.036227357,0.011964999,-0.006024044,-0.001848759,0.015704062,-0.021188019,-0.035064094,-0.013377533,-0.009721561,-0.01553788,0.008766023,0.005400868,0.004507647,-0.018362951,-0.026588887,-0.00913993,-0.025591804,0.035894997,0.021935832,-0.031906664,-0.000602404,0.026422706,-0.006397951,0.006647222,0.0093892,0.020606387,0.00913993,0.015620971,-0.024096178,0.00063616,-0.006564131,0.01238045,-0.013709894,0.000563456,-0.009887742,0.016618054,-0.003323611,0.000451803,0.001609874,0.008682934,0.025259443,0.020024756,-0.027253609,0.010884825,0.028250692,-0.054839578,0.033568468,-0.004902326,0.003053567,0.020274026,-0.015704062,-0.00614868,-0.063813329,0.002482322,0.009763107,-0.001609874,-0.012214269,0.020107845,0.001921462,0.018695312,-0.004923099,0.007270399,-0.023763817,0.005234687,0.003406701,0.002565412,0.007104218,0.000841289,0.016202603,0.01827986,-0.031075761,-0.035562634,-0.025259443,-0.007021128,0.000641353,-0.033069927,0.010718645,0.005650138,0.024927082,-0.002658889,0.00380138,0.009929287,-0.004258377,-0.039717149,-0.022434372,0.025425622,0.00198378,0.006356406,0.017615138,-0.032072846,0.046862911,-0.026921248,0.005940954,0.021603471,-0.002253824,0.002825069,-0.030411039,-0.003115885,0.023597637,-0.004320694,-0.007852031,0.018030589,-0.008724478,-0.005733229,0.032903746,0.013876075,0.015454791,-0.023597637,0.005151597,-0.035396457,0.02176965,-0.012463541,0.025591804,0.014540797,-0.027918331,0.004154514,0.008724478,0.016036423,-0.015870241,0.005400868,-0.017365867,-0.044868745,-0.000485559,0.020357117,-0.00760276,-0.023265276,-0.012048089,0.008433662,0.018362951,-0.006979583,0.0307434,0.008392117,0.027087428,-0.019360034,0.016119512,0.02127111,0.010801735,0.00299125,0.002949705,0.012463541,-0.000025966,0.015953332,0.029413955,0.020024756,0.003780607,0.022102011,-0.031740483,0.01553788,0.010386284,0.028749233,-0.010884825,0.008682934,-0.003531337,-0.05517194,-0.019360034,-0.009347656,-0.002025325,0.003261293,-0.025425622,-0.01553788,-0.000251867,0.014291527,0.012546631,0.035728816,-0.007062673,-0.006605676,0.000384293,-0.005047734,-0.032571387,-0.021188019,-0.02127111,-0.016036423,0.008475208,-0.004009106,0.014291527,-0.008101301,0.004424557,-0.038221523,-0.019360034,0.015039339,-0.015454791,-0.029580137,0.035728816,0.004466102,-0.000778971,-0.005068507,-0.017781317,0.00477769,0.001838372,0.030244859,0.01213118,-0.022932915,-0.005359322,0.037390623,0.005899409,0.002046098,0.037889164,0.016701145,0.010303194,0.02127111,-0.009513836,-0.022268193,-0.005650138,-0.00388447,0.016534964,-0.023265276,-0.00054528,0.004819236,0.004715373,-0.001178843,-0.051183607,-0.00614868,-0.010552464,-0.002741979,-0.009181475,0.023597637,0.019193852,0.017199686,-0.036393538,-0.00243039,-0.015870241,-0.014706978,-0.00145408,0.016368784,-0.011632638,-0.014623888,-0.01229736,-0.01553788,0.040880412,0.023929998,-0.014623888,0.002648502,0.031906664,-0.033734649,-0.026755067,0.002783524,0.005359322,0.009970833,0.001412535,0.016950415,0.016285693,-0.006730312,-0.02459472,0.050851244,-0.001827986,-0.020855658,0.020938748,0.004071423,-0.021603471,-0.007852031,-0.023929998,-0.029912498,-0.003365156,0.017365867,-0.010427829,-0.011715728,0.014956249,0.011383367,0.032405205,-0.028583053,-0.017448956,0.018446039,0.017615138,0.035728816,-0.010095468,-0.00254464,0.010012378,0.028250692,-0.020855658,-0.002305755,-0.001002276,-0.014125346,-0.007021128,-0.028583053,-0.045533467,-0.02758597,-0.020440206,0.001350217,0.010053922,0.020689478,-0.017615138,0.026422706,0.040880412,0.012463541,-0.010718645,-0.014706978,0.068134025,0.038720068,0.047859997,-0.012546631,0.015704062,-0.002087643,-0.010303194,0.014790068,0.018612221,0.007395034,-0.014790068,-0.017864408,-0.005068507,-0.054507218,0.004902326,-0.004050651,0.021603471,0.019775484,-0.024262359,-0.012795902,0.021935832,-0.004009106,-0.039717149,0.037556801,-0.016701145,-0.025757983,0.005483958,-0.005110051,-0.021935832,-0.003406701,0.010594009,0.015787151,-0.049854163,0.007727395,-0.008392117,-0.017199686,0.009970833,-0.008849114,-0.013876075,-0.0059825,-0.015870241,-0.007104218,0.028250692,-0.029081594,0.026921248,0.00299125,-0.017781317,0.042542219,0.018196769,0.052845411,-0.004819236,-0.014125346,0.02459472,-0.011715728,0.015787151,-0.005774774,0.004902326,-0.004964644,-0.02758597,-0.013959166,-0.033568468,-0.027918331,-0.017698228,0.003489791,-0.020024756,-0.021603471,0.019360034,0.028084511,-0.002503094,-0.018861491,-0.002295369,0.050851244,-0.020689478,-0.000459593,-0.026090344,0.002783524,-0.005899409,-0.026921248,-0.0093892,-0.004112968,0.031574301,0.003926015,-0.032903746,-0.046198189,-0.019027673,-0.00913993,0.030411039,-0.019443123,0.001963008,-0.005193142,0.010884825,-0.02127111,-0.025259443,0.032737568,0.00089322,0.003282066,0.001713737,-0.006439496,0.016867325,-0.031574301,0.031075761,-0.009970833,0.022600554,-0.023597637,-0.014956249,0.004009106,0.00198378,0.026588887,-0.023431456,-0.023763817,-0.013294443,-0.029746316,0.001381376,-0.042874578,-0.00913993,0.014873158,0.016202603,0.012878992,-0.006024044,0.009638472,0.010552464,-0.017033506,-0.027087428,0.044536386,-0.038055345,0.001329444,-0.019609304,0.023597637,-0.043206941,0.040049512,0.017615138,0.046862911,0.02127111,0.013294443,-0.039550968,-0.018861491,-0.019609304,-0.033734649,0.00623177,-0.017199686,0.041212775,-0.017781317,-0.024262359,0.054507218,-0.009721561,0.005816319,-0.00206687,-0.008766023,0.017365867,-0.000737426,0.018362951,-0.023597637,-0.019110762,0.021935832,0.041545134,-0.020357117,-0.017615138,0.044868745,-0.018030589,-0.032405205,-0.050186522,-0.014540797,0.005213914,-0.006688767,0.047527634,0.040714234], + "numCandidates": 150, + "limit": 10, + "quantization": "scalar" + } + }, + { + "$project": { + "_id": 0, + "plot": 1, + "title": 1, + "score": { $meta: "vectorSearchScore" } + } + } +]); +EOF +) + +kubectl exec --context "${K8S_CTX}" -n "${MDB_NS}" mongodb-tools-pod -- /bin/bash -eu -c "$(cat < /tmp/mdb_script.js +mongosh --quiet "${MDB_CONNECTION_STRING}" < /tmp/mdb_script.js +EOF +)" diff --git a/docs/search/03-search-query-usage/code_snippets/03_9010_delete_namespace.sh b/docs/search/03-search-query-usage/code_snippets/03_9010_delete_namespace.sh new file mode 100755 index 000000000..2d28e4bb7 --- /dev/null +++ b/docs/search/03-search-query-usage/code_snippets/03_9010_delete_namespace.sh @@ -0,0 +1 @@ +kubectl --context "${K8S_CTX}" delete namespace "${MDB_NS}" diff --git a/docs/search/03-search-query-usage/env_variables.sh b/docs/search/03-search-query-usage/env_variables.sh new file mode 100644 index 000000000..af6bd874c --- /dev/null +++ b/docs/search/03-search-query-usage/env_variables.sh @@ -0,0 +1,20 @@ +# The env vars here are all commented out because this snippets module +# is reusable across different MongoDB deployments and all the necessary variables +# should be already defined there. + +# set it to the context name of the k8s cluster +#export K8S_CTX="" +# the following namespace will be used to deploy mongodb tools pod +#export MDB_NS="mongodb" + +# regular user performing restore and search queries on sample mflix database +# the user should be able to restore database using mongorestore +#export MDB_USER_PASSWORD="mdb-user-password-CHANGE-ME" + +# name of MongoDB or MongoDBCommunity resource in case it's deployed in the same cluster +# user only for the connection string in MDB_CONNECTION_STRING env var below +#export MDB_RESOURCE_NAME="mdbc-rs" + +# default connection string if MongoDB database is deployed using the operator +#export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_RESOURCE_NAME}-0.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=${MDB_RESOURCE_NAME}" + diff --git a/docs/search/03-search-query-usage/test.sh b/docs/search/03-search-query-usage/test.sh new file mode 100755 index 000000000..28e430eb0 --- /dev/null +++ b/docs/search/03-search-query-usage/test.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source "${script_dir}/../../../scripts/code_snippets/sample_test_runner.sh" + +cd "${script_dir}" + +prepare_snippets + +run 03_0410_run_mongodb_tools_pod.sh +run_for_output 03_0420_import_movies_mflix_database.sh +run 03_0430_create_search_index.sh +run 03_0435_create_vector_search_index.sh +run_for_output 03_0440_wait_for_search_index_ready.sh +run_for_output 03_0444_list_search_indexes.sh +run_for_output 03_0445_list_vector_search_indexes.sh +run_for_output 03_0450_execute_search_query.sh +run_for_output 03_0455_execute_vector_search_query.sh + +cd - diff --git a/mongodb-community-operator/controllers/replica_set_controller.go b/mongodb-community-operator/controllers/replica_set_controller.go index 9246e4ebb..67e062648 100644 --- a/mongodb-community-operator/controllers/replica_set_controller.go +++ b/mongodb-community-operator/controllers/replica_set_controller.go @@ -715,8 +715,8 @@ func (r ReplicaSetReconciler) buildAutomationConfig(ctx context.Context, mdb mdb // and that this resource passes search validations. If either fails, proceed without a search target // for the mongod automation config. if len(searchList.Items) == 1 { - searchSource := search_controller.NewSearchSourceDBResourceFromMongoDBCommunity(&mdb) - if searchSource.ValidateMongoDBVersion() == nil { + searchSource := search_controller.NewCommunityResourceSearchSource(&mdb) + if searchSource.Validate() == nil { search = &searchList.Items[0] } } diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/output/1210_verify_mongosh_connection.out b/public/architectures/mongodb-replicaset-mc-no-mesh/output/1210_verify_mongosh_connection.out deleted file mode 100644 index 15875e92a..000000000 --- a/public/architectures/mongodb-replicaset-mc-no-mesh/output/1210_verify_mongosh_connection.out +++ /dev/null @@ -1,15 +0,0 @@ -{ - authInfo: { - authenticatedUsers: [ { user: 'rs-user', db: 'admin' } ], - authenticatedUserRoles: [ { role: 'root', db: 'admin' } ] - }, - ok: 1, - '$clusterTime': { - clusterTime: Timestamp({ t: 1751960325, i: 1 }), - signature: { - hash: Binary.createFromBase64('1zdo7WUvUyl6qvurToyZCoOwmdY=', 0), - keyId: Long('7524612286879629318') - } - }, - operationTime: Timestamp({ t: 1751960325, i: 1 }) -} diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/test.sh b/public/architectures/mongodb-replicaset-mc-no-mesh/test.sh deleted file mode 100755 index 4b7622391..000000000 --- a/public/architectures/mongodb-replicaset-mc-no-mesh/test.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 1050_generate_certs.sh -run 1100_mongodb_replicaset_multi_cluster.sh -run 1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh - -run 1200_create_mongodb_user.sh -sleep 10 -run_for_output 1210_verify_mongosh_connection.sh - -popd diff --git a/public/architectures/mongodb-replicaset-multi-cluster/output/1210_verify_mongosh_connection.out b/public/architectures/mongodb-replicaset-multi-cluster/output/1210_verify_mongosh_connection.out deleted file mode 100644 index 8fd3ba143..000000000 --- a/public/architectures/mongodb-replicaset-multi-cluster/output/1210_verify_mongosh_connection.out +++ /dev/null @@ -1,15 +0,0 @@ -{ - authInfo: { - authenticatedUsers: [ { user: 'rs-user', db: 'admin' } ], - authenticatedUserRoles: [ { role: 'root', db: 'admin' } ] - }, - ok: 1, - '$clusterTime': { - clusterTime: Timestamp({ t: 1747925179, i: 1 }), - signature: { - hash: Binary.createFromBase64('T1ZP+QUFgBXayfOsRI6XFdEmjKI=', 0), - keyId: Long('7507281432415305733') - } - }, - operationTime: Timestamp({ t: 1747925179, i: 1 }) -} diff --git a/public/architectures/mongodb-replicaset-multi-cluster/test.sh b/public/architectures/mongodb-replicaset-multi-cluster/test.sh deleted file mode 100755 index 4b7622391..000000000 --- a/public/architectures/mongodb-replicaset-multi-cluster/test.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 1050_generate_certs.sh -run 1100_mongodb_replicaset_multi_cluster.sh -run 1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh - -run 1200_create_mongodb_user.sh -sleep 10 -run_for_output 1210_verify_mongosh_connection.sh - -popd diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/output/2210_verify_mongosh_connection.out b/public/architectures/mongodb-sharded-mc-no-mesh/output/2210_verify_mongosh_connection.out deleted file mode 100644 index a1ebea3a0..000000000 --- a/public/architectures/mongodb-sharded-mc-no-mesh/output/2210_verify_mongosh_connection.out +++ /dev/null @@ -1,15 +0,0 @@ -{ - authInfo: { - authenticatedUsers: [ { user: 'sc-user', db: 'admin' } ], - authenticatedUserRoles: [ { role: 'root', db: 'admin' } ] - }, - ok: 1, - '$clusterTime': { - clusterTime: Timestamp({ t: 1751960997, i: 1 }), - signature: { - hash: Binary.createFromBase64('nqvfLcd6LgzPn3D2ZvGFBF6xcdw=', 0), - keyId: Long('7524614838090203143') - } - }, - operationTime: Timestamp({ t: 1751960997, i: 1 }) -} diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/test.sh b/public/architectures/mongodb-sharded-mc-no-mesh/test.sh deleted file mode 100755 index d45db935c..000000000 --- a/public/architectures/mongodb-sharded-mc-no-mesh/test.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 2050_generate_certs.sh -run 2100_mongodb_sharded_multi_cluster.sh -run 2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh - -run 2200_create_mongodb_user.sh -sleep 10 -run_for_output 2210_verify_mongosh_connection.sh - -popd diff --git a/public/architectures/mongodb-sharded-multi-cluster/output/2210_verify_mongosh_connection.out b/public/architectures/mongodb-sharded-multi-cluster/output/2210_verify_mongosh_connection.out deleted file mode 100644 index 664ae8d80..000000000 --- a/public/architectures/mongodb-sharded-multi-cluster/output/2210_verify_mongosh_connection.out +++ /dev/null @@ -1,15 +0,0 @@ -{ - authInfo: { - authenticatedUsers: [ { user: 'sc-user', db: 'admin' } ], - authenticatedUserRoles: [ { role: 'root', db: 'admin' } ] - }, - ok: 1, - '$clusterTime': { - clusterTime: Timestamp({ t: 1747926002, i: 2 }), - signature: { - hash: Binary.createFromBase64('txVMxsU5ZT7eK/o9G3nqe96BdiY=', 0), - keyId: Long('7507284709475352599') - } - }, - operationTime: Timestamp({ t: 1747926002, i: 2 }) -} diff --git a/public/architectures/mongodb-sharded-multi-cluster/test.sh b/public/architectures/mongodb-sharded-multi-cluster/test.sh deleted file mode 100755 index d45db935c..000000000 --- a/public/architectures/mongodb-sharded-multi-cluster/test.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 2050_generate_certs.sh -run 2100_mongodb_sharded_multi_cluster.sh -run 2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh - -run 2200_create_mongodb_user.sh -sleep 10 -run_for_output 2210_verify_mongosh_connection.sh - -popd diff --git a/public/architectures/ops-manager-mc-no-mesh/output/0150_om_load_balancer.out b/public/architectures/ops-manager-mc-no-mesh/output/0150_om_load_balancer.out deleted file mode 100644 index 2c9773b92..000000000 --- a/public/architectures/ops-manager-mc-no-mesh/output/0150_om_load_balancer.out +++ /dev/null @@ -1,10 +0,0 @@ -NAME NETWORK DIRECTION PRIORITY ALLOW DENY DISABLED -fw-ops-manager-hc default INGRESS 1000 tcp:8443 False -NAME PROTOCOL -om-healthcheck HTTPS -NAME BACKENDS PROTOCOL -om-backend-service HTTPS -NAME DEFAULT_SERVICE -om-url-map backendServices/om-backend-service -NAME SSL_CERTIFICATES URL_MAP REGION CERTIFICATE_MAP -om-lb-proxy om-certificate om-url-map diff --git a/public/architectures/ops-manager-mc-no-mesh/output/0330_ops_manager_wait_for_running_state.out b/public/architectures/ops-manager-mc-no-mesh/output/0330_ops_manager_wait_for_running_state.out deleted file mode 100644 index 7230ebd38..000000000 --- a/public/architectures/ops-manager-mc-no-mesh/output/0330_ops_manager_wait_for_running_state.out +++ /dev/null @@ -1,22 +0,0 @@ -Waiting for Application Database to reach Running phase... -mongodbopsmanager.mongodb.com/om condition met - -Waiting for Ops Manager to reach Running phase... -mongodbopsmanager.mongodb.com/om condition met - -MongoDBOpsManager resource -NAME REPLICAS VERSION STATE (OPSMANAGER) STATE (APPDB) STATE (BACKUP) AGE WARNINGS -om 8.0.5 Running Running Disabled 16m - -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 -NAME READY STATUS RESTARTS AGE -om-0-0 1/1 Running 0 12m -om-db-0-0 3/3 Running 0 3m49s -om-db-0-1 3/3 Running 0 4m51s - -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-686cc1e099f9ef000722c191-862 -NAME READY STATUS RESTARTS AGE -om-1-0 1/1 Running 0 12m -om-1-1 1/1 Running 0 8m -om-db-1-0 3/3 Running 0 106s -om-db-1-1 3/3 Running 0 2m50s diff --git a/public/architectures/ops-manager-mc-no-mesh/output/0522_ops_manager_wait_for_running_state.out b/public/architectures/ops-manager-mc-no-mesh/output/0522_ops_manager_wait_for_running_state.out deleted file mode 100644 index b28afaad6..000000000 --- a/public/architectures/ops-manager-mc-no-mesh/output/0522_ops_manager_wait_for_running_state.out +++ /dev/null @@ -1,30 +0,0 @@ - -Waiting for Backup to reach Running phase... -mongodbopsmanager.mongodb.com/om condition met -Waiting for Application Database to reach Running phase... -mongodbopsmanager.mongodb.com/om condition met - -Waiting for Ops Manager to reach Running phase... -mongodbopsmanager.mongodb.com/om condition met - -MongoDBOpsManager resource -NAME REPLICAS VERSION STATE (OPSMANAGER) STATE (APPDB) STATE (BACKUP) AGE WARNINGS -om 8.0.5 Running Running Running 20m - -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 -NAME READY STATUS RESTARTS AGE -om-0-0 1/1 Running 0 16m -om-db-0-0 3/3 Running 0 8m3s -om-db-0-1 3/3 Running 0 9m5s - -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-686cc1e099f9ef000722c191-862 -NAME READY STATUS RESTARTS AGE -om-1-0 1/1 Running 0 16m -om-1-1 1/1 Running 0 12m -om-db-1-0 3/3 Running 0 6m -om-db-1-1 3/3 Running 0 7m4s - -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-686cc1e099f9ef000722c191-862 -NAME READY STATUS RESTARTS AGE -om-2-backup-daemon-0 1/1 Running 0 3m50s -om-db-2-0 3/3 Running 0 5m1s diff --git a/public/architectures/ops-manager-mc-no-mesh/test.sh b/public/architectures/ops-manager-mc-no-mesh/test.sh deleted file mode 100755 index 4c8e92a6f..000000000 --- a/public/architectures/ops-manager-mc-no-mesh/test.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 0100_generate_certs.sh -run 0110_add_cert_to_gcp.sh - -run_for_output 0150_om_load_balancer.sh - -run 0160_add_dns_record.sh - -run 0300_ops_manager_create_admin_credentials.sh - -run 0320_ops_manager_no_mesh.sh - -run_for_output 0321_ops_manager_wait_for_pending_state.sh - -run 0325_set_up_lb_services.sh -run 0326_set_up_lb_services.sh - -run_for_output 0330_ops_manager_wait_for_running_state.sh - -run 0400_install_minio_s3.sh -run 0500_ops_manager_prepare_s3_backup_secrets.sh -run 0510_ops_manager_enable_s3_backup.sh -run_for_output 0522_ops_manager_wait_for_running_state.sh - -run 0610_create_mdb_org_and_get_credentials.sh - -popd diff --git a/public/architectures/ops-manager-multi-cluster/output/0321_ops_manager_wait_for_pending_state.out b/public/architectures/ops-manager-multi-cluster/output/0321_ops_manager_wait_for_pending_state.out deleted file mode 100644 index 0e3908c8c..000000000 --- a/public/architectures/ops-manager-multi-cluster/output/0321_ops_manager_wait_for_pending_state.out +++ /dev/null @@ -1,4 +0,0 @@ -Waiting for Application Database to reach Pending phase... -mongodbopsmanager.mongodb.com/om condition met -Waiting for Ops Manager to reach Pending phase... -mongodbopsmanager.mongodb.com/om condition met diff --git a/public/architectures/ops-manager-multi-cluster/test.sh b/public/architectures/ops-manager-multi-cluster/test.sh deleted file mode 100755 index 760f5837e..000000000 --- a/public/architectures/ops-manager-multi-cluster/test.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 0250_generate_certs.sh - -run 0300_ops_manager_create_admin_credentials.sh -run 0310_ops_manager_deploy_on_single_member_cluster.sh -run_for_output 0311_ops_manager_wait_for_pending_state.sh -run_for_output 0312_ops_manager_wait_for_running_state.sh -run 0320_ops_manager_add_second_cluster.sh -run_for_output 0321_ops_manager_wait_for_pending_state.sh -run_for_output 0322_ops_manager_wait_for_running_state.sh - -run 0400_install_minio_s3.sh -run 0500_ops_manager_prepare_s3_backup_secrets.sh -run 0510_ops_manager_enable_s3_backup.sh -run_for_output 0522_ops_manager_wait_for_running_state.sh - -run 0610_create_mdb_org_and_get_credentials.sh - -popd diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0250_generate_certs.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0250_generate_certs.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0250_generate_certs.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0250_generate_certs.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0300_ops_manager_create_admin_credentials.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0300_ops_manager_create_admin_credentials.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0300_ops_manager_create_admin_credentials.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0300_ops_manager_create_admin_credentials.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0310_ops_manager_deploy_on_single_member_cluster.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0310_ops_manager_deploy_on_single_member_cluster.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0310_ops_manager_deploy_on_single_member_cluster.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0310_ops_manager_deploy_on_single_member_cluster.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0311_ops_manager_wait_for_pending_state.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0311_ops_manager_wait_for_pending_state.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0311_ops_manager_wait_for_pending_state.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0311_ops_manager_wait_for_pending_state.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0330_ops_manager_wait_for_running_state.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0312_ops_manager_wait_for_running_state.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0330_ops_manager_wait_for_running_state.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0312_ops_manager_wait_for_running_state.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0320_ops_manager_add_second_cluster.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0320_ops_manager_add_second_cluster.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0320_ops_manager_add_second_cluster.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0320_ops_manager_add_second_cluster.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0321_ops_manager_wait_for_pending_state.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0321_ops_manager_wait_for_pending_state.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0321_ops_manager_wait_for_pending_state.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0321_ops_manager_wait_for_pending_state.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0322_ops_manager_wait_for_running_state.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0322_ops_manager_wait_for_running_state.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0322_ops_manager_wait_for_running_state.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0322_ops_manager_wait_for_running_state.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0400_install_minio_s3.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0400_install_minio_s3.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0400_install_minio_s3.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0400_install_minio_s3.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0500_ops_manager_prepare_s3_backup_secrets.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0500_ops_manager_prepare_s3_backup_secrets.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0500_ops_manager_prepare_s3_backup_secrets.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0500_ops_manager_prepare_s3_backup_secrets.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0510_ops_manager_enable_s3_backup.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0510_ops_manager_enable_s3_backup.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0510_ops_manager_enable_s3_backup.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0510_ops_manager_enable_s3_backup.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0522_ops_manager_wait_for_running_state.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0522_ops_manager_wait_for_running_state.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0522_ops_manager_wait_for_running_state.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0522_ops_manager_wait_for_running_state.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0610_create_mdb_org_and_get_credentials.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0610_create_mdb_org_and_get_credentials.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0610_create_mdb_org_and_get_credentials.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_0610_create_mdb_org_and_get_credentials.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/9100_delete_backup_namespaces.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_9100_delete_backup_namespaces.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/9100_delete_backup_namespaces.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_9100_delete_backup_namespaces.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/9200_delete_om.sh b/public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_9200_delete_om.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/9200_delete_om.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/code_snippets/ra-06_9200_delete_om.sh diff --git a/public/architectures/ops-manager-multi-cluster/env_variables.sh b/public/architectures/ra-06-ops-manager-multi-cluster/env_variables.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/env_variables.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/env_variables.sh diff --git a/public/architectures/ops-manager-multi-cluster/teardown.sh b/public/architectures/ra-06-ops-manager-multi-cluster/teardown.sh similarity index 75% rename from public/architectures/ops-manager-multi-cluster/teardown.sh rename to public/architectures/ra-06-ops-manager-multi-cluster/teardown.sh index cb0389a60..573a27b4a 100755 --- a/public/architectures/ops-manager-multi-cluster/teardown.sh +++ b/public/architectures/ra-06-ops-manager-multi-cluster/teardown.sh @@ -11,8 +11,8 @@ pushd "${script_dir}" prepare_snippets -run 9100_delete_backup_namespaces.sh & -run 9200_delete_om.sh & +run ra-06_9100_delete_backup_namespaces.sh & +run ra-06_9200_delete_om.sh & wait popd diff --git a/public/architectures/ra-06-ops-manager-multi-cluster/test.sh b/public/architectures/ra-06-ops-manager-multi-cluster/test.sh new file mode 100755 index 000000000..eb08178f3 --- /dev/null +++ b/public/architectures/ra-06-ops-manager-multi-cluster/test.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-06_0250_generate_certs.sh + +run ra-06_0300_ops_manager_create_admin_credentials.sh +run ra-06_0310_ops_manager_deploy_on_single_member_cluster.sh +run_for_output ra-06_0311_ops_manager_wait_for_pending_state.sh +run_for_output ra-06_0312_ops_manager_wait_for_running_state.sh +run ra-06_0320_ops_manager_add_second_cluster.sh +run_for_output ra-06_0321_ops_manager_wait_for_pending_state.sh +run_for_output ra-06_0322_ops_manager_wait_for_running_state.sh + +run ra-06_0400_install_minio_s3.sh +run ra-06_0500_ops_manager_prepare_s3_backup_secrets.sh +run ra-06_0510_ops_manager_enable_s3_backup.sh +run_for_output ra-06_0522_ops_manager_wait_for_running_state.sh + +run ra-06_0610_create_mdb_org_and_get_credentials.sh + +popd diff --git a/public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1050_generate_certs.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1050_generate_certs.sh similarity index 100% rename from public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1050_generate_certs.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1050_generate_certs.sh diff --git a/public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1100_mongodb_replicaset_multi_cluster.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1100_mongodb_replicaset_multi_cluster.sh similarity index 100% rename from public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1100_mongodb_replicaset_multi_cluster.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1100_mongodb_replicaset_multi_cluster.sh diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh similarity index 100% rename from public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1200_create_mongodb_user.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1200_create_mongodb_user.sh similarity index 100% rename from public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1200_create_mongodb_user.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1200_create_mongodb_user.sh diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1210_verify_mongosh_connection.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1210_verify_mongosh_connection.sh similarity index 100% rename from public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1210_verify_mongosh_connection.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_1210_verify_mongosh_connection.sh diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/9000_delete_resources.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_9000_delete_resources.sh similarity index 100% rename from public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/9000_delete_resources.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/code_snippets/ra-07_9000_delete_resources.sh diff --git a/public/architectures/mongodb-replicaset-multi-cluster/env_variables.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/env_variables.sh similarity index 100% rename from public/architectures/mongodb-replicaset-multi-cluster/env_variables.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/env_variables.sh diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/teardown.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/teardown.sh similarity index 86% rename from public/architectures/mongodb-replicaset-mc-no-mesh/teardown.sh rename to public/architectures/ra-07-mongodb-replicaset-multi-cluster/teardown.sh index dd5dd71a8..7695b3849 100755 --- a/public/architectures/mongodb-replicaset-mc-no-mesh/teardown.sh +++ b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/teardown.sh @@ -11,6 +11,6 @@ pushd "${script_dir}" prepare_snippets -run 9000_delete_resources.sh +run ra-07_9000_delete_resources.sh popd diff --git a/public/architectures/ra-07-mongodb-replicaset-multi-cluster/test.sh b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/test.sh new file mode 100755 index 000000000..a49ca11f3 --- /dev/null +++ b/public/architectures/ra-07-mongodb-replicaset-multi-cluster/test.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-07_1050_generate_certs.sh +run ra-07_1100_mongodb_replicaset_multi_cluster.sh +run ra-07_1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh + +run ra-07_1200_create_mongodb_user.sh +sleep 10 +run_for_output ra-07_1210_verify_mongosh_connection.sh + +popd diff --git a/public/architectures/mongodb-sharded-multi-cluster/code_snippets/2050_generate_certs.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2050_generate_certs.sh similarity index 100% rename from public/architectures/mongodb-sharded-multi-cluster/code_snippets/2050_generate_certs.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2050_generate_certs.sh diff --git a/public/architectures/mongodb-sharded-multi-cluster/code_snippets/2100_mongodb_sharded_multi_cluster.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2100_mongodb_sharded_multi_cluster.sh similarity index 100% rename from public/architectures/mongodb-sharded-multi-cluster/code_snippets/2100_mongodb_sharded_multi_cluster.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2100_mongodb_sharded_multi_cluster.sh diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh similarity index 100% rename from public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2200_create_mongodb_user.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2200_create_mongodb_user.sh similarity index 100% rename from public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2200_create_mongodb_user.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2200_create_mongodb_user.sh diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2210_verify_mongosh_connection.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2210_verify_mongosh_connection.sh similarity index 100% rename from public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2210_verify_mongosh_connection.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_2210_verify_mongosh_connection.sh diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/9000_delete_resources.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_9000_delete_resources.sh similarity index 100% rename from public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/9000_delete_resources.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/code_snippets/ra-08_9000_delete_resources.sh diff --git a/public/architectures/mongodb-sharded-multi-cluster/env_variables.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/env_variables.sh similarity index 100% rename from public/architectures/mongodb-sharded-multi-cluster/env_variables.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/env_variables.sh diff --git a/public/architectures/mongodb-replicaset-multi-cluster/teardown.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/teardown.sh similarity index 86% rename from public/architectures/mongodb-replicaset-multi-cluster/teardown.sh rename to public/architectures/ra-08-mongodb-sharded-multi-cluster/teardown.sh index dd5dd71a8..9b70289c8 100755 --- a/public/architectures/mongodb-replicaset-multi-cluster/teardown.sh +++ b/public/architectures/ra-08-mongodb-sharded-multi-cluster/teardown.sh @@ -11,6 +11,6 @@ pushd "${script_dir}" prepare_snippets -run 9000_delete_resources.sh +run ra-08_9000_delete_resources.sh popd diff --git a/public/architectures/ra-08-mongodb-sharded-multi-cluster/test.sh b/public/architectures/ra-08-mongodb-sharded-multi-cluster/test.sh new file mode 100755 index 000000000..3c3a49294 --- /dev/null +++ b/public/architectures/ra-08-mongodb-sharded-multi-cluster/test.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-08_2050_generate_certs.sh +run ra-08_2100_mongodb_sharded_multi_cluster.sh +run ra-08_2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh + +run ra-08_2200_create_mongodb_user.sh +sleep 10 +run_for_output ra-08_2210_verify_mongosh_connection.sh + +popd diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0100_generate_certs.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0100_generate_certs.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0100_generate_certs.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0100_generate_certs.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0110_add_cert_to_gcp.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0110_add_cert_to_gcp.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0110_add_cert_to_gcp.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0110_add_cert_to_gcp.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0150_om_load_balancer.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0150_om_load_balancer.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0150_om_load_balancer.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0150_om_load_balancer.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0160_add_dns_record.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0160_add_dns_record.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0160_add_dns_record.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0160_add_dns_record.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0300_ops_manager_create_admin_credentials.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0300_ops_manager_create_admin_credentials.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0300_ops_manager_create_admin_credentials.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0300_ops_manager_create_admin_credentials.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0320_ops_manager_no_mesh.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0320_ops_manager_no_mesh.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0320_ops_manager_no_mesh.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0320_ops_manager_no_mesh.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0321_ops_manager_wait_for_pending_state.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0321_ops_manager_wait_for_pending_state.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0321_ops_manager_wait_for_pending_state.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0321_ops_manager_wait_for_pending_state.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0325_set_up_lb_services.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0325_set_up_lb_services.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0325_set_up_lb_services.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0325_set_up_lb_services.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0326_set_up_lb_services.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0326_set_up_lb_services.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0326_set_up_lb_services.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0326_set_up_lb_services.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0312_ops_manager_wait_for_running_state.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0330_ops_manager_wait_for_running_state.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0312_ops_manager_wait_for_running_state.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0330_ops_manager_wait_for_running_state.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0400_install_minio_s3.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0400_install_minio_s3.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0400_install_minio_s3.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0400_install_minio_s3.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0500_ops_manager_prepare_s3_backup_secrets.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0500_ops_manager_prepare_s3_backup_secrets.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0500_ops_manager_prepare_s3_backup_secrets.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0500_ops_manager_prepare_s3_backup_secrets.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0510_ops_manager_enable_s3_backup.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0510_ops_manager_enable_s3_backup.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0510_ops_manager_enable_s3_backup.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0510_ops_manager_enable_s3_backup.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/0522_ops_manager_wait_for_running_state.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0522_ops_manager_wait_for_running_state.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/0522_ops_manager_wait_for_running_state.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0522_ops_manager_wait_for_running_state.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/0610_create_mdb_org_and_get_credentials.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0610_create_mdb_org_and_get_credentials.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/0610_create_mdb_org_and_get_credentials.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_0610_create_mdb_org_and_get_credentials.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/code_snippets/9000_cleanup_gke_lb.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_9000_cleanup_gke_lb.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/code_snippets/9000_cleanup_gke_lb.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_9000_cleanup_gke_lb.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/9100_delete_backup_namespaces.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_9100_delete_backup_namespaces.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/9100_delete_backup_namespaces.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_9100_delete_backup_namespaces.sh diff --git a/public/architectures/ops-manager-multi-cluster/code_snippets/9200_delete_om.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_9200_delete_om.sh similarity index 100% rename from public/architectures/ops-manager-multi-cluster/code_snippets/9200_delete_om.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/code_snippets/ra-10_9200_delete_om.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/env_variables.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/env_variables.sh similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/env_variables.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/env_variables.sh diff --git a/public/architectures/ops-manager-mc-no-mesh/teardown.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/teardown.sh similarity index 67% rename from public/architectures/ops-manager-mc-no-mesh/teardown.sh rename to public/architectures/ra-10-ops-manager-mc-no-mesh/teardown.sh index 7719fa13d..c6060f0b1 100755 --- a/public/architectures/ops-manager-mc-no-mesh/teardown.sh +++ b/public/architectures/ra-10-ops-manager-mc-no-mesh/teardown.sh @@ -11,9 +11,9 @@ pushd "${script_dir}" prepare_snippets -run 9000_cleanup_gke_lb.sh & -run 9100_delete_backup_namespaces.sh & -run 9200_delete_om.sh & +run ra-10_9000_cleanup_gke_lb.sh & +run ra-10_9100_delete_backup_namespaces.sh & +run ra-10_9200_delete_om.sh & wait popd diff --git a/public/architectures/ra-10-ops-manager-mc-no-mesh/test.sh b/public/architectures/ra-10-ops-manager-mc-no-mesh/test.sh new file mode 100755 index 000000000..ff7731845 --- /dev/null +++ b/public/architectures/ra-10-ops-manager-mc-no-mesh/test.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-10_0100_generate_certs.sh +sleep 10 # wait for cert-manager to generate secrets + +run ra-10_0110_add_cert_to_gcp.sh + +run_for_output ra-10_0150_om_load_balancer.sh + +run ra-10_0160_add_dns_record.sh + +run ra-10_0300_ops_manager_create_admin_credentials.sh + +run ra-10_0320_ops_manager_no_mesh.sh + +run_for_output ra-10_0321_ops_manager_wait_for_pending_state.sh + +run ra-10_0325_set_up_lb_services.sh +run ra-10_0326_set_up_lb_services.sh + +run_for_output ra-10_0330_ops_manager_wait_for_running_state.sh + +run ra-10_0400_install_minio_s3.sh +run ra-10_0500_ops_manager_prepare_s3_backup_secrets.sh +run ra-10_0510_ops_manager_enable_s3_backup.sh +run_for_output ra-10_0522_ops_manager_wait_for_running_state.sh + +run ra-10_0610_create_mdb_org_and_get_credentials.sh + +popd diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2050_generate_certs.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2050_generate_certs.sh similarity index 100% rename from public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2050_generate_certs.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2050_generate_certs.sh diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2100_mongodb_sharded_multi_cluster.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2100_mongodb_sharded_multi_cluster.sh similarity index 100% rename from public/architectures/mongodb-sharded-mc-no-mesh/code_snippets/2100_mongodb_sharded_multi_cluster.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2100_mongodb_sharded_multi_cluster.sh diff --git a/public/architectures/mongodb-sharded-multi-cluster/code_snippets/2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh similarity index 100% rename from public/architectures/mongodb-sharded-multi-cluster/code_snippets/2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh diff --git a/public/architectures/mongodb-sharded-multi-cluster/code_snippets/2200_create_mongodb_user.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2200_create_mongodb_user.sh similarity index 100% rename from public/architectures/mongodb-sharded-multi-cluster/code_snippets/2200_create_mongodb_user.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2200_create_mongodb_user.sh diff --git a/public/architectures/mongodb-sharded-multi-cluster/code_snippets/2210_verify_mongosh_connection.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2210_verify_mongosh_connection.sh similarity index 100% rename from public/architectures/mongodb-sharded-multi-cluster/code_snippets/2210_verify_mongosh_connection.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_2210_verify_mongosh_connection.sh diff --git a/public/architectures/mongodb-sharded-multi-cluster/code_snippets/9000_delete_resources.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_9000_delete_resources.sh similarity index 100% rename from public/architectures/mongodb-sharded-multi-cluster/code_snippets/9000_delete_resources.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/code_snippets/ra-11_9000_delete_resources.sh diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/env_variables.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/env_variables.sh similarity index 100% rename from public/architectures/mongodb-sharded-mc-no-mesh/env_variables.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/env_variables.sh diff --git a/public/architectures/mongodb-sharded-mc-no-mesh/teardown.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/teardown.sh similarity index 86% rename from public/architectures/mongodb-sharded-mc-no-mesh/teardown.sh rename to public/architectures/ra-11-mongodb-sharded-mc-no-mesh/teardown.sh index dd5dd71a8..d9423a9cd 100755 --- a/public/architectures/mongodb-sharded-mc-no-mesh/teardown.sh +++ b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/teardown.sh @@ -11,6 +11,6 @@ pushd "${script_dir}" prepare_snippets -run 9000_delete_resources.sh +run ra-11_9000_delete_resources.sh popd diff --git a/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/test.sh b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/test.sh new file mode 100755 index 000000000..917f85714 --- /dev/null +++ b/public/architectures/ra-11-mongodb-sharded-mc-no-mesh/test.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-11_2050_generate_certs.sh +run ra-11_2100_mongodb_sharded_multi_cluster.sh +run ra-11_2110_mongodb_sharded_multi_cluster_wait_for_running_state.sh + +run ra-11_2200_create_mongodb_user.sh +sleep 10 +run_for_output ra-11_2210_verify_mongosh_connection.sh + +popd diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1050_generate_certs.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1050_generate_certs.sh similarity index 100% rename from public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1050_generate_certs.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1050_generate_certs.sh diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1100_mongodb_replicaset_multi_cluster.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1100_mongodb_replicaset_multi_cluster.sh similarity index 100% rename from public/architectures/mongodb-replicaset-mc-no-mesh/code_snippets/1100_mongodb_replicaset_multi_cluster.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1100_mongodb_replicaset_multi_cluster.sh diff --git a/public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh similarity index 100% rename from public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh diff --git a/public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1200_create_mongodb_user.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1200_create_mongodb_user.sh similarity index 100% rename from public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1200_create_mongodb_user.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1200_create_mongodb_user.sh diff --git a/public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1210_verify_mongosh_connection.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1210_verify_mongosh_connection.sh similarity index 100% rename from public/architectures/mongodb-replicaset-multi-cluster/code_snippets/1210_verify_mongosh_connection.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_1210_verify_mongosh_connection.sh diff --git a/public/architectures/mongodb-replicaset-multi-cluster/code_snippets/9000_delete_resources.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_9000_delete_resources.sh similarity index 100% rename from public/architectures/mongodb-replicaset-multi-cluster/code_snippets/9000_delete_resources.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/code_snippets/ra-12_9000_delete_resources.sh diff --git a/public/architectures/mongodb-replicaset-mc-no-mesh/env_variables.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/env_variables.sh similarity index 100% rename from public/architectures/mongodb-replicaset-mc-no-mesh/env_variables.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/env_variables.sh diff --git a/public/architectures/mongodb-sharded-multi-cluster/teardown.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/teardown.sh similarity index 86% rename from public/architectures/mongodb-sharded-multi-cluster/teardown.sh rename to public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/teardown.sh index dd5dd71a8..13940afce 100755 --- a/public/architectures/mongodb-sharded-multi-cluster/teardown.sh +++ b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/teardown.sh @@ -11,6 +11,6 @@ pushd "${script_dir}" prepare_snippets -run 9000_delete_resources.sh +run ra-12_9000_delete_resources.sh popd diff --git a/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/test.sh b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/test.sh new file mode 100755 index 000000000..c53de03b1 --- /dev/null +++ b/public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/test.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-12_1050_generate_certs.sh +run ra-12_1100_mongodb_replicaset_multi_cluster.sh +run ra-12_1110_mongodb_replicaset_multi_cluster_wait_for_running_state.sh + +run ra-12_1200_create_mongodb_user.sh +sleep 10 +run_for_output ra-12_1210_verify_mongosh_connection.sh + +popd diff --git a/public/architectures/setup-multi-cluster/setup-gke/code_snippets/0005_gcloud_set_current_project.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0005_gcloud_set_current_project.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/code_snippets/0005_gcloud_set_current_project.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0005_gcloud_set_current_project.sh diff --git a/public/architectures/setup-multi-cluster/setup-gke/code_snippets/0010_create_gke_cluster_0.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0010_create_gke_cluster_0.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/code_snippets/0010_create_gke_cluster_0.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0010_create_gke_cluster_0.sh diff --git a/public/architectures/setup-multi-cluster/setup-gke/code_snippets/0010_create_gke_cluster_1.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0010_create_gke_cluster_1.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/code_snippets/0010_create_gke_cluster_1.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0010_create_gke_cluster_1.sh diff --git a/public/architectures/setup-multi-cluster/setup-gke/code_snippets/0010_create_gke_cluster_2.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0010_create_gke_cluster_2.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/code_snippets/0010_create_gke_cluster_2.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0010_create_gke_cluster_2.sh diff --git a/public/architectures/setup-multi-cluster/setup-gke/code_snippets/0020_get_gke_credentials.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0020_get_gke_credentials.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/code_snippets/0020_get_gke_credentials.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0020_get_gke_credentials.sh diff --git a/public/architectures/setup-multi-cluster/setup-gke/code_snippets/0030_verify_access_to_clusters.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0030_verify_access_to_clusters.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/code_snippets/0030_verify_access_to_clusters.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_0030_verify_access_to_clusters.sh diff --git a/public/architectures/setup-multi-cluster/setup-gke/code_snippets/9010_delete_gke_clusters.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_9010_delete_gke_clusters.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/code_snippets/9010_delete_gke_clusters.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/code_snippets/ra-01_9010_delete_gke_clusters.sh diff --git a/public/architectures/setup-multi-cluster/setup-gke/env_variables.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-gke/env_variables.sh rename to public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh diff --git a/public/architectures/setup-multi-cluster/ra-01-setup-gke/teardown.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/teardown.sh new file mode 100755 index 000000000..8aad13311 --- /dev/null +++ b/public/architectures/setup-multi-cluster/ra-01-setup-gke/teardown.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-01_9010_delete_gke_clusters.sh + +popd diff --git a/public/architectures/setup-multi-cluster/ra-01-setup-gke/test.sh b/public/architectures/setup-multi-cluster/ra-01-setup-gke/test.sh new file mode 100755 index 000000000..b38509182 --- /dev/null +++ b/public/architectures/setup-multi-cluster/ra-01-setup-gke/test.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-01_0005_gcloud_set_current_project.sh +run ra-01_0010_create_gke_cluster_0.sh & +run ra-01_0010_create_gke_cluster_1.sh & +run ra-01_0010_create_gke_cluster_2.sh & +wait + +run ra-01_0020_get_gke_credentials.sh +run_for_output ra-01_0030_verify_access_to_clusters.sh + +popd diff --git a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/0045_create_namespaces.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0045_create_namespaces.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/code_snippets/0045_create_namespaces.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0045_create_namespaces.sh diff --git a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/0046_create_image_pull_secrets.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0046_create_image_pull_secrets.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/code_snippets/0046_create_image_pull_secrets.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0046_create_image_pull_secrets.sh diff --git a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/0200_kubectl_mongodb_configure_multi_cluster.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0200_kubectl_mongodb_configure_multi_cluster.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/code_snippets/0200_kubectl_mongodb_configure_multi_cluster.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0200_kubectl_mongodb_configure_multi_cluster.sh diff --git a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/0205_helm_configure_repo.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0205_helm_configure_repo.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/code_snippets/0205_helm_configure_repo.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0205_helm_configure_repo.sh diff --git a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/0210_helm_install_operator.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0210_helm_install_operator.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/code_snippets/0210_helm_install_operator.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0210_helm_install_operator.sh diff --git a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/0211_check_operator_deployment.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0211_check_operator_deployment.sh similarity index 79% rename from public/architectures/setup-multi-cluster/setup-operator/code_snippets/0211_check_operator_deployment.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0211_check_operator_deployment.sh index fef1f8f27..19f4a121b 100755 --- a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/0211_check_operator_deployment.sh +++ b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_0211_check_operator_deployment.sh @@ -1,4 +1,4 @@ -kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" rollout status deployment/mongodb-kubernetes-operator-multi-cluster +kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" rollout status --timeout=2m deployment/mongodb-kubernetes-operator-multi-cluster echo "Operator deployment in ${OPERATOR_NAMESPACE} namespace" kubectl --context "${K8S_CLUSTER_0_CONTEXT_NAME}" -n "${OPERATOR_NAMESPACE}" get deployments echo; echo "Operator pod in ${OPERATOR_NAMESPACE} namespace" diff --git a/public/architectures/setup-multi-cluster/setup-operator/code_snippets/9000_delete_namespaces.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_9000_delete_namespaces.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/code_snippets/9000_delete_namespaces.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/code_snippets/ra-02_9000_delete_namespaces.sh diff --git a/public/architectures/setup-multi-cluster/setup-operator/env_variables.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/env_variables.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/env_variables.sh rename to public/architectures/setup-multi-cluster/ra-02-setup-operator/env_variables.sh diff --git a/public/architectures/setup-multi-cluster/ra-02-setup-operator/teardown.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/teardown.sh new file mode 100755 index 000000000..ed888c2dd --- /dev/null +++ b/public/architectures/setup-multi-cluster/ra-02-setup-operator/teardown.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-02_9000_delete_namespaces.sh + +popd diff --git a/public/architectures/setup-multi-cluster/ra-02-setup-operator/test.sh b/public/architectures/setup-multi-cluster/ra-02-setup-operator/test.sh new file mode 100755 index 000000000..aebb69474 --- /dev/null +++ b/public/architectures/setup-multi-cluster/ra-02-setup-operator/test.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-02_0045_create_namespaces.sh +run ra-02_0046_create_image_pull_secrets.sh + +run_for_output ra-02_0200_kubectl_mongodb_configure_multi_cluster.sh +run_for_output ra-02_0205_helm_configure_repo.sh +run_for_output ra-02_0210_helm_install_operator.sh +run_for_output ra-02_0211_check_operator_deployment.sh + +popd diff --git a/public/architectures/setup-multi-cluster/setup-istio/code_snippets/0040_install_istio.sh b/public/architectures/setup-multi-cluster/ra-03-setup-istio/code_snippets/ra-03_0040_install_istio.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-istio/code_snippets/0040_install_istio.sh rename to public/architectures/setup-multi-cluster/ra-03-setup-istio/code_snippets/ra-03_0040_install_istio.sh diff --git a/public/architectures/setup-multi-cluster/setup-istio/code_snippets/0050_label_namespaces.sh b/public/architectures/setup-multi-cluster/ra-03-setup-istio/code_snippets/ra-03_0050_label_namespaces.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-istio/code_snippets/0050_label_namespaces.sh rename to public/architectures/setup-multi-cluster/ra-03-setup-istio/code_snippets/ra-03_0050_label_namespaces.sh diff --git a/public/architectures/setup-multi-cluster/setup-istio/install_istio_separate_network.sh b/public/architectures/setup-multi-cluster/ra-03-setup-istio/install_istio_separate_network.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-istio/install_istio_separate_network.sh rename to public/architectures/setup-multi-cluster/ra-03-setup-istio/install_istio_separate_network.sh diff --git a/public/architectures/setup-multi-cluster/setup-istio/test.sh b/public/architectures/setup-multi-cluster/ra-03-setup-istio/test.sh similarity index 77% rename from public/architectures/setup-multi-cluster/setup-istio/test.sh rename to public/architectures/setup-multi-cluster/ra-03-setup-istio/test.sh index 9d874fdd0..f03d28154 100755 --- a/public/architectures/setup-multi-cluster/setup-istio/test.sh +++ b/public/architectures/setup-multi-cluster/ra-03-setup-istio/test.sh @@ -11,7 +11,7 @@ pushd "${script_dir}" prepare_snippets -run 0040_install_istio.sh -run 0050_label_namespaces.sh +run ra-03_0040_install_istio.sh +run ra-03_0050_label_namespaces.sh popd diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0045_create_connectivity_test_namespaces.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0045_create_connectivity_test_namespaces.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0045_create_connectivity_test_namespaces.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0045_create_connectivity_test_namespaces.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0050_check_cluster_connectivity_create_sts_0.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0050_check_cluster_connectivity_create_sts_0.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0050_check_cluster_connectivity_create_sts_0.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0050_check_cluster_connectivity_create_sts_0.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0050_check_cluster_connectivity_create_sts_1.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0050_check_cluster_connectivity_create_sts_1.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0050_check_cluster_connectivity_create_sts_1.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0050_check_cluster_connectivity_create_sts_1.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0050_check_cluster_connectivity_create_sts_2.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0050_check_cluster_connectivity_create_sts_2.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0050_check_cluster_connectivity_create_sts_2.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0050_check_cluster_connectivity_create_sts_2.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0060_check_cluster_connectivity_wait_for_sts.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0060_check_cluster_connectivity_wait_for_sts.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0060_check_cluster_connectivity_wait_for_sts.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0060_check_cluster_connectivity_wait_for_sts.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0070_check_cluster_connectivity_create_pod_service_0.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0070_check_cluster_connectivity_create_pod_service_0.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0070_check_cluster_connectivity_create_pod_service_0.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0070_check_cluster_connectivity_create_pod_service_0.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0070_check_cluster_connectivity_create_pod_service_1.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0070_check_cluster_connectivity_create_pod_service_1.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0070_check_cluster_connectivity_create_pod_service_1.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0070_check_cluster_connectivity_create_pod_service_1.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0070_check_cluster_connectivity_create_pod_service_2.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0070_check_cluster_connectivity_create_pod_service_2.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0070_check_cluster_connectivity_create_pod_service_2.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0070_check_cluster_connectivity_create_pod_service_2.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0080_check_cluster_connectivity_create_round_robin_service_0.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0080_check_cluster_connectivity_create_round_robin_service_0.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0080_check_cluster_connectivity_create_round_robin_service_0.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0080_check_cluster_connectivity_create_round_robin_service_0.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0080_check_cluster_connectivity_create_round_robin_service_1.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0080_check_cluster_connectivity_create_round_robin_service_1.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0080_check_cluster_connectivity_create_round_robin_service_1.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0080_check_cluster_connectivity_create_round_robin_service_1.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0080_check_cluster_connectivity_create_round_robin_service_2.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0080_check_cluster_connectivity_create_round_robin_service_2.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0080_check_cluster_connectivity_create_round_robin_service_2.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0080_check_cluster_connectivity_create_round_robin_service_2.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.sh diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0100_check_cluster_connectivity_cleanup.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0100_check_cluster_connectivity_cleanup.sh similarity index 100% rename from public/architectures/setup-multi-cluster/verify-connectivity/code_snippets/0100_check_cluster_connectivity_cleanup.sh rename to public/architectures/setup-multi-cluster/ra-04-verify-connectivity/code_snippets/ra-04_0100_check_cluster_connectivity_cleanup.sh diff --git a/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/test.sh b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/test.sh new file mode 100755 index 000000000..f78d2073d --- /dev/null +++ b/public/architectures/setup-multi-cluster/ra-04-verify-connectivity/test.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-04_0045_create_connectivity_test_namespaces.sh + +run ra-04_0050_check_cluster_connectivity_create_sts_0.sh +run ra-04_0050_check_cluster_connectivity_create_sts_1.sh +run ra-04_0050_check_cluster_connectivity_create_sts_2.sh + +run ra-04_0060_check_cluster_connectivity_wait_for_sts.sh +run ra-04_0070_check_cluster_connectivity_create_pod_service_0.sh +run ra-04_0070_check_cluster_connectivity_create_pod_service_1.sh +run ra-04_0070_check_cluster_connectivity_create_pod_service_2.sh +run ra-04_0080_check_cluster_connectivity_create_round_robin_service_0.sh +run ra-04_0080_check_cluster_connectivity_create_round_robin_service_1.sh +run ra-04_0080_check_cluster_connectivity_create_round_robin_service_2.sh +run_for_output ra-04_0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.sh +run_for_output ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.sh +run_for_output ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.sh +run_for_output ra-04_0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.sh +run ra-04_0100_check_cluster_connectivity_cleanup.sh + +popd diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0215_helm_configure_repo.sh b/public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0215_helm_configure_repo.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0215_helm_configure_repo.sh rename to public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0215_helm_configure_repo.sh diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0216_helm_install_cert_manager.sh b/public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0216_helm_install_cert_manager.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0216_helm_install_cert_manager.sh rename to public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0216_helm_install_cert_manager.sh diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0220_create_issuer.sh b/public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0220_create_issuer.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0220_create_issuer.sh rename to public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0220_create_issuer.sh diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0221_verify_issuer.sh b/public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0221_verify_issuer.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0221_verify_issuer.sh rename to public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0221_verify_issuer.sh diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0225_create_ca_configmap.sh b/public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0225_create_ca_configmap.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-cert-manager/code_snippets/0225_create_ca_configmap.sh rename to public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/code_snippets/ra-05_0225_create_ca_configmap.sh diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/test.sh b/public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/test.sh similarity index 51% rename from public/architectures/setup-multi-cluster/setup-cert-manager/test.sh rename to public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/test.sh index 6019bab95..5913b4b40 100755 --- a/public/architectures/setup-multi-cluster/setup-cert-manager/test.sh +++ b/public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/test.sh @@ -11,10 +11,10 @@ pushd "${script_dir}" prepare_snippets -run_for_output 0215_helm_configure_repo.sh -run_for_output 0216_helm_install_cert_manager.sh -run 0220_create_issuer.sh -run_for_output 0221_verify_issuer.sh -run 0225_create_ca_configmap.sh +run_for_output ra-05_0215_helm_configure_repo.sh +run_for_output ra-05_0216_helm_install_cert_manager.sh +run ra-05_0220_create_issuer.sh +run_for_output ra-05_0221_verify_issuer.sh +run ra-05_0225_create_ca_configmap.sh popd diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0100_create_gke_sa.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0100_create_gke_sa.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0100_create_gke_sa.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0100_create_gke_sa.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0120_add_role_to_sa.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0120_add_role_to_sa.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0120_add_role_to_sa.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0120_add_role_to_sa.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0130_create_sa_key.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0130_create_sa_key.sh similarity index 62% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0130_create_sa_key.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0130_create_sa_key.sh index af41bc117..349bcb19e 100644 --- a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0130_create_sa_key.sh +++ b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0130_create_sa_key.sh @@ -1,3 +1,3 @@ mkdir -p secrets -gcloud iam service-accounts keys create secrets/external-dns-sa-key.json --iam-account="${DNS_SA_EMAIL}" +gcloud iam service-accounts keys create secrets/external-dns-sa-key.json --iam-account="${DNS_SA_EMAIL}" || true diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0140_create_namespaces.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0140_create_namespaces.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0140_create_namespaces.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0140_create_namespaces.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0150_create_sa_secrets.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0150_create_sa_secrets.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0150_create_sa_secrets.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0150_create_sa_secrets.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0200_install_externaldns.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0200_install_externaldns.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0200_install_externaldns.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0200_install_externaldns.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0300_setup_dns_zone.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0300_setup_dns_zone.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/0300_setup_dns_zone.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_0300_setup_dns_zone.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/9000_delete_sa.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_9000_delete_sa.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/9000_delete_sa.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_9000_delete_sa.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/9050_delete_namespace.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_9050_delete_namespace.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/9050_delete_namespace.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_9050_delete_namespace.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/9100_delete_dns_zone.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_9100_delete_dns_zone.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/code_snippets/9100_delete_dns_zone.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/code_snippets/ra-09_9100_delete_dns_zone.sh diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/env_variables.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/env_variables.sh similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/env_variables.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/env_variables.sh diff --git a/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/teardown.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/teardown.sh new file mode 100755 index 000000000..f7223dac3 --- /dev/null +++ b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/teardown.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -eou pipefail + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +script_dir=$(dirname "${script_name}") + +source scripts/code_snippets/sample_test_runner.sh + +pushd "${script_dir}" + +prepare_snippets + +run ra-09_9000_delete_sa.sh +run ra-09_9050_delete_namespace.sh +run ra-09_9100_delete_dns_zone.sh + +popd diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/test.sh b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/test.sh similarity index 54% rename from public/architectures/setup-multi-cluster/setup-externaldns/test.sh rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/test.sh index be99a98ac..972409af3 100755 --- a/public/architectures/setup-multi-cluster/setup-externaldns/test.sh +++ b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/test.sh @@ -11,14 +11,14 @@ pushd "${script_dir}" prepare_snippets -run 0100_create_gke_sa.sh +run ra-09_0100_create_gke_sa.sh # need to wait as the SA is not immediately available sleep 10 -run 0120_add_role_to_sa.sh -run 0130_create_sa_key.sh -run 0140_create_namespaces.sh -run 0150_create_sa_secrets.sh -run 0200_install_externaldns.sh -run 0300_setup_dns_zone.sh +run ra-09_0120_add_role_to_sa.sh +run ra-09_0130_create_sa_key.sh +run ra-09_0140_create_namespaces.sh +run ra-09_0150_create_sa_secrets.sh +run ra-09_0200_install_externaldns.sh +run ra-09_0300_setup_dns_zone.sh popd diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/yamls/externaldns.yaml b/public/architectures/setup-multi-cluster/ra-09-setup-externaldns/yamls/externaldns.yaml similarity index 100% rename from public/architectures/setup-multi-cluster/setup-externaldns/yamls/externaldns.yaml rename to public/architectures/setup-multi-cluster/ra-09-setup-externaldns/yamls/externaldns.yaml diff --git a/public/architectures/setup-multi-cluster/setup-externaldns/teardown.sh b/public/architectures/setup-multi-cluster/setup-externaldns/teardown.sh deleted file mode 100755 index f6fb4ad2e..000000000 --- a/public/architectures/setup-multi-cluster/setup-externaldns/teardown.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 9000_delete_sa.sh -run 9050_delete_namespace.sh -run 9100_delete_dns_zone.sh - -popd diff --git a/public/architectures/setup-multi-cluster/setup-gke/output/0030_verify_access_to_clusters.out b/public/architectures/setup-multi-cluster/setup-gke/output/0030_verify_access_to_clusters.out deleted file mode 100644 index 814af3902..000000000 --- a/public/architectures/setup-multi-cluster/setup-gke/output/0030_verify_access_to_clusters.out +++ /dev/null @@ -1,15 +0,0 @@ -Nodes in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 -NAME STATUS ROLES AGE VERSION -gke-k8s-mdb-0-686cc1e099-default-pool-63c33f99-532x Ready 3m7s v1.32.4-gke.1415000 -gke-k8s-mdb-0-686cc1e099-default-pool-63c33f99-fs12 Ready 3m7s v1.32.4-gke.1415000 -gke-k8s-mdb-0-686cc1e099-default-pool-63c33f99-hghj Ready 3m7s v1.32.4-gke.1415000 - -Nodes in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-686cc1e099f9ef000722c191-862 -NAME STATUS ROLES AGE VERSION -gke-k8s-mdb-1-686cc1e099-default-pool-93d5418d-712x Ready 57s v1.32.4-gke.1415000 -gke-k8s-mdb-1-686cc1e099-default-pool-93d5418d-hpcc Ready 58s v1.32.4-gke.1415000 -gke-k8s-mdb-1-686cc1e099-default-pool-93d5418d-wg14 Ready 61s v1.32.4-gke.1415000 - -Nodes in cluster gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-686cc1e099f9ef000722c191-862 -NAME STATUS ROLES AGE VERSION -gke-k8s-mdb-2-686cc1e099-default-pool-d128293d-tng2 Ready 3m12s v1.32.4-gke.1415000 diff --git a/public/architectures/setup-multi-cluster/setup-gke/teardown.sh b/public/architectures/setup-multi-cluster/setup-gke/teardown.sh deleted file mode 100755 index 155327fc8..000000000 --- a/public/architectures/setup-multi-cluster/setup-gke/teardown.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 9010_delete_gke_clusters.sh - -popd diff --git a/public/architectures/setup-multi-cluster/setup-gke/test.sh b/public/architectures/setup-multi-cluster/setup-gke/test.sh deleted file mode 100755 index 040e2092a..000000000 --- a/public/architectures/setup-multi-cluster/setup-gke/test.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 0005_gcloud_set_current_project.sh -run 0010_create_gke_cluster_0.sh & -run 0010_create_gke_cluster_1.sh & -run 0010_create_gke_cluster_2.sh & -wait - -run 0020_get_gke_credentials.sh -run_for_output 0030_verify_access_to_clusters.sh - -popd diff --git a/public/architectures/setup-multi-cluster/setup-operator/teardown.sh b/public/architectures/setup-multi-cluster/setup-operator/teardown.sh deleted file mode 100755 index faef13d92..000000000 --- a/public/architectures/setup-multi-cluster/setup-operator/teardown.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 9000_delete_namespaces.sh - -popd diff --git a/public/architectures/setup-multi-cluster/setup-operator/test.sh b/public/architectures/setup-multi-cluster/setup-operator/test.sh deleted file mode 100755 index 12cbd5f47..000000000 --- a/public/architectures/setup-multi-cluster/setup-operator/test.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 0045_create_namespaces.sh -run 0046_create_image_pull_secrets.sh - -run_for_output 0200_kubectl_mongodb_configure_multi_cluster.sh -run_for_output 0205_helm_configure_repo.sh -run_for_output 0210_helm_install_operator.sh -run_for_output 0211_check_operator_deployment.sh - -popd diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/test.sh b/public/architectures/setup-multi-cluster/verify-connectivity/test.sh deleted file mode 100755 index 543ffab2e..000000000 --- a/public/architectures/setup-multi-cluster/verify-connectivity/test.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail - -script_name=$(readlink -f "${BASH_SOURCE[0]}") -script_dir=$(dirname "${script_name}") - -source scripts/code_snippets/sample_test_runner.sh - -pushd "${script_dir}" - -prepare_snippets - -run 0045_create_connectivity_test_namespaces.sh - -run 0050_check_cluster_connectivity_create_sts_0.sh -run 0050_check_cluster_connectivity_create_sts_1.sh -run 0050_check_cluster_connectivity_create_sts_2.sh - -run 0060_check_cluster_connectivity_wait_for_sts.sh -run 0070_check_cluster_connectivity_create_pod_service_0.sh -run 0070_check_cluster_connectivity_create_pod_service_1.sh -run 0070_check_cluster_connectivity_create_pod_service_2.sh -run 0080_check_cluster_connectivity_create_round_robin_service_0.sh -run 0080_check_cluster_connectivity_create_round_robin_service_1.sh -run 0080_check_cluster_connectivity_create_round_robin_service_2.sh -run_for_output 0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.sh -run_for_output 0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.sh -run_for_output 0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.sh -run_for_output 0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.sh -run 0100_check_cluster_connectivity_cleanup.sh - -popd diff --git a/scripts/code_snippets/code_snippets_cleanup.sh b/scripts/code_snippets/code_snippets_cleanup.sh index 5c4736bb4..f88f9f36a 100755 --- a/scripts/code_snippets/code_snippets_cleanup.sh +++ b/scripts/code_snippets/code_snippets_cleanup.sh @@ -1,16 +1,36 @@ -#!/usr/bin/env bash +#!/bin/bash set -eou pipefail -find public/architectures -name "test.sh" -exec sh -c ' - source scripts/code_snippets/sample_test_runner.sh +script_name=$(readlink -f "${BASH_SOURCE[0]}") +# shellcheck disable=SC2034 +script_dir=$(dirname "${script_name}") - pushd "$(dirname $1)" +source scripts/code_snippets/sample_test_runner.sh + +cleanup_directory() { + local test_file="$1" + local dir + dir="$(dirname "${test_file}")" + + echo " ${dir}" + + pushd "${dir}" >/dev/null run_cleanup "test.sh" run_cleanup "teardown.sh" - rm -rf istio* - rm -rf certs - rm -rf secrets + rm -rf .generated 2>/dev/null || true + rm -rf istio* 2>/dev/null || true + rm -rf certs 2>/dev/null || true + rm -rf secrets 2>/dev/null || true + rm ./*.run.log 2>/dev/null || true + popd >/dev/null +} + +echo "Cleaning up from snippets runtime files from the following directories..." +for snippet_dir in $(bash "${script_dir}/find_snippets_directories.sh"); do + cleanup_directory "${snippet_dir}/test.sh" & +done + +wait +echo "Cleaning up done." - popd - ' sh {} \; diff --git a/scripts/code_snippets/find_snippets_directories.sh b/scripts/code_snippets/find_snippets_directories.sh new file mode 100644 index 000000000..463a42ea5 --- /dev/null +++ b/scripts/code_snippets/find_snippets_directories.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +set -eou pipefail +test "${MDB_BASH_DEBUG:-0}" -eq 1 && set -x + +source scripts/dev/set_env_context.sh + +# It finds all directories containing both test.sh and code_snippets subdirectory +find . -path "*/code_snippets" -type d | while read -r code_snippets_dir; do + parent_dir="$(dirname "${code_snippets_dir}")" + if [[ -f "${parent_dir}/test.sh" ]]; then + echo "${parent_dir}" + fi +done diff --git a/scripts/code_snippets/kind_community_search_snippets_render_template.sh b/scripts/code_snippets/kind_community_search_snippets_render_template.sh deleted file mode 100755 index f7c86d1f7..000000000 --- a/scripts/code_snippets/kind_community_search_snippets_render_template.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail -source scripts/dev/set_env_context.sh - -test_dir="docs/community-search/quick-start" -python scripts/code_snippets/render_template.py "${test_dir}/README.md.j2" "${test_dir}/README.md" diff --git a/scripts/code_snippets/kind_search_snippets_render_template.sh b/scripts/code_snippets/kind_search_snippets_render_template.sh new file mode 100755 index 000000000..57d2fcc28 --- /dev/null +++ b/scripts/code_snippets/kind_search_snippets_render_template.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +set -eou pipefail + +test_dir="$1" +scripts/evergreen/run_python.sh scripts/code_snippets/render_template.py "${test_dir}/README.md.j2" "${test_dir}/README.md" diff --git a/scripts/code_snippets/sample_commit_output.sh b/scripts/code_snippets/sample_commit_output.sh index 0eb12227b..12790b0b5 100755 --- a/scripts/code_snippets/sample_commit_output.sh +++ b/scripts/code_snippets/sample_commit_output.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash -set -Eeou pipefail +set -eou pipefail +test "${MDB_BASH_DEBUG:-0}" -eq 1 && set -x + source scripts/dev/set_env_context.sh if [[ "${CODE_SNIPPETS_COMMIT_OUTPUT:-"false"}" == "true" ]]; then @@ -8,9 +10,7 @@ if [[ "${CODE_SNIPPETS_COMMIT_OUTPUT:-"false"}" == "true" ]]; then branch="meko-snippets-update-$(date "+%Y%m%d%H%M%S")" git checkout -b "${branch}" git reset - git add public/architectures/**/*.out - git add docs/**/output/*.out - git add docs/**/*.md + git add scripts/code_snippets/tests/outputs/test_* git commit -m "Update code snippets outputs" git remote set-url origin "https://x-access-token:${GH_TOKEN}@github.com/mongodb/mongodb-kubernetes.git" git push origin "${branch}" diff --git a/scripts/code_snippets/sample_test_runner.sh b/scripts/code_snippets/sample_test_runner.sh index bc579b732..0e9c17f0b 100755 --- a/scripts/code_snippets/sample_test_runner.sh +++ b/scripts/code_snippets/sample_test_runner.sh @@ -2,12 +2,22 @@ set -eou pipefail -log_file="$(basename "$0").run.log" +test "${MDB_BASH_DEBUG:-0}" -eq 1 && set -x + +script_name=$(readlink -f "${BASH_SOURCE[0]}") +# we reuse script_dir if already set by the script that is sourcing this file +script_dir=${script_dir:-$(dirname "${script_name}")} + +# script_dir will be set from the file that is sourcing this file +log_file="${RUN_LOG_FILE:-$(basename "${script_dir}").run.log}" + snippets_src_dir="code_snippets" snippets_run_dir=".generated" DEBUG=${DEBUG:-"false"} +_SNIPPETS_OUTPUT_DIR=${_SNIPPETS_OUTPUT_DIR:-"output"} + function snippets_list() { src_dir=$1 # shellcheck disable=SC2012 @@ -18,7 +28,8 @@ function run_cleanup() { script_file=$1 rm -rf "${snippets_run_dir}" 2>/dev/null || true rm -rf "log" 2>/dev/null || true - git restore --staged --worktree rm -rf "output" 2>/dev/null || true + rm -rf ".generated" 2>/dev/null || true + git restore --staged --worktree rm -rf "${_SNIPPETS_OUTPUT_DIR}" 2>/dev/null || true rm -rf "${script_file}.run.log" 2>/dev/null || true } @@ -27,7 +38,7 @@ function prepare_snippets() { touch "${log_file}" mkdir log 2>/dev/null || true - mkdir output 2>/dev/null || true + mkdir "${_SNIPPETS_OUTPUT_DIR}" 2>/dev/null || true rm -rf "${snippets_run_dir}" 2>/dev/null || true mkdir "${snippets_run_dir}" 2>/dev/null || true @@ -36,7 +47,7 @@ function prepare_snippets() { while IFS= read -r file_name; do file_path="${snippets_run_dir}/${file_name}" ( - echo "# This file is generated automatically from ${file_path}" + echo "# This file is generated automatically from ${snippets_src_dir}/${file_name}" echo "# DO NOT EDIT" echo "function ${file_name%.sh}() {" cat "${snippets_src_dir}/${file_name}" @@ -95,7 +106,7 @@ function run_for_output() { ret=$? set -e if [[ ${ret} == 0 ]]; then - tee "output/${cmd}.out" < "${stdout_file}" + tee "${_SNIPPETS_OUTPUT_DIR}/${cmd}.out" < "${stdout_file}" else echo "Error running: ${cmd}" fi diff --git a/scripts/code_snippets/task_gke_multi_cluster_no_mesh_snippets_test.sh b/scripts/code_snippets/task_gke_multi_cluster_no_mesh_snippets_test.sh deleted file mode 100755 index 97245a8c2..000000000 --- a/scripts/code_snippets/task_gke_multi_cluster_no_mesh_snippets_test.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail -source scripts/dev/set_env_context.sh - -function cleanup() { - if [ "${code_snippets_teardown:-true}" = true ]; then - echo "Deleting clusters and resources" - ./public/architectures/ops-manager-mc-no-mesh/teardown.sh & - ./public/architectures/setup-multi-cluster/setup-externaldns/teardown.sh & - wait - - ./public/architectures/setup-multi-cluster/setup-gke/teardown.sh - elif [ "${code_snippets_reset:-false}" = true ]; then - echo "Deleting resources, keeping the clusters" - ./public/architectures/ops-manager-mc-no-mesh/teardown.sh & - ./public/architectures/mongodb-sharded-mc-no-mesh/teardown.sh & - ./public/architectures/mongodb-replicaset-mc-no-mesh/teardown.sh & - ./public/architectures/setup-multi-cluster/setup-externaldns/teardown.sh & - wait - - ./public/architectures/setup-multi-cluster/setup-operator/teardown.sh - else - echo "Not deleting anything" - fi -} -trap cleanup EXIT - -source public/architectures/setup-multi-cluster/setup-gke/env_variables.sh -./public/architectures/setup-multi-cluster/setup-gke/test.sh - -source public/architectures/setup-multi-cluster/setup-operator/env_variables.sh -./public/architectures/setup-multi-cluster/setup-operator/test.sh - -./public/architectures/setup-multi-cluster/setup-cert-manager/test.sh - -source public/architectures/setup-multi-cluster/setup-externaldns/env_variables.sh -./public/architectures/setup-multi-cluster/setup-externaldns/test.sh - -source public/architectures/ops-manager-mc-no-mesh/env_variables.sh -./public/architectures/ops-manager-mc-no-mesh/test.sh - -source public/architectures/mongodb-replicaset-mc-no-mesh/env_variables.sh -./public/architectures/mongodb-replicaset-mc-no-mesh/test.sh - -source public/architectures/mongodb-sharded-mc-no-mesh/env_variables.sh -./public/architectures/mongodb-sharded-mc-no-mesh/test.sh diff --git a/scripts/code_snippets/task_gke_multi_cluster_snippets_test.sh b/scripts/code_snippets/task_gke_multi_cluster_snippets_test.sh deleted file mode 100755 index 850a68e9c..000000000 --- a/scripts/code_snippets/task_gke_multi_cluster_snippets_test.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail -source scripts/dev/set_env_context.sh - -function cleanup() { - if [ "${code_snippets_teardown:-true}" = true ]; then - echo "Deleting clusters" - ./public/architectures/setup-multi-cluster/setup-gke/teardown.sh - elif [ "${code_snippets_reset:-false}" = true ]; then - echo "Deleting resources, keeping the clusters" - ./public/architectures/ops-manager-multi-cluster/teardown.sh & - ./public/architectures/mongodb-sharded-multi-cluster/teardown.sh & - ./public/architectures/mongodb-replicaset-multi-cluster/teardown.sh & - wait - - ./public/architectures/setup-multi-cluster/setup-operator/teardown.sh - else - echo "Not deleting anything" - fi -} -trap cleanup EXIT - -source public/architectures/setup-multi-cluster/setup-gke/env_variables.sh -./public/architectures/setup-multi-cluster/setup-gke/test.sh - -source public/architectures/setup-multi-cluster/setup-operator/env_variables.sh -./public/architectures/setup-multi-cluster/setup-operator/test.sh - -./public/architectures/setup-multi-cluster/setup-istio/test.sh - -./public/architectures/setup-multi-cluster/verify-connectivity/test.sh - -./public/architectures/setup-multi-cluster/setup-cert-manager/test.sh - -source public/architectures/ops-manager-multi-cluster/env_variables.sh -./public/architectures/ops-manager-multi-cluster/test.sh - -source public/architectures/mongodb-replicaset-multi-cluster/env_variables.sh -./public/architectures/mongodb-replicaset-multi-cluster/test.sh - -source public/architectures/mongodb-sharded-multi-cluster/env_variables.sh -./public/architectures/mongodb-sharded-multi-cluster/test.sh diff --git a/scripts/code_snippets/task_kind_community_search_snippets_test.sh b/scripts/code_snippets/task_kind_community_search_snippets_test.sh deleted file mode 100755 index 4f23a3e37..000000000 --- a/scripts/code_snippets/task_kind_community_search_snippets_test.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -eou pipefail -source scripts/dev/set_env_context.sh - -dump_logs() { - source scripts/evergreen/e2e/dump_diagnostic_information.sh - if [[ "${SKIP_DUMP:-"false"}" != "true" ]]; then - dump_all_non_default_namespaces "$@" - fi -} -trap dump_logs EXIT - -test_dir="./docs/community-search/quick-start" - -source "${test_dir}/env_variables.sh" -echo "Sourcing env variables for ${CODE_SNIPPETS_FLAVOR} flavor" -# shellcheck disable=SC1090 -test -f "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" && source "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" - -${test_dir}/test.sh -scripts/code_snippets/kind_community_search_snippets_render_template.sh diff --git a/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-01_0030_verify_access_to_clusters.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-01_0030_verify_access_to_clusters.out new file mode 100644 index 000000000..156ad4795 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-01_0030_verify_access_to_clusters.out @@ -0,0 +1,15 @@ +Nodes in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 +NAME STATUS ROLES AGE VERSION +gke-k8s-mdb-0-68876175f5-default-pool-c1ce34c2-4bg5 Ready 7m20s v1.33.2-gke.1240000 +gke-k8s-mdb-0-68876175f5-default-pool-c1ce34c2-bk96 Ready 7m22s v1.33.2-gke.1240000 +gke-k8s-mdb-0-68876175f5-default-pool-c1ce34c2-r0px Ready 7m21s v1.33.2-gke.1240000 + +Nodes in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-68876175f5ad6d0007fdc1d4-31160 +NAME STATUS ROLES AGE VERSION +gke-k8s-mdb-1-68876175f5-default-pool-6f4972b3-bxwx Ready 6m30s v1.33.2-gke.1240000 +gke-k8s-mdb-1-68876175f5-default-pool-6f4972b3-djkk Ready 6m30s v1.33.2-gke.1240000 +gke-k8s-mdb-1-68876175f5-default-pool-6f4972b3-ps8q Ready 6m30s v1.33.2-gke.1240000 + +Nodes in cluster gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-68876175f5ad6d0007fdc1d4-31160 +NAME STATUS ROLES AGE VERSION +gke-k8s-mdb-2-68876175f5-default-pool-e4665169-g134 Ready 7m16s v1.33.2-gke.1240000 diff --git a/public/architectures/setup-multi-cluster/setup-operator/output/0200_kubectl_mongodb_configure_multi_cluster.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0200_kubectl_mongodb_configure_multi_cluster.out similarity index 83% rename from public/architectures/setup-multi-cluster/setup-operator/output/0200_kubectl_mongodb_configure_multi_cluster.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0200_kubectl_mongodb_configure_multi_cluster.out index c04777b8d..6a82b75ec 100644 --- a/public/architectures/setup-multi-cluster/setup-operator/output/0200_kubectl_mongodb_configure_multi_cluster.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0200_kubectl_mongodb_configure_multi_cluster.out @@ -1,49 +1,49 @@ -Build: , +Build: 1bcc69172341bbdb7eed4366df26dd960f53119e, 2025-08-24T21:36:12Z Ensured namespaces exist in all clusters. -creating central cluster roles in cluster: gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 +creating central cluster roles in cluster: gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrolebinding: mongodb-kubernetes-operator-mongodb-operator-multi-cluster-mongodb-role-binding created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrolebinding: mongodb-kubernetes-operator-mongodb-operator-multi-cluster-mongodb-role-binding -creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-686cc1e099f9ef000722c191-862 +creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-68876175f5ad6d0007fdc1d4-31160 created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding -creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-686cc1e099f9ef000722c191-862 +creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-68876175f5ad6d0007fdc1d4-31160 created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding Ensured ServiceAccounts and Roles. -Creating KubeConfig secret mongodb-operator/mongodb-enterprise-operator-multi-cluster-kubeconfig in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 +Creating KubeConfig secret mongodb-operator/mongodb-enterprise-operator-multi-cluster-kubeconfig in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 Ensured database Roles in member clusters. -Creating Member list Configmap mongodb-operator/mongodb-kubernetes-operator-member-list in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 +Creating Member list Configmap mongodb-operator/mongodb-kubernetes-operator-member-list in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 -Build: , +Build: 1bcc69172341bbdb7eed4366df26dd960f53119e, 2025-08-24T21:36:12Z Ensured namespaces exist in all clusters. -creating central cluster roles in cluster: gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 +creating central cluster roles in cluster: gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrolebinding: mongodb-kubernetes-operator-mongodb-operator-multi-cluster-mongodb-role-binding created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrolebinding: mongodb-kubernetes-operator-mongodb-operator-multi-cluster-mongodb-role-binding -creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-686cc1e099f9ef000722c191-862 +creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-68876175f5ad6d0007fdc1d4-31160 created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding -creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-686cc1e099f9ef000722c191-862 +creating member roles in cluster: gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-68876175f5ad6d0007fdc1d4-31160 created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding created clusterrole: mongodb-kubernetes-operator-multi-cluster-role-telemetry created clusterrolebinding: mongodb-kubernetes-operator-multi-telemetry-cluster-role-binding Ensured ServiceAccounts and Roles. -Creating KubeConfig secret mongodb-operator/mongodb-enterprise-operator-multi-cluster-kubeconfig in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 +Creating KubeConfig secret mongodb-operator/mongodb-enterprise-operator-multi-cluster-kubeconfig in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 Secret mongodb-operator/mongodb-enterprise-operator-multi-cluster-kubeconfig already exists, updating it Ensured database Roles in member clusters. -Creating Member list Configmap mongodb-operator/mongodb-kubernetes-operator-member-list in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-686cc1e099f9ef000722c191-862 +Creating Member list Configmap mongodb-operator/mongodb-kubernetes-operator-member-list in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 diff --git a/docs/community-search/quick-start/output/090_helm_add_mogodb_repo.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0205_helm_configure_repo.out similarity index 100% rename from docs/community-search/quick-start/output/090_helm_add_mogodb_repo.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0205_helm_configure_repo.out diff --git a/public/architectures/setup-multi-cluster/setup-operator/output/0210_helm_install_operator.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0210_helm_install_operator.out similarity index 100% rename from public/architectures/setup-multi-cluster/setup-operator/output/0210_helm_install_operator.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0210_helm_install_operator.out diff --git a/public/architectures/setup-multi-cluster/setup-operator/output/0211_check_operator_deployment.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0211_check_operator_deployment.out similarity index 85% rename from public/architectures/setup-multi-cluster/setup-operator/output/0211_check_operator_deployment.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0211_check_operator_deployment.out index 12cff4d42..2f01f86c7 100644 --- a/public/architectures/setup-multi-cluster/setup-operator/output/0211_check_operator_deployment.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-02_0211_check_operator_deployment.out @@ -6,4 +6,4 @@ mongodb-kubernetes-operator-multi-cluster 1/1 1 1 8s Operator pod in mongodb-operator namespace NAME READY STATUS RESTARTS AGE -mongodb-kubernetes-operator-multi-cluster-5b875c54c5-d2gq6 1/1 Running 0 8s +mongodb-kubernetes-operator-multi-cluster-64647b6db5-2jfn5 1/1 Running 0 9s diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.out similarity index 71% rename from public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.out index a4bba85c3..4665128e6 100644 --- a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_0_0_from_cluster_1.out @@ -1,2 +1,2 @@ -Checking cross-cluster DNS resolution and connectivity from echoserver1-0 in gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-682f2df6e1745e000788a1d5-24552 to echoserver0-0 +Checking cross-cluster DNS resolution and connectivity from echoserver1-0 in gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-68876175f5ad6d0007fdc1d4-31160 to echoserver0-0 SUCCESS diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.out similarity index 71% rename from public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.out index 2272553f9..0e6fcac94 100644 --- a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_0.out @@ -1,2 +1,2 @@ -Checking cross-cluster DNS resolution and connectivity from echoserver0-0 in gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-682f2df6e1745e000788a1d5-24552 to echoserver1-0 +Checking cross-cluster DNS resolution and connectivity from echoserver0-0 in gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 to echoserver1-0 SUCCESS diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.out similarity index 71% rename from public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.out index 174dfd35d..7b79ecdd0 100644 --- a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_1_0_from_cluster_2.out @@ -1,2 +1,2 @@ -Checking cross-cluster DNS resolution and connectivity from echoserver2-0 in gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-682f2df6e1745e000788a1d5-24552 to echoserver1-0 +Checking cross-cluster DNS resolution and connectivity from echoserver2-0 in gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-68876175f5ad6d0007fdc1d4-31160 to echoserver1-0 SUCCESS diff --git a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.out similarity index 71% rename from public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.out index 7c5f21ec9..78286fa61 100644 --- a/public/architectures/setup-multi-cluster/verify-connectivity/output/0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-04_0090_check_cluster_connectivity_verify_pod_2_0_from_cluster_0.out @@ -1,2 +1,2 @@ -Checking cross-cluster DNS resolution and connectivity from echoserver0-0 in gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-682f2df6e1745e000788a1d5-24552 to echoserver2-0 +Checking cross-cluster DNS resolution and connectivity from echoserver0-0 in gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 to echoserver2-0 SUCCESS diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/output/0215_helm_configure_repo.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-05_0215_helm_configure_repo.out similarity index 100% rename from public/architectures/setup-multi-cluster/setup-cert-manager/output/0215_helm_configure_repo.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-05_0215_helm_configure_repo.out diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/output/0216_helm_install_cert_manager.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-05_0216_helm_install_cert_manager.out similarity index 96% rename from public/architectures/setup-multi-cluster/setup-cert-manager/output/0216_helm_install_cert_manager.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-05_0216_helm_install_cert_manager.out index e00ae2241..b6242935f 100644 --- a/public/architectures/setup-multi-cluster/setup-cert-manager/output/0216_helm_install_cert_manager.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-05_0216_helm_install_cert_manager.out @@ -1,6 +1,6 @@ Release "cert-manager" does not exist. Installing it now. NAME: cert-manager -LAST DEPLOYED: Tue Jul 8 07:13:38 2025 +LAST DEPLOYED: Mon Aug 25 09:08:18 2025 NAMESPACE: cert-manager STATUS: deployed REVISION: 1 diff --git a/public/architectures/setup-multi-cluster/setup-cert-manager/output/0221_verify_issuer.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-05_0221_verify_issuer.out similarity index 100% rename from public/architectures/setup-multi-cluster/setup-cert-manager/output/0221_verify_issuer.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-05_0221_verify_issuer.out diff --git a/public/architectures/ops-manager-multi-cluster/output/0311_ops_manager_wait_for_pending_state.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0311_ops_manager_wait_for_pending_state.out similarity index 100% rename from public/architectures/ops-manager-multi-cluster/output/0311_ops_manager_wait_for_pending_state.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0311_ops_manager_wait_for_pending_state.out diff --git a/public/architectures/ops-manager-multi-cluster/output/0312_ops_manager_wait_for_running_state.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0312_ops_manager_wait_for_running_state.out similarity index 65% rename from public/architectures/ops-manager-multi-cluster/output/0312_ops_manager_wait_for_running_state.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0312_ops_manager_wait_for_running_state.out index 45a23aefb..7ece648e9 100644 --- a/public/architectures/ops-manager-multi-cluster/output/0312_ops_manager_wait_for_running_state.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0312_ops_manager_wait_for_running_state.out @@ -6,13 +6,13 @@ mongodbopsmanager.mongodb.com/om condition met MongoDBOpsManager resource NAME REPLICAS VERSION STATE (OPSMANAGER) STATE (APPDB) STATE (BACKUP) AGE WARNINGS -om 8.0.5 Running Running Disabled 12m +om 8.0.5 Running Running Disabled 18m -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-682f2df6e1745e000788a1d5-24552 +Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 NAME READY STATUS RESTARTS AGE -om-0-0 2/2 Running 0 9m41s -om-db-0-0 4/4 Running 0 51s -om-db-0-1 4/4 Running 0 2m25s -om-db-0-2 4/4 Running 0 4m16s +om-0-0 2/2 Running 0 15m +om-db-0-0 4/4 Running 0 7m31s +om-db-0-1 4/4 Running 0 9m2s +om-db-0-2 4/4 Running 0 10m -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-682f2df6e1745e000788a1d5-24552 +Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-68876175f5ad6d0007fdc1d4-31160 diff --git a/public/architectures/ops-manager-mc-no-mesh/output/0321_ops_manager_wait_for_pending_state.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0321_ops_manager_wait_for_pending_state.out similarity index 100% rename from public/architectures/ops-manager-mc-no-mesh/output/0321_ops_manager_wait_for_pending_state.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0321_ops_manager_wait_for_pending_state.out diff --git a/public/architectures/ops-manager-multi-cluster/output/0322_ops_manager_wait_for_running_state.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0322_ops_manager_wait_for_running_state.out similarity index 62% rename from public/architectures/ops-manager-multi-cluster/output/0322_ops_manager_wait_for_running_state.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0322_ops_manager_wait_for_running_state.out index 2b45590a2..fc67f254a 100644 --- a/public/architectures/ops-manager-multi-cluster/output/0322_ops_manager_wait_for_running_state.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0322_ops_manager_wait_for_running_state.out @@ -6,17 +6,17 @@ mongodbopsmanager.mongodb.com/om condition met MongoDBOpsManager resource NAME REPLICAS VERSION STATE (OPSMANAGER) STATE (APPDB) STATE (BACKUP) AGE WARNINGS -om 8.0.5 Running Running Disabled 20m +om 8.0.5 Running Running Disabled 26m -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-682f2df6e1745e000788a1d5-24552 +Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 NAME READY STATUS RESTARTS AGE om-0-0 2/2 Running 0 2m53s -om-db-0-0 4/4 Running 0 8m42s -om-db-0-1 4/4 Running 0 10m -om-db-0-2 4/4 Running 0 12m +om-db-0-0 4/4 Running 0 14m +om-db-0-1 4/4 Running 0 16m +om-db-0-2 4/4 Running 0 17m -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-682f2df6e1745e000788a1d5-24552 +Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-68876175f5ad6d0007fdc1d4-31160 NAME READY STATUS RESTARTS AGE -om-1-0 2/2 Running 0 3m24s -om-db-1-0 4/4 Running 0 7m43s -om-db-1-1 4/4 Running 0 5m31s +om-1-0 2/2 Running 0 3m25s +om-db-1-0 4/4 Running 0 7m16s +om-db-1-1 4/4 Running 0 5m2s diff --git a/public/architectures/ops-manager-multi-cluster/output/0522_ops_manager_wait_for_running_state.out b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0522_ops_manager_wait_for_running_state.out similarity index 63% rename from public/architectures/ops-manager-multi-cluster/output/0522_ops_manager_wait_for_running_state.out rename to scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0522_ops_manager_wait_for_running_state.out index 9f404efdc..c3a0d3b14 100644 --- a/public/architectures/ops-manager-multi-cluster/output/0522_ops_manager_wait_for_running_state.out +++ b/scripts/code_snippets/tests/outputs/test_gke_multi_cluster_snippets/ra-06_0522_ops_manager_wait_for_running_state.out @@ -9,21 +9,21 @@ mongodbopsmanager.mongodb.com/om condition met MongoDBOpsManager resource NAME REPLICAS VERSION STATE (OPSMANAGER) STATE (APPDB) STATE (BACKUP) AGE WARNINGS -om 8.0.5 Running Running Running 23m +om 8.0.5 Running Running Running 29m -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-682f2df6e1745e000788a1d5-24552 +Pods running in cluster gke_scratch-kubernetes-team_europe-central2-a_k8s-mdb-0-68876175f5ad6d0007fdc1d4-31160 NAME READY STATUS RESTARTS AGE -om-0-0 2/2 Running 0 5m46s -om-db-0-0 4/4 Running 0 11m -om-db-0-1 4/4 Running 0 13m -om-db-0-2 4/4 Running 0 15m +om-0-0 2/2 Running 0 6m2s +om-db-0-0 4/4 Running 0 18m +om-db-0-1 4/4 Running 0 19m +om-db-0-2 4/4 Running 0 20m -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-682f2df6e1745e000788a1d5-24552 +Pods running in cluster gke_scratch-kubernetes-team_europe-central2-b_k8s-mdb-1-68876175f5ad6d0007fdc1d4-31160 NAME READY STATUS RESTARTS AGE -om-1-0 2/2 Running 0 6m17s +om-1-0 2/2 Running 0 6m33s om-db-1-0 4/4 Running 0 10m -om-db-1-1 4/4 Running 0 8m24s +om-db-1-1 4/4 Running 0 8m10s -Pods running in cluster gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-682f2df6e1745e000788a1d5-24552 +Pods running in cluster gke_scratch-kubernetes-team_europe-central2-c_k8s-mdb-2-68876175f5ad6d0007fdc1d4-31160 NAME READY STATUS RESTARTS AGE -om-2-backup-daemon-0 2/2 Running 0 2m31s +om-2-backup-daemon-0 2/2 Running 0 2m49s diff --git a/public/architectures/setup-multi-cluster/setup-operator/output/0205_helm_configure_repo.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0090_helm_add_mogodb_repo.out similarity index 85% rename from public/architectures/setup-multi-cluster/setup-operator/output/0205_helm_configure_repo.out rename to scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0090_helm_add_mogodb_repo.out index e8630fdff..b1576c236 100644 --- a/public/architectures/setup-multi-cluster/setup-operator/output/0205_helm_configure_repo.out +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0090_helm_add_mogodb_repo.out @@ -1,4 +1,4 @@ -"mongodb" has been added to your repositories +"mongodb" already exists with the same configuration, skipping Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "mongodb" chart repository Update Complete. ⎈Happy Helming!⎈ diff --git a/docs/community-search/quick-start/output/0100_install_operator.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0100_install_operator.out similarity index 82% rename from docs/community-search/quick-start/output/0100_install_operator.out rename to scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0100_install_operator.out index 075f69619..9c027d887 100644 --- a/docs/community-search/quick-start/output/0100_install_operator.out +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0100_install_operator.out @@ -1,41 +1,18 @@ Release "mongodb-kubernetes" does not exist. Installing it now. NAME: mongodb-kubernetes -LAST DEPLOYED: Mon Jul 28 15:07:59 2025 +LAST DEPLOYED: Mon Sep 1 19:22:18 2025 NAMESPACE: mongodb STATUS: deployed REVISION: 1 TEST SUITE: None USER-SUPPLIED VALUES: -database: - version: 68876175f5ad6d0007fdc1d4 -initAppDb: - version: 68876175f5ad6d0007fdc1d4 -initDatabase: - version: 68876175f5ad6d0007fdc1d4 -initOpsManager: - version: 68876175f5ad6d0007fdc1d4 -operator: - version: 68876175f5ad6d0007fdc1d4 registry: - agent: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - appDb: quay.io/mongodb - database: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - imagePullSecrets: image-registries-secret - initAppDb: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - initDatabase: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - initOpsManager: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - operator: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - opsManager: quay.io/mongodb -search: - community: - name: community - repo: 268558157000.dkr.ecr.eu-west-1.amazonaws.com/mongot - version: fbd60fb055dd500058edcb45677ea85d19421f47 + imagePullSecrets: prerelease-image-pullsecret COMPUTED VALUES: agent: name: mongodb-agent - version: 108.0.2.8729-1 + version: 108.0.12.8846-1 community: agent: name: mongodb-agent @@ -63,16 +40,16 @@ community: version: 4.4.0 database: name: mongodb-kubernetes-database - version: 68876175f5ad6d0007fdc1d4 + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 initAppDb: name: mongodb-kubernetes-init-appdb - version: 68876175f5ad6d0007fdc1d4 + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 initDatabase: name: mongodb-kubernetes-init-database - version: 68876175f5ad6d0007fdc1d4 + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 initOpsManager: name: mongodb-kubernetes-init-ops-manager - version: 68876175f5ad6d0007fdc1d4 + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 managedSecurityContext: false mongodb: appdbAssumeOldFormat: false @@ -119,7 +96,7 @@ operator: vaultSecretBackend: enabled: false tlsSecretRef: "" - version: 68876175f5ad6d0007fdc1d4 + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 watchedResources: - mongodb - opsmanagers @@ -135,23 +112,23 @@ readinessProbe: name: mongodb-kubernetes-readinessprobe version: 1.0.22 registry: - agent: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - appDb: quay.io/mongodb - database: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - imagePullSecrets: image-registries-secret - initAppDb: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - initDatabase: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - initOpsManager: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev - operator: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev + agent: quay.io/mongodb + appDb: quay.io/mongodb/staging + database: quay.io/mongodb/staging + imagePullSecrets: prerelease-image-pullsecret + initAppDb: quay.io/mongodb/staging + initDatabase: quay.io/mongodb/staging + initOpsManager: quay.io/mongodb/staging + operator: quay.io/mongodb/staging opsManager: quay.io/mongodb pullPolicy: Always readinessProbe: quay.io/mongodb versionUpgradeHook: quay.io/mongodb search: community: - name: community - repo: 268558157000.dkr.ecr.eu-west-1.amazonaws.com/mongot - version: fbd60fb055dd500058edcb45677ea85d19421f47 + name: mongodb-search + repo: quay.io/mongodb/staging + version: latest versionUpgradeHook: name: mongodb-kubernetes-operator-version-upgrade-post-start-hook version: 1.0.9 @@ -166,7 +143,7 @@ metadata: name: mongodb-kubernetes-appdb namespace: mongodb imagePullSecrets: - - name: image-registries-secret + - name: prerelease-image-pullsecret --- # Source: mongodb-kubernetes/templates/database-roles.yaml apiVersion: v1 @@ -175,7 +152,7 @@ metadata: name: mongodb-kubernetes-database-pods namespace: mongodb imagePullSecrets: - - name: image-registries-secret + - name: prerelease-image-pullsecret --- # Source: mongodb-kubernetes/templates/database-roles.yaml apiVersion: v1 @@ -184,7 +161,7 @@ metadata: name: mongodb-kubernetes-ops-manager namespace: mongodb imagePullSecrets: - - name: image-registries-secret + - name: prerelease-image-pullsecret --- # Source: mongodb-kubernetes/templates/operator-sa.yaml apiVersion: v1 @@ -193,7 +170,7 @@ metadata: name: mongodb-kubernetes-operator namespace: mongodb imagePullSecrets: - - name: image-registries-secret + - name: prerelease-image-pullsecret --- # Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml kind: ClusterRole @@ -498,10 +475,10 @@ spec: runAsNonRoot: true runAsUser: 2000 imagePullSecrets: - - name: image-registries-secret + - name: prerelease-image-pullsecret containers: - name: mongodb-kubernetes-operator - image: "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes:68876175f5ad6d0007fdc1d4" + image: "quay.io/mongodb/staging/mongodb-kubernetes:1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2" imagePullPolicy: Always args: - -watch-resource=mongodb @@ -542,31 +519,31 @@ spec: value: Always # Database - name: MONGODB_ENTERPRISE_DATABASE_IMAGE - value: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-database + value: quay.io/mongodb/staging/mongodb-kubernetes-database - name: INIT_DATABASE_IMAGE_REPOSITORY - value: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-database + value: quay.io/mongodb/staging/mongodb-kubernetes-init-database - name: INIT_DATABASE_VERSION - value: 68876175f5ad6d0007fdc1d4 + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 - name: DATABASE_VERSION - value: 68876175f5ad6d0007fdc1d4 + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 # Ops Manager - name: OPS_MANAGER_IMAGE_REPOSITORY value: quay.io/mongodb/mongodb-enterprise-ops-manager-ubi - name: INIT_OPS_MANAGER_IMAGE_REPOSITORY - value: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-ops-manager + value: quay.io/mongodb/staging/mongodb-kubernetes-init-ops-manager - name: INIT_OPS_MANAGER_VERSION - value: 68876175f5ad6d0007fdc1d4 + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 # AppDB - name: INIT_APPDB_IMAGE_REPOSITORY - value: 268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-appdb + value: quay.io/mongodb/staging/mongodb-kubernetes-init-appdb - name: INIT_APPDB_VERSION - value: 68876175f5ad6d0007fdc1d4 + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 - name: OPS_MANAGER_IMAGE_PULL_POLICY value: Always - name: AGENT_IMAGE - value: "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-agent:108.0.2.8729-1" + value: "quay.io/mongodb/mongodb-agent:108.0.12.8846-1" - name: MDB_AGENT_IMAGE_REPOSITORY - value: "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-agent" + value: "quay.io/mongodb/mongodb-agent" - name: MONGODB_IMAGE value: mongodb-enterprise-server - name: MONGODB_REPO_URL @@ -576,7 +553,7 @@ spec: - name: PERFORM_FAILOVER value: 'true' - name: IMAGE_PULL_SECRETS - value: image-registries-secret + value: prerelease-image-pullsecret - name: MDB_MAX_CONCURRENT_RECONCILES value: "1" - name: POD_NAME @@ -600,9 +577,9 @@ spec: value: "ubi8" # Community Env Vars End - name: MDB_SEARCH_COMMUNITY_REPO_URL - value: "268558157000.dkr.ecr.eu-west-1.amazonaws.com/mongot" + value: "quay.io/mongodb/staging" - name: MDB_SEARCH_COMMUNITY_NAME - value: "community" + value: "mongodb-search" - name: MDB_SEARCH_COMMUNITY_VERSION - value: "fbd60fb055dd500058edcb45677ea85d19421f47" + value: "latest" diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0110_wait_for_operator_deployment.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0110_wait_for_operator_deployment.out new file mode 100644 index 000000000..7c8a8b287 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0110_wait_for_operator_deployment.out @@ -0,0 +1,9 @@ +Waiting for deployment "mongodb-kubernetes-operator" rollout to finish: 0 of 1 updated replicas are available... +deployment "mongodb-kubernetes-operator" successfully rolled out +Operator deployment in mongodb namespace +NAME READY UP-TO-DATE AVAILABLE AGE +mongodb-kubernetes-operator 1/1 1 1 2s + +Operator pod in mongodb namespace +NAME READY STATUS RESTARTS AGE +mongodb-kubernetes-operator-5b44cd54d4-rjxrj 1/1 Running 0 3s diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0315_wait_for_community_resource.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0315_wait_for_community_resource.out new file mode 100644 index 000000000..3110199cb --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0315_wait_for_community_resource.out @@ -0,0 +1,16 @@ +Waiting for MongoDBCommunity resource to reach Running phase... +mongodbcommunity.mongodbcommunity.mongodb.com/mdbc-rs condition met + +MongoDBCommunity resource +NAME PHASE VERSION +mdbc-rs Running 8.0.10 + +Pods running in cluster kind-kind +NAME READY STATUS RESTARTS AGE +mdb-debug-mdbc-rs-0-0 1/1 Running 0 118s +mdb-debug-mdbc-rs-1-0 1/1 Running 0 118s +mdb-debug-mdbc-rs-2-0 1/1 Running 0 117s +mdbc-rs-0 2/2 Running 0 2m11s +mdbc-rs-1 2/2 Running 0 83s +mdbc-rs-2 2/2 Running 0 34s +mongodb-kubernetes-operator-5b44cd54d4-rjxrj 1/1 Running 0 2m16s diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0330_wait_for_community_resource.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0330_wait_for_community_resource.out new file mode 100644 index 000000000..6971e0146 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0330_wait_for_community_resource.out @@ -0,0 +1,2 @@ +Waiting for MongoDBCommunity resource to reach Running phase... +mongodbcommunity.mongodbcommunity.mongodb.com/mdbc-rs condition met diff --git a/docs/community-search/quick-start/output/0335_show_running_pods.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0335_show_running_pods.out similarity index 72% rename from docs/community-search/quick-start/output/0335_show_running_pods.out rename to scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0335_show_running_pods.out index cd7017404..144cefd50 100644 --- a/docs/community-search/quick-start/output/0335_show_running_pods.out +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/01_0335_show_running_pods.out @@ -5,16 +5,16 @@ mdbc-rs Running 8.0.10 MongoDBSearch resource NAME PHASE AGE -mdbc-rs Running 7m58s +mdbc-rs Running 5m33s Pods running in cluster kind-kind NAME READY STATUS RESTARTS AGE -mdb-debug-mdbc-rs-0-0 1/1 Running 0 10m -mdb-debug-mdbc-rs-1-0 1/1 Running 0 10m -mdb-debug-mdbc-rs-2-0 1/1 Running 0 10m -mdb-debug-mdbc-rs-search-0-0 1/1 Running 0 7m57s -mdbc-rs-0 2/2 Running 1 (3m13s ago) 10m -mdbc-rs-1 2/2 Running 1 (5m49s ago) 9m23s -mdbc-rs-2 2/2 Running 1 (4m32s ago) 8m35s -mdbc-rs-search-0 1/1 Running 0 25s -mongodb-kubernetes-operator-5776c8b4df-wm82f 1/1 Running 0 35s +mdb-debug-mdbc-rs-0-0 1/1 Running 0 7m32s +mdb-debug-mdbc-rs-1-0 1/1 Running 0 7m32s +mdb-debug-mdbc-rs-2-0 1/1 Running 0 7m31s +mdb-debug-mdbc-rs-search-0-0 1/1 Running 0 5m32s +mdbc-rs-0 2/2 Running 1 (33s ago) 7m45s +mdbc-rs-1 2/2 Running 1 (3m11s ago) 6m57s +mdbc-rs-2 2/2 Running 1 (113s ago) 6m8s +mdbc-rs-search-0 1/1 Running 4 (4m20s ago) 5m33s +mongodb-kubernetes-operator-5b44cd54d4-rjxrj 1/1 Running 0 7m50s diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0420_import_movies_mflix_database.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0420_import_movies_mflix_database.out new file mode 100644 index 000000000..a7432faf0 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0420_import_movies_mflix_database.out @@ -0,0 +1,2 @@ +Downloading sample database archive... +Restoring sample database diff --git a/docs/community-search/quick-start/output/0440_wait_for_search_index_ready.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0440_wait_for_search_index_ready.out similarity index 100% rename from docs/community-search/quick-start/output/0440_wait_for_search_index_ready.out rename to scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0440_wait_for_search_index_ready.out diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0444_list_search_indexes.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0444_list_search_indexes.out new file mode 100644 index 000000000..66bd52f34 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0444_list_search_indexes.out @@ -0,0 +1,32 @@ +{ + cursor: { + id: 0, + ns: 'sample_mflix.movies', + firstBatch: [ + { + id: '68b5d833862bdd46756f23fe', + name: 'default', + type: 'search', + latestDefinition: { + indexID: ObjectId('68b5d833862bdd46756f23fe'), + name: 'default', + database: 'sample_mflix', + lastObservedCollectionName: 'movies', + collectionUUID: UUID('eb5bdd9e-fe14-4a0e-a012-5af2d7324d7a'), + numPartitions: 1, + mappings: { dynamic: true, fields: {} }, + indexFeatureVersion: 3 + } + } + ] + }, + ok: 1, + '$clusterTime': { + clusterTime: Timestamp({ t: 1756747889, i: 1 }), + signature: { + hash: Binary.createFromBase64('BJNOThO1gxmbkTscNSABaUstAy0=', 0), + keyId: Long('7545172961045512197') + } + }, + operationTime: Timestamp({ t: 1756747889, i: 1 }) +} diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0445_list_vector_search_indexes.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0445_list_vector_search_indexes.out new file mode 100644 index 000000000..afac79fb5 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0445_list_vector_search_indexes.out @@ -0,0 +1,40 @@ +{ + cursor: { + id: 0, + ns: 'sample_mflix.embedded_movies', + firstBatch: [ + { + id: '68b5d834862bdd46756f23ff', + name: 'vector_index', + type: 'vectorSearch', + latestDefinition: { + type: 'vectorSearch', + indexID: ObjectId('68b5d834862bdd46756f23ff'), + name: 'vector_index', + database: 'sample_mflix', + lastObservedCollectionName: 'embedded_movies', + collectionUUID: UUID('98d05ae8-9fa5-4813-9833-54355c75a016'), + numPartitions: 1, + fields: [ + { + type: 'vector', + path: 'plot_embedding_voyage_3_large', + numDimensions: 2048, + similarity: 'dotProduct', + quantization: 'scalar' + } + ] + } + } + ] + }, + ok: 1, + '$clusterTime': { + clusterTime: Timestamp({ t: 1756747889, i: 1 }), + signature: { + hash: Binary.createFromBase64('BJNOThO1gxmbkTscNSABaUstAy0=', 0), + keyId: Long('7545172961045512197') + } + }, + operationTime: Timestamp({ t: 1756747889, i: 1 }) +} diff --git a/docs/community-search/quick-start/output/0450_execute_search_query.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0450_execute_search_query.out similarity index 100% rename from docs/community-search/quick-start/output/0450_execute_search_query.out rename to scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0450_execute_search_query.out diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0455_execute_vector_search_query.out b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0455_execute_vector_search_query.out new file mode 100644 index 000000000..fb9f3de41 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_community_snippets/03_0455_execute_vector_search_query.out @@ -0,0 +1,54 @@ +mdbc-rs [primary] test> switched to db sample_mflix +mdbc-rs [primary] sample_mflix> ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... [ + { + plot: 'At the age of 21, Tim discovers he can travel in time and change what happens and has happened in his own life. His decision to make his world a better place by getting a girlfriend turns out not to be as easy as you might think.', + title: 'About Time', + score: 0.7704131603240967 + }, + { + plot: 'A psychiatrist makes multiple trips through time to save a woman that was murdered by her brutal husband.', + title: 'Retroactive', + score: 0.7597770690917969 + }, + { + plot: 'An officer for a security agency that regulates time travel, must fend for his life against a shady politician who has a tie to his past.', + title: 'Timecop', + score: 0.7574796676635742 + }, + { + plot: 'A time-travel experiment in which a robot probe is sent from the year 2073 to the year 1973 goes terribly wrong thrusting one of the project scientists, a man named Nicholas Sinclair into a...', + title: 'A.P.E.X.', + score: 0.7573235034942627 + }, + { + plot: 'After visiting 2015, Marty McFly must repeat his visit to 1955 to prevent disastrous changes to 1985... without interfering with his first trip.', + title: 'Back to the Future Part II', + score: 0.751945972442627 + }, + { + plot: 'A reporter, learning of time travelers visiting 20th century disasters, tries to change the history they know by averting upcoming disasters.', + title: 'Thrill Seekers', + score: 0.7503504753112793 + }, + { + plot: 'Hoping to alter the events of the past, a 19th century inventor instead travels 800,000 years into the future, where he finds humankind divided into two warring races.', + title: 'The Time Machine', + score: 0.750007152557373 + }, + { + plot: 'Lyle, a motorcycle champion is traveling the Mexican desert, when he find himself in the action radius of a time machine. So he find himself one century back in the past between rapists, ...', + title: 'Timerider: The Adventure of Lyle Swann', + score: 0.7499568462371826 + }, + { + plot: 'A romantic drama about a Chicago librarian with a gene that causes him to involuntarily time travel, and the complications it creates for his marriage.', + title: "The Time Traveler's Wife", + score: 0.7492842674255371 + }, + { + plot: 'A modern aircraft carrier is thrown back in time to 1941 near Hawaii, just hours before the Japanese attack on Pearl Harbor.', + title: 'The Final Countdown', + score: 0.7472751140594482 + } +] +mdbc-rs [primary] sample_mflix> \ No newline at end of file diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0090_helm_add_mogodb_repo.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0090_helm_add_mogodb_repo.out new file mode 100644 index 000000000..b1576c236 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0090_helm_add_mogodb_repo.out @@ -0,0 +1,6 @@ +"mongodb" already exists with the same configuration, skipping +Hang tight while we grab the latest from your chart repositories... +...Successfully got an update from the "mongodb" chart repository +Update Complete. ⎈Happy Helming!⎈ +NAME CHART VERSION APP VERSION DESCRIPTION +mongodb/mongodb-kubernetes 1.2.0 MongoDB Controllers for Kubernetes translate th... diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0100_install_operator.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0100_install_operator.out new file mode 100644 index 000000000..0f016af81 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0100_install_operator.out @@ -0,0 +1,585 @@ +Release "mongodb-kubernetes" does not exist. Installing it now. +NAME: mongodb-kubernetes +LAST DEPLOYED: Mon Sep 1 18:24:58 2025 +NAMESPACE: mongodb +STATUS: deployed +REVISION: 1 +TEST SUITE: None +USER-SUPPLIED VALUES: +registry: + imagePullSecrets: prerelease-image-pullsecret + +COMPUTED VALUES: +agent: + name: mongodb-agent + version: 108.0.12.8846-1 +community: + agent: + name: mongodb-agent + version: 108.0.2.8729-1 + mongodb: + imageType: ubi8 + name: mongodb-community-server + repo: quay.io/mongodb + name: mongodb-database + registry: + agent: quay.io/mongodb + resource: + members: 3 + name: mongodb-replica-set + tls: + caCertificateSecretRef: tls-ca-key-pair + certManager: + certDuration: 8760h + renewCertBefore: 720h + certificateKeySecretRef: tls-certificate + enabled: false + sampleX509User: false + useCertManager: true + useX509: false + version: 4.4.0 +database: + name: mongodb-kubernetes-database + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 +initAppDb: + name: mongodb-kubernetes-init-appdb + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 +initDatabase: + name: mongodb-kubernetes-init-database + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 +initOpsManager: + name: mongodb-kubernetes-init-ops-manager + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 +managedSecurityContext: false +mongodb: + appdbAssumeOldFormat: false + imageType: ubi8 + name: mongodb-enterprise-server + repo: quay.io/mongodb +multiCluster: + clusterClientTimeout: 10 + clusters: [] + kubeConfigSecretName: mongodb-enterprise-operator-multi-cluster-kubeconfig + performFailOver: true +operator: + additionalArguments: [] + affinity: {} + baseName: mongodb-kubernetes + createOperatorServiceAccount: true + createResourcesServiceAccountsAndRoles: true + deployment_name: mongodb-kubernetes-operator + enableClusterMongoDBRoles: true + enablePVCResize: true + env: prod + maxConcurrentReconciles: 1 + mdbDefaultArchitecture: non-static + name: mongodb-kubernetes-operator + nodeSelector: {} + operator_image_name: mongodb-kubernetes + replicas: 1 + resources: + limits: + cpu: 1100m + memory: 1Gi + requests: + cpu: 500m + memory: 200Mi + telemetry: + collection: + clusters: {} + deployments: {} + frequency: 1h + operators: {} + send: + frequency: 168h + tolerations: [] + vaultSecretBackend: + enabled: false + tlsSecretRef: "" + version: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 + watchedResources: + - mongodb + - opsmanagers + - mongodbusers + - mongodbcommunity + - mongodbsearch + webhook: + installClusterRole: true + registerConfiguration: true +opsManager: + name: mongodb-enterprise-ops-manager-ubi +readinessProbe: + name: mongodb-kubernetes-readinessprobe + version: 1.0.22 +registry: + agent: quay.io/mongodb + appDb: quay.io/mongodb/staging + database: quay.io/mongodb/staging + imagePullSecrets: prerelease-image-pullsecret + initAppDb: quay.io/mongodb/staging + initDatabase: quay.io/mongodb/staging + initOpsManager: quay.io/mongodb/staging + operator: quay.io/mongodb/staging + opsManager: quay.io/mongodb + pullPolicy: Always + readinessProbe: quay.io/mongodb + versionUpgradeHook: quay.io/mongodb +search: + community: + name: mongodb-search + repo: quay.io/mongodb/staging + version: latest +versionUpgradeHook: + name: mongodb-kubernetes-operator-version-upgrade-post-start-hook + version: 1.0.9 + +HOOKS: +MANIFEST: +--- +# Source: mongodb-kubernetes/templates/database-roles.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mongodb-kubernetes-appdb + namespace: mongodb +imagePullSecrets: + - name: prerelease-image-pullsecret +--- +# Source: mongodb-kubernetes/templates/database-roles.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mongodb-kubernetes-database-pods + namespace: mongodb +imagePullSecrets: + - name: prerelease-image-pullsecret +--- +# Source: mongodb-kubernetes/templates/database-roles.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mongodb-kubernetes-ops-manager + namespace: mongodb +imagePullSecrets: + - name: prerelease-image-pullsecret +--- +# Source: mongodb-kubernetes/templates/operator-sa.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mongodb-kubernetes-operator + namespace: mongodb +imagePullSecrets: + - name: prerelease-image-pullsecret +--- +# Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role +rules: + - apiGroups: + - mongodb.com + verbs: + - '*' + resources: + - clustermongodbroles +--- +# Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml +# Additional ClusterRole for clusterVersionDetection +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-cluster-telemetry +rules: + # Non-resource URL permissions + - nonResourceURLs: + - "/version" + verbs: + - get + # Cluster-scoped resource permissions + - apiGroups: + - '' + resources: + - namespaces + resourceNames: + - kube-system + verbs: + - get + - apiGroups: + - '' + resources: + - nodes + verbs: + - list +--- +# Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-mongodb-webhook +rules: + - apiGroups: + - "admissionregistration.k8s.io" + resources: + - validatingwebhookconfigurations + verbs: + - get + - create + - update + - delete + - apiGroups: + - "" + resources: + - services + verbs: + - get + - list + - watch + - create + - update + - delete +--- +# Source: mongodb-kubernetes/templates/operator-roles-clustermongodbroles.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: mongodb-kubernetes-operator-mongodb-cluster-mongodb-role +subjects: + - kind: ServiceAccount + name: mongodb-kubernetes-operator + namespace: mongodb +--- +# Source: mongodb-kubernetes/templates/operator-roles-telemetry.yaml +# ClusterRoleBinding for clusterVersionDetection +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-mongodb-cluster-telemetry-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: mongodb-kubernetes-operator-cluster-telemetry +subjects: + - kind: ServiceAccount + name: mongodb-kubernetes-operator + namespace: mongodb +--- +# Source: mongodb-kubernetes/templates/operator-roles-webhook.yaml +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-mongodb-webhook-binding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: mongodb-kubernetes-operator-mongodb-webhook +subjects: + - kind: ServiceAccount + name: mongodb-kubernetes-operator + namespace: mongodb +--- +# Source: mongodb-kubernetes/templates/database-roles.yaml +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-appdb + namespace: mongodb +rules: + - apiGroups: + - '' + resources: + - secrets + verbs: + - get + - apiGroups: + - '' + resources: + - pods + verbs: + - patch + - delete + - get +--- +# Source: mongodb-kubernetes/templates/operator-roles-base.yaml +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator + namespace: mongodb +rules: + - apiGroups: + - '' + resources: + - services + verbs: + - get + - list + - watch + - create + - update + - delete + - apiGroups: + - '' + resources: + - secrets + - configmaps + verbs: + - get + - list + - create + - update + - delete + - watch + - apiGroups: + - apps + resources: + - statefulsets + verbs: + - create + - get + - list + - watch + - delete + - update + - apiGroups: + - '' + resources: + - pods + verbs: + - get + - list + - watch + - delete + - deletecollection + - apiGroups: + - mongodbcommunity.mongodb.com + resources: + - mongodbcommunity + - mongodbcommunity/status + - mongodbcommunity/spec + - mongodbcommunity/finalizers + verbs: + - '*' + - apiGroups: + - mongodb.com + verbs: + - '*' + resources: + - mongodb + - mongodb/finalizers + - mongodbusers + - mongodbusers/finalizers + - opsmanagers + - opsmanagers/finalizers + - mongodbmulticluster + - mongodbmulticluster/finalizers + - mongodbsearch + - mongodbsearch/finalizers + - mongodb/status + - mongodbusers/status + - opsmanagers/status + - mongodbmulticluster/status + - mongodbsearch/status +--- +# Source: mongodb-kubernetes/templates/operator-roles-pvc-resize.yaml +kind: Role +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-pvc-resize + namespace: mongodb +rules: + - apiGroups: + - '' + resources: + - persistentvolumeclaims + verbs: + - get + - delete + - list + - watch + - patch + - update +--- +# Source: mongodb-kubernetes/templates/database-roles.yaml +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-appdb + namespace: mongodb +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: mongodb-kubernetes-appdb +subjects: + - kind: ServiceAccount + name: mongodb-kubernetes-appdb + namespace: mongodb +--- +# Source: mongodb-kubernetes/templates/operator-roles-base.yaml +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator + namespace: mongodb +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: mongodb-kubernetes-operator +subjects: + - kind: ServiceAccount + name: mongodb-kubernetes-operator + namespace: mongodb +--- +# Source: mongodb-kubernetes/templates/operator-roles-pvc-resize.yaml +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + name: mongodb-kubernetes-operator-pvc-resize-binding + namespace: mongodb +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: mongodb-kubernetes-operator-pvc-resize +subjects: + - kind: ServiceAccount + name: mongodb-kubernetes-operator + namespace: mongodb +--- +# Source: mongodb-kubernetes/templates/operator.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: mongodb-kubernetes-operator + namespace: mongodb +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: mongodb-kubernetes-operator + app.kubernetes.io/instance: mongodb-kubernetes-operator + template: + metadata: + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/name: mongodb-kubernetes-operator + app.kubernetes.io/instance: mongodb-kubernetes-operator + spec: + serviceAccountName: mongodb-kubernetes-operator + securityContext: + runAsNonRoot: true + runAsUser: 2000 + imagePullSecrets: + - name: prerelease-image-pullsecret + containers: + - name: mongodb-kubernetes-operator + image: "quay.io/mongodb/staging/mongodb-kubernetes:1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2" + imagePullPolicy: Always + args: + - -watch-resource=mongodb + - -watch-resource=opsmanagers + - -watch-resource=mongodbusers + - -watch-resource=mongodbcommunity + - -watch-resource=mongodbsearch + - -watch-resource=clustermongodbroles + command: + - /usr/local/bin/mongodb-kubernetes-operator + resources: + limits: + cpu: 1100m + memory: 1Gi + requests: + cpu: 500m + memory: 200Mi + env: + - name: OPERATOR_ENV + value: prod + - name: MDB_DEFAULT_ARCHITECTURE + value: non-static + - name: NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: WATCH_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: MDB_OPERATOR_TELEMETRY_COLLECTION_FREQUENCY + value: "1h" + - name: MDB_OPERATOR_TELEMETRY_SEND_FREQUENCY + value: "168h" + - name: CLUSTER_CLIENT_TIMEOUT + value: "10" + - name: IMAGE_PULL_POLICY + value: Always + # Database + - name: MONGODB_ENTERPRISE_DATABASE_IMAGE + value: quay.io/mongodb/staging/mongodb-kubernetes-database + - name: INIT_DATABASE_IMAGE_REPOSITORY + value: quay.io/mongodb/staging/mongodb-kubernetes-init-database + - name: INIT_DATABASE_VERSION + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 + - name: DATABASE_VERSION + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 + # Ops Manager + - name: OPS_MANAGER_IMAGE_REPOSITORY + value: quay.io/mongodb/mongodb-enterprise-ops-manager-ubi + - name: INIT_OPS_MANAGER_IMAGE_REPOSITORY + value: quay.io/mongodb/staging/mongodb-kubernetes-init-ops-manager + - name: INIT_OPS_MANAGER_VERSION + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 + # AppDB + - name: INIT_APPDB_IMAGE_REPOSITORY + value: quay.io/mongodb/staging/mongodb-kubernetes-init-appdb + - name: INIT_APPDB_VERSION + value: 1.4.0-prerelease-68b5c0bb136a0d0007a4c8a2 + - name: OPS_MANAGER_IMAGE_PULL_POLICY + value: Always + - name: AGENT_IMAGE + value: "quay.io/mongodb/mongodb-agent:108.0.12.8846-1" + - name: MDB_AGENT_IMAGE_REPOSITORY + value: "quay.io/mongodb/mongodb-agent" + - name: MONGODB_IMAGE + value: mongodb-enterprise-server + - name: MONGODB_REPO_URL + value: quay.io/mongodb + - name: MDB_IMAGE_TYPE + value: ubi8 + - name: PERFORM_FAILOVER + value: 'true' + - name: IMAGE_PULL_SECRETS + value: prerelease-image-pullsecret + - name: MDB_MAX_CONCURRENT_RECONCILES + value: "1" + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAME + value: mongodb-kubernetes-operator + # Community Env Vars Start + - name: MDB_COMMUNITY_AGENT_IMAGE + value: "quay.io/mongodb/mongodb-agent:108.0.2.8729-1" + - name: VERSION_UPGRADE_HOOK_IMAGE + value: "quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.9" + - name: READINESS_PROBE_IMAGE + value: "quay.io/mongodb/mongodb-kubernetes-readinessprobe:1.0.22" + - name: MDB_COMMUNITY_IMAGE + value: "mongodb-community-server" + - name: MDB_COMMUNITY_REPO_URL + value: "quay.io/mongodb" + - name: MDB_COMMUNITY_IMAGE_TYPE + value: "ubi8" + # Community Env Vars End + - name: MDB_SEARCH_COMMUNITY_REPO_URL + value: "quay.io/mongodb/staging" + - name: MDB_SEARCH_COMMUNITY_NAME + value: "mongodb-search" + - name: MDB_SEARCH_COMMUNITY_VERSION + value: "latest" + diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0310_wait_for_database_resource.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0310_wait_for_database_resource.out new file mode 100644 index 000000000..9a5c191d1 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0310_wait_for_database_resource.out @@ -0,0 +1,16 @@ +Waiting for MongoDB resource to reach Running phase... +mongodb.mongodb.com/mdb-rs condition met + +MongoDB resource +NAME PHASE VERSION TYPE AGE +mdb-rs Running 8.0.10 ReplicaSet 2m46s + +Pods running in cluster kind-kind +NAME READY STATUS RESTARTS AGE +mdb-debug-mdb-rs-0-0 1/1 Running 0 2m26s +mdb-debug-mdb-rs-1-0 1/1 Running 0 2m26s +mdb-debug-mdb-rs-2-0 1/1 Running 0 2m25s +mdb-rs-0 1/1 Running 0 2m29s +mdb-rs-1 1/1 Running 0 89s +mdb-rs-2 1/1 Running 0 46s +mongodb-kubernetes-operator-5b44cd54d4-kvrpv 1/1 Running 0 2m47s diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0335_show_running_pods.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0335_show_running_pods.out new file mode 100644 index 000000000..97734a89d --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/02_0335_show_running_pods.out @@ -0,0 +1,20 @@ + +MongoDB resource +NAME PHASE VERSION TYPE AGE +mdb-rs Running 8.0.10 ReplicaSet 4m26s + +MongoDBSearch resource +NAME PHASE AGE +mdb-rs Running 97s + +Pods running in cluster kind-kind +NAME READY STATUS RESTARTS AGE +mdb-debug-mdb-rs-0-0 1/1 Running 0 4m7s +mdb-debug-mdb-rs-1-0 1/1 Running 0 4m7s +mdb-debug-mdb-rs-2-0 1/1 Running 0 4m6s +mdb-debug-mdb-rs-search-0-0 1/1 Running 0 97s +mdb-rs-0 1/1 Running 0 4m10s +mdb-rs-1 1/1 Running 0 3m10s +mdb-rs-2 1/1 Running 0 2m27s +mdb-rs-search-0 1/1 Running 0 29s +mongodb-kubernetes-operator-5b44cd54d4-kvrpv 1/1 Running 0 4m28s diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0420_import_movies_mflix_database.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0420_import_movies_mflix_database.out new file mode 100644 index 000000000..a7432faf0 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0420_import_movies_mflix_database.out @@ -0,0 +1,2 @@ +Downloading sample database archive... +Restoring sample database diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0440_wait_for_search_index_ready.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0440_wait_for_search_index_ready.out new file mode 100644 index 000000000..b264580af --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0440_wait_for_search_index_ready.out @@ -0,0 +1 @@ +Sleeping to wait for search indexes to be created diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0444_list_search_indexes.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0444_list_search_indexes.out new file mode 100644 index 000000000..09342c66e --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0444_list_search_indexes.out @@ -0,0 +1,32 @@ +{ + cursor: { + id: 0, + ns: 'sample_mflix.movies', + firstBatch: [ + { + id: '68b5c9f984d938552792ba0c', + name: 'default', + type: 'search', + latestDefinition: { + indexID: ObjectId('68b5c9f984d938552792ba0c'), + name: 'default', + database: 'sample_mflix', + lastObservedCollectionName: 'movies', + collectionUUID: UUID('b4127db1-78ed-4f2a-b8e8-54a826075622'), + numPartitions: 1, + mappings: { dynamic: true, fields: {} }, + indexFeatureVersion: 3 + } + } + ] + }, + ok: 1, + '$clusterTime': { + clusterTime: Timestamp({ t: 1756744247, i: 1 }), + signature: { + hash: Binary.createFromBase64('7Ylj1qg2orgtBnElSVeObPTpTjw=', 0), + keyId: Long('7545158272257359877') + } + }, + operationTime: Timestamp({ t: 1756744247, i: 1 }) +} diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0445_list_vector_search_indexes.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0445_list_vector_search_indexes.out new file mode 100644 index 000000000..a8d0a7470 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0445_list_vector_search_indexes.out @@ -0,0 +1,40 @@ +{ + cursor: { + id: 0, + ns: 'sample_mflix.embedded_movies', + firstBatch: [ + { + id: '68b5c9fa84d938552792ba0d', + name: 'vector_index', + type: 'vectorSearch', + latestDefinition: { + type: 'vectorSearch', + indexID: ObjectId('68b5c9fa84d938552792ba0d'), + name: 'vector_index', + database: 'sample_mflix', + lastObservedCollectionName: 'embedded_movies', + collectionUUID: UUID('c9a6ef19-2993-4edc-904e-31964b889467'), + numPartitions: 1, + fields: [ + { + type: 'vector', + path: 'plot_embedding_voyage_3_large', + numDimensions: 2048, + similarity: 'dotProduct', + quantization: 'scalar' + } + ] + } + } + ] + }, + ok: 1, + '$clusterTime': { + clusterTime: Timestamp({ t: 1756744247, i: 1 }), + signature: { + hash: Binary.createFromBase64('7Ylj1qg2orgtBnElSVeObPTpTjw=', 0), + keyId: Long('7545158272257359877') + } + }, + operationTime: Timestamp({ t: 1756744247, i: 1 }) +} diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0450_execute_search_query.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0450_execute_search_query.out new file mode 100644 index 000000000..f425a96d8 --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0450_execute_search_query.out @@ -0,0 +1,22 @@ +mdb-rs [primary] test> switched to db sample_mflix +mdb-rs [primary] sample_mflix> ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... [ + { + plot: 'A sports agent stages an unconventional recruitment strategy to get talented Indian cricket players to play Major League Baseball.', + genres: [ 'Biography', 'Drama', 'Sport' ], + title: 'Million Dollar Arm', + released: ISODate('2014-05-16T00:00:00.000Z') + }, + { + plot: 'A Taiwanese high school baseball team travels to Japan in 1931 to compete in a national tournament.', + genres: [ 'Biography', 'Drama', 'History' ], + title: 'Kano', + released: ISODate('2014-02-27T00:00:00.000Z') + }, + { + plot: "12-year-old Josh is a mixed race boy and a promising baseball player. He is abused by his mother's boyfriend Byrd, and neglected by his mother Debbie. He forges his own path in life when ...", + genres: [ 'Drama' ], + title: 'Calloused Hands', + released: ISODate('2013-03-03T00:00:00.000Z') + } +] +mdb-rs [primary] sample_mflix> \ No newline at end of file diff --git a/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0455_execute_vector_search_query.out b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0455_execute_vector_search_query.out new file mode 100644 index 000000000..1623a6fdc --- /dev/null +++ b/scripts/code_snippets/tests/outputs/test_kind_search_enterprise_snippets/03_0455_execute_vector_search_query.out @@ -0,0 +1,54 @@ +mdb-rs [primary] test> switched to db sample_mflix +mdb-rs [primary] sample_mflix> ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... [ + { + plot: 'At the age of 21, Tim discovers he can travel in time and change what happens and has happened in his own life. His decision to make his world a better place by getting a girlfriend turns out not to be as easy as you might think.', + title: 'About Time', + score: 0.7704131603240967 + }, + { + plot: 'A psychiatrist makes multiple trips through time to save a woman that was murdered by her brutal husband.', + title: 'Retroactive', + score: 0.7597770690917969 + }, + { + plot: 'An officer for a security agency that regulates time travel, must fend for his life against a shady politician who has a tie to his past.', + title: 'Timecop', + score: 0.7574796676635742 + }, + { + plot: 'A time-travel experiment in which a robot probe is sent from the year 2073 to the year 1973 goes terribly wrong thrusting one of the project scientists, a man named Nicholas Sinclair into a...', + title: 'A.P.E.X.', + score: 0.7573235034942627 + }, + { + plot: 'After visiting 2015, Marty McFly must repeat his visit to 1955 to prevent disastrous changes to 1985... without interfering with his first trip.', + title: 'Back to the Future Part II', + score: 0.751945972442627 + }, + { + plot: 'A reporter, learning of time travelers visiting 20th century disasters, tries to change the history they know by averting upcoming disasters.', + title: 'Thrill Seekers', + score: 0.7503504753112793 + }, + { + plot: 'Hoping to alter the events of the past, a 19th century inventor instead travels 800,000 years into the future, where he finds humankind divided into two warring races.', + title: 'The Time Machine', + score: 0.750007152557373 + }, + { + plot: 'Lyle, a motorcycle champion is traveling the Mexican desert, when he find himself in the action radius of a time machine. So he find himself one century back in the past between rapists, ...', + title: 'Timerider: The Adventure of Lyle Swann', + score: 0.7499568462371826 + }, + { + plot: 'A romantic drama about a Chicago librarian with a gene that causes him to involuntarily time travel, and the complications it creates for his marriage.', + title: "The Time Traveler's Wife", + score: 0.7492842674255371 + }, + { + plot: 'A modern aircraft carrier is thrown back in time to 1941 near Hawaii, just hours before the Japanese attack on Pearl Harbor.', + title: 'The Final Countdown', + score: 0.7472751140594482 + } +] +mdb-rs [primary] sample_mflix> \ No newline at end of file diff --git a/scripts/code_snippets/tests/test_gke_multi_cluster_no_mesh_snippets.sh b/scripts/code_snippets/tests/test_gke_multi_cluster_no_mesh_snippets.sh new file mode 100755 index 000000000..0eff029ff --- /dev/null +++ b/scripts/code_snippets/tests/test_gke_multi_cluster_no_mesh_snippets.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +set -eou pipefail +source scripts/dev/set_env_context.sh + +script_name=$(readlink -f "${BASH_SOURCE[0]}") + +_SNIPPETS_OUTPUT_DIR="$(dirname "${script_name}")/outputs/$(basename "${script_name%.*}")" +export _SNIPPETS_OUTPUT_DIR +mkdir -p "${_SNIPPETS_OUTPUT_DIR}" + +function cleanup() { + if [ "${code_snippets_teardown:-true}" = true ]; then + echo "Deleting clusters and resources" + ./public/architectures/ra-10-ops-manager-mc-no-mesh/teardown.sh & + ./public/architectures/setup-multi-cluster/ra-09-setup-externaldns/teardown.sh & + wait + + ./public/architectures/setup-multi-cluster/ra-01-setup-gke/teardown.sh + elif [ "${code_snippets_reset:-false}" = true ]; then + echo "Deleting resources, keeping the clusters" + ./public/architectures/ra-10-ops-manager-mc-no-mesh/teardown.sh & + ./public/architectures/ra-11-mongodb-sharded-mc-no-mesh/teardown.sh & + ./public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/teardown.sh & + ./public/architectures/setup-multi-cluster/ra-09-setup-externaldns/teardown.sh & + wait + + ./public/architectures/setup-multi-cluster/ra-02-setup-operator/teardown.sh + else + echo "Not deleting anything" + fi +} + +dump_logs() { + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CLUSTER_0_CONTEXT_NAME}" + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CLUSTER_1_CONTEXT_NAME}" + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CLUSTER_2_CONTEXT_NAME}" +} + +cmd=${1:-""} +if [[ "${cmd}" == "dump_logs" ]]; then + source public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh + dump_logs + exit 0 +elif [[ "${cmd}" == "cleanup" ]]; then + source public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh + cleanup + exit 0 +fi + +function on_exit() { + dump_logs + cleanup +} + +trap on_exit EXIT + +source public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh +# we need some env vars, e.g. OM_NAMESPACE for teardown in case setup gke is failing +source public/architectures/setup-multi-cluster/ra-02-setup-operator/env_variables.sh + +./public/architectures/setup-multi-cluster/ra-01-setup-gke/test.sh + +./public/architectures/setup-multi-cluster/ra-02-setup-operator/test.sh + +./public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/test.sh + +source public/architectures/setup-multi-cluster/ra-09-setup-externaldns/env_variables.sh +./public/architectures/setup-multi-cluster/ra-09-setup-externaldns/test.sh + +source public/architectures/ra-10-ops-manager-mc-no-mesh/env_variables.sh +./public/architectures/ra-10-ops-manager-mc-no-mesh/test.sh + +source public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/env_variables.sh +./public/architectures/ra-12-mongodb-replicaset-mc-no-mesh/test.sh + +source public/architectures/ra-11-mongodb-sharded-mc-no-mesh/env_variables.sh +./public/architectures/ra-11-mongodb-sharded-mc-no-mesh/test.sh diff --git a/scripts/code_snippets/tests/test_gke_multi_cluster_snippets.sh b/scripts/code_snippets/tests/test_gke_multi_cluster_snippets.sh new file mode 100755 index 000000000..614d167f4 --- /dev/null +++ b/scripts/code_snippets/tests/test_gke_multi_cluster_snippets.sh @@ -0,0 +1,73 @@ +#!/usr/bin/env bash + +set -eou pipefail +source scripts/dev/set_env_context.sh + +script_name=$(readlink -f "${BASH_SOURCE[0]}") + +_SNIPPETS_OUTPUT_DIR="$(dirname "${script_name}")/outputs/$(basename "${script_name%.*}")" +export _SNIPPETS_OUTPUT_DIR +mkdir -p "${_SNIPPETS_OUTPUT_DIR}" + +function cleanup() { + if [ "${code_snippets_teardown:-true}" = true ]; then + echo "Deleting clusters" + ./public/architectures/setup-multi-cluster/ra-01-setup-gke/teardown.sh + elif [ "${code_snippets_reset:-false}" = true ]; then + echo "Deleting resources, keeping the clusters" + ./public/architectures/ra-06-ops-manager-multi-cluster/teardown.sh & + ./public/architectures/ra-08-mongodb-sharded-multi-cluster/teardown.sh & + ./public/architectures/ra-07-mongodb-replicaset-multi-cluster/teardown.sh & + wait + + ./public/architectures/setup-multi-cluster/ra-02-setup-operator/teardown.sh + else + echo "Not deleting anything" + fi +} + +dump_logs() { + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CLUSTER_0_CONTEXT_NAME}" + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CLUSTER_1_CONTEXT_NAME}" + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CLUSTER_2_CONTEXT_NAME}" +} + +cmd=${1:-""} +if [[ "${cmd}" == "dump_logs" ]]; then + source public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh + dump_logs + exit 0 +elif [[ "${cmd}" == "cleanup" ]]; then + source public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh + cleanup + exit 0 +fi +# if no cmd, proceed with the test normally +function on_exit() { + dump_logs + cleanup +} + +trap on_exit EXIT + + +source public/architectures/setup-multi-cluster/ra-01-setup-gke/env_variables.sh +./public/architectures/setup-multi-cluster/ra-01-setup-gke/test.sh + +source public/architectures/setup-multi-cluster/ra-02-setup-operator/env_variables.sh +./public/architectures/setup-multi-cluster/ra-02-setup-operator/test.sh + +./public/architectures/setup-multi-cluster/ra-03-setup-istio/test.sh + +./public/architectures/setup-multi-cluster/ra-04-verify-connectivity/test.sh + +./public/architectures/setup-multi-cluster/ra-05-setup-cert-manager/test.sh + +source public/architectures/ra-06-ops-manager-multi-cluster/env_variables.sh +./public/architectures/ra-06-ops-manager-multi-cluster/test.sh + +source public/architectures/ra-07-mongodb-replicaset-multi-cluster/env_variables.sh +./public/architectures/ra-07-mongodb-replicaset-multi-cluster/test.sh + +source public/architectures/ra-08-mongodb-sharded-multi-cluster/env_variables.sh +./public/architectures/ra-08-mongodb-sharded-multi-cluster/test.sh diff --git a/scripts/code_snippets/tests/test_kind_search_community_snippets.sh b/scripts/code_snippets/tests/test_kind_search_community_snippets.sh new file mode 100755 index 000000000..522433a7a --- /dev/null +++ b/scripts/code_snippets/tests/test_kind_search_community_snippets.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +set -eou pipefail +test "${MDB_BASH_DEBUG:-0}" -eq 1 && set -x + +source scripts/dev/set_env_context.sh + +script_name=$(readlink -f "${BASH_SOURCE[0]}") + +_SNIPPETS_OUTPUT_DIR="$(dirname "${script_name}")/outputs/$(basename "${script_name%.*}")" +export _SNIPPETS_OUTPUT_DIR +mkdir -p "${_SNIPPETS_OUTPUT_DIR}" + +dump_logs() { + if [[ "${SKIP_DUMP:-"false"}" != "true" ]]; then + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CTX}" + fi +} +trap dump_logs EXIT + +test_dir="./docs/search/01-search-community-deploy" +source "${test_dir}/env_variables.sh" +echo "Sourcing env variables for ${CODE_SNIPPETS_FLAVOR} flavor" +# shellcheck disable=SC1090 +test -f "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" && source "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" +${test_dir}/test.sh + +test_dir="./docs/search/03-search-query-usage" +echo "Sourcing env variables for ${CODE_SNIPPETS_FLAVOR} flavor" +# shellcheck disable=SC1090 +test -f "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" && source "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" + +export MDB_RESOURCE_NAME="mdbc-rs" +export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_RESOURCE_NAME}-0.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=${MDB_RESOURCE_NAME}" + +${test_dir}/test.sh + diff --git a/scripts/code_snippets/tests/test_kind_search_enterprise_snippets.sh b/scripts/code_snippets/tests/test_kind_search_enterprise_snippets.sh new file mode 100755 index 000000000..945053844 --- /dev/null +++ b/scripts/code_snippets/tests/test_kind_search_enterprise_snippets.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +set -eou pipefail +test "${MDB_BASH_DEBUG:-0}" -eq 1 && set -x + +source scripts/dev/set_env_context.sh + +script_name=$(readlink -f "${BASH_SOURCE[0]}") + +_SNIPPETS_OUTPUT_DIR="$(dirname "${script_name}")/outputs/$(basename "${script_name%.*}")" +export _SNIPPETS_OUTPUT_DIR +mkdir -p "${_SNIPPETS_OUTPUT_DIR}" + +dump_logs() { + if [[ "${SKIP_DUMP:-"false"}" != "true" ]]; then + scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh "${K8S_CTX}" + fi +} +trap dump_logs EXIT + +test_dir="./docs/search/02-search-enterprise-deploy" +source "${test_dir}/env_variables.sh" +echo "Sourcing env variables for ${CODE_SNIPPETS_FLAVOR} flavor" +# shellcheck disable=SC1090 +test -f "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" && source "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" +${test_dir}/test.sh + +test_dir="./docs/search/03-search-query-usage" +echo "Sourcing env variables for ${CODE_SNIPPETS_FLAVOR} flavor" +# shellcheck disable=SC1090 +test -f "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" && source "${test_dir}/env_variables_${CODE_SNIPPETS_FLAVOR}.sh" + +export MDB_CONNECTION_STRING="mongodb://mdb-user:${MDB_USER_PASSWORD}@${MDB_RESOURCE_NAME}-0.${MDB_RESOURCE_NAME}-svc.${MDB_NS}.svc.cluster.local:27017/?replicaSet=${MDB_RESOURCE_NAME}" + +${test_dir}/test.sh diff --git a/scripts/code_snippets/validate_snippets.py b/scripts/code_snippets/validate_snippets.py new file mode 100755 index 000000000..be797add9 --- /dev/null +++ b/scripts/code_snippets/validate_snippets.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import os +import sys +from collections import defaultdict + + +def find_snippet_directories(): + """Find all directories containing both test.sh and code_snippets subdirectory.""" + snippet_dirs = [] + + # Traverse current directory recursively to find test.sh files + for root, dirs, files in os.walk("."): + if "test.sh" in files: + # Check if this directory also has a code_snippets subdirectory + code_snippets_path = os.path.join(root, "code_snippets") + if os.path.isdir(code_snippets_path): + snippet_dirs.append(root) + + return snippet_dirs + + +def verify_snippets_files_are_unique(): + """Check if files in snippet directories have unique names across all directories.""" + dirs = find_snippet_directories() + + if not dirs: + print("No snippet directories found (no test.sh files).") + return True + + file_map = defaultdict(list) + + print(f"Checking for duplicate file names across code snippet directories:\n {"\t\n".join(dirs)}") + + # Scan all files in code_snippets subdirectories only + for snippet_dir in dirs: + code_snippets_dir = os.path.join(snippet_dir, "code_snippets") + if os.path.exists(code_snippets_dir): + for file in os.listdir(code_snippets_dir): + file_path = os.path.join(code_snippets_dir, file) + if os.path.isfile(file_path): + file_map[file].append(file_path) + + # Check for duplicates + duplicates_found = False + for filename, paths in file_map.items(): + if len(paths) > 1: + if not duplicates_found: + print("ERROR: Duplicate file names found:") + duplicates_found = True + print(f" File '{filename}' appears in multiple locations:") + for path in sorted(paths): + print(f" {path}") + print() + + if duplicates_found: + print("Failure - please rename duplicate files to ensure uniqueness across all snippet directories.") + return False + else: + print("OK - all snippets have unique names across directories.") + return True + + +if __name__ == "__main__": + checks = [verify_snippets_files_are_unique()] + + # Exit 0 if all checks pass, 1 if any fail + sys.exit(0 if all(checks) else 1) diff --git a/scripts/dev/configure_container_auth.sh b/scripts/dev/configure_container_auth.sh index fa20539b0..ff3dc6b1e 100755 --- a/scripts/dev/configure_container_auth.sh +++ b/scripts/dev/configure_container_auth.sh @@ -153,12 +153,12 @@ fi aws ecr get-login-password --region "eu-west-1" | registry_login "AWS" "268558157000.dkr.ecr.eu-west-1.amazonaws.com" -if [[ -n "${COMMUNITY_PRIVATE_PREVIEW_PULLSECRET_DOCKERCONFIGJSON:-}" ]]; then +if [[ -n "${PRERELEASE_PULLSECRET_DOCKERCONFIGJSON:-}" ]]; then # log in to quay.io for the mongodb/mongodb-search-community private repo # TODO remove once we switch to the official repo in Public Preview quay_io_auth_file=$(mktemp) config_tmp=$(mktemp) - echo "${COMMUNITY_PRIVATE_PREVIEW_PULLSECRET_DOCKERCONFIGJSON}" | base64 -d > "${quay_io_auth_file}" + echo "${PRERELEASE_PULLSECRET_DOCKERCONFIGJSON}" | base64 -d > "${quay_io_auth_file}" exec_cmd jq -s '.[0] * .[1]' "${quay_io_auth_file}" "${CONFIG_PATH}" > "${config_tmp}" exec_cmd mv "${config_tmp}" "${CONFIG_PATH}" rm "${quay_io_auth_file}" diff --git a/scripts/dev/contexts/e2e_mdb_community b/scripts/dev/contexts/e2e_mdb_community index bc2f0f7f0..b38563179 100644 --- a/scripts/dev/contexts/e2e_mdb_community +++ b/scripts/dev/contexts/e2e_mdb_community @@ -11,11 +11,4 @@ source "${script_dir}/variables/mongodb_latest" # This variable is needed otherwise the `fetch_om_information.sh` script is called and fails the test export OM_EXTERNALLY_CONFIGURED="true" -# Temporary development images built from mongot master -#export MDB_SEARCH_COMMUNITY_VERSION="776d43523d185b6b234289e17c191712a3e6569b" # master -#export MDB_SEARCH_COMMUNITY_VERSION="d6884ae132aab30497af55dbaff05e8274e9775f" # Local->Admin -#export MDB_SEARCH_COMMUNITY_VERSION="ad8acf5c3a045d6e0306ad67d61fcb5be40f57ae" # hardcoded mdbc-rs replicaset name -#export MDB_SEARCH_COMMUNITY_VERSION="b9b80915f5571bfa5fc2aa70acb20d784e68d79b" # hardcoded Local->Admin, handled replicaSetName in config -export MDB_SEARCH_COMMUNITY_VERSION="fbd60fb055dd500058edcb45677ea85d19421f47" # Nolan's fixes -export MDB_SEARCH_COMMUNITY_NAME="mongot/community" -export MDB_SEARCH_COMMUNITY_REPO_URL="268558157000.dkr.ecr.eu-west-1.amazonaws.com" +source "${script_dir}/variables/mongodb_search_dev" diff --git a/scripts/dev/contexts/e2e_mdb_kind_ubi_cloudqa b/scripts/dev/contexts/e2e_mdb_kind_ubi_cloudqa index 73202c211..080292666 100644 --- a/scripts/dev/contexts/e2e_mdb_kind_ubi_cloudqa +++ b/scripts/dev/contexts/e2e_mdb_kind_ubi_cloudqa @@ -16,3 +16,5 @@ export CUSTOM_OM_VERSION export CUSTOM_MDB_VERSION=6.0.5 export CUSTOM_MDB_PREV_VERSION=5.0.7 + +source "${script_dir}/variables/mongodb_search_dev" diff --git a/scripts/dev/contexts/e2e_static_mdb_kind_ubi_cloudqa b/scripts/dev/contexts/e2e_static_mdb_kind_ubi_cloudqa index 0ee88f209..3b6426d35 100644 --- a/scripts/dev/contexts/e2e_static_mdb_kind_ubi_cloudqa +++ b/scripts/dev/contexts/e2e_static_mdb_kind_ubi_cloudqa @@ -17,3 +17,5 @@ export CUSTOM_OM_VERSION export CUSTOM_MDB_PREV_VERSION=6.0.16 export CUSTOM_MDB_VERSION=7.0.5 + +source "${script_dir}/variables/mongodb_search_dev" diff --git a/scripts/dev/contexts/evg-private-context b/scripts/dev/contexts/evg-private-context index c8bab1176..76836453e 100644 --- a/scripts/dev/contexts/evg-private-context +++ b/scripts/dev/contexts/evg-private-context @@ -110,8 +110,8 @@ export CODE_SNIPPETS_COMMIT_OUTPUT=${code_snippets_commit_output:-"false"} export READINESS_PROBE_IMAGE="268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-readinessprobe:${version_id}" export VERSION_UPGRADE_HOOK_IMAGE="268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-operator-version-upgrade-post-start-hook:${version_id}" -# TODO to be removed at public preview stage of community-search -export COMMUNITY_PRIVATE_PREVIEW_PULLSECRET_DOCKERCONFIGJSON="${community_private_preview_pullsecret_dockerconfigjson}" +# shellcheck disable=SC2154 +export PRERELEASE_PULLSECRET_DOCKERCONFIGJSON="${community_private_preview_pullsecret_dockerconfigjson}" export cognito_user_pool_id="${cognito_user_pool_id}" export cognito_workload_federation_client_id="${cognito_workload_federation_client_id}" diff --git a/scripts/dev/contexts/prerelease_gke_code_snippets b/scripts/dev/contexts/prerelease_gke_code_snippets index 61a07676f..c07a18630 100644 --- a/scripts/dev/contexts/prerelease_gke_code_snippets +++ b/scripts/dev/contexts/prerelease_gke_code_snippets @@ -10,7 +10,7 @@ script_dir=$(dirname "${script_name}") source "${script_dir}/root-context" export MDB_GKE_PROJECT="scratch-kubernetes-team" -export K8S_CLUSTER_SUFFIX="-${version_id}-${RANDOM}" +export K8S_CLUSTER_SUFFIX="${K8S_CLUSTER_SUFFIX:-"-${version_id}-${RANDOM}"}" export CODE_SNIPPETS_COMMIT_OUTPUT=true # we reset evg host to use a default ~/.kube/config for GKE instead of the one from evg host diff --git a/scripts/dev/contexts/prerelease_kind_code_snippets b/scripts/dev/contexts/prerelease_kind_code_snippets index d6fea1d84..4248bb9ee 100644 --- a/scripts/dev/contexts/prerelease_kind_code_snippets +++ b/scripts/dev/contexts/prerelease_kind_code_snippets @@ -12,3 +12,5 @@ source "${script_dir}/root-context" export NAMESPACE=mongodb export CODE_SNIPPETS_FLAVOR=e2e_prerelease export CODE_SNIPPETS_COMMIT_OUTPUT=true + +export PRERELEASE_IMAGE_PULLSECRET="${PRERELEASE_PULLSECRET_DOCKERCONFIGJSON}" diff --git a/scripts/dev/contexts/private-context-template b/scripts/dev/contexts/private-context-template index f1809728e..2a95eaf42 100644 --- a/scripts/dev/contexts/private-context-template +++ b/scripts/dev/contexts/private-context-template @@ -97,8 +97,7 @@ export e2e_cloud_qa_orgid_owner_static_2="${OM_ORGID}" export e2e_cloud_qa_apikey_owner_static_2="${OM_API_KEY}" export e2e_cloud_qa_user_owner_static_2="${OM_USER}" -# TODO to be removed at public preview stage of community-search -export COMMUNITY_PRIVATE_PREVIEW_PULLSECRET_DOCKERCONFIGJSON="" +export PRERELEASE_PULLSECRET_DOCKERCONFIGJSON="" # uncomment to enable license update with pre-commit script # export MDB_UPDATE_LICENSES=true diff --git a/scripts/dev/contexts/private_gke_code_snippets b/scripts/dev/contexts/private_gke_code_snippets index 50bc169ce..c88583802 100644 --- a/scripts/dev/contexts/private_gke_code_snippets +++ b/scripts/dev/contexts/private_gke_code_snippets @@ -10,8 +10,10 @@ script_dir=$(dirname "${script_name}") source "${script_dir}/root-context" source "${script_dir}/variables/om80" +export KUBE_ENVIRONMENT_NAME=multi + export MDB_GKE_PROJECT="scratch-kubernetes-team" -export K8S_CLUSTER_SUFFIX="-${version_id}-${RANDOM}" +export K8S_CLUSTER_SUFFIX="${K8S_CLUSTER_SUFFIX:-"-${version_id}-${RANDOM}"}" # we reset evg host to use a default ~/.kube/config for GKE instead of the one from evg host export EVG_HOST_NAME="" diff --git a/scripts/dev/contexts/private_kind_code_snippets b/scripts/dev/contexts/private_kind_code_snippets index 970f0dc3f..6ae3751d8 100644 --- a/scripts/dev/contexts/private_kind_code_snippets +++ b/scripts/dev/contexts/private_kind_code_snippets @@ -12,3 +12,5 @@ source "${script_dir}/e2e_mdb_community" export NAMESPACE=mongodb export CODE_SNIPPETS_FLAVOR=e2e_private + +export ops_manager_version="cloud_qa" diff --git a/scripts/dev/contexts/public_gke_code_snippets b/scripts/dev/contexts/public_gke_code_snippets index dddae3db9..6cc413dc4 100644 --- a/scripts/dev/contexts/public_gke_code_snippets +++ b/scripts/dev/contexts/public_gke_code_snippets @@ -9,9 +9,11 @@ script_dir=$(dirname "${script_name}") source "${script_dir}/root-context" +export KUBE_ENVIRONMENT_NAME=multi + export MDB_GKE_PROJECT="scratch-kubernetes-team" # shellcheck disable=SC2154 -export K8S_CLUSTER_SUFFIX="-${version_id}-${RANDOM}" +export K8S_CLUSTER_SUFFIX="${K8S_CLUSTER_SUFFIX:-"-${version_id}-${RANDOM}"}" # we reset evg host to use a default ~/.kube/config for GKE instead of the one from evg host export EVG_HOST_NAME="" diff --git a/scripts/dev/contexts/variables/mongodb_search_dev b/scripts/dev/contexts/variables/mongodb_search_dev new file mode 100644 index 000000000..1cef3748f --- /dev/null +++ b/scripts/dev/contexts/variables/mongodb_search_dev @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -Eeou pipefail + +# Temporary development images built from mongot master +export MDB_SEARCH_COMMUNITY_VERSION="1.51.0-44-g33ee8acbe" # Sep 2nd mongot master +export MDB_SEARCH_COMMUNITY_NAME="mongot/community" +export MDB_SEARCH_COMMUNITY_REPO_URL="268558157000.dkr.ecr.eu-west-1.amazonaws.com" diff --git a/scripts/evergreen/e2e/dump_diagnostic_information.sh b/scripts/evergreen/e2e/dump_diagnostic_information.sh index f4ea7b986..c9985cab6 100755 --- a/scripts/evergreen/e2e/dump_diagnostic_information.sh +++ b/scripts/evergreen/e2e/dump_diagnostic_information.sh @@ -8,12 +8,10 @@ set +e source scripts/funcs/printing -dump_all_non_default_namespaces() { - echo "Gathering logs from all non-default namespaces" - +_dump_all_non_default_namespaces() { + local context="${1}" local original_context original_context="$(kubectl config current-context)" - kubectl config use-context "${1:-${original_context}}" &> /dev/null prefix="${1:-${original_context}}_" # shellcheck disable=SC2154 if [[ "${KUBE_ENVIRONMENT_NAME:-}" != "multi" ]]; then @@ -21,36 +19,40 @@ dump_all_non_default_namespaces() { fi mkdir -p logs - namespaces=$(kubectl get namespace --output=jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | \ + namespaces=$(kubectl --context="${context}" get namespace --output=jsonpath="{.items[*].metadata.name}" | tr ' ' '\n' | \ grep -v "default" | \ grep -v "kube-node-lease" | \ grep -v "kube-node-lease" | \ grep -v "kube-public" | \ grep -v "kube-system" | \ grep -v "local-path-storage" | \ + grep -v "gmp-" | \ + grep -v "gke-managed" | \ + grep -v "local-path-storage" | \ + grep -v "local-path-storage" | \ grep -v "metallb-system" ) for ns in ${namespaces}; do - if kubectl get namespace "${ns}" -o jsonpath='{.metadata.annotations}'; then + if kubectl --context="${context}" get namespace "${ns}" -o jsonpath='{.metadata.annotations}'; then echo "Dumping all diagnostic information for namespace ${ns}" - dump_namespace "${ns}" "${prefix}" + dump_namespace "${context}" "${ns}" "${prefix}" fi done } -dump_all() { +dump_all_non_default_namespaces() { + local context="${1}" + _dump_all_non_default_namespaces "$@" 2>&1 | prepend "${context}" +} + +_dump_all() { [[ "${MODE-}" = "dev" ]] && return mkdir -p logs - # TODO: provide a cleaner way of handling this. For now we run the same command with kubectl configured - # with a different context. - local original_context - original_context="$(kubectl config current-context)" - kubectl config use-context "${1:-${original_context}}" &> /dev/null - prefix="${1:-${original_context}}_" - # shellcheck disable=SC2154 + local context="${1}" + prefix="${context}_" if [[ "${KUBE_ENVIRONMENT_NAME:-}" != "multi" ]]; then prefix="" fi @@ -59,197 +61,243 @@ dump_all() { # but in some exceptional cases (e.g. clusterwide operator) there can be more than 1 namespace to print diagnostics # In this case the python test app may create the test namespace and add necessary labels and annotations so they # would be dumped for diagnostics as well - for ns in $(kubectl get namespace -l "evg=task" --output=jsonpath={.items..metadata.name}); do - if kubectl get namespace "${ns}" -o jsonpath='{.metadata.annotations}' | grep -q "${task_id:-'not-specified'}"; then + for ns in $(kubectl --context="${context}" get namespace -l "evg=task" --output=jsonpath={.items..metadata.name}); do + if kubectl --context="${context}" get namespace "${ns}" -o jsonpath='{.metadata.annotations}' | grep -q "${task_id:-'not-specified'}"; then echo "Dumping all diagnostic information for namespace ${ns}" - dump_namespace "${ns}" "${prefix}" + dump_namespace "${context}" "${ns}" "${prefix}" fi done - if kubectl get namespace "olm" &>/dev/null; then + if kubectl --context="${context}" get namespace "olm" &>/dev/null; then echo "Dumping olm namespace" - dump_namespace "olm" "olm" + dump_namespace "${context}" "olm" "olm" fi - kubectl config use-context "${original_context}" &> /dev/null + kubectl --context="${context}" -n "kube-system" get configmap coredns -o yaml > "logs/${prefix}coredns.yaml" - kubectl -n "kube-system" get configmap coredns -o yaml > "logs/${prefix}coredns.yaml" + kubectl --context="${context}" events --all-namespaces > "logs/${prefix}kube_events.json" +} - kubectl events --all-namespaces > "logs/${prefix}kube_events.json" +dump_all() { + local context="${1}" + _dump_all "$@" 2>&1 | prepend "${context}" } dump_objects() { - local object=$1 - local msg=$2 - local namespace=${3} - local action=${4:-get -o yaml} + local context=$1 + local object=$2 + local msg=$3 + local namespace=${4} + local action=${5:-get -o yaml} + local out_file=${6:-""} + + # First check if the resource type exists + if ! kubectl --context="${context}" get "${object}" --no-headers -o name -n "${namespace}" >/dev/null 2>&1; then + # Resource type doesn't exist, skip silently + return + fi - if [ "$(kubectl get "${object}" --no-headers -o name -n "${namespace}" | wc -l)" = "0" ]; then - # if no objects of this type, return + # Check if there are any objects of this type + local resource_count + resource_count=$(kubectl --context="${context}" get "${object}" --no-headers -o name -n "${namespace}" 2>/dev/null | wc -l) + if [ "${resource_count}" -eq 0 ]; then + # Resource type exists but no objects of this type, return return fi - header "${msg}" + # Capture output first to check if it contains actual resources + local temp_output # shellcheck disable=SC2086 - kubectl -n "${namespace}" ${action} "${object}" 2>&1 + temp_output=$(kubectl --context="${context}" -n "${namespace}" ${action} "${object}" 2>&1) + + # Check if output contains actual resources (not just empty list) + # Skip if it's an empty YAML list (contains "items: []") + if printf '%s\n' "${temp_output}" | grep -Fq "items: []"; then + # Empty list, don't create file + return + fi + + if [[ -n "${out_file}" ]]; then + { + header "${msg}" + echo "${temp_output}" + } > "${out_file}" + else + header "${msg}" + # shellcheck disable=SC2086 + kubectl --context="${context}" -n "${namespace}" ${action} "${object}" 2>&1 + fi } # get_operator_managed_pods returns a list of names of the Pods that are managed # by the Operator. get_operator_managed_pods() { - local namespace=${1} - kubectl get pods --namespace "${namespace}" --selector=controller=mongodb-enterprise-operator --no-headers -o custom-columns=":metadata.name" + local context=${1} + local namespace=${2} + kubectl --context="${context}" get pods --namespace "${namespace}" --selector=controller=mongodb-enterprise-operator --no-headers -o custom-columns=":metadata.name" } get_all_pods() { - local namespace=${1} - kubectl get pods --namespace "${namespace}" --no-headers -o custom-columns=":metadata.name" + local context=${1} + local namespace=${2} + kubectl --context="${context}" get pods --namespace "${namespace}" --no-headers -o custom-columns=":metadata.name" } is_mdb_resource_pod() { - local pod="${1}" - local namespace="${2}" + local context="${1}" + local pod="${2}" + local namespace="${3}" - kubectl exec "${pod}" -n "${namespace}" -- ls /var/log/mongodb-mms-automation/automation-agent-verbose.log &>/dev/null + kubectl --context="${context}" exec "${pod}" -n "${namespace}" -- ls /var/log/mongodb-mms-automation/automation-agent-verbose.log &>/dev/null } # dump_pod_logs dumps agent and mongodb logs. dump_pod_logs() { - local pod="${1}" - local namespace="${2}" - local prefix="${3}" + local context="${1}" + local pod="${2}" + local namespace="${3}" + local prefix="${4}" - if is_mdb_resource_pod "${pod}" "${namespace}"; then + if is_mdb_resource_pod "${context}" "${pod}" "${namespace}"; then # for MDB resource Pods, we dump the log files from the file system echo "Writing agent and mongodb logs for pod ${pod} to logs" - kubectl cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/automation-agent-verbose.log" "logs/${prefix}${pod}-agent-verbose.log" &> /dev/null - kubectl cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/automation-agent.log" "logs/${prefix}${pod}-agent.log" &> /dev/null - kubectl cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/monitoring-agent-verbose.log" "logs/${prefix}${pod}-monitoring-agent-verbose.log" &> /dev/null - kubectl cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/monitoring-agent.log" "logs/${prefix}${pod}-monitoring-agent.log" &> /dev/null - kubectl logs -n "${namespace}" "${pod}" -c "mongodb-agent-monitoring" > "logs/${prefix}${pod}-monitoring-agent-stdout.log" || true - kubectl logs -n "${namespace}" "${pod}" -c "mongod" > "logs/${prefix}${pod}-mongod-container.log" || true - kubectl logs -n "${namespace}" "${pod}" -c "mongodb-agent" > "logs/${prefix}${pod}-mongodb-agent-container.log" || true - kubectl cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/mongodb.log" "logs/${prefix}${pod}-mongodb.log" &> /dev/null || true + kubectl --context="${context}" cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/automation-agent-verbose.log" "logs/${prefix}${pod}-agent-verbose.log" &> /dev/null + kubectl --context="${context}" cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/automation-agent.log" "logs/${prefix}${pod}-agent.log" &> /dev/null + kubectl --context="${context}" cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/monitoring-agent-verbose.log" "logs/${prefix}${pod}-monitoring-agent-verbose.log" &> /dev/null + kubectl --context="${context}" cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/monitoring-agent.log" "logs/${prefix}${pod}-monitoring-agent.log" &> /dev/null + kubectl --context="${context}" logs -n "${namespace}" "${pod}" -c "mongodb-agent-monitoring" > "logs/${prefix}${pod}-monitoring-agent-stdout.log" || true + kubectl --context="${context}" logs -n "${namespace}" "${pod}" -c "mongod" > "logs/${prefix}${pod}-mongod-container.log" || true + kubectl --context="${context}" logs -n "${namespace}" "${pod}" -c "mongodb-agent" > "logs/${prefix}${pod}-mongodb-agent-container.log" || true + kubectl --context="${context}" cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/mongodb.log" "logs/${prefix}${pod}-mongodb.log" &> /dev/null || true # note that this file may get empty if the logs have already grew too much - seems it's better to have it explicitly empty then just omit - kubectl logs -n "${namespace}" "${pod}" | jq -c -r 'select( .logType == "agent-launcher-script") | .contents' 2> /dev/null > "logs/${prefix}${pod}-launcher.log" + kubectl --context="${context}" logs -n "${namespace}" "${pod}" | jq -c -r 'select( .logType == "agent-launcher-script") | .contents' 2> /dev/null > "logs/${prefix}${pod}-launcher.log" else # for all other pods we want each log per container from kubectl - for container in $(kubectl get pods -n "${namespace}" "${pod}" -o jsonpath='{.spec.containers[*].name}'); do - echo "Writing log file for pod ${pod} - container ${container} to logs/${pod}-${container}.log" - kubectl logs -n "${namespace}" "${pod}" -c "${container}" > "logs/${pod}-${container}.log" + for container in $(kubectl --context="${context}" get pods -n "${namespace}" "${pod}" -o jsonpath='{.spec.containers[*].name}'); do + echo "Writing log file for pod ${pod} - container ${container} to logs/${prefix}${pod}-${container}.log" + kubectl --context="${context}" logs -n "${namespace}" "${pod}" -c "${container}" > "logs/${prefix}${pod}-${container}.log" # Check if the container has restarted by examining its restart count - restartCount=$(kubectl get pod -n "${namespace}" "${pod}" -o jsonpath="{.status.containerStatuses[?(@.name=='${container}')].restartCount}") + restartCount=$(kubectl --context="${context}" get pod -n "${namespace}" "${pod}" -o jsonpath="{.status.containerStatuses[?(@.name=='${container}')].restartCount}") if [ "${restartCount}" -gt 0 ]; then - echo "Writing log file for restarted ${pod} - container ${container} to logs/${pod}-${container}-previous.log" - kubectl logs --previous -n "${namespace}" "${pod}" -c "${container}" > "logs/${pod}-${container}-previous.log" || true + echo "Writing log file for restarted ${pod} - container ${container} to logs/${prefix}${pod}-${container}-previous.log" + kubectl --context="${context}" logs --previous -n "${namespace}" "${pod}" -c "${container}" > "logs/${prefix}${pod}-${container}-previous.log" || true fi done fi - if kubectl exec "${pod}" -n "${namespace}" -- ls /var/log/mongodb-mms-automation/automation-agent-stderr.log &>/dev/null; then - kubectl cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/automation-agent-stderr.log" "logs/${prefix}${pod}-agent-stderr.log" &> /dev/null + if kubectl --context="${context}" exec "${pod}" -n "${namespace}" -- ls /var/log/mongodb-mms-automation/automation-agent-stderr.log &>/dev/null; then + kubectl --context="${context}" cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/automation-agent-stderr.log" "logs/${prefix}${pod}-agent-stderr.log" &> /dev/null fi } # dump_pod_readiness_state dumps readiness and agent-health-status files. dump_pod_readiness_state() { - local pod="${1}" - local namespace="${2}" - local prefix="${3}" + local context="${1}" + local pod="${2}" + local namespace="${3}" + local prefix="${4}" # kubectl cp won't create any files if the file doesn't exist in the container agent_health_status="logs/${prefix}${pod}-agent-health-status.json" echo "Writing agent ${agent_health_status}" - kubectl cp -c "mongodb-agent" "${namespace}/${pod}:/var/log/mongodb-mms-automation/agent-health-status.json" "${agent_health_status}" &> /dev/null + kubectl --context="${context}" cp -c "mongodb-agent" "${namespace}/${pod}:/var/log/mongodb-mms-automation/agent-health-status.json" "${agent_health_status}" &> /dev/null ([[ -f "${agent_health_status}" ]] && jq . < "${agent_health_status}" > tmpfile && mv tmpfile "${agent_health_status}") if [[ ! -f "${agent_health_status}" ]]; then echo "Agent health status not found; trying community health status: " - kubectl cp -c "mongodb-agent" "${namespace}/${pod}:/var/log/mongodb-mms-automation/healthstatus/agent-health-status.json" "${agent_health_status}" &> /dev/null + kubectl --context="${context}" cp -c "mongodb-agent" "${namespace}/${pod}:/var/log/mongodb-mms-automation/healthstatus/agent-health-status.json" "${agent_health_status}" &> /dev/null ([[ -f "${agent_health_status}" ]] && jq . < "${agent_health_status}" > tmpfile && mv tmpfile "${agent_health_status}") fi - kubectl cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/readiness.log" "logs/${prefix}${pod}-readiness.log" &> /dev/null + kubectl --context="${context}" cp "${namespace}/${pod}:/var/log/mongodb-mms-automation/readiness.log" "logs/${prefix}${pod}-readiness.log" &> /dev/null } # dump_pod_config dumps mongod configuration and cluster-config. dump_pod_config() { - local pod="${1}" - local namespace="${2}" - local prefix="${3}" + local context="${1}" + local pod="${2}" + local namespace="${3}" + local prefix="${4}" # cluster-config.json is a mounted volume and the actual file is located in the "..data" directory pod_cluster_config="logs/${prefix}${pod}-cluster-config.json" - kubectl cp "${namespace}/${pod}:/var/lib/mongodb-automation/..data/cluster-config.json" "${pod_cluster_config}" &> /dev/null + kubectl --context="${context}" cp "${namespace}/${pod}:/var/lib/mongodb-automation/..data/cluster-config.json" "${pod_cluster_config}" &> /dev/null ([[ -f "${pod_cluster_config}" ]] && jq . < "${pod_cluster_config}" > tmpfile && mv tmpfile "${pod_cluster_config}") # Mongodb Configuration - kubectl cp "${namespace}/${pod}:data/automation-mongod.conf" "logs/${prefix}${pod}-automation-mongod.conf" &> /dev/null + kubectl --context="${context}" cp "${namespace}/${pod}:data/automation-mongod.conf" "logs/${prefix}${pod}-automation-mongod.conf" &> /dev/null } dump_configmaps() { - local namespace="${1}" - local prefix="${2}" - kubectl -n "${namespace}" get configmaps -o yaml > "logs/${prefix}z_configmaps.txt" + local context="${1}" + local namespace="${2}" + local prefix="${3}" + kubectl --context="${context}" -n "${namespace}" get configmaps -o yaml > "logs/${prefix}z_configmaps.txt" } decode_secret() { - local secret=${1} - local namespace=${2} + local context=${1} + local secret=${2} + local namespace=${3} - kubectl get secret "${secret}" -o json -n "${namespace}" | jq -r '.data | with_entries(.value |= @base64d)' 2> /dev/null + kubectl --context="${context}" get secret "${secret}" -o json -n "${namespace}" | jq -r '.data | with_entries(.value |= @base64d)' 2> /dev/null } dump_secrets() { - local namespace="${1}" - local prefix="${2}" - for secret in $(kubectl get secrets -n "${namespace}" --no-headers | grep -v service-account-token | grep -v dockerconfigjson | awk '{ print $1 }'); do - decode_secret "${secret}" "${namespace}" > "logs/${prefix}z_secret_${secret}.txt" + local context="${1}" + local namespace="${2}" + local prefix="${3}" + for secret in $(kubectl --context="${context}" get secrets -n "${namespace}" --no-headers | grep -v service-account-token | grep -v dockerconfigjson | awk '{ print $1 }'); do + decode_secret "${context}" "${secret}" "${namespace}" > "logs/${prefix}z_secret_${secret}.txt" done } dump_services() { - local namespace="${1}" - local prefix="${2}" - kubectl -n "${namespace}" get svc -o yaml > "logs/${prefix}z_services.txt" + local context="${1}" + local namespace="${2}" + local prefix="${3}" + kubectl --context="${context}" -n "${namespace}" get svc -o yaml > "logs/${prefix}z_services.txt" } dump_metrics() { - local namespace="${1}" - local operator_pod="${2}" - kubectl exec -it "${operator_pod}" -n "${namespace}" -- curl localhost:8080/metrics > "logs/metrics_${operator_pod}.txt" + local context="${1}" + local namespace="${2}" + local operator_pod="${3}" + local prefix="${4}" + kubectl --context="${context}" exec -it "${operator_pod}" -n "${namespace}" -- curl localhost:8080/metrics > "logs/${prefix}metrics_${operator_pod}.txt" } # dump_pods writes logs for each relevant Pod in the namespace: agent, mongodb # logs, etc. dump_pods() { - local namespace="${1}" - local prefix="${2}" + local context="${1}" + local namespace="${2}" + local prefix="${3}" - pods=$(get_all_pods "${namespace}") + pods=$(get_all_pods "${context}" "${namespace}") # we only have readiness and automationconfig in mdb pods for pod in ${pods}; do - dump_pod_readiness_state "${pod}" "${namespace}" "${prefix}" - dump_pod_config "${pod}" "${namespace}" "${prefix}" + dump_pod_readiness_state "${context}" "${pod}" "${namespace}" "${prefix}" + dump_pod_config "${context}" "${pod}" "${namespace}" "${prefix}" done # for all pods in the namespace we want to have logs and describe output echo "Iterating over pods to dump logs: ${pods}" for pod in ${pods}; do - kubectl describe "pod/${pod}" -n "${namespace}" > "logs/${prefix}${pod}-pod-describe.txt" - dump_pod_logs "${pod}" "${namespace}" "${prefix}" + kubectl --context="${context}" describe "pod/${pod}" -n "${namespace}" > "logs/${prefix}${pod}-pod-describe.txt" + dump_pod_logs "${context}" "${pod}" "${namespace}" "${prefix}" done - if (kubectl get pod -n "${namespace}" -l app.kubernetes.io/name=controller ) &> /dev/null ; then - operator_pod=$(kubectl get pod -n "${namespace}" -l app.kubernetes.io/component=controller --no-headers -o custom-columns=":metadata.name") + if (kubectl --context="${context}" get pod -n "${namespace}" -l app.kubernetes.io/name=controller ) &> /dev/null ; then + operator_pod=$(kubectl --context="${context}" get pod -n "${namespace}" -l app.kubernetes.io/component=controller --no-headers -o custom-columns=":metadata.name") if [ -n "${operator_pod}" ]; then - kubectl describe "pod/${operator_pod}" -n "${namespace}" > "logs/z_${operator_pod}-pod-describe.txt" - dump_metrics "${namespace}" "${operator_pod}" + kubectl --context="${context}" describe "pod/${operator_pod}" -n "${namespace}" > "logs/${prefix}z_${operator_pod}-pod-describe.txt" + dump_metrics "${context}" "${namespace}" "${operator_pod}" "${prefix}" fi fi @@ -260,53 +308,57 @@ dump_pods() { # high density of information; the main objective of this file is to direct you # to a place where to find your problem, not to tell you what the problem is. dump_diagnostics() { - local namespace="${1}" - - dump_objects mongodb "MongoDB Resources" "${namespace}" - dump_objects mongodbcommunity "MongoDBCommunity Resources" "${namespace}" - dump_objects mongodbusers "MongoDBUser Resources" "${namespace}" - dump_objects opsmanagers "MongoDBOpsManager Resources" "${namespace}" - dump_objects mongodbmulticluster "MongoDB Multi Resources" "${namespace}" - dump_objects mongodbsearch "MongoDB Search Resources" "${namespace}" + local context="${1}" + local namespace="${2}" header "All namespace resources" - kubectl get all -n "${namespace}" + kubectl --context="${context}" get all -n "${namespace}" + + dump_objects "${context}" mongodb "MongoDB Resources" "${namespace}" "get -o yaml" + dump_objects "${context}" mongodbcommunity "MongoDBCommunity Resources" "${namespace}" "get -o yaml" + dump_objects "${context}" mongodbusers "MongoDBUser Resources" "${namespace}" "get -o yaml" + dump_objects "${context}" opsmanagers "MongoDBOpsManager Resources" "${namespace}" "get -o yaml" + dump_objects "${context}" mongodbmulticluster "MongoDB Multi Resources" "${namespace}" "get -o yaml" + dump_objects "${context}" mongodbsearch "MongoDB Search Resources" "${namespace}" "get -o yaml" } download_test_results() { - local namespace="${1}" - local test_pod_name="${2:-e2e-test}" + local context="${1}" + local namespace="${2}" + local test_pod_name="${3:-e2e-test}" echo "Downloading test results from ${test_pod_name} pod" # Try to copy from shared volume using the keepalive container - if kubectl cp "${namespace}/${test_pod_name}:/tmp/results/result.suite" "logs/result.suite" -c keepalive 2>/dev/null; then + if kubectl --context="${context}" cp "${namespace}/${test_pod_name}:/tmp/results/result.suite" "logs/result.suite" -c keepalive 2>/dev/null; then echo "Successfully downloaded result.suite from test pod" else echo "Could not find result.suite via direct copy" # Get logs from the test container - kubectl logs -n "${namespace}" "${test_pod_name}" -c e2e-test > "logs/result.suite" 2>/dev/null + kubectl --context="${context}" logs -n "${namespace}" "${test_pod_name}" -c e2e-test > "logs/result.suite" 2>/dev/null fi } # dump_events gets all events from a namespace and saves them to a file dump_events() { - local namespace="${1}" - local prefix="${2}" + local context="${1}" + local namespace="${2}" + local prefix="${3}" echo "Collecting events for namespace ${namespace}" # Sort by lastTimestamp to have the most recent events at the top - kubectl get events --sort-by='.lastTimestamp' -n "${namespace}" > "logs/${prefix}events.txt" + kubectl --context="${context}" get events --sort-by='.lastTimestamp' -n "${namespace}" > "logs/${prefix}events.txt" # Also get events in yaml format for more details - kubectl get events -n "${namespace}" -o yaml > "logs/${prefix}events_detailed.yaml" + kubectl --context="${context}" get events -n "${namespace}" -o yaml > "logs/${prefix}events_detailed.yaml" } # dump_namespace dumps a namespace, diagnostics, logs and generic Kubernetes # resources. dump_namespace() { - local namespace=${1} - local prefix="${2}" + local context=${1} + local namespace=${2} + local prefix="${3}_${namespace}_" # do not fail for any reason set +e @@ -316,42 +368,42 @@ dump_namespace() { mkdir -p logs # 2. Write diagnostics file - dump_diagnostics "${namespace}" > "logs/${prefix}0_diagnostics.txt" + dump_diagnostics "${context}" "${namespace}" > "logs/${prefix}0_diagnostics.txt" # 3. Print Pod logs - dump_pods "${namespace}" "${prefix}" + dump_pods "${context}" "${namespace}" "${prefix}" # 4. Print other Kubernetes resources - dump_configmaps "${namespace}" "${prefix}" - dump_secrets "${namespace}" "${prefix}" - dump_services "${namespace}" "${prefix}" - dump_events "${namespace}" "${prefix}" + dump_configmaps "${context}" "${namespace}" "${prefix}" + dump_secrets "${context}" "${namespace}" "${prefix}" + dump_services "${context}" "${namespace}" "${prefix}" + dump_events "${context}" "${namespace}" "${prefix}" # Download test results from the test pod in community - download_test_results "${namespace}" "e2e-test" - - dump_objects pvc "Persistent Volume Claims" "${namespace}" > "logs/${prefix}z_persistent_volume_claims.txt" - dump_objects deploy "Deployments" "${namespace}" > "logs/${prefix}z_deployments.txt" - dump_objects deploy "Deployments" "${namespace}" "describe" > "logs/${prefix}z_deployments_describe.txt" - dump_objects sts "StatefulSets" "${namespace}" describe > "logs/${prefix}z_statefulsets.txt" - dump_objects sts "StatefulSets Yaml" "${namespace}" >> "logs/${prefix}z_statefulsets.txt" - dump_objects serviceaccounts "ServiceAccounts" "${namespace}" > "logs/${prefix}z_service_accounts.txt" - dump_objects clusterrolebindings "ClusterRoleBindings" "${namespace}" > "logs/${prefix}z_clusterrolebindings.txt" - dump_objects clusterroles "ClusterRoles" "${namespace}" > "logs/${prefix}z_clusterroles.txt" - dump_objects rolebindings "RoleBindings" "${namespace}" > "logs/${prefix}z_rolebindings.txt" - dump_objects roles "Roles" "${namespace}" > "logs/${prefix}z_roles.txt" - dump_objects validatingwebhookconfigurations "Validating Webhook Configurations" "${namespace}" > "logs/${prefix}z_validatingwebhookconfigurations.txt" - dump_objects certificates.cert-manager.io "Cert-manager certificates" "${namespace}" 2> /dev/null > "logs/${prefix}z_certificates_certmanager.txt" - dump_objects catalogsources "OLM CatalogSources" "${namespace}" 2> /dev/null > "logs/${prefix}z_olm_catalogsources.txt" - dump_objects operatorgroups "OLM OperatorGroups" "${namespace}" 2> /dev/null > "logs/${prefix}z_olm_operatorgroups.txt" - dump_objects subscriptions "OLM Subscriptions" "${namespace}" 2> /dev/null > "logs/${prefix}z_olm_subscriptions.txt" - dump_objects installplans "OLM InstallPlans" "${namespace}" 2> /dev/null > "logs/${prefix}z_olm_installplans.txt" - dump_objects clusterserviceversions "OLM ClusterServiceVersions" "${namespace}" 2> /dev/null > "logs/${prefix}z_olm_clusterserviceversions.txt" - dump_objects pods "Pods" "${namespace}" 2> /dev/null > "logs/${prefix}z_pods.txt" - - kubectl get crd -o name + download_test_results "${context}" "${namespace}" "e2e-test" + + dump_objects "${context}" pvc "Persistent Volume Claims" "${namespace}" "get -o yaml" "logs/${prefix}z_persistent_volume_claims.txt" + dump_objects "${context}" deploy "Deployments" "${namespace}" "get -o yaml" "logs/${prefix}z_deployments.txt" + dump_objects "${context}" deploy "Deployments" "${namespace}" "describe" "logs/${prefix}z_deployments_describe.txt" + dump_objects "${context}" sts "StatefulSets" "${namespace}" "describe" "logs/${prefix}z_statefulsets.txt" + dump_objects "${context}" sts "StatefulSets Yaml" "${namespace}" "get -o yaml" "logs/${prefix}z_statefulsets.txt" + dump_objects "${context}" serviceaccounts "ServiceAccounts" "${namespace}" "get -o yaml" "logs/${prefix}z_service_accounts.txt" + dump_objects "${context}" clusterrolebindings "ClusterRoleBindings" "${namespace}" "get -o yaml" "logs/${prefix}z_clusterrolebindings.txt" + dump_objects "${context}" clusterroles "ClusterRoles" "${namespace}" "get -o yaml" "logs/${prefix}z_clusterroles.txt" + dump_objects "${context}" rolebindings "RoleBindings" "${namespace}" "get -o yaml" "logs/${prefix}z_rolebindings.txt" + dump_objects "${context}" roles "Roles" "${namespace}" "get -o yaml" "logs/${prefix}z_roles.txt" + dump_objects "${context}" validatingwebhookconfigurations "Validating Webhook Configurations" "${namespace}" "get -o yaml" "logs/${prefix}z_validatingwebhookconfigurations.txt" + dump_objects "${context}" certificates.cert-manager.io "Cert-manager certificates" "${namespace}" "get -o yaml" "logs/${prefix}z_certificates_certmanager.txt" 2> /dev/null + dump_objects "${context}" catalogsources "OLM CatalogSources" "${namespace}" "get -o yaml" "logs/${prefix}z_olm_catalogsources.txt" 2> /dev/null + dump_objects "${context}" operatorgroups "OLM OperatorGroups" "${namespace}" "get -o yaml" "logs/${prefix}z_olm_operatorgroups.txt" 2> /dev/null + dump_objects "${context}" subscriptions "OLM Subscriptions" "${namespace}" "get -o yaml" "logs/${prefix}z_olm_subscriptions.txt" 2> /dev/null + dump_objects "${context}" installplans "OLM InstallPlans" "${namespace}" "get -o yaml" "logs/${prefix}z_olm_installplans.txt" 2> /dev/null + dump_objects "${context}" clusterserviceversions "OLM ClusterServiceVersions" "${namespace}" "get -o yaml" "logs/${prefix}z_olm_clusterserviceversions.txt" 2> /dev/null + dump_objects "${context}" pods "Pods" "${namespace}" "get -o yaml" "logs/${prefix}z_pods.txt" 2> /dev/null + + kubectl --context="${context}" get crd -o name # shellcheck disable=SC2046 - kubectl describe $(kubectl get crd -o name | grep mongodb) > "logs/${prefix}z_mongodb_crds.log" + kubectl --context="${context}" describe $(kubectl --context="${context}" get crd -o name | grep mongodb) > "logs/${prefix}z_mongodb_crds.log" - kubectl describe nodes > "logs/${prefix}z_nodes_detailed.log" || true + kubectl --context="${context}" describe nodes > "logs/${prefix}z_nodes_detailed.log" || true } diff --git a/scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh b/scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh index 72571a811..59a41f19f 100755 --- a/scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh +++ b/scripts/evergreen/e2e/dump_diagnostic_information_from_all_namespaces.sh @@ -7,4 +7,9 @@ set +e source scripts/funcs/printing source scripts/evergreen/e2e/dump_diagnostic_information.sh -dump_all_non_default_namespaces "$@" +# If no context provided, use current context +if [ $# -eq 0 ]; then + dump_all_non_default_namespaces "$(kubectl config current-context)" +else + dump_all_non_default_namespaces "$@" +fi diff --git a/scripts/evergreen/e2e/e2e.sh b/scripts/evergreen/e2e/e2e.sh index 9d6e8de83..e1e6ed556 100755 --- a/scripts/evergreen/e2e/e2e.sh +++ b/scripts/evergreen/e2e/e2e.sh @@ -42,7 +42,7 @@ dump_cluster_information() { done else # Dump all the information we can from this namespace - dump_all || true + dump_all "$(kubectl config current-context)" || true fi } diff --git a/scripts/funcs/operator_deployment b/scripts/funcs/operator_deployment index 43a507cc9..d8c7a5ed3 100644 --- a/scripts/funcs/operator_deployment +++ b/scripts/funcs/operator_deployment @@ -70,9 +70,11 @@ get_operator_helm_values() { # shellcheck disable=SC2154 if [[ "${KUBE_ENVIRONMENT_NAME-}" = "multi" ]]; then - comma_separated_list="$(echo "${MEMBER_CLUSTERS}" | tr ' ' ',')" - # shellcheck disable=SC2154 - config+=("multiCluster.clusters={${comma_separated_list}}") + if [[ -n "${MEMBER_CLUSTERS:-}" ]]; then + comma_separated_list="$(echo "${MEMBER_CLUSTERS}" | tr ' ' ',')" + # shellcheck disable=SC2154 + config+=("multiCluster.clusters={${comma_separated_list}}") + fi config+=("operator.createOperatorServiceAccount=false") fi