From 792899dfbc7bd53f06f5afa0883bc51ecd5da6c5 Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Thu, 12 May 2022 18:13:38 +0300 Subject: [PATCH 01/11] add gcp api --- .../atlas.mongodb.com_atlasclusters.yaml | 860 ++++++++++++++++++ ...tlas-kubernetes.clusterserviceversion.yaml | 311 ++++++- .../atlas.mongodb.com_atlasprojects.yaml | 8 + config/manager/kustomization.yaml | 4 +- ...tlas-kubernetes.clusterserviceversion.yaml | 69 +- deploy/all-in-one.yaml | 2 +- deploy/clusterwide/clusterwide-config.yaml | 2 +- .../crds/atlas.mongodb.com_atlasclusters.yaml | 858 +++++++++++++++++ deploy/namespaced/namespaced-config.yaml | 2 +- go.mod | 5 + go.sum | 5 + test/e2e/actions/cloud/gcp.go | 11 + test/e2e/api/gcp/gcp.go | 120 +++ test/e2e/private_link_test.go | 223 +++-- 14 files changed, 2319 insertions(+), 161 deletions(-) create mode 100644 bundle/manifests/atlas.mongodb.com_atlasclusters.yaml create mode 100644 deploy/crds/atlas.mongodb.com_atlasclusters.yaml create mode 100644 test/e2e/api/gcp/gcp.go diff --git a/bundle/manifests/atlas.mongodb.com_atlasclusters.yaml b/bundle/manifests/atlas.mongodb.com_atlasclusters.yaml new file mode 100644 index 0000000000..e4e85f1cba --- /dev/null +++ b/bundle/manifests/atlas.mongodb.com_atlasclusters.yaml @@ -0,0 +1,860 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + labels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: mongodb-atlas-kubernetes-operator + app.kubernetes.io/name: mongodb-atlas-kubernetes-operator + name: atlasclusters.atlas.mongodb.com +spec: + group: atlas.mongodb.com + names: + kind: AtlasCluster + listKind: AtlasClusterList + plural: atlasclusters + singular: atlascluster + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: AtlasCluster is the Schema for the atlasclusters API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: AtlasClusterSpec defines the desired state of AtlasCluster + properties: + advancedClusterSpec: + description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ + properties: + backupEnabled: + type: boolean + biConnector: + description: BiConnectorSpec specifies BI Connector for Atlas + configuration on this cluster + properties: + enabled: + description: Flag that indicates whether or not BI Connector + for Atlas is enabled on the cluster. + type: boolean + readPreference: + description: Source from which the BI Connector for Atlas + reads data. Each BI Connector for Atlas read preference + contains a distinct combination of readPreference and readPreferenceTags + options. + type: string + type: object + clusterType: + type: string + connectionStrings: + description: ConnectionStrings configuration for applications + use to connect to this cluster. + properties: + awsPrivateLink: + additionalProperties: + type: string + type: object + awsPrivateLinkSrv: + additionalProperties: + type: string + type: object + private: + type: string + privateEndpoint: + items: + description: PrivateEndpointSpec connection strings. Each + object describes the connection strings you can use to + connect to this cluster through a private endpoint. Atlas + returns this parameter only if you deployed a private + endpoint to all regions to which you deployed this cluster's + nodes. + properties: + connectionString: + type: string + endpoints: + items: + description: EndpointSpec through which you connect + to Atlas. + properties: + endpointId: + type: string + providerName: + type: string + region: + type: string + type: object + type: array + srvConnectionString: + type: string + type: + type: string + type: object + type: array + privateSrv: + type: string + standard: + type: string + standardSrv: + type: string + type: object + createDate: + type: string + diskSizeGB: + type: integer + encryptionAtRestProvider: + type: string + groupId: + type: string + id: + type: string + labels: + items: + description: LabelSpec contains key-value pairs that tag and + categorize the Cluster/DBUser + properties: + key: + maxLength: 255 + type: string + value: + type: string + required: + - key + - value + type: object + type: array + mongoDBMajorVersion: + type: string + mongoDBVersion: + type: string + name: + type: string + paused: + type: boolean + pitEnabled: + type: boolean + replicationSpecs: + items: + properties: + id: + type: string + numShards: + type: integer + regionConfigs: + items: + properties: + analyticsSpecs: + properties: + diskIOPS: + format: int64 + type: integer + ebsVolumeType: + type: string + instanceSize: + type: string + nodeCount: + type: integer + type: object + autoScaling: + description: AutoScalingSpec configures your cluster + to automatically scale its storage + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot + mode for Performance Advisor is enabled. The + default is false. + type: boolean + compute: + description: Collection of settings that configure + how a cluster might scale its cluster tier and + whether the cluster can scale down. + properties: + enabled: + description: Flag that indicates whether cluster + tier auto-scaling is enabled. The default + is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which + your cluster can automatically scale (such + as M40). Atlas requires this parameter if + "autoScaling.compute.enabled" : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which + your cluster can automatically scale (such + as M10). Atlas requires this parameter if + "autoScaling.compute.scaleDownEnabled" : + true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether + the cluster tier may scale down. Atlas requires + this parameter if "autoScaling.compute.enabled" + : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk + auto-scaling is enabled. The default is true. + type: boolean + type: object + backingProviderName: + type: string + electableSpecs: + properties: + diskIOPS: + format: int64 + type: integer + ebsVolumeType: + type: string + instanceSize: + type: string + nodeCount: + type: integer + type: object + priority: + type: integer + providerName: + type: string + readOnlySpecs: + properties: + diskIOPS: + format: int64 + type: integer + ebsVolumeType: + type: string + instanceSize: + type: string + nodeCount: + type: integer + type: object + regionName: + type: string + type: object + type: array + zoneName: + type: string + type: object + type: array + rootCertType: + type: string + stateName: + type: string + versionReleaseSystem: + type: string + type: object + backupRef: + description: Backup schedule for the AtlasCluster + properties: + name: + description: Name is the name of the Kubernetes Resource + type: string + namespace: + description: Namespace is the namespace of the Kubernetes Resource + type: string + required: + - name + type: object + clusterSpec: + description: Configuration for the advanced cluster API + properties: + autoScaling: + description: Collection of settings that configures auto-scaling + information for the cluster. If you specify the autoScaling + object, you must also specify the providerSettings.autoScaling + object. + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot mode for + Performance Advisor is enabled. The default is false. + type: boolean + compute: + description: Collection of settings that configure how a cluster + might scale its cluster tier and whether the cluster can + scale down. + properties: + enabled: + description: Flag that indicates whether cluster tier + auto-scaling is enabled. The default is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which your cluster + can automatically scale (such as M40). Atlas requires + this parameter if "autoScaling.compute.enabled" : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which your cluster + can automatically scale (such as M10). Atlas requires + this parameter if "autoScaling.compute.scaleDownEnabled" + : true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether the cluster + tier may scale down. Atlas requires this parameter if + "autoScaling.compute.enabled" : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk auto-scaling + is enabled. The default is true. + type: boolean + type: object + biConnector: + description: Configuration of BI Connector for Atlas on this cluster. + The MongoDB Connector for Business Intelligence for Atlas (BI + Connector) is only available for M10 and larger clusters. + properties: + enabled: + description: Flag that indicates whether or not BI Connector + for Atlas is enabled on the cluster. + type: boolean + readPreference: + description: Source from which the BI Connector for Atlas + reads data. Each BI Connector for Atlas read preference + contains a distinct combination of readPreference and readPreferenceTags + options. + type: string + type: object + clusterType: + description: Type of the cluster that you want to create. The + parameter is required if replicationSpecs are set or if Global + Clusters are deployed. + enum: + - REPLICASET + - SHARDED + - GEOSHARDED + type: string + diskSizeGB: + description: Capacity, in gigabytes, of the host's root volume. + Increase this number to add capacity, up to a maximum possible + value of 4096 (i.e., 4 TB). This value must be a positive integer. + The parameter is required if replicationSpecs are configured. + maximum: 4096 + minimum: 0 + type: integer + encryptionAtRestProvider: + description: Cloud service provider that offers Encryption at + Rest. + enum: + - AWS + - GCP + - AZURE + - NONE + type: string + labels: + description: Collection of key-value pairs that tag and categorize + the cluster. Each key and value has a maximum length of 255 + characters. + items: + description: LabelSpec contains key-value pairs that tag and + categorize the Cluster/DBUser + properties: + key: + maxLength: 255 + type: string + value: + type: string + required: + - key + - value + type: object + type: array + mongoDBMajorVersion: + description: Version of the cluster to deploy. + type: string + name: + description: Name of the cluster as it appears in Atlas. After + Atlas creates the cluster, you can't change its name. + type: string + numShards: + description: Positive integer that specifies the number of shards + to deploy for a sharded cluster. The parameter is required if + replicationSpecs are configured + maximum: 50 + minimum: 1 + type: integer + paused: + description: Flag that indicates whether the cluster should be + paused. + type: boolean + pitEnabled: + description: Flag that indicates the cluster uses continuous cloud + backups. + type: boolean + providerBackupEnabled: + description: Applicable only for M10+ clusters. Flag that indicates + if the cluster uses Cloud Backups for backups. + type: boolean + providerSettings: + description: Configuration for the provisioned hosts on which + MongoDB runs. The available options are specific to the cloud + service provider. + properties: + autoScaling: + description: Range of instance sizes to which your cluster + can scale. + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot mode + for Performance Advisor is enabled. The default is false. + type: boolean + compute: + description: Collection of settings that configure how + a cluster might scale its cluster tier and whether the + cluster can scale down. + properties: + enabled: + description: Flag that indicates whether cluster tier + auto-scaling is enabled. The default is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which your + cluster can automatically scale (such as M40). Atlas + requires this parameter if "autoScaling.compute.enabled" + : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which your + cluster can automatically scale (such as M10). Atlas + requires this parameter if "autoScaling.compute.scaleDownEnabled" + : true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether the cluster + tier may scale down. Atlas requires this parameter + if "autoScaling.compute.enabled" : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk auto-scaling + is enabled. The default is true. + type: boolean + type: object + backingProviderName: + description: 'Cloud service provider on which the host for + a multi-tenant cluster is provisioned. This setting only + works when "providerSetting.providerName" : "TENANT" and + "providerSetting.instanceSizeName" : M2 or M5.' + enum: + - AWS + - GCP + - AZURE + type: string + diskIOPS: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + format: int64 + type: integer + diskTypeName: + description: Type of disk if you selected Azure as your cloud + service provider. + type: string + encryptEBSVolume: + description: Flag that indicates whether the Amazon EBS encryption + feature encrypts the host's root volume for both data at + rest within the volume and for data moving between the volume + and the cluster. + type: boolean + instanceSizeName: + description: Atlas provides different cluster tiers, each + with a default storage capacity and RAM size. The cluster + you select is used for all the data-bearing hosts in your + cluster tier. + type: string + providerName: + description: Cloud service provider on which Atlas provisions + the hosts. + enum: + - AWS + - GCP + - AZURE + - TENANT + - SERVERLESS + type: string + regionName: + description: Physical location of your MongoDB cluster. The + region you choose can affect network latency for clients + accessing your databases. + type: string + volumeType: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + enum: + - STANDARD + - PROVISIONED + type: string + required: + - providerName + type: object + replicationSpecs: + description: Configuration for cluster regions. + items: + description: ReplicationSpec represents a configuration for + cluster regions + properties: + numShards: + description: Number of shards to deploy in each specified + zone. The default value is 1. + format: int64 + type: integer + regionsConfig: + additionalProperties: + description: RegionsConfig describes the region’s priority + in elections and the number and type of MongoDB nodes + Atlas deploys to the region. + properties: + analyticsNodes: + description: The number of analytics nodes for Atlas + to deploy to the region. Analytics nodes are useful + for handling analytic data such as reporting queries + from BI Connector for Atlas. Analytics nodes are + read-only, and can never become the primary. If + you do not specify this option, no analytics nodes + are deployed to the region. + format: int64 + type: integer + electableNodes: + description: Number of electable nodes for Atlas to + deploy to the region. Electable nodes can become + the primary and can facilitate local reads. + format: int64 + type: integer + priority: + description: Election priority of the region. For + regions with only replicationSpecs[n].regionsConfig..readOnlyNodes, + set this value to 0. + format: int64 + type: integer + readOnlyNodes: + description: Number of read-only nodes for Atlas to + deploy to the region. Read-only nodes can never + become the primary, but can facilitate local-reads. + format: int64 + type: integer + type: object + description: Configuration for a region. Each regionsConfig + object describes the region's priority in elections and + the number and type of MongoDB nodes that Atlas deploys + to the region. + type: object + zoneName: + description: Name for the zone in a Global Cluster. Don't + provide this value if clusterType is not GEOSHARDED. + type: string + type: object + type: array + required: + - name + - providerSettings + type: object + processArgs: + description: ProcessArgs allows to modify Advanced Configuration Options + properties: + defaultReadConcern: + type: string + defaultWriteConcern: + type: string + failIndexKeyTooLong: + type: boolean + javascriptEnabled: + type: boolean + minimumEnabledTlsProtocol: + type: string + noTableScan: + type: boolean + oplogSizeMB: + format: int64 + type: integer + sampleRefreshIntervalBIConnector: + format: int64 + type: integer + sampleSizeBIConnector: + format: int64 + type: integer + type: object + projectRef: + description: Project is a reference to AtlasProject resource the cluster + belongs to + properties: + name: + description: Name is the name of the Kubernetes Resource + type: string + namespace: + description: Namespace is the namespace of the Kubernetes Resource + type: string + required: + - name + type: object + serverlessSpec: + description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ + properties: + name: + description: Name of the cluster as it appears in Atlas. After + Atlas creates the cluster, you can't change its name. + type: string + providerSettings: + description: Configuration for the provisioned hosts on which + MongoDB runs. The available options are specific to the cloud + service provider. + properties: + autoScaling: + description: Range of instance sizes to which your cluster + can scale. + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot mode + for Performance Advisor is enabled. The default is false. + type: boolean + compute: + description: Collection of settings that configure how + a cluster might scale its cluster tier and whether the + cluster can scale down. + properties: + enabled: + description: Flag that indicates whether cluster tier + auto-scaling is enabled. The default is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which your + cluster can automatically scale (such as M40). Atlas + requires this parameter if "autoScaling.compute.enabled" + : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which your + cluster can automatically scale (such as M10). Atlas + requires this parameter if "autoScaling.compute.scaleDownEnabled" + : true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether the cluster + tier may scale down. Atlas requires this parameter + if "autoScaling.compute.enabled" : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk auto-scaling + is enabled. The default is true. + type: boolean + type: object + backingProviderName: + description: 'Cloud service provider on which the host for + a multi-tenant cluster is provisioned. This setting only + works when "providerSetting.providerName" : "TENANT" and + "providerSetting.instanceSizeName" : M2 or M5.' + enum: + - AWS + - GCP + - AZURE + type: string + diskIOPS: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + format: int64 + type: integer + diskTypeName: + description: Type of disk if you selected Azure as your cloud + service provider. + type: string + encryptEBSVolume: + description: Flag that indicates whether the Amazon EBS encryption + feature encrypts the host's root volume for both data at + rest within the volume and for data moving between the volume + and the cluster. + type: boolean + instanceSizeName: + description: Atlas provides different cluster tiers, each + with a default storage capacity and RAM size. The cluster + you select is used for all the data-bearing hosts in your + cluster tier. + type: string + providerName: + description: Cloud service provider on which Atlas provisions + the hosts. + enum: + - AWS + - GCP + - AZURE + - TENANT + - SERVERLESS + type: string + regionName: + description: Physical location of your MongoDB cluster. The + region you choose can affect network latency for clients + accessing your databases. + type: string + volumeType: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + enum: + - STANDARD + - PROVISIONED + type: string + required: + - providerName + type: object + required: + - name + - providerSettings + type: object + required: + - projectRef + type: object + status: + description: AtlasClusterStatus defines the observed state of AtlasCluster. + properties: + conditions: + description: Conditions is the list of statuses showing the current + state of the Atlas Custom Resource + items: + description: Condition describes the state of an Atlas Custom Resource + at a certain point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of Atlas Custom Resource condition. + type: string + required: + - status + - type + type: object + type: array + connectionStrings: + description: ConnectionStrings is a set of connection strings that + your applications use to connect to this cluster. + properties: + private: + description: Network-peering-endpoint-aware mongodb:// connection + strings for each interface VPC endpoint you configured to connect + to this cluster. Atlas returns this parameter only if you created + a network peering connection to this cluster. + type: string + privateEndpoint: + description: Private endpoint connection strings. Each object + describes the connection strings you can use to connect to this + cluster through a private endpoint. Atlas returns this parameter + only if you deployed a private endpoint to all regions to which + you deployed this cluster's nodes. + items: + description: PrivateEndpoint connection strings. Each object + describes the connection strings you can use to connect to + this cluster through a private endpoint. Atlas returns this + parameter only if you deployed a private endpoint to all regions + to which you deployed this cluster's nodes. + properties: + connectionString: + description: Private-endpoint-aware mongodb:// connection + string for this private endpoint. + type: string + endpoints: + description: Private endpoint through which you connect + to Atlas when you use connectionStrings.privateEndpoint[n].connectionString + or connectionStrings.privateEndpoint[n].srvConnectionString. + items: + description: Endpoint through which you connect to Atlas + properties: + endpointId: + description: Unique identifier of the private endpoint. + type: string + ip: + description: Private IP address of the private endpoint + network interface you created in your Azure VNet. + type: string + providerName: + description: Cloud provider to which you deployed + the private endpoint. Atlas returns AWS or AZURE. + type: string + region: + description: Region to which you deployed the private + endpoint. + type: string + type: object + type: array + srvConnectionString: + description: Private-endpoint-aware mongodb+srv:// connection + string for this private endpoint. + type: string + type: + description: "Type of MongoDB process that you connect to + with the connection strings \n Atlas returns: \n • MONGOD + for replica sets, or \n • MONGOS for sharded clusters" + type: string + type: object + type: array + privateSrv: + description: Network-peering-endpoint-aware mongodb+srv:// connection + strings for each interface VPC endpoint you configured to connect + to this cluster. Atlas returns this parameter only if you created + a network peering connection to this cluster. Use this URI format + if your driver supports it. If it doesn't, use connectionStrings.private. + type: string + standard: + description: Public mongodb:// connection string for this cluster. + type: string + standardSrv: + description: Public mongodb+srv:// connection string for this + cluster. + type: string + type: object + mongoDBVersion: + description: MongoDBVersion is the version of MongoDB the cluster + runs, in . format. + type: string + mongoURIUpdated: + description: MongoURIUpdated is a timestamp in ISO 8601 date and time + format in UTC when the connection string was last updated. The connection + string changes if you update any of the other values. + type: string + observedGeneration: + description: ObservedGeneration indicates the generation of the resource + specification that the Atlas Operator is aware of. The Atlas Operator + updates this field to the 'metadata.generation' as soon as it starts + reconciliation of the resource. + format: int64 + type: integer + stateName: + description: 'StateName is the current state of the cluster. The possible + states are: IDLE, CREATING, UPDATING, DELETING, DELETED, REPAIRING' + type: string + required: + - conditions + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml b/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml index 239c328754..c65306b1d7 100644 --- a/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml +++ b/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml @@ -117,9 +117,14 @@ spec: apiservicedefinitions: {} customresourcedefinitions: owned: +<<<<<<< HEAD - description: AtlasBackupPolicy is the Schema for the atlasbackuppolicies API displayName: Atlas Backup Policy kind: AtlasBackupPolicy +======= +<<<<<<< Updated upstream + - kind: AtlasBackupPolicy +>>>>>>> 790f9ad (add gcp api) name: atlasbackuppolicies.atlas.mongodb.com version: v1 - description: AtlasBackupSchedule is the Schema for the atlasbackupschedules API @@ -142,6 +147,34 @@ spec: kind: AtlasProject name: atlasprojects.atlas.mongodb.com version: v1 +======= + - description: AtlasBackupPolicy is the Schema for the atlasbackuppolicies API + displayName: Atlas Backup Policy + kind: AtlasBackupPolicy + name: atlasbackuppolicies.atlas.mongodb.com + version: v1 + - description: AtlasBackupSchedule is the Schema for the atlasbackupschedules + API + displayName: Atlas Backup Schedule + kind: AtlasBackupSchedule + name: atlasbackupschedules.atlas.mongodb.com + version: v1 + - description: AtlasCluster is the Schema for the atlasclusters API + displayName: Atlas Cluster + kind: AtlasCluster + name: atlasclusters.atlas.mongodb.com + version: v1 + - description: AtlasDatabaseUser is the Schema for the Atlas Database User API + displayName: Atlas Database User + kind: AtlasDatabaseUser + name: atlasdatabaseusers.atlas.mongodb.com + version: v1 + - description: AtlasProject is the Schema for the atlasprojects API + displayName: Atlas Project + kind: AtlasProject + name: atlasprojects.atlas.mongodb.com + version: v1 +>>>>>>> Stashed changes description: | The MongoDB Atlas Operator provides a native integration between the Kubernetes orchestration platform and MongoDB Atlas — the only multi-cloud document database service that gives you the versatility you need to build sophisticated and resilient applications that can adapt to changing customer demands and market trends. @@ -253,11 +286,12 @@ spec: ``` displayName: MongoDB Atlas Operator icon: - - base64data: iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJEXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjarVhtdiMpDPzPKfYIDUIIHYfP9/YGe/wtQXcnsZ1JMjP2xLQBg1CVSmLc+O/f6f7BiwIFF1ly0pQOvKJGDQUP+divsj79EdfnesVzCN8/9Lt7IKCL0NL+mtM5/+r39wK7KXjidwvldg7UjwN67hDyw0LnRmQWBTz0cyE9F6KwB/y5QNnHOpJmeX+EOnbbr5Pk/efsI7VjHcSfo4/fo8B7nbEPhTDI04HPQHEbQPbnHRUbwCe+YKKnjOe4ejxdlsAhr/x0vLPKPaJyP/lP+h9AobT7HTo+OjPd7ct+z6+d75aL3+1M7d75Qz/3oz4e5/qbs2c359inKzHBpek81HWU9YSJWCTS+lnCW/DHeJb1VryzA3sbIO9Hw44Vz+oDvD999N0XP/1YbfMNJsYwgqANoQEb68skQUOjwxk29vYzCCl1oBaoAV5Cb7ht8WtfXds1n7Fx95gZPBbzK9bs42+8P11oTqO890e+fQW7ggUFzDDk7BOzAIifF494Ofh6P74MVwKCvNycccBy1L1EZX9yy3hEC2jCREa7Y81LPxeAi7A3wxhPQOBIntgnf0gI4j38mIFPwUIZQRMqIPDMocPKEIkSwMnB9sZvxK+5gcPuhmYBCKZEAmiUCrCKEDbwR2IGhwoTR2ZOLJxZuSRKMXFKSZKJXxGSKCxJRLKolEw5Zs4pS84uay4alCCOrElFs6qWgk0LVi74dcGEUmqoVGPlmqrUXLWWBvq02LilJi27pq300KlDJ3rq0nPXXoYfoNKIg0caMvLQUSaoNmnGyTNNmXnqLDdq3m1Yn97fR81fqIWFlE2UGzX8VORawpucsGEGxEL0QFwMARA6GGZH9jEGZ9AZZocGRAUHWMkGTveGGBCMwwee/sbuDbkPuLkY/wi3cCHnDLq/gZwz6D5B7hm3F6h1yzbtILcQsjA0px6E8MOEkUvIxZLat1t3d9QCRxsxap9zbTJnSpC9Ujts4Njb6FI9zspJeXbVkeaYtbVJSEezUW6JaKAvwg/D5hQZLDanrtM00jbEY0rHKkDDT6qjjyI1Tvi0x0mumC00PWvDJgQFlzlr6JBLDpCAfhT8JmmB17ocZZ0GOWg/HHfrHjt+t10LAbGArAzLYWMFIjiYSgUyBMqQThxLoUockGq0iRauh56ughvMVW77wZ9+oOWHXtjDEyFKmyAyYgHI19rzRglrZxYvpcA/8Ec1h7rT63Q63Tw690qqSBQJdCs5llETtVGW9VzNejNAzPo0VWt1MD+hwMgT1lTWuj1MBWGlfqQ8kPXMvgMxs56QdF+17rOBX7WS9IlLzsj0nkswang2SsLdcyIt4xRwm+8UBaGTU0gRkaOh10kbtJLBoye6g78sscDpBA9P6YMn4ngidXfgQR1AIWLLjFyG1Mbw/UzR2d7Z2yfcx6EhKA+P6DfFAW1nywjatUeUGk5/Hc+t+2zgkxYhUnAuglk6BGE0m4lCmm4eaSwCwWjITao1orWjGS3EjpZENeNoxg6Qc0pZEYQv5m4m+E+rg/b47bE2dXwVCQDlNY2me6QRBA1iGCEhRbBjNe8F0L/N03a/bc8FWAUaKJ7FAsVBF7mPWO/Ahnz+XNZCdu86wOgwYwXw4fSOAb+8M1bowkooSoXgmAKCKaaBSwER/RBBCHJR5F0klsyWSyrl2vVkchv+ay0Z5IgTNARSNpvOJbKgdkog+dGr8b23CUVLwm3MXGAv9zf5i0grEqY2dchhniumDwkX78a3afXWuruDC3R9mMCg2ZH4pFQxsNVXIAEKVghKRpe2vqIfodLqTwXAD0EOsNTbjSm4FrCboDvIQtJa77P5ihzfpOrk0jpKqQEZ7DHj30T4X6IfnjjiviTJynfQ74d8NyRZ9rkzoXsbghrGJoIikuGb1hDza7FCQ/LrfeLpbnpOR3Asbg+2S4ERh9mALLv3h+dZXowU1hkdQYwG7ohDpp6qnEf9eXpzI9cWdmgiBua6CmmpVo28HNFiAtLnGDi/IqehYLLd3Urk7acMROiNULaywxE4lTNlYaszIj8MXSMIAxMLMiO81TxpLxc+CIX7plJ8UvScIGDEPQ49k2B8RYKHQut9i9BqjOQWhtomW3G6pguDF2NuDWpCnjZpyP5zL/y6dd8IhbzrPyQdZJhmjcKstRWoSBtK9xFbVKVqmeuN+i+Z/1TdVUuQfAgywAEVaqBb5jGvGCf+AbMfNsTNwZtkGeOslliVhF3371oCOWdAc1jWzoXOnfdCFO6VqDKjipiVCMkYgm2VSwIM1S8Fr33UuDLJhwg2GbEQRgIFRCgbAvlCuOD03tu7Qu8SSNxJSi3FYFjpE76mhtw+vUM+N0WU2lNeBwpqB4ofqpRdBsYiKONYcc3BfWosqbYCLxy8q5HfqNnu2s3qCbWCytHwsH1WvnPmihPU+zgkNxTMioQiqPKROhd1/PDXWS0Fn7nOvWNDLB3FmJYHN24vKtdqBTMuc/gFLogWAJRONyL636yEhYjY7Uv7T7q5vYnIXaXI4a12X+6Ezxni0lHxJpgdU+jNVbkDq+bfqkNeRT8KUJzPWBRn64tFuCcNAotWugWLirEIpXvd1MX+DaXc8K6Q/U9WkwT7ruqDnuh2+ukAQWQJ6SNBGIVWhI7g1qpdEMsDPMINBJBdGLWMKxhmwIhVoOPeYSGyrx28rx0dlxoL9WTGIj1ZjYIyEXV5UsKN/SqRUBi27+vRd9sa5fQjoqPf0ejoDEdZ4UjI0kdWVC3mRZArW4GP0hO6hmi+a2a6auawa2bU2YKyMMAD+2qGKrJ4lNuofE7Zhg1LnMnSI1IGDg0esfENVp1sQ7J0F91M8I1uCJakKNxHE/C0FNw+Ajg3QhWWmrsdcIR5ak2cp9aIA03kpImJTclWlaYGPtVWWk0HfmBnOq84dF1xglVxGWdK2GuVx4o8mvyRO7pD+0Up9evW/TleGy73BV77WqdpX0Is8iEsdgnx+yZeJ0hmIupmwlUcl5BT7SKus9BBm/ft6+xqXfwzibyq3OxgyhFHqt/IHuuMUMrBHLhVjyI/7AoDgDkkjh8GiTETsfU/ZHuEtrDMfYEAAAGFaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBzFX1O1UioiVhBxyFB1sSAq4qhVKEKFUCu06mBy6YfQpCFJcXEUXAsOfixWHVycdXVwFQTBDxA3NydFFynxf2mhRYwHx/14d+9x9w4QqkWmWW1jgKbbZjIeE9OZFTHwiiD60IMRdMjMMmYlKQHP8XUPH1/vojzL+9yfo0vNWgzwicQzzDBt4nXiqU3b4LxPHGYFWSU+Jx416YLEj1xX6vzGOe+ywDPDZio5RxwmFvMtrLQwK5ga8SRxRNV0yhfSdVY5b3HWimXWuCd/YSirLy9xneYg4ljAIiSIUFDGBoqwEaVVJ8VCkvZjHv4B1y+RSyHXBhg55lGCBtn1g//B726t3MR4PSkUA9pfHOdjCAjsArWK43wfO07tBPA/A1d601+qAtOfpFeaWuQI6N4GLq6bmrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== - mediatype: image/png + - base64data: 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mrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== + mediatype: image/png install: spec: clusterPermissions: +<<<<<<< HEAD - rules: - apiGroups: - "" @@ -379,15 +413,146 @@ spec: - patch - update serviceAccountName: mongodb-atlas-operator +======= + - rules: + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - atlas.mongodb.com + resources: + - atlasbackuppolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - atlas.mongodb.com + resources: + - atlasbackuppolicies/status + verbs: + - get + - patch + - update + - apiGroups: + - atlas.mongodb.com + resources: + - atlasbackupschedules + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - atlas.mongodb.com + resources: + - atlasbackupschedules/status + verbs: + - get + - patch + - update + - apiGroups: + - atlas.mongodb.com + resources: + - atlasclusters + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - atlas.mongodb.com + resources: + - atlasclusters/status + verbs: + - get + - patch + - update + - apiGroups: + - atlas.mongodb.com + resources: + - atlasdatabaseusers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - atlas.mongodb.com + resources: + - atlasdatabaseusers/status + verbs: + - get + - patch + - update + - apiGroups: + - atlas.mongodb.com + resources: + - atlasprojects + verbs: + - create + - delete + - get + - list + - patch + - update + - watch + - apiGroups: + - atlas.mongodb.com + resources: + - atlasprojects/status + verbs: + - get + - patch + - update + serviceAccountName: mongodb-atlas-operator +>>>>>>> 790f9ad (add gcp api) deployments: - - name: mongodb-atlas-operator - spec: - replicas: 1 - selector: - matchLabels: + - name: mongodb-atlas-operator + spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/component: controller + app.kubernetes.io/instance: mongodb-atlas-kubernetes-operator + app.kubernetes.io/name: mongodb-atlas-kubernetes-operator + strategy: {} + template: + metadata: + labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: mongodb-atlas-kubernetes-operator app.kubernetes.io/name: mongodb-atlas-kubernetes-operator +<<<<<<< HEAD strategy: {} template: metadata: @@ -445,54 +610,106 @@ spec: allowPrivilegeEscalation: false serviceAccountName: mongodb-atlas-operator terminationGracePeriodSeconds: 10 +======= + spec: + containers: + - args: + - --atlas-domain=https://cloud-qa.mongodb.com/ + - --leader-elect + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --log-level=info + - --log-encoder=json + command: + - /manager + env: + - name: OPERATOR_POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: OPERATOR_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: docker.io/leori/test:CLOUDP-120220-gcp-test-2e14a88 + imagePullPolicy: Always + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 256Mi + requests: + cpu: 100m + memory: 50Mi + securityContext: + allowPrivilegeEscalation: false + serviceAccountName: mongodb-atlas-operator + terminationGracePeriodSeconds: 10 +>>>>>>> 790f9ad (add gcp api) permissions: - - rules: - - apiGroups: - - "" - - coordination.k8s.io - resources: - - configmaps - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: mongodb-atlas-operator + - rules: + - apiGroups: + - "" + - coordination.k8s.io + resources: + - configmaps + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + serviceAccountName: mongodb-atlas-operator strategy: deployment installModes: - - supported: true - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces keywords: - - MongoDB - - Atlas - - Database - - Replica Set - - Cluster + - MongoDB + - Atlas + - Database + - Replica Set + - Cluster links: - - name: MongoDB Atlas Kubernetes - url: https://github.com/mongodb/mongodb-atlas-kubernetes + - name: MongoDB Atlas Kubernetes + url: https://github.com/mongodb/mongodb-atlas-kubernetes maintainers: - - email: support@mongodb.com - name: MongoDB, Inc + - email: support@mongodb.com + name: MongoDB, Inc maturity: beta provider: name: MongoDB, Inc +<<<<<<< HEAD version: 1.0.0 replaces: mongodb-atlas-kubernetes.v0.5.0 +======= + version: 0.0.0 +>>>>>>> 790f9ad (add gcp api) diff --git a/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml b/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml index ce8d4c8553..ea2c1e1b3c 100644 --- a/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml +++ b/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml @@ -158,9 +158,17 @@ spec: required: - name type: object +<<<<<<< HEAD scheme: type: string secretRef: +======= +<<<<<<< Updated upstream + secret: +======= + secretRef: +>>>>>>> Stashed changes +>>>>>>> 790f9ad (add gcp api) description: ResourceRefNamespaced is a reference to a Kubernetes Resource that allows to configure the namespace properties: diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index 54ca60636c..c64e05659e 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -7,5 +7,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization images: - name: controller - newName: mongodb-atlas-controller - newTag: latest + newName: docker.io/leori/test + newTag: CLOUDP-120220-gcp-test-2e14a88 diff --git a/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml b/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml index 7e05a93d5b..9b2ffa8140 100644 --- a/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml +++ b/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml @@ -10,9 +10,10 @@ metadata: name: mongodb-atlas-kubernetes.v0.0.0 namespace: placeholder spec: - apiservicedefinitions: { } + apiservicedefinitions: {} customresourcedefinitions: owned: +<<<<<<< Updated upstream - description: AtlasDeployment is the Schema for the atlasclusters API displayName: Atlas Deployment kind: AtlasDeployment @@ -38,6 +39,34 @@ spec: kind: AtlasBackupPolicy name: atlasbackuppolicies.atlas.mongodb.com version: v1 +======= + - description: AtlasBackupPolicy is the Schema for the atlasbackuppolicies API + displayName: Atlas Backup Policy + kind: AtlasBackupPolicy + name: atlasbackuppolicies.atlas.mongodb.com + version: v1 + - description: AtlasBackupSchedule is the Schema for the atlasbackupschedules + API + displayName: Atlas Backup Schedule + kind: AtlasBackupSchedule + name: atlasbackupschedules.atlas.mongodb.com + version: v1 + - description: AtlasCluster is the Schema for the atlasclusters API + displayName: Atlas Cluster + kind: AtlasCluster + name: atlasclusters.atlas.mongodb.com + version: v1 + - description: AtlasDatabaseUser is the Schema for the Atlas Database User API + displayName: Atlas Database User + kind: AtlasDatabaseUser + name: atlasdatabaseusers.atlas.mongodb.com + version: v1 + - description: AtlasProject is the Schema for the atlasprojects API + displayName: Atlas Project + kind: AtlasProject + name: atlasprojects.atlas.mongodb.com + version: v1 +>>>>>>> Stashed changes description: | The MongoDB Atlas Operator provides a native integration between the Kubernetes orchestration platform and MongoDB Atlas — the only multi-cloud document database service that gives you the versatility you need to build sophisticated and resilient applications that can adapt to changing customer demands and market trends. @@ -149,33 +178,33 @@ spec: ``` displayName: MongoDB Atlas Operator icon: - - base64data: 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mrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== - mediatype: image/png + - base64data: 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mrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== + mediatype: image/png install: spec: deployments: null strategy: "" installModes: - - supported: true - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces keywords: - - MongoDB - - Atlas - - Database - - Replica Set - - Cluster + - MongoDB + - Atlas + - Database + - Replica Set + - Cluster links: - - name: MongoDB Atlas Kubernetes - url: https://github.com/mongodb/mongodb-atlas-kubernetes + - name: MongoDB Atlas Kubernetes + url: https://github.com/mongodb/mongodb-atlas-kubernetes maintainers: - - email: support@mongodb.com - name: MongoDB, Inc + - email: support@mongodb.com + name: MongoDB, Inc maturity: beta provider: name: MongoDB, Inc diff --git a/deploy/all-in-one.yaml b/deploy/all-in-one.yaml index c1ebe1db83..6c3cf94179 100644 --- a/deploy/all-in-one.yaml +++ b/deploy/all-in-one.yaml @@ -2048,7 +2048,7 @@ spec: spec: containers: - args: - - --atlas-domain=https://cloud.mongodb.com/ + - --atlas-domain=https://cloud-qa.mongodb.com/ - --leader-elect - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 diff --git a/deploy/clusterwide/clusterwide-config.yaml b/deploy/clusterwide/clusterwide-config.yaml index 2b67889cfb..d92c96632c 100644 --- a/deploy/clusterwide/clusterwide-config.yaml +++ b/deploy/clusterwide/clusterwide-config.yaml @@ -239,7 +239,7 @@ spec: spec: containers: - args: - - --atlas-domain=https://cloud.mongodb.com/ + - --atlas-domain=https://cloud-qa.mongodb.com/ - --leader-elect - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 diff --git a/deploy/crds/atlas.mongodb.com_atlasclusters.yaml b/deploy/crds/atlas.mongodb.com_atlasclusters.yaml new file mode 100644 index 0000000000..841fc782fa --- /dev/null +++ b/deploy/crds/atlas.mongodb.com_atlasclusters.yaml @@ -0,0 +1,858 @@ + +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.4.1 + creationTimestamp: null + name: atlasclusters.atlas.mongodb.com +spec: + group: atlas.mongodb.com + names: + kind: AtlasCluster + listKind: AtlasClusterList + plural: atlasclusters + singular: atlascluster + scope: Namespaced + versions: + - name: v1 + schema: + openAPIV3Schema: + description: AtlasCluster is the Schema for the atlasclusters API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: AtlasClusterSpec defines the desired state of AtlasCluster + properties: + advancedClusterSpec: + description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ + properties: + backupEnabled: + type: boolean + biConnector: + description: BiConnectorSpec specifies BI Connector for Atlas + configuration on this cluster + properties: + enabled: + description: Flag that indicates whether or not BI Connector + for Atlas is enabled on the cluster. + type: boolean + readPreference: + description: Source from which the BI Connector for Atlas + reads data. Each BI Connector for Atlas read preference + contains a distinct combination of readPreference and readPreferenceTags + options. + type: string + type: object + clusterType: + type: string + connectionStrings: + description: ConnectionStrings configuration for applications + use to connect to this cluster. + properties: + awsPrivateLink: + additionalProperties: + type: string + type: object + awsPrivateLinkSrv: + additionalProperties: + type: string + type: object + private: + type: string + privateEndpoint: + items: + description: PrivateEndpointSpec connection strings. Each + object describes the connection strings you can use to + connect to this cluster through a private endpoint. Atlas + returns this parameter only if you deployed a private + endpoint to all regions to which you deployed this cluster's + nodes. + properties: + connectionString: + type: string + endpoints: + items: + description: EndpointSpec through which you connect + to Atlas. + properties: + endpointId: + type: string + providerName: + type: string + region: + type: string + type: object + type: array + srvConnectionString: + type: string + type: + type: string + type: object + type: array + privateSrv: + type: string + standard: + type: string + standardSrv: + type: string + type: object + createDate: + type: string + diskSizeGB: + type: integer + encryptionAtRestProvider: + type: string + groupId: + type: string + id: + type: string + labels: + items: + description: LabelSpec contains key-value pairs that tag and + categorize the Cluster/DBUser + properties: + key: + maxLength: 255 + type: string + value: + type: string + required: + - key + - value + type: object + type: array + mongoDBMajorVersion: + type: string + mongoDBVersion: + type: string + name: + type: string + paused: + type: boolean + pitEnabled: + type: boolean + replicationSpecs: + items: + properties: + id: + type: string + numShards: + type: integer + regionConfigs: + items: + properties: + analyticsSpecs: + properties: + diskIOPS: + format: int64 + type: integer + ebsVolumeType: + type: string + instanceSize: + type: string + nodeCount: + type: integer + type: object + autoScaling: + description: AutoScalingSpec configures your cluster + to automatically scale its storage + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot + mode for Performance Advisor is enabled. The + default is false. + type: boolean + compute: + description: Collection of settings that configure + how a cluster might scale its cluster tier and + whether the cluster can scale down. + properties: + enabled: + description: Flag that indicates whether cluster + tier auto-scaling is enabled. The default + is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which + your cluster can automatically scale (such + as M40). Atlas requires this parameter if + "autoScaling.compute.enabled" : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which + your cluster can automatically scale (such + as M10). Atlas requires this parameter if + "autoScaling.compute.scaleDownEnabled" : + true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether + the cluster tier may scale down. Atlas requires + this parameter if "autoScaling.compute.enabled" + : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk + auto-scaling is enabled. The default is true. + type: boolean + type: object + backingProviderName: + type: string + electableSpecs: + properties: + diskIOPS: + format: int64 + type: integer + ebsVolumeType: + type: string + instanceSize: + type: string + nodeCount: + type: integer + type: object + priority: + type: integer + providerName: + type: string + readOnlySpecs: + properties: + diskIOPS: + format: int64 + type: integer + ebsVolumeType: + type: string + instanceSize: + type: string + nodeCount: + type: integer + type: object + regionName: + type: string + type: object + type: array + zoneName: + type: string + type: object + type: array + rootCertType: + type: string + stateName: + type: string + versionReleaseSystem: + type: string + type: object + backupRef: + description: Backup schedule for the AtlasCluster + properties: + name: + description: Name is the name of the Kubernetes Resource + type: string + namespace: + description: Namespace is the namespace of the Kubernetes Resource + type: string + required: + - name + type: object + clusterSpec: + description: Configuration for the advanced cluster API + properties: + autoScaling: + description: Collection of settings that configures auto-scaling + information for the cluster. If you specify the autoScaling + object, you must also specify the providerSettings.autoScaling + object. + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot mode for + Performance Advisor is enabled. The default is false. + type: boolean + compute: + description: Collection of settings that configure how a cluster + might scale its cluster tier and whether the cluster can + scale down. + properties: + enabled: + description: Flag that indicates whether cluster tier + auto-scaling is enabled. The default is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which your cluster + can automatically scale (such as M40). Atlas requires + this parameter if "autoScaling.compute.enabled" : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which your cluster + can automatically scale (such as M10). Atlas requires + this parameter if "autoScaling.compute.scaleDownEnabled" + : true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether the cluster + tier may scale down. Atlas requires this parameter if + "autoScaling.compute.enabled" : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk auto-scaling + is enabled. The default is true. + type: boolean + type: object + biConnector: + description: Configuration of BI Connector for Atlas on this cluster. + The MongoDB Connector for Business Intelligence for Atlas (BI + Connector) is only available for M10 and larger clusters. + properties: + enabled: + description: Flag that indicates whether or not BI Connector + for Atlas is enabled on the cluster. + type: boolean + readPreference: + description: Source from which the BI Connector for Atlas + reads data. Each BI Connector for Atlas read preference + contains a distinct combination of readPreference and readPreferenceTags + options. + type: string + type: object + clusterType: + description: Type of the cluster that you want to create. The + parameter is required if replicationSpecs are set or if Global + Clusters are deployed. + enum: + - REPLICASET + - SHARDED + - GEOSHARDED + type: string + diskSizeGB: + description: Capacity, in gigabytes, of the host's root volume. + Increase this number to add capacity, up to a maximum possible + value of 4096 (i.e., 4 TB). This value must be a positive integer. + The parameter is required if replicationSpecs are configured. + maximum: 4096 + minimum: 0 + type: integer + encryptionAtRestProvider: + description: Cloud service provider that offers Encryption at + Rest. + enum: + - AWS + - GCP + - AZURE + - NONE + type: string + labels: + description: Collection of key-value pairs that tag and categorize + the cluster. Each key and value has a maximum length of 255 + characters. + items: + description: LabelSpec contains key-value pairs that tag and + categorize the Cluster/DBUser + properties: + key: + maxLength: 255 + type: string + value: + type: string + required: + - key + - value + type: object + type: array + mongoDBMajorVersion: + description: Version of the cluster to deploy. + type: string + name: + description: Name of the cluster as it appears in Atlas. After + Atlas creates the cluster, you can't change its name. + type: string + numShards: + description: Positive integer that specifies the number of shards + to deploy for a sharded cluster. The parameter is required if + replicationSpecs are configured + maximum: 50 + minimum: 1 + type: integer + paused: + description: Flag that indicates whether the cluster should be + paused. + type: boolean + pitEnabled: + description: Flag that indicates the cluster uses continuous cloud + backups. + type: boolean + providerBackupEnabled: + description: Applicable only for M10+ clusters. Flag that indicates + if the cluster uses Cloud Backups for backups. + type: boolean + providerSettings: + description: Configuration for the provisioned hosts on which + MongoDB runs. The available options are specific to the cloud + service provider. + properties: + autoScaling: + description: Range of instance sizes to which your cluster + can scale. + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot mode + for Performance Advisor is enabled. The default is false. + type: boolean + compute: + description: Collection of settings that configure how + a cluster might scale its cluster tier and whether the + cluster can scale down. + properties: + enabled: + description: Flag that indicates whether cluster tier + auto-scaling is enabled. The default is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which your + cluster can automatically scale (such as M40). Atlas + requires this parameter if "autoScaling.compute.enabled" + : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which your + cluster can automatically scale (such as M10). Atlas + requires this parameter if "autoScaling.compute.scaleDownEnabled" + : true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether the cluster + tier may scale down. Atlas requires this parameter + if "autoScaling.compute.enabled" : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk auto-scaling + is enabled. The default is true. + type: boolean + type: object + backingProviderName: + description: 'Cloud service provider on which the host for + a multi-tenant cluster is provisioned. This setting only + works when "providerSetting.providerName" : "TENANT" and + "providerSetting.instanceSizeName" : M2 or M5.' + enum: + - AWS + - GCP + - AZURE + type: string + diskIOPS: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + format: int64 + type: integer + diskTypeName: + description: Type of disk if you selected Azure as your cloud + service provider. + type: string + encryptEBSVolume: + description: Flag that indicates whether the Amazon EBS encryption + feature encrypts the host's root volume for both data at + rest within the volume and for data moving between the volume + and the cluster. + type: boolean + instanceSizeName: + description: Atlas provides different cluster tiers, each + with a default storage capacity and RAM size. The cluster + you select is used for all the data-bearing hosts in your + cluster tier. + type: string + providerName: + description: Cloud service provider on which Atlas provisions + the hosts. + enum: + - AWS + - GCP + - AZURE + - TENANT + - SERVERLESS + type: string + regionName: + description: Physical location of your MongoDB cluster. The + region you choose can affect network latency for clients + accessing your databases. + type: string + volumeType: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + enum: + - STANDARD + - PROVISIONED + type: string + required: + - providerName + type: object + replicationSpecs: + description: Configuration for cluster regions. + items: + description: ReplicationSpec represents a configuration for + cluster regions + properties: + numShards: + description: Number of shards to deploy in each specified + zone. The default value is 1. + format: int64 + type: integer + regionsConfig: + additionalProperties: + description: RegionsConfig describes the region’s priority + in elections and the number and type of MongoDB nodes + Atlas deploys to the region. + properties: + analyticsNodes: + description: The number of analytics nodes for Atlas + to deploy to the region. Analytics nodes are useful + for handling analytic data such as reporting queries + from BI Connector for Atlas. Analytics nodes are + read-only, and can never become the primary. If + you do not specify this option, no analytics nodes + are deployed to the region. + format: int64 + type: integer + electableNodes: + description: Number of electable nodes for Atlas to + deploy to the region. Electable nodes can become + the primary and can facilitate local reads. + format: int64 + type: integer + priority: + description: Election priority of the region. For + regions with only replicationSpecs[n].regionsConfig..readOnlyNodes, + set this value to 0. + format: int64 + type: integer + readOnlyNodes: + description: Number of read-only nodes for Atlas to + deploy to the region. Read-only nodes can never + become the primary, but can facilitate local-reads. + format: int64 + type: integer + type: object + description: Configuration for a region. Each regionsConfig + object describes the region's priority in elections and + the number and type of MongoDB nodes that Atlas deploys + to the region. + type: object + zoneName: + description: Name for the zone in a Global Cluster. Don't + provide this value if clusterType is not GEOSHARDED. + type: string + type: object + type: array + required: + - name + - providerSettings + type: object + processArgs: + description: ProcessArgs allows to modify Advanced Configuration Options + properties: + defaultReadConcern: + type: string + defaultWriteConcern: + type: string + failIndexKeyTooLong: + type: boolean + javascriptEnabled: + type: boolean + minimumEnabledTlsProtocol: + type: string + noTableScan: + type: boolean + oplogSizeMB: + format: int64 + type: integer + sampleRefreshIntervalBIConnector: + format: int64 + type: integer + sampleSizeBIConnector: + format: int64 + type: integer + type: object + projectRef: + description: Project is a reference to AtlasProject resource the cluster + belongs to + properties: + name: + description: Name is the name of the Kubernetes Resource + type: string + namespace: + description: Namespace is the namespace of the Kubernetes Resource + type: string + required: + - name + type: object + serverlessSpec: + description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ + properties: + name: + description: Name of the cluster as it appears in Atlas. After + Atlas creates the cluster, you can't change its name. + type: string + providerSettings: + description: Configuration for the provisioned hosts on which + MongoDB runs. The available options are specific to the cloud + service provider. + properties: + autoScaling: + description: Range of instance sizes to which your cluster + can scale. + properties: + autoIndexingEnabled: + description: Flag that indicates whether autopilot mode + for Performance Advisor is enabled. The default is false. + type: boolean + compute: + description: Collection of settings that configure how + a cluster might scale its cluster tier and whether the + cluster can scale down. + properties: + enabled: + description: Flag that indicates whether cluster tier + auto-scaling is enabled. The default is false. + type: boolean + maxInstanceSize: + description: 'Maximum instance size to which your + cluster can automatically scale (such as M40). Atlas + requires this parameter if "autoScaling.compute.enabled" + : true.' + type: string + minInstanceSize: + description: 'Minimum instance size to which your + cluster can automatically scale (such as M10). Atlas + requires this parameter if "autoScaling.compute.scaleDownEnabled" + : true.' + type: string + scaleDownEnabled: + description: 'Flag that indicates whether the cluster + tier may scale down. Atlas requires this parameter + if "autoScaling.compute.enabled" : true.' + type: boolean + type: object + diskGBEnabled: + description: Flag that indicates whether disk auto-scaling + is enabled. The default is true. + type: boolean + type: object + backingProviderName: + description: 'Cloud service provider on which the host for + a multi-tenant cluster is provisioned. This setting only + works when "providerSetting.providerName" : "TENANT" and + "providerSetting.instanceSizeName" : M2 or M5.' + enum: + - AWS + - GCP + - AZURE + type: string + diskIOPS: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + format: int64 + type: integer + diskTypeName: + description: Type of disk if you selected Azure as your cloud + service provider. + type: string + encryptEBSVolume: + description: Flag that indicates whether the Amazon EBS encryption + feature encrypts the host's root volume for both data at + rest within the volume and for data moving between the volume + and the cluster. + type: boolean + instanceSizeName: + description: Atlas provides different cluster tiers, each + with a default storage capacity and RAM size. The cluster + you select is used for all the data-bearing hosts in your + cluster tier. + type: string + providerName: + description: Cloud service provider on which Atlas provisions + the hosts. + enum: + - AWS + - GCP + - AZURE + - TENANT + - SERVERLESS + type: string + regionName: + description: Physical location of your MongoDB cluster. The + region you choose can affect network latency for clients + accessing your databases. + type: string + volumeType: + description: Disk IOPS setting for AWS storage. Set only if + you selected AWS as your cloud service provider. + enum: + - STANDARD + - PROVISIONED + type: string + required: + - providerName + type: object + required: + - name + - providerSettings + type: object + required: + - projectRef + type: object + status: + description: AtlasClusterStatus defines the observed state of AtlasCluster. + properties: + conditions: + description: Conditions is the list of statuses showing the current + state of the Atlas Custom Resource + items: + description: Condition describes the state of an Atlas Custom Resource + at a certain point. + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of Atlas Custom Resource condition. + type: string + required: + - status + - type + type: object + type: array + connectionStrings: + description: ConnectionStrings is a set of connection strings that + your applications use to connect to this cluster. + properties: + private: + description: Network-peering-endpoint-aware mongodb:// connection + strings for each interface VPC endpoint you configured to connect + to this cluster. Atlas returns this parameter only if you created + a network peering connection to this cluster. + type: string + privateEndpoint: + description: Private endpoint connection strings. Each object + describes the connection strings you can use to connect to this + cluster through a private endpoint. Atlas returns this parameter + only if you deployed a private endpoint to all regions to which + you deployed this cluster's nodes. + items: + description: PrivateEndpoint connection strings. Each object + describes the connection strings you can use to connect to + this cluster through a private endpoint. Atlas returns this + parameter only if you deployed a private endpoint to all regions + to which you deployed this cluster's nodes. + properties: + connectionString: + description: Private-endpoint-aware mongodb:// connection + string for this private endpoint. + type: string + endpoints: + description: Private endpoint through which you connect + to Atlas when you use connectionStrings.privateEndpoint[n].connectionString + or connectionStrings.privateEndpoint[n].srvConnectionString. + items: + description: Endpoint through which you connect to Atlas + properties: + endpointId: + description: Unique identifier of the private endpoint. + type: string + ip: + description: Private IP address of the private endpoint + network interface you created in your Azure VNet. + type: string + providerName: + description: Cloud provider to which you deployed + the private endpoint. Atlas returns AWS or AZURE. + type: string + region: + description: Region to which you deployed the private + endpoint. + type: string + type: object + type: array + srvConnectionString: + description: Private-endpoint-aware mongodb+srv:// connection + string for this private endpoint. + type: string + type: + description: "Type of MongoDB process that you connect to + with the connection strings \n Atlas returns: \n • MONGOD + for replica sets, or \n • MONGOS for sharded clusters" + type: string + type: object + type: array + privateSrv: + description: Network-peering-endpoint-aware mongodb+srv:// connection + strings for each interface VPC endpoint you configured to connect + to this cluster. Atlas returns this parameter only if you created + a network peering connection to this cluster. Use this URI format + if your driver supports it. If it doesn't, use connectionStrings.private. + type: string + standard: + description: Public mongodb:// connection string for this cluster. + type: string + standardSrv: + description: Public mongodb+srv:// connection string for this + cluster. + type: string + type: object + mongoDBVersion: + description: MongoDBVersion is the version of MongoDB the cluster + runs, in . format. + type: string + mongoURIUpdated: + description: MongoURIUpdated is a timestamp in ISO 8601 date and time + format in UTC when the connection string was last updated. The connection + string changes if you update any of the other values. + type: string + observedGeneration: + description: ObservedGeneration indicates the generation of the resource + specification that the Atlas Operator is aware of. The Atlas Operator + updates this field to the 'metadata.generation' as soon as it starts + reconciliation of the resource. + format: int64 + type: integer + stateName: + description: 'StateName is the current state of the cluster. The possible + states are: IDLE, CREATING, UPDATING, DELETING, DELETED, REPAIRING' + type: string + required: + - conditions + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/deploy/namespaced/namespaced-config.yaml b/deploy/namespaced/namespaced-config.yaml index 73906f16a7..434c5cf322 100644 --- a/deploy/namespaced/namespaced-config.yaml +++ b/deploy/namespaced/namespaced-config.yaml @@ -241,7 +241,7 @@ spec: spec: containers: - args: - - --atlas-domain=https://cloud.mongodb.com/ + - --atlas-domain=https://cloud-qa.mongodb.com/ - --leader-elect - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 diff --git a/go.mod b/go.mod index 3e5949b1be..9668b3a94b 100644 --- a/go.mod +++ b/go.mod @@ -22,6 +22,7 @@ require ( go.mongodb.org/atlas v0.16.0 go.mongodb.org/mongo-driver v1.8.3 go.uber.org/zap v1.21.0 + google.golang.org/api v0.70.0 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b k8s.io/api v0.23.4 k8s.io/apimachinery v0.23.4 @@ -55,6 +56,7 @@ require ( github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/gax-go/v2 v2.1.1 // indirect github.com/googleapis/gnostic v0.5.5 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect @@ -78,6 +80,7 @@ require ( github.com/xdg-go/scram v1.1.0 // indirect github.com/xdg-go/stringprep v1.0.2 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect + go.opencensus.io v0.23.0 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.7.0 // indirect golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect @@ -91,6 +94,8 @@ require ( golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf // indirect + google.golang.org/grpc v1.44.0 // indirect google.golang.org/protobuf v1.27.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect diff --git a/go.sum b/go.sum index 50f90c11ec..8f0b775179 100644 --- a/go.sum +++ b/go.sum @@ -315,6 +315,7 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= @@ -589,6 +590,7 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= @@ -960,6 +962,7 @@ google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdr google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0 h1:67zQnAE0T2rB0A3CwLSas0K+SbVzSxP+zTLkQLexeiw= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1035,6 +1038,7 @@ google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf h1:SVYXkUz2yZS9FWb2Gm8ivSlbNQzL2Z/NpPKE3RG2jWk= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= @@ -1062,6 +1066,7 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= diff --git a/test/e2e/actions/cloud/gcp.go b/test/e2e/actions/cloud/gcp.go index 46995fb34b..53320609f2 100644 --- a/test/e2e/actions/cloud/gcp.go +++ b/test/e2e/actions/cloud/gcp.go @@ -4,12 +4,23 @@ import ( "fmt" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" + // "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" ) type gcpAction struct{} +var ( + // TODO get from GCP + googleProjectID = "atlasoperator" // Google Cloud Project ID + googleVPC = "atlas-operator-test" // VPC Name + googleSubnetName = "atlas-operator-subnet-leo" // Subnet Name + googleConnectPrefix = "leo-test" // Private Service Connect Endpoint Prefix + key = "" // TODO remove +) + func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (string, string, error) { fmt.Print("NOT IMPLEMENTED create GCP LINK") + // gcp.SessionGCP(googleProjectID, key, "europe-west1", googleSubnetName, googleConnectPrefix) return "some test", "IP if req", nil } diff --git a/test/e2e/api/gcp/gcp.go b/test/e2e/api/gcp/gcp.go new file mode 100644 index 0000000000..d70de0d670 --- /dev/null +++ b/test/e2e/api/gcp/gcp.go @@ -0,0 +1,120 @@ +package gcp + +import ( + "context" + "fmt" + + "google.golang.org/api/compute/v1" + "google.golang.org/api/googleapi" + "google.golang.org/api/option" +) + +type sessionGCP struct { + computeService *compute.Service + gProjectID string +} + +func SessionGCP(gProjectID string) (sessionGCP, error) { + computeService, err := compute.NewService(context.Background(), option.WithCredentialsFile("my-atlasoperator-ba1b0d70afc5.json")) // TODO + if err != nil { + return sessionGCP{}, fmt.Errorf("compute.NewClient: %v", err) + } + return sessionGCP{computeService, gProjectID}, nil +} + +func (s *sessionGCP) AddIPAdress(addressName, region, subnet string) (string, error) { + address := &compute.Address{ + AddressType: "INTERNAL", + Description: addressName, + Name: addressName, + Network: "", + Region: region, + Subnetwork: s.formSubnetURL(region, subnet), + ServerResponse: googleapi.ServerResponse{}, + } + _, err := s.computeService.Addresses.Insert(s.gProjectID, region, address).Context(context.Background()).Do() + if err != nil { + return "", fmt.Errorf("computeService.Addresses.Insert: %v", err) + } + return "", nil +} + +func (s *sessionGCP) DescribeIPStatus(region, addressName string) (string, error) { + resp, err := s.computeService.Addresses.Get(s.gProjectID, region, addressName).Context(context.Background()).Do() + if err != nil { + return "", fmt.Errorf("computeService.Addresses.Get: %v", err) + } + return resp.Status, nil +} + +func (s *sessionGCP) DeleteIPAdress(region, addressName string) error { + _, err := s.computeService.Addresses.Delete(s.gProjectID, region, addressName).Context(context.Background()).Do() + if err != nil { + return fmt.Errorf("computeService.Addresses.Delete: %v", err) + } + return nil +} + +func (s *sessionGCP) AddForwardRule(ruleName, addressName, region, network, subnet, target string) ( error) { + rules := &compute.ForwardingRule{ + IPAddress: s.formAddressURL(region, addressName), + IPProtocol: "", + AllPorts: false, + AllowGlobalAccess: false, + BackendService: "", + Description: "", + Fingerprint: "", + IpVersion: "", + IsMirroringCollector: false, + Kind: "", + LabelFingerprint: "", + Labels: map[string]string{}, + LoadBalancingScheme: "", + MetadataFilters: []*compute.MetadataFilter{}, + Name: ruleName, + Network: s.formNetworkURL(network), + NetworkTier: "", + PortRange: "", + Ports: []string{}, + PscConnectionId: 0, + PscConnectionStatus: "", + Region: region, + SelfLink: "", + ServiceDirectoryRegistrations: []*compute.ForwardingRuleServiceDirectoryRegistration{}, + ServiceLabel: "", + Subnetwork: "", + Target: target, + ServerResponse: googleapi.ServerResponse{}, + } + _, err := s.computeService.ForwardingRules.Insert(s.gProjectID, region, rules).Context(context.Background()).Do() + if err != nil { + return fmt.Errorf("computeService.ForwardingRules.Insert: %v", err) + } + return nil +} + +func (s *sessionGCP) DeleteForwardRule(ruleName, region string) error { + _, err := s.computeService.ForwardingRules.Delete(s.gProjectID, region, ruleName).Do() + if err != nil { + return fmt.Errorf("computeService.ForwardingRules.Insert: %v", err) + } + return nil +} + +func (s *sessionGCP) formNetworkURL(network string) string { + return fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/global/networks/%s", + s.gProjectID, network, + ) +} + +func (s *sessionGCP) formSubnetURL(region, subnet string) string { + return fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/regions/%s/subnetworks/%s", + s.gProjectID, region, subnet, + ) +} + +func (s *sessionGCP) formAddressURL(region, addressName string) string { + return fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/regions/%s/addresses/%s", + s.gProjectID, region, addressName, + ) +} diff --git a/test/e2e/private_link_test.go b/test/e2e/private_link_test.go index 1fab4f5436..4bdc384b5b 100644 --- a/test/e2e/private_link_test.go +++ b/test/e2e/private_link_test.go @@ -12,6 +12,7 @@ import ( cloud "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/cloud" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/deploy" kube "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/kube" + "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils" kubecli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kubecli" @@ -37,8 +38,8 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { _ = BeforeEach(func() { Eventually(kubecli.GetVersionOutput()).Should(Say(K8sVersion)) - checkUpAWSEnviroment() - checkUpAzureEnviroment() + // checkUpAWSEnviroment() + // checkUpAzureEnviroment() }) _ = AfterEach(func() { @@ -65,22 +66,142 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { }) } - By("Clean Cloud", func() { - DeleteAllPrivateEndpoints(&data) - }) - By("Delete Resources, Project with PEService", func() { - actions.DeleteUserResourcesProject(&data) - }) + // By("Clean Cloud", func() { + // DeleteAllPrivateEndpoints(&data) + // }) + // By("Delete Resources, Project with PEService", func() { + // actions.DeleteUserResourcesProject(&data) + // }) }) DescribeTable("Namespaced operators working only with its own namespace with different configuration", func(test model.TestDataProvider, pe []privateEndpoint) { data = test - privateFlow(&data, pe) + // privateFlow(&data, pe) + // TODO remove + // peitem := data.Resources.Project.Spec.PrivateEndpoints[0] + googleID := "atlasoperator" // Google Cloud Project ID + // googleVPC := "atlas-operator-test" // VPC Name + googleSubnetName := "atlas-operator-subnet-leo" // Subnet Name + googleConnectPrefix := "leo-test" // Private Service Connect Endpoint Prefix + region := "europe-west1" + // target := "projects/p-mnvqejvhytwi2kmovmtjdq6g/regions/europe-west1/serviceAttachments/sa-europe-west1-627b91a2a99afa3aa58fb909-1" + + // err := gcp.SessionGCP(googleID, key, region, googleSubnetName, googleConnectPrefix) + s, err := gcp.SessionGCP(googleID) + s.AddIPAdress(googleConnectPrefix+"-1", region, googleSubnetName) + t, err := s.DescribeIPStatus(region, googleConnectPrefix+"-1") + Expect(err).ShouldNot(HaveOccurred()) + GinkgoWriter.Println(t) + // err = s.AddForwardRule(googleConnectPrefix, googleConnectPrefix+"-1", region, googleVPC, googleSubnetName, target) + // err = s.DeleteForwardRule(googleConnectPrefix, region) + // err = s.DeleteIPAdress(region, googleConnectPrefix+"-1") + Expect(err).ShouldNot(HaveOccurred()) + // s.AddAttachment(googleConnectPrefix, googleConnectPrefix+"-1", region, googleVPC, target) + // Expect(err).ShouldNot(HaveOccurred()) + // cloudTest, err := cloud.CreatePEActions(peitem) }, - Entry("Test[privatelink-aws-1]: User has project which was updated with AWS PrivateEndpoint", Label("privatelink-aws-1"), + // Entry("Test[privatelink-aws-1]: User has project which was updated with AWS PrivateEndpoint", Label("privatelink-aws-1"), + // model.NewTestDataProvider( + // "privatelink-aws-1", + // model.AProject{}, + // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + // []string{"data/atlascluster_backup.yaml"}, + // []string{}, + // []model.DBUser{ + // *model.NewDBUser("user1"). + // WithSecretRef("dbuser-secret-u1"). + // AddBuildInAdminRole(), + // }, + // 40000, + // []func(*model.TestDataProvider){}, + // ), + // []privateEndpoint{ + // { + // provider: "AWS", + // region: "eu-west-2", + // }, + // }, + // ), + // Entry("Test[privatelink-azure-1]: User has project which was updated with Azure PrivateEndpoint", Label("privatelink-azure-1"), + // model.NewTestDataProvider( + // "privatelink-azure-1", + // model.AProject{}, + // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + // []string{"data/atlascluster_backup.yaml"}, + // []string{}, + // []model.DBUser{ + // *model.NewDBUser("user1"). + // WithSecretRef("dbuser-secret-u1"). + // AddBuildInAdminRole(), + // }, + // 40000, + // []func(*model.TestDataProvider){}, + // ), + // []privateEndpoint{{ + // provider: "AZURE", + // region: "northeurope", + // }}, + // ), + // Entry("Test[privatelink-aws-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-2"), + // model.NewTestDataProvider( + // "privatelink-aws-2", + // model.AProject{}, + // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + // []string{"data/atlascluster_backup.yaml"}, + // []string{}, + // []model.DBUser{ + // *model.NewDBUser("user1"). + // WithSecretRef("dbuser-secret-u1"). + // AddBuildInAdminRole(), + // }, + // 40000, + // []func(*model.TestDataProvider){}, + // ), + // []privateEndpoint{ + // { + // provider: "AWS", + // region: "eu-west-2", + // }, + // { + // provider: "AWS", + // region: "us-east-1", + // }, + // }, + // ), + // Entry("Test[privatelink-aws-azure-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-azure-2"), + // model.NewTestDataProvider( + // "privatelink-aws-azure", + // model.AProject{}, + // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + // []string{"data/atlascluster_backup.yaml"}, + // []string{}, + // []model.DBUser{ + // *model.NewDBUser("user1"). + // WithSecretRef("dbuser-secret-u1"). + // AddBuildInAdminRole(), + // }, + // 40000, + // []func(*model.TestDataProvider){}, + // ), + // []privateEndpoint{ + // { + // provider: "AWS", + // region: "eu-west-2", + // }, + // { + // provider: "AWS", + // region: "us-east-1", + // }, + // { + // provider: "AZURE", + // region: "northeurope", + // }, + // }, + // ), + Entry("Test[privatelink-gpc-1]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-gpc-1"), model.NewTestDataProvider( - "privatelink-aws-1", + "privatelink-gpc-1", model.AProject{}, model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), []string{"data/atlascluster_backup.yaml"}, @@ -95,84 +216,8 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { ), []privateEndpoint{ { - provider: "AWS", - region: "eu-west-2", - }, - }, - ), - Entry("Test[privatelink-azure-1]: User has project which was updated with Azure PrivateEndpoint", Label("privatelink-azure-1"), - model.NewTestDataProvider( - "privatelink-azure-1", - model.AProject{}, - model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), - []string{"data/atlascluster_backup.yaml"}, - []string{}, - []model.DBUser{ - *model.NewDBUser("user1"). - WithSecretRef("dbuser-secret-u1"). - AddBuildInAdminRole(), - }, - 40000, - []func(*model.TestDataProvider){}, - ), - []privateEndpoint{{ - provider: "AZURE", - region: "northeurope", - }}, - ), - Entry("Test[privatelink-aws-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-2"), - model.NewTestDataProvider( - "privatelink-aws-2", - model.AProject{}, - model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), - []string{"data/atlascluster_backup.yaml"}, - []string{}, - []model.DBUser{ - *model.NewDBUser("user1"). - WithSecretRef("dbuser-secret-u1"). - AddBuildInAdminRole(), - }, - 40000, - []func(*model.TestDataProvider){}, - ), - []privateEndpoint{ - { - provider: "AWS", - region: "eu-west-2", - }, - { - provider: "AWS", - region: "us-east-1", - }, - }, - ), - Entry("Test[privatelink-aws-azure-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-azure-2"), - model.NewTestDataProvider( - "privatelink-aws-azure", - model.AProject{}, - model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), - []string{"data/atlascluster_backup.yaml"}, - []string{}, - []model.DBUser{ - *model.NewDBUser("user1"). - WithSecretRef("dbuser-secret-u1"). - AddBuildInAdminRole(), - }, - 40000, - []func(*model.TestDataProvider){}, - ), - []privateEndpoint{ - { - provider: "AWS", - region: "eu-west-2", - }, - { - provider: "AWS", - region: "us-east-1", - }, - { - provider: "AZURE", - region: "northeurope", + provider: "GCP", + region: "eu-west-1", }, }, ), From 8859a311d962a2e8c18df016f1c8887570e56e62 Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Thu, 19 May 2022 16:58:38 +0300 Subject: [PATCH 02/11] change output --- go.mod | 2 +- go.sum | 6 ++--- test/e2e/actions/cloud/aws.go | 18 ++++++++----- test/e2e/actions/cloud/azure.go | 17 ++++++++---- test/e2e/actions/cloud/cloud.go | 27 ++++++++++++++++--- test/e2e/actions/cloud/gcp.go | 34 ++++++++++++++++++++---- test/e2e/api/gcp/gcp.go | 7 ++--- test/e2e/model/project.go | 19 ++++++++++--- test/e2e/private_link_test.go | 47 +++++++++++++++++---------------- 9 files changed, 123 insertions(+), 54 deletions(-) diff --git a/go.mod b/go.mod index 9668b3a94b..91e913b510 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/Azure/go-autorest/autorest v0.11.24 github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 github.com/Azure/go-autorest/autorest/to v0.4.0 - github.com/aws/aws-sdk-go v1.44.15 + github.com/aws/aws-sdk-go v1.44.16 github.com/fatih/structtag v1.2.0 github.com/go-logr/zapr v1.2.3 github.com/google/go-cmp v0.5.7 diff --git a/go.sum b/go.sum index 8f0b775179..ac41536f49 100644 --- a/go.sum +++ b/go.sum @@ -97,10 +97,8 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws/aws-sdk-go v1.44.15 h1:z02BVeV6k7hZMfWEQmKh3X23s3F9PBHFCcIVfNlut7A= -github.com/aws/aws-sdk-go v1.44.15/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.43.23 h1:/YmZzPMK6Xzi0B/W9O/Pq7nyIXpBv6mTiJdDDFC7u94= -github.com/aws/aws-sdk-go v1.43.23/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.16 h1:6voHuNZZNWo71MdNlym4eRlcogTeTSk9Ipo6qDJWzoU= +github.com/aws/aws-sdk-go v1.44.16/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= diff --git a/test/e2e/actions/cloud/aws.go b/test/e2e/actions/cloud/aws.go index 73df381731..6cc8fe98ce 100644 --- a/test/e2e/actions/cloud/aws.go +++ b/test/e2e/actions/cloud/aws.go @@ -4,30 +4,36 @@ import ( "errors" "fmt" + "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" aws "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/aws" ) type awsAction struct{} -func (awsAction *awsAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (string, string, error) { +func (awsAction *awsAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { fmt.Print("create AWS LINK") session := aws.SessionAWS(pe.Region) vpcID, err := session.GetVPCID() if err != nil { - return "", "", err + return CloudResponse{}, err } subnetID, err := session.GetSubnetID() if err != nil { - return "", "", err + return CloudResponse{}, err } privateEndpointID, err := session.CreatePrivateEndpoint(vpcID, subnetID, pe.ServiceName, privatelinkName) if err != nil { - return "", "", err + return CloudResponse{}, err } - - return privateEndpointID, "", nil + cResponse := CloudResponse{ + ID: privateEndpointID, + IP: "", + Provider: provider.ProviderAWS, + Region: pe.Region, + } + return cResponse, nil } func (awsAction *awsAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkID string) error { diff --git a/test/e2e/actions/cloud/azure.go b/test/e2e/actions/cloud/azure.go index 4a9fbb2827..ea96d8f6c1 100644 --- a/test/e2e/actions/cloud/azure.go +++ b/test/e2e/actions/cloud/azure.go @@ -5,6 +5,7 @@ import ( "os" "path" + "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/azure" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/config" @@ -19,20 +20,26 @@ var ( subnetName = "default" ) -func (azureAction *azureAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (string, string, error) { +func (azureAction *azureAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { session, err := azure.SessionAzure(os.Getenv("AZURE_SUBSCRIPTION_ID"), config.TagName) if err != nil { - return "", "", err + return CloudResponse{}, err } err = session.DisableNetworkPolicies(resourceGroup, vpc, subnetName) if err != nil { - return "", "", err + return CloudResponse{}, err } id, ip, err := session.CreatePrivateEndpoint(pe.Region, resourceGroup, privatelinkName, pe.ServiceResourceID) if err != nil { - return "", "", err + return CloudResponse{}, err } - return id, ip, nil + cResponse := CloudResponse{ + ID: id, + IP: ip, + Provider: provider.ProviderAzure, + Region: pe.Region, + } + return cResponse, nil } func (azureAction *azureAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) error { diff --git a/test/e2e/actions/cloud/cloud.go b/test/e2e/actions/cloud/cloud.go index 0e593ac2eb..4720e212b9 100644 --- a/test/e2e/actions/cloud/cloud.go +++ b/test/e2e/actions/cloud/cloud.go @@ -8,7 +8,7 @@ import ( ) type CloudActions interface { - createPrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) (string, string, error) + createPrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) (CloudResponse, error) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) error statusPrivateEndpointPending(region, privateID string) bool statusPrivateEndpointAvailable(region, privateID string) bool @@ -19,6 +19,22 @@ type PEActions struct { PrivateEndpoint status.ProjectPrivateEndpoint } +type CloudResponse struct { + ID string // AWS = PrivateID, AZURE = privateEndpoint Name + IP string + Provider provider.ProviderName + Region string + // GCP = project ID + GoogleProjectID string + GoogleVPC string + GoogleEndpoints []Endpoints // TODO remove? +} + +type Endpoints struct { + IP string + Name string +} + func CreatePEActions(pe status.ProjectPrivateEndpoint) (PEActions, error) { peActions := PEActions{PrivateEndpoint: pe} switch pe.Provider { @@ -55,9 +71,14 @@ func (peActions *PEActions) validation() error { return nil } -func (peActions *PEActions) CreatePrivateEndpoint(name string) (string, string, error) { +func (peActions *PEActions) CreatePrivateEndpoint(name string) (CloudResponse, error) { + var output CloudResponse if err := peActions.validation(); err != nil { - return "", "", err + return output, err + } + output, err := peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name) + if err != nil { + return CloudResponse{}, err } return peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name) } diff --git a/test/e2e/actions/cloud/gcp.go b/test/e2e/actions/cloud/gcp.go index 53320609f2..2d87e26ab0 100644 --- a/test/e2e/actions/cloud/gcp.go +++ b/test/e2e/actions/cloud/gcp.go @@ -4,7 +4,7 @@ import ( "fmt" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" - // "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" + "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" ) type gcpAction struct{} @@ -18,14 +18,38 @@ var ( key = "" // TODO remove ) -func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (string, string, error) { - fmt.Print("NOT IMPLEMENTED create GCP LINK") - // gcp.SessionGCP(googleProjectID, key, "europe-west1", googleSubnetName, googleConnectPrefix) - return "some test", "IP if req", nil +func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { + session, err := gcp.SessionGCP(googleProjectID) + if err != nil { + return CloudResponse{}, err + } + var cResponse CloudResponse + for i:=0; i<5; i++ { + addressName := googleConnectPrefix+"-ip-"+fmt.Sprint(i) + ruleName := googleConnectPrefix+fmt.Sprint(i) + // TODO + target := "" + + ip, err := session.AddIPAdress(pe.Region, addressName, googleSubnetName) + if err != nil { + return CloudResponse{}, fmt.Errorf("Cloud. can not add IP adress: %s, for region: %s", addressName, pe.Region) + } + cResponse.GoogleEndpoints = append(cResponse.GoogleEndpoints, Endpoints{IP: ip, Name: addressName}) + session.AddForwardRule(pe.Region, ruleName, addressName, googleVPC, googleSubnetName, target) + } + return cResponse, nil } func (gcpAction *gcpAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) error { fmt.Print("NOT IMPLEMENTED delete GCP LINK") + session, err := gcp.SessionGCP(googleProjectID) + if err != nil { + return err + } + for i := range pe.Endpoints { + session.DeleteForwardRule(pe.Region, googleConnectPrefix+fmt.Sprint(i)) + session.DeleteIPAdress(pe.Region, googleConnectPrefix+fmt.Sprint(i)) + } return nil } diff --git a/test/e2e/api/gcp/gcp.go b/test/e2e/api/gcp/gcp.go index d70de0d670..1016318f02 100644 --- a/test/e2e/api/gcp/gcp.go +++ b/test/e2e/api/gcp/gcp.go @@ -22,7 +22,7 @@ func SessionGCP(gProjectID string) (sessionGCP, error) { return sessionGCP{computeService, gProjectID}, nil } -func (s *sessionGCP) AddIPAdress(addressName, region, subnet string) (string, error) { +func (s *sessionGCP) AddIPAdress(region, addressName, subnet string) (string, error) { address := &compute.Address{ AddressType: "INTERNAL", Description: addressName, @@ -36,6 +36,7 @@ func (s *sessionGCP) AddIPAdress(addressName, region, subnet string) (string, er if err != nil { return "", fmt.Errorf("computeService.Addresses.Insert: %v", err) } + // TODO add get IP and return return "", nil } @@ -55,7 +56,7 @@ func (s *sessionGCP) DeleteIPAdress(region, addressName string) error { return nil } -func (s *sessionGCP) AddForwardRule(ruleName, addressName, region, network, subnet, target string) ( error) { +func (s *sessionGCP) AddForwardRule(region, ruleName, addressName, network, subnet, target string) ( error) { rules := &compute.ForwardingRule{ IPAddress: s.formAddressURL(region, addressName), IPProtocol: "", @@ -93,7 +94,7 @@ func (s *sessionGCP) AddForwardRule(ruleName, addressName, region, network, subn return nil } -func (s *sessionGCP) DeleteForwardRule(ruleName, region string) error { +func (s *sessionGCP) DeleteForwardRule(region, ruleName string) error { _, err := s.computeService.ForwardingRules.Delete(s.gProjectID, region, ruleName).Do() if err != nil { return fmt.Errorf("computeService.ForwardingRules.Insert: %v", err) diff --git a/test/e2e/model/project.go b/test/e2e/model/project.go index 9a1a5665ac..6f284e4653 100644 --- a/test/e2e/model/project.go +++ b/test/e2e/model/project.go @@ -8,6 +8,7 @@ import ( "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/project" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" + "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/cloud" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils" ) @@ -80,11 +81,21 @@ func (p *AProject) UpdatePrivateLinkByOrder(i int, id string) *AProject { return p } -func (p *AProject) UpdatePrivateLinkID(provider provider.ProviderName, region, id, ip string) *AProject { +// func (p *AProject) UpdatePrivateLinkID(provider provider.ProviderName, region, id, ip string) *AProject { +// for i, peItem := range p.Spec.PrivateEndpoints { +// if (peItem.Provider == provider) && (peItem.Region == region) { +// p.Spec.PrivateEndpoints[i].ID = id +// p.Spec.PrivateEndpoints[i].IP = ip +// } +// } +// return p +// } + +func (p *AProject) UpdatePrivateLinkID(test cloud.CloudResponse) *AProject { for i, peItem := range p.Spec.PrivateEndpoints { - if (peItem.Provider == provider) && (peItem.Region == region) { - p.Spec.PrivateEndpoints[i].ID = id - p.Spec.PrivateEndpoints[i].IP = ip + if (peItem.Provider == test.Provider) && (peItem.Region == test.Region) { + p.Spec.PrivateEndpoints[i].ID = test.ID + p.Spec.PrivateEndpoints[i].IP = test.IP } } return p diff --git a/test/e2e/private_link_test.go b/test/e2e/private_link_test.go index 4bdc384b5b..ebe6da97c4 100644 --- a/test/e2e/private_link_test.go +++ b/test/e2e/private_link_test.go @@ -12,7 +12,7 @@ import ( cloud "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/cloud" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/deploy" kube "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/kube" - "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" + // "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils" kubecli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kubecli" @@ -77,26 +77,26 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { DescribeTable("Namespaced operators working only with its own namespace with different configuration", func(test model.TestDataProvider, pe []privateEndpoint) { data = test - // privateFlow(&data, pe) + privateFlow(&data, pe) // TODO remove // peitem := data.Resources.Project.Spec.PrivateEndpoints[0] - googleID := "atlasoperator" // Google Cloud Project ID - // googleVPC := "atlas-operator-test" // VPC Name - googleSubnetName := "atlas-operator-subnet-leo" // Subnet Name - googleConnectPrefix := "leo-test" // Private Service Connect Endpoint Prefix - region := "europe-west1" + // googleID := "atlasoperator" // Google Cloud Project ID + // // googleVPC := "atlas-operator-test" // VPC Name + // googleSubnetName := "atlas-operator-subnet-leo" // Subnet Name + // googleConnectPrefix := "leo-test" // Private Service Connect Endpoint Prefix + // region := "europe-west1" // target := "projects/p-mnvqejvhytwi2kmovmtjdq6g/regions/europe-west1/serviceAttachments/sa-europe-west1-627b91a2a99afa3aa58fb909-1" - // err := gcp.SessionGCP(googleID, key, region, googleSubnetName, googleConnectPrefix) - s, err := gcp.SessionGCP(googleID) - s.AddIPAdress(googleConnectPrefix+"-1", region, googleSubnetName) - t, err := s.DescribeIPStatus(region, googleConnectPrefix+"-1") - Expect(err).ShouldNot(HaveOccurred()) - GinkgoWriter.Println(t) + + // s, err := gcp.SessionGCP(googleID) + // s.AddIPAdress(googleConnectPrefix+"-1", region, googleSubnetName) + // t, err := s.DescribeIPStatus(region, googleConnectPrefix+"-1") + // Expect(err).ShouldNot(HaveOccurred()) + // GinkgoWriter.Println(t) // err = s.AddForwardRule(googleConnectPrefix, googleConnectPrefix+"-1", region, googleVPC, googleSubnetName, target) // err = s.DeleteForwardRule(googleConnectPrefix, region) // err = s.DeleteIPAdress(region, googleConnectPrefix+"-1") - Expect(err).ShouldNot(HaveOccurred()) + // Expect(err).ShouldNot(HaveOccurred()) // s.AddAttachment(googleConnectPrefix, googleConnectPrefix+"-1", region, googleVPC, target) // Expect(err).ShouldNot(HaveOccurred()) // cloudTest, err := cloud.CreatePEActions(peitem) @@ -217,7 +217,7 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { []privateEndpoint{ { provider: "GCP", - region: "eu-west-1", + region: "europe-west1", }, }, ), @@ -257,15 +257,16 @@ func privateFlow(userData *model.TestDataProvider, requstedPE []privateEndpoint) for _, peitem := range project.Status.PrivateEndpoints { cloudTest, err := cloud.CreatePEActions(peitem) Expect(err).ShouldNot(HaveOccurred()) - privateLinkID, ip, err := cloudTest.CreatePrivateEndpoint(peitem.ID) + // privateLinkID, ip, err := cloudTest.CreatePrivateEndpoint(peitem.ID) + output, err := cloudTest.CreatePrivateEndpoint(peitem.ID) Expect(err).ShouldNot(HaveOccurred()) - Expect(privateLinkID).ShouldNot(BeEmpty()) - Eventually( - func() bool { - return cloudTest.IsStatusPrivateEndpointPending(privateLinkID) - }, - ).Should(BeTrue()) - userData.Resources.Project.UpdatePrivateLinkID(peitem.Provider, peitem.Region, privateLinkID, ip) + // // Expect(privateLinkID).ShouldNot(BeEmpty()) + // Eventually( + // func() bool { + // return cloudTest.IsStatusPrivateEndpointPending(privateLinkID) + // }, + // ).Should(BeTrue()) + userData.Resources.Project.UpdatePrivateLinkID(output) } }) From 93cccd25d1d98c6a6b1c57a83a31e383640f85d1 Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Fri, 20 May 2022 22:18:29 +0300 Subject: [PATCH 03/11] gpc. add waiter for getting ip --- test/e2e/actions/cloud/aws.go | 8 ++++---- test/e2e/actions/cloud/azure.go | 8 ++++---- test/e2e/actions/cloud/cloud.go | 25 +++++++++++-------------- test/e2e/actions/cloud/gcp.go | 21 ++++++++++++--------- test/e2e/api/gcp/gcp.go | 26 ++++++++++++++++++++++---- test/e2e/model/project.go | 16 ++++------------ test/e2e/private_link_test.go | 29 +++++++---------------------- 7 files changed, 64 insertions(+), 69 deletions(-) diff --git a/test/e2e/actions/cloud/aws.go b/test/e2e/actions/cloud/aws.go index 6cc8fe98ce..399ed60c77 100644 --- a/test/e2e/actions/cloud/aws.go +++ b/test/e2e/actions/cloud/aws.go @@ -28,10 +28,10 @@ func (awsAction *awsAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoi return CloudResponse{}, err } cResponse := CloudResponse{ - ID: privateEndpointID, - IP: "", - Provider: provider.ProviderAWS, - Region: pe.Region, + ID: privateEndpointID, + IP: "", + Provider: provider.ProviderAWS, + Region: pe.Region, } return cResponse, nil } diff --git a/test/e2e/actions/cloud/azure.go b/test/e2e/actions/cloud/azure.go index ea96d8f6c1..50f670227a 100644 --- a/test/e2e/actions/cloud/azure.go +++ b/test/e2e/actions/cloud/azure.go @@ -34,10 +34,10 @@ func (azureAction *azureAction) createPrivateEndpoint(pe status.ProjectPrivateEn return CloudResponse{}, err } cResponse := CloudResponse{ - ID: id, - IP: ip, - Provider: provider.ProviderAzure, - Region: pe.Region, + ID: id, + IP: ip, + Provider: provider.ProviderAzure, + Region: pe.Region, } return cResponse, nil } diff --git a/test/e2e/actions/cloud/cloud.go b/test/e2e/actions/cloud/cloud.go index 4720e212b9..8e78496419 100644 --- a/test/e2e/actions/cloud/cloud.go +++ b/test/e2e/actions/cloud/cloud.go @@ -3,6 +3,7 @@ package cloud import ( "errors" + v1 "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" ) @@ -20,18 +21,17 @@ type PEActions struct { } type CloudResponse struct { - ID string // AWS = PrivateID, AZURE = privateEndpoint Name - IP string - Provider provider.ProviderName - Region string - // GCP = project ID + ID string // AWS = PrivateID, AZURE = privateEndpoint Name + IP string + Provider provider.ProviderName + Region string GoogleProjectID string - GoogleVPC string - GoogleEndpoints []Endpoints // TODO remove? + GoogleVPC string + GoogleEndpoints v1.GCPEndpoints } type Endpoints struct { - IP string + IP string Name string } @@ -64,7 +64,9 @@ func (peActions *PEActions) validation() error { return errors.New("Azure. PrivateEndpoint.ServiceResourceID is empty") } case provider.ProviderGCP: - return errors.New("work with GCP is not implemented") + if len(peActions.PrivateEndpoint.ServiceAttachmentNames) < 1 { + return errors.New("GCP. PrivateEndpoint.ServiceAttachmentNames should not be empty") + } default: return errors.New("Check Provider") } @@ -72,12 +74,7 @@ func (peActions *PEActions) validation() error { } func (peActions *PEActions) CreatePrivateEndpoint(name string) (CloudResponse, error) { - var output CloudResponse if err := peActions.validation(); err != nil { - return output, err - } - output, err := peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name) - if err != nil { return CloudResponse{}, err } return peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name) diff --git a/test/e2e/actions/cloud/gcp.go b/test/e2e/actions/cloud/gcp.go index 2d87e26ab0..a4e4e9f6de 100644 --- a/test/e2e/actions/cloud/gcp.go +++ b/test/e2e/actions/cloud/gcp.go @@ -3,6 +3,7 @@ package cloud import ( "fmt" + v1 "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" ) @@ -15,7 +16,6 @@ var ( googleVPC = "atlas-operator-test" // VPC Name googleSubnetName = "atlas-operator-subnet-leo" // Subnet Name googleConnectPrefix = "leo-test" // Private Service Connect Endpoint Prefix - key = "" // TODO remove ) func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { @@ -24,17 +24,20 @@ func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoi return CloudResponse{}, err } var cResponse CloudResponse - for i:=0; i<5; i++ { - addressName := googleConnectPrefix+"-ip-"+fmt.Sprint(i) - ruleName := googleConnectPrefix+fmt.Sprint(i) - // TODO - target := "" - + for i, target := range pe.ServiceAttachmentNames { + addressName := googleConnectPrefix + privatelinkName + "-ip-" + fmt.Sprint(i) + ruleName := googleConnectPrefix + privatelinkName + fmt.Sprint(i) ip, err := session.AddIPAdress(pe.Region, addressName, googleSubnetName) if err != nil { - return CloudResponse{}, fmt.Errorf("Cloud. can not add IP adress: %s, for region: %s", addressName, pe.Region) + return CloudResponse{}, err } - cResponse.GoogleEndpoints = append(cResponse.GoogleEndpoints, Endpoints{IP: ip, Name: addressName}) + cResponse.GoogleEndpoints = append(cResponse.GoogleEndpoints, v1.GCPEndpoint{ + EndpointName: addressName, + IPAddress: ip, + }) + cResponse.GoogleVPC = googleVPC + cResponse.Region = pe.Region + cResponse.Provider = pe.Provider session.AddForwardRule(pe.Region, ruleName, addressName, googleVPC, googleSubnetName, target) } return cResponse, nil diff --git a/test/e2e/api/gcp/gcp.go b/test/e2e/api/gcp/gcp.go index 1016318f02..138ab67316 100644 --- a/test/e2e/api/gcp/gcp.go +++ b/test/e2e/api/gcp/gcp.go @@ -3,6 +3,7 @@ package gcp import ( "context" "fmt" + "time" "google.golang.org/api/compute/v1" "google.golang.org/api/googleapi" @@ -36,8 +37,25 @@ func (s *sessionGCP) AddIPAdress(region, addressName, subnet string) (string, er if err != nil { return "", fmt.Errorf("computeService.Addresses.Insert: %v", err) } - // TODO add get IP and return - return "", nil + ip, err := s.GetIP(region, addressName, 20, 10) + if err != nil { + return "", fmt.Errorf("computeService.Addresses.Get: %v", err) + } + return ip, nil +} + +func (s *sessionGCP) GetIP(region, addressName string, try, interval int) (string, error) { + for i := 0; i < try; i++ { + r, err := s.computeService.Addresses.Get(s.gProjectID, region, addressName).Do() + if err != nil { + return "", err + } + if r.Address != "" { + return r.Address, nil + } + time.Sleep(time.Duration(interval) * time.Second) + } + return "", fmt.Errorf("timeout computeService.Addresses.Get") } func (s *sessionGCP) DescribeIPStatus(region, addressName string) (string, error) { @@ -56,7 +74,7 @@ func (s *sessionGCP) DeleteIPAdress(region, addressName string) error { return nil } -func (s *sessionGCP) AddForwardRule(region, ruleName, addressName, network, subnet, target string) ( error) { +func (s *sessionGCP) AddForwardRule(region, ruleName, addressName, network, subnet, target string) error { rules := &compute.ForwardingRule{ IPAddress: s.formAddressURL(region, addressName), IPProtocol: "", @@ -91,7 +109,7 @@ func (s *sessionGCP) AddForwardRule(region, ruleName, addressName, network, subn if err != nil { return fmt.Errorf("computeService.ForwardingRules.Insert: %v", err) } - return nil + return nil } func (s *sessionGCP) DeleteForwardRule(region, ruleName string) error { diff --git a/test/e2e/model/project.go b/test/e2e/model/project.go index 6f284e4653..f5bdf1ad57 100644 --- a/test/e2e/model/project.go +++ b/test/e2e/model/project.go @@ -81,21 +81,13 @@ func (p *AProject) UpdatePrivateLinkByOrder(i int, id string) *AProject { return p } -// func (p *AProject) UpdatePrivateLinkID(provider provider.ProviderName, region, id, ip string) *AProject { -// for i, peItem := range p.Spec.PrivateEndpoints { -// if (peItem.Provider == provider) && (peItem.Region == region) { -// p.Spec.PrivateEndpoints[i].ID = id -// p.Spec.PrivateEndpoints[i].IP = ip -// } -// } -// return p -// } - func (p *AProject) UpdatePrivateLinkID(test cloud.CloudResponse) *AProject { for i, peItem := range p.Spec.PrivateEndpoints { if (peItem.Provider == test.Provider) && (peItem.Region == test.Region) { - p.Spec.PrivateEndpoints[i].ID = test.ID - p.Spec.PrivateEndpoints[i].IP = test.IP + p.Spec.PrivateEndpoints[i].ID = test.ID // in case AWS/Azure + p.Spec.PrivateEndpoints[i].IP = test.IP // in case Azure + p.Spec.PrivateEndpoints[i].EndpointGroupName = test.GoogleVPC + p.Spec.PrivateEndpoints[i].Endpoints = test.GoogleEndpoints // in case GCP } } return p diff --git a/test/e2e/private_link_test.go b/test/e2e/private_link_test.go index ebe6da97c4..1690c57baa 100644 --- a/test/e2e/private_link_test.go +++ b/test/e2e/private_link_test.go @@ -12,6 +12,7 @@ import ( cloud "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/cloud" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/deploy" kube "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/kube" + // "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils" @@ -78,28 +79,7 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { func(test model.TestDataProvider, pe []privateEndpoint) { data = test privateFlow(&data, pe) - // TODO remove - // peitem := data.Resources.Project.Spec.PrivateEndpoints[0] - // googleID := "atlasoperator" // Google Cloud Project ID - // // googleVPC := "atlas-operator-test" // VPC Name - // googleSubnetName := "atlas-operator-subnet-leo" // Subnet Name - // googleConnectPrefix := "leo-test" // Private Service Connect Endpoint Prefix - // region := "europe-west1" - // target := "projects/p-mnvqejvhytwi2kmovmtjdq6g/regions/europe-west1/serviceAttachments/sa-europe-west1-627b91a2a99afa3aa58fb909-1" - - // s, err := gcp.SessionGCP(googleID) - // s.AddIPAdress(googleConnectPrefix+"-1", region, googleSubnetName) - // t, err := s.DescribeIPStatus(region, googleConnectPrefix+"-1") - // Expect(err).ShouldNot(HaveOccurred()) - // GinkgoWriter.Println(t) - // err = s.AddForwardRule(googleConnectPrefix, googleConnectPrefix+"-1", region, googleVPC, googleSubnetName, target) - // err = s.DeleteForwardRule(googleConnectPrefix, region) - // err = s.DeleteIPAdress(region, googleConnectPrefix+"-1") - // Expect(err).ShouldNot(HaveOccurred()) - // s.AddAttachment(googleConnectPrefix, googleConnectPrefix+"-1", region, googleVPC, target) - // Expect(err).ShouldNot(HaveOccurred()) - // cloudTest, err := cloud.CreatePEActions(peitem) }, // Entry("Test[privatelink-aws-1]: User has project which was updated with AWS PrivateEndpoint", Label("privatelink-aws-1"), // model.NewTestDataProvider( @@ -266,7 +246,12 @@ func privateFlow(userData *model.TestDataProvider, requstedPE []privateEndpoint) // return cloudTest.IsStatusPrivateEndpointPending(privateLinkID) // }, // ).Should(BeTrue()) - userData.Resources.Project.UpdatePrivateLinkID(output) + Expect(output.GoogleEndpoints[0].EndpointName).ShouldNot(BeEmpty()) + Expect(output.GoogleEndpoints[0].IPAddress).ShouldNot(BeEmpty()) + GinkgoWriter.Printf("RESULT-OUTPUT0000000000000000000000000: %v", output) + GinkgoWriter.Printf("RESULT-OUTPUT: %v", userData.Resources.Project.Spec.PrivateEndpoints) + userData.Resources.Project = userData.Resources.Project.UpdatePrivateLinkID(output) + GinkgoWriter.Printf("RESULT: %v", userData.Resources.Project.Spec.PrivateEndpoints) } }) From a591c18e86f0082ec9144f7017203f97d86af1cd Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Tue, 24 May 2022 13:21:49 +0300 Subject: [PATCH 04/11] add status --- test/e2e/actions/cloud/cloud.go | 1 + test/e2e/actions/cloud/gcp.go | 52 ++++++++++++++++++++++++++------- test/e2e/actions/steps.go | 2 +- test/e2e/api/gcp/gcp.go | 23 ++++++++++----- test/e2e/model/project.go | 4 ++- test/e2e/private_link_test.go | 35 +++++++--------------- 6 files changed, 71 insertions(+), 46 deletions(-) diff --git a/test/e2e/actions/cloud/cloud.go b/test/e2e/actions/cloud/cloud.go index 8e78496419..e14621d17a 100644 --- a/test/e2e/actions/cloud/cloud.go +++ b/test/e2e/actions/cloud/cloud.go @@ -89,6 +89,7 @@ func (peActions *PEActions) DeletePrivateEndpoint(name string) error { // privateID is different for different clouds: privateID for AWS or PEname for AZURE // AWS = PrivateID, AZURE = privateEndpoint Name +// GCP = prefix func (peActions *PEActions) IsStatusPrivateEndpointPending(privateID string) bool { return peActions.CloudActions.statusPrivateEndpointPending(peActions.PrivateEndpoint.Region, privateID) } diff --git a/test/e2e/actions/cloud/gcp.go b/test/e2e/actions/cloud/gcp.go index a4e4e9f6de..84105ac8ee 100644 --- a/test/e2e/actions/cloud/gcp.go +++ b/test/e2e/actions/cloud/gcp.go @@ -15,7 +15,7 @@ var ( googleProjectID = "atlasoperator" // Google Cloud Project ID googleVPC = "atlas-operator-test" // VPC Name googleSubnetName = "atlas-operator-subnet-leo" // Subnet Name - googleConnectPrefix = "leo-test" // Private Service Connect Endpoint Prefix + googleConnectPrefix = "ao" // Private Service Connect Endpoint Prefix ) func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { @@ -25,43 +25,73 @@ func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoi } var cResponse CloudResponse for i, target := range pe.ServiceAttachmentNames { - addressName := googleConnectPrefix + privatelinkName + "-ip-" + fmt.Sprint(i) - ruleName := googleConnectPrefix + privatelinkName + fmt.Sprint(i) + addressName := formAddressName(privatelinkName, i) + ruleName := formRuleName(privatelinkName, i) ip, err := session.AddIPAdress(pe.Region, addressName, googleSubnetName) if err != nil { return CloudResponse{}, err } + cResponse.GoogleEndpoints = append(cResponse.GoogleEndpoints, v1.GCPEndpoint{ - EndpointName: addressName, + EndpointName: ruleName, IPAddress: ip, }) cResponse.GoogleVPC = googleVPC cResponse.Region = pe.Region cResponse.Provider = pe.Provider + cResponse.GoogleProjectID = googleProjectID + session.AddForwardRule(pe.Region, ruleName, addressName, googleVPC, googleSubnetName, target) } return cResponse, nil } func (gcpAction *gcpAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) error { - fmt.Print("NOT IMPLEMENTED delete GCP LINK") session, err := gcp.SessionGCP(googleProjectID) if err != nil { return err } for i := range pe.Endpoints { - session.DeleteForwardRule(pe.Region, googleConnectPrefix+fmt.Sprint(i)) - session.DeleteIPAdress(pe.Region, googleConnectPrefix+fmt.Sprint(i)) + session.DeleteForwardRule(pe.Region, formRuleName(privatelinkName, i)) + session.DeleteIPAdress(pe.Region, formAddressName(privatelinkName, i)) } return nil } func (gcpAction *gcpAction) statusPrivateEndpointPending(region, privateID string) bool { - fmt.Print("NOT IMPLEMENTED delete GCP LINK") - return true + session, err := gcp.SessionGCP(googleProjectID) + if err != nil { + fmt.Print(err) + return false + } + ruleName := formRuleName(privateID, 1) + result, err := session.DescribePrivateLinkStatus(region, ruleName) + if err != nil { + fmt.Print(err) + return false + } + return (result == "PENDING") } func (gcpAction *gcpAction) statusPrivateEndpointAvailable(region, privateID string) bool { - fmt.Print("NOT IMPLEMENTED delete GCP LINK") - return true + session, err := gcp.SessionGCP(googleProjectID) + if err != nil { + fmt.Print(err) + return false + } + ruleName := formRuleName(privateID, 1) + result, err := session.DescribePrivateLinkStatus(region, ruleName) + if err != nil { + fmt.Print(err) + return false + } + return (result == "ACCEPTED") +} + +func formAddressName(name string, i int) string { + return fmt.Sprintf("%s%s-ip-%d", googleConnectPrefix, name, i) +} + +func formRuleName(name string, i int) string { + return fmt.Sprintf("%s%s-%d", googleConnectPrefix, name, i) } diff --git a/test/e2e/actions/steps.go b/test/e2e/actions/steps.go index 484b264ae4..53315bb152 100644 --- a/test/e2e/actions/steps.go +++ b/test/e2e/actions/steps.go @@ -64,7 +64,7 @@ func WaitCluster(input model.UserInputs, generation string) { } func WaitProject(data *model.TestDataProvider, generation string) { - EventuallyWithOffset(1, kube.GetReadyProjectStatus(data), "5m", "10s").Should(Equal("True"), "Kubernetes resource: Project status `Ready` should be 'True'") + EventuallyWithOffset(1, kube.GetReadyProjectStatus(data), "10m", "10s").Should(Equal("True"), "Kubernetes resource: Project status `Ready` should be 'True'") ExpectWithOffset(1, kubecli.GetGeneration(data.Resources.Namespace, data.Resources.GetAtlasProjectFullKubeName())).Should(Equal(generation), "Kubernetes resource: Generation should be upgraded") atlasProject, err := kube.GetProjectResource(data) Expect(err).ShouldNot(HaveOccurred()) diff --git a/test/e2e/api/gcp/gcp.go b/test/e2e/api/gcp/gcp.go index 138ab67316..694771e73b 100644 --- a/test/e2e/api/gcp/gcp.go +++ b/test/e2e/api/gcp/gcp.go @@ -58,14 +58,6 @@ func (s *sessionGCP) GetIP(region, addressName string, try, interval int) (strin return "", fmt.Errorf("timeout computeService.Addresses.Get") } -func (s *sessionGCP) DescribeIPStatus(region, addressName string) (string, error) { - resp, err := s.computeService.Addresses.Get(s.gProjectID, region, addressName).Context(context.Background()).Do() - if err != nil { - return "", fmt.Errorf("computeService.Addresses.Get: %v", err) - } - return resp.Status, nil -} - func (s *sessionGCP) DeleteIPAdress(region, addressName string) error { _, err := s.computeService.Addresses.Delete(s.gProjectID, region, addressName).Context(context.Background()).Do() if err != nil { @@ -120,6 +112,21 @@ func (s *sessionGCP) DeleteForwardRule(region, ruleName string) error { return nil } +// Possible values: +// "ACCEPTED" - The connection has been accepted by the producer. +// "CLOSED" - The connection has been closed by the producer and will +// not serve traffic going forward. +// "PENDING" - The connection is pending acceptance by the producer. +// "REJECTED" - The connection has been rejected by the producer. +// "STATUS_UNSPECIFIED" +func (s *sessionGCP) DescribePrivateLinkStatus(region, ruleName string) (string, error) { + resp, err := s.computeService.ForwardingRules.Get(s.gProjectID, region, ruleName).Context(context.Background()).Do() + if err != nil { + return "", fmt.Errorf("computeService.Addresses.Get: %v", err) + } + return resp.PscConnectionStatus, nil +} + func (s *sessionGCP) formNetworkURL(network string) string { return fmt.Sprintf("https://www.googleapis.com/compute/v1/projects/%s/global/networks/%s", s.gProjectID, network, diff --git a/test/e2e/model/project.go b/test/e2e/model/project.go index f5bdf1ad57..50412faf43 100644 --- a/test/e2e/model/project.go +++ b/test/e2e/model/project.go @@ -86,8 +86,10 @@ func (p *AProject) UpdatePrivateLinkID(test cloud.CloudResponse) *AProject { if (peItem.Provider == test.Provider) && (peItem.Region == test.Region) { p.Spec.PrivateEndpoints[i].ID = test.ID // in case AWS/Azure p.Spec.PrivateEndpoints[i].IP = test.IP // in case Azure + // in case of GCP + p.Spec.PrivateEndpoints[i].GCPProjectID = test.GoogleProjectID p.Spec.PrivateEndpoints[i].EndpointGroupName = test.GoogleVPC - p.Spec.PrivateEndpoints[i].Endpoints = test.GoogleEndpoints // in case GCP + p.Spec.PrivateEndpoints[i].Endpoints = test.GoogleEndpoints } } return p diff --git a/test/e2e/private_link_test.go b/test/e2e/private_link_test.go index 1690c57baa..7a42478cd1 100644 --- a/test/e2e/private_link_test.go +++ b/test/e2e/private_link_test.go @@ -13,7 +13,6 @@ import ( "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/deploy" kube "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/kube" - // "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/gcp" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils" kubecli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kubecli" @@ -67,19 +66,18 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { }) } - // By("Clean Cloud", func() { - // DeleteAllPrivateEndpoints(&data) - // }) - // By("Delete Resources, Project with PEService", func() { - // actions.DeleteUserResourcesProject(&data) - // }) + By("Clean Cloud", func() { + DeleteAllPrivateEndpoints(&data) + }) + By("Delete Resources, Project with PEService", func() { + actions.DeleteUserResourcesProject(&data) + }) }) DescribeTable("Namespaced operators working only with its own namespace with different configuration", func(test model.TestDataProvider, pe []privateEndpoint) { data = test privateFlow(&data, pe) - }, // Entry("Test[privatelink-aws-1]: User has project which was updated with AWS PrivateEndpoint", Label("privatelink-aws-1"), // model.NewTestDataProvider( @@ -237,21 +235,9 @@ func privateFlow(userData *model.TestDataProvider, requstedPE []privateEndpoint) for _, peitem := range project.Status.PrivateEndpoints { cloudTest, err := cloud.CreatePEActions(peitem) Expect(err).ShouldNot(HaveOccurred()) - // privateLinkID, ip, err := cloudTest.CreatePrivateEndpoint(peitem.ID) output, err := cloudTest.CreatePrivateEndpoint(peitem.ID) Expect(err).ShouldNot(HaveOccurred()) - // // Expect(privateLinkID).ShouldNot(BeEmpty()) - // Eventually( - // func() bool { - // return cloudTest.IsStatusPrivateEndpointPending(privateLinkID) - // }, - // ).Should(BeTrue()) - Expect(output.GoogleEndpoints[0].EndpointName).ShouldNot(BeEmpty()) - Expect(output.GoogleEndpoints[0].IPAddress).ShouldNot(BeEmpty()) - GinkgoWriter.Printf("RESULT-OUTPUT0000000000000000000000000: %v", output) - GinkgoWriter.Printf("RESULT-OUTPUT: %v", userData.Resources.Project.Spec.PrivateEndpoints) userData.Resources.Project = userData.Resources.Project.UpdatePrivateLinkID(output) - GinkgoWriter.Printf("RESULT: %v", userData.Resources.Project.Spec.PrivateEndpoints) } }) @@ -261,7 +247,7 @@ func privateFlow(userData *model.TestDataProvider, requstedPE []privateEndpoint) }) By("Check statuses", func() { - Eventually(kube.GetProjectPEndpointStatus(userData)).Should(Equal("True"), "Condition status 'PrivateEndpointServiceReady' is not'True'") + Eventually(kube.GetProjectPEndpointStatus(userData)).Should(Equal("True"), "Condition status 'PrivateEndpointReady' is not'True'") Eventually(kube.GetReadyProjectStatus(userData)).Should(Equal("True"), "Condition status 'Ready' is not 'True'") project, err := kube.GetProjectResource(userData) @@ -269,11 +255,10 @@ func privateFlow(userData *model.TestDataProvider, requstedPE []privateEndpoint) for _, peitem := range project.Status.PrivateEndpoints { cloudTest, err := cloud.CreatePEActions(peitem) Expect(err).ShouldNot(HaveOccurred()) - privateEndpointID := userData.Resources.Project.GetPrivateIDByProviderRegion(peitem.Provider, peitem.Region) - Expect(privateEndpointID).ShouldNot(BeEmpty()) + Expect(peitem.ID).ShouldNot(BeEmpty()) Eventually( func() bool { - return cloudTest.IsStatusPrivateEndpointAvailable(privateEndpointID) + return cloudTest.IsStatusPrivateEndpointAvailable(peitem.ID) }, ).Should(BeTrue()) } @@ -288,7 +273,7 @@ func DeleteAllPrivateEndpoints(data *model.TestDataProvider) { for _, peitem := range project.Status.PrivateEndpoints { cloudTest, err := cloud.CreatePEActions(peitem) if err == nil { - privateEndpointID := data.Resources.Project.GetPrivateIDByProviderRegion(peitem.Provider, peitem.Region) + privateEndpointID := peitem.ID if privateEndpointID != "" { err = cloudTest.DeletePrivateEndpoint(privateEndpointID) if err != nil { From 4bff59a8662e345829da4a343fd8082026e54c51 Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Tue, 24 May 2022 19:24:58 +0300 Subject: [PATCH 05/11] deletion --- test/e2e/actions/cloud/gcp.go | 3 ++- test/e2e/api/gcp/gcp.go | 30 ++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/test/e2e/actions/cloud/gcp.go b/test/e2e/actions/cloud/gcp.go index 84105ac8ee..66354ecac3 100644 --- a/test/e2e/actions/cloud/gcp.go +++ b/test/e2e/actions/cloud/gcp.go @@ -2,6 +2,7 @@ package cloud import ( "fmt" + "time" v1 "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" @@ -52,7 +53,7 @@ func (gcpAction *gcpAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoi return err } for i := range pe.Endpoints { - session.DeleteForwardRule(pe.Region, formRuleName(privatelinkName, i)) + session.DeleteForwardRule(pe.Region, formRuleName(privatelinkName, i), 10, 20*time.Second) session.DeleteIPAdress(pe.Region, formAddressName(privatelinkName, i)) } return nil diff --git a/test/e2e/api/gcp/gcp.go b/test/e2e/api/gcp/gcp.go index 694771e73b..0e4256c17b 100644 --- a/test/e2e/api/gcp/gcp.go +++ b/test/e2e/api/gcp/gcp.go @@ -104,11 +104,37 @@ func (s *sessionGCP) AddForwardRule(region, ruleName, addressName, network, subn return nil } -func (s *sessionGCP) DeleteForwardRule(region, ruleName string) error { +func (s *sessionGCP) DeleteForwardRule(region, ruleName string, try int, interval time.Duration) error { _, err := s.computeService.ForwardingRules.Delete(s.gProjectID, region, ruleName).Do() if err != nil { - return fmt.Errorf("computeService.ForwardingRules.Insert: %v", err) + return fmt.Errorf("computeService.ForwardingRules.Delete: %v", err) + } + + contain := func(list []*compute.ForwardingRule, name string) bool { + for _, item := range list { + if item.Name == name { + return true + } + } + return false + } + + deleted := false + for i := 0; i < try; i++ { + r, err := s.computeService.ForwardingRules.List(s.gProjectID, region).Do() + if err != nil { + return fmt.Errorf("computeService.ForwardingRule.List: %v", err) + } + if !contain(r.Items, ruleName) { + deleted = true + break + } + time.Sleep(interval) + } + if !deleted { + return fmt.Errorf("computeService.ForwardingRules.Delete. Could not delete forward rule after %d retries", try) } + return nil } From a170ccd60d187c9ae5834c88a51a99751b3a27a6 Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Wed, 25 May 2022 17:09:12 +0300 Subject: [PATCH 06/11] update auth --- test/e2e/actions/steps.go | 2 +- test/e2e/api/gcp/gcp.go | 3 +- test/e2e/config/config.go | 3 + test/e2e/e2e_suite_test.go | 9 ++ test/e2e/private_link_test.go | 204 +++++++++++++++++----------------- 5 files changed, 116 insertions(+), 105 deletions(-) diff --git a/test/e2e/actions/steps.go b/test/e2e/actions/steps.go index 53315bb152..4e6de8a582 100644 --- a/test/e2e/actions/steps.go +++ b/test/e2e/actions/steps.go @@ -64,7 +64,7 @@ func WaitCluster(input model.UserInputs, generation string) { } func WaitProject(data *model.TestDataProvider, generation string) { - EventuallyWithOffset(1, kube.GetReadyProjectStatus(data), "10m", "10s").Should(Equal("True"), "Kubernetes resource: Project status `Ready` should be 'True'") + EventuallyWithOffset(1, kube.GetReadyProjectStatus(data), "15m", "10s").Should(Equal("True"), "Kubernetes resource: Project status `Ready` should be 'True'") ExpectWithOffset(1, kubecli.GetGeneration(data.Resources.Namespace, data.Resources.GetAtlasProjectFullKubeName())).Should(Equal(generation), "Kubernetes resource: Generation should be upgraded") atlasProject, err := kube.GetProjectResource(data) Expect(err).ShouldNot(HaveOccurred()) diff --git a/test/e2e/api/gcp/gcp.go b/test/e2e/api/gcp/gcp.go index 0e4256c17b..8f26b50c77 100644 --- a/test/e2e/api/gcp/gcp.go +++ b/test/e2e/api/gcp/gcp.go @@ -7,7 +7,6 @@ import ( "google.golang.org/api/compute/v1" "google.golang.org/api/googleapi" - "google.golang.org/api/option" ) type sessionGCP struct { @@ -16,7 +15,7 @@ type sessionGCP struct { } func SessionGCP(gProjectID string) (sessionGCP, error) { - computeService, err := compute.NewService(context.Background(), option.WithCredentialsFile("my-atlasoperator-ba1b0d70afc5.json")) // TODO + computeService, err := compute.NewService(context.Background()) if err != nil { return sessionGCP{}, fmt.Errorf("compute.NewClient: %v", err) } diff --git a/test/e2e/config/config.go b/test/e2e/config/config.go index eebcb43289..eaa6a6f80e 100644 --- a/test/e2e/config/config.go +++ b/test/e2e/config/config.go @@ -29,4 +29,7 @@ const ( // AWS Tags for test TagName = "atlas-operator-test" TagBusy = "busy" + + // GCP + FileNameSAGCP = "gcp_service_account.json" ) diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index 1c2e4576ac..ba7cee1e57 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -9,6 +9,8 @@ import ( . "github.com/onsi/gomega" mongocli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/mongocli" + "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/config" + "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils" ) const ( @@ -60,3 +62,10 @@ func checkUpAzureEnviroment() { Expect(os.Getenv("AZURE_CLIENT_SECRET")).ShouldNot(BeEmpty(), "Please, setup AZURE_CLIENT_SECRET environment variable for test with Azure") Expect(os.Getenv("AZURE_SUBSCRIPTION_ID")).ShouldNot(BeEmpty(), "Please, setup AZURE_SUBSCRIPTION_ID environment variable for test with Azure") } + +func checkNSetUpGCPEnviroment() { + Expect(os.Getenv("GCP_SA_CRED")).ShouldNot(BeEmpty(), "Please, setup GCP_SA_CRED environment variable for test with GCP (req. Service Account)") + Expect(utils.SaveToFile(config.FileNameSAGCP, []byte(os.Getenv("GCP_SA_CRED")))).ShouldNot(HaveOccurred()) + Expect(os.Setenv("GOOGLE_APPLICATION_CREDENTIALS", config.FileNameSAGCP)).ShouldNot(HaveOccurred()) + Expect(os.Getenv("GOOGLE_APPLICATION_CREDENTIALS")).ShouldNot(BeEmpty(), "Please, setup GOOGLE_APPLICATION_CREDENTIALS environment variable for test with GCP") +} diff --git a/test/e2e/private_link_test.go b/test/e2e/private_link_test.go index 7a42478cd1..c8419d65dd 100644 --- a/test/e2e/private_link_test.go +++ b/test/e2e/private_link_test.go @@ -35,11 +35,12 @@ type privateEndpoint struct { var _ = Describe("UserLogin", Label("privatelink"), func() { var data model.TestDataProvider - + _ = BeforeEach(func() { Eventually(kubecli.GetVersionOutput()).Should(Say(K8sVersion)) - // checkUpAWSEnviroment() - // checkUpAzureEnviroment() + checkUpAWSEnviroment() + checkUpAzureEnviroment() + checkNSetUpGCPEnviroment() }) _ = AfterEach(func() { @@ -64,7 +65,6 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { data.Resources.Namespace, ) }) - } By("Clean Cloud", func() { DeleteAllPrivateEndpoints(&data) @@ -79,104 +79,104 @@ var _ = Describe("UserLogin", Label("privatelink"), func() { data = test privateFlow(&data, pe) }, - // Entry("Test[privatelink-aws-1]: User has project which was updated with AWS PrivateEndpoint", Label("privatelink-aws-1"), - // model.NewTestDataProvider( - // "privatelink-aws-1", - // model.AProject{}, - // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), - // []string{"data/atlascluster_backup.yaml"}, - // []string{}, - // []model.DBUser{ - // *model.NewDBUser("user1"). - // WithSecretRef("dbuser-secret-u1"). - // AddBuildInAdminRole(), - // }, - // 40000, - // []func(*model.TestDataProvider){}, - // ), - // []privateEndpoint{ - // { - // provider: "AWS", - // region: "eu-west-2", - // }, - // }, - // ), - // Entry("Test[privatelink-azure-1]: User has project which was updated with Azure PrivateEndpoint", Label("privatelink-azure-1"), - // model.NewTestDataProvider( - // "privatelink-azure-1", - // model.AProject{}, - // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), - // []string{"data/atlascluster_backup.yaml"}, - // []string{}, - // []model.DBUser{ - // *model.NewDBUser("user1"). - // WithSecretRef("dbuser-secret-u1"). - // AddBuildInAdminRole(), - // }, - // 40000, - // []func(*model.TestDataProvider){}, - // ), - // []privateEndpoint{{ - // provider: "AZURE", - // region: "northeurope", - // }}, - // ), - // Entry("Test[privatelink-aws-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-2"), - // model.NewTestDataProvider( - // "privatelink-aws-2", - // model.AProject{}, - // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), - // []string{"data/atlascluster_backup.yaml"}, - // []string{}, - // []model.DBUser{ - // *model.NewDBUser("user1"). - // WithSecretRef("dbuser-secret-u1"). - // AddBuildInAdminRole(), - // }, - // 40000, - // []func(*model.TestDataProvider){}, - // ), - // []privateEndpoint{ - // { - // provider: "AWS", - // region: "eu-west-2", - // }, - // { - // provider: "AWS", - // region: "us-east-1", - // }, - // }, - // ), - // Entry("Test[privatelink-aws-azure-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-azure-2"), - // model.NewTestDataProvider( - // "privatelink-aws-azure", - // model.AProject{}, - // model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), - // []string{"data/atlascluster_backup.yaml"}, - // []string{}, - // []model.DBUser{ - // *model.NewDBUser("user1"). - // WithSecretRef("dbuser-secret-u1"). - // AddBuildInAdminRole(), - // }, - // 40000, - // []func(*model.TestDataProvider){}, - // ), - // []privateEndpoint{ - // { - // provider: "AWS", - // region: "eu-west-2", - // }, - // { - // provider: "AWS", - // region: "us-east-1", - // }, - // { - // provider: "AZURE", - // region: "northeurope", - // }, - // }, - // ), + Entry("Test[privatelink-aws-1]: User has project which was updated with AWS PrivateEndpoint", Label("privatelink-aws-1"), + model.NewTestDataProvider( + "privatelink-aws-1", + model.AProject{}, + model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + []string{"data/atlascluster_backup.yaml"}, + []string{}, + []model.DBUser{ + *model.NewDBUser("user1"). + WithSecretRef("dbuser-secret-u1"). + AddBuildInAdminRole(), + }, + 40000, + []func(*model.TestDataProvider){}, + ), + []privateEndpoint{ + { + provider: "AWS", + region: "eu-west-2", + }, + }, + ), + Entry("Test[privatelink-azure-1]: User has project which was updated with Azure PrivateEndpoint", Label("privatelink-azure-1"), + model.NewTestDataProvider( + "privatelink-azure-1", + model.AProject{}, + model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + []string{"data/atlascluster_backup.yaml"}, + []string{}, + []model.DBUser{ + *model.NewDBUser("user1"). + WithSecretRef("dbuser-secret-u1"). + AddBuildInAdminRole(), + }, + 40000, + []func(*model.TestDataProvider){}, + ), + []privateEndpoint{{ + provider: "AZURE", + region: "northeurope", + }}, + ), + Entry("Test[privatelink-aws-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-2"), + model.NewTestDataProvider( + "privatelink-aws-2", + model.AProject{}, + model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + []string{"data/atlascluster_backup.yaml"}, + []string{}, + []model.DBUser{ + *model.NewDBUser("user1"). + WithSecretRef("dbuser-secret-u1"). + AddBuildInAdminRole(), + }, + 40000, + []func(*model.TestDataProvider){}, + ), + []privateEndpoint{ + { + provider: "AWS", + region: "eu-west-2", + }, + { + provider: "AWS", + region: "us-east-1", + }, + }, + ), + Entry("Test[privatelink-aws-azure-2]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-aws-azure-2"), + model.NewTestDataProvider( + "privatelink-aws-azure", + model.AProject{}, + model.NewEmptyAtlasKeyType().UseDefaulFullAccess(), + []string{"data/atlascluster_backup.yaml"}, + []string{}, + []model.DBUser{ + *model.NewDBUser("user1"). + WithSecretRef("dbuser-secret-u1"). + AddBuildInAdminRole(), + }, + 40000, + []func(*model.TestDataProvider){}, + ), + []privateEndpoint{ + { + provider: "AWS", + region: "eu-west-2", + }, + { + provider: "AWS", + region: "us-east-1", + }, + { + provider: "AZURE", + region: "northeurope", + }, + }, + ), Entry("Test[privatelink-gpc-1]: User has project which was updated with 2 AWS PrivateEndpoint", Label("privatelink-gpc-1"), model.NewTestDataProvider( "privatelink-gpc-1", From 5890a58a94b7dcee2ddcd1bb31d2baa0769076ef Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Wed, 25 May 2022 17:53:07 +0300 Subject: [PATCH 07/11] restore --- .../atlas.mongodb.com_atlasclusters.yaml | 860 ------------------ ...tlas-kubernetes.clusterserviceversion.yaml | 311 +------ .../atlas.mongodb.com_atlasprojects.yaml | 8 - config/manager/kustomization.yaml | 4 +- ...tlas-kubernetes.clusterserviceversion.yaml | 69 +- deploy/all-in-one.yaml | 2 +- deploy/clusterwide/clusterwide-config.yaml | 2 +- .../crds/atlas.mongodb.com_atlasclusters.yaml | 858 ----------------- deploy/namespaced/namespaced-config.yaml | 2 +- 9 files changed, 72 insertions(+), 2044 deletions(-) delete mode 100644 bundle/manifests/atlas.mongodb.com_atlasclusters.yaml delete mode 100644 deploy/crds/atlas.mongodb.com_atlasclusters.yaml diff --git a/bundle/manifests/atlas.mongodb.com_atlasclusters.yaml b/bundle/manifests/atlas.mongodb.com_atlasclusters.yaml deleted file mode 100644 index e4e85f1cba..0000000000 --- a/bundle/manifests/atlas.mongodb.com_atlasclusters.yaml +++ /dev/null @@ -1,860 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.4.1 - creationTimestamp: null - labels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: mongodb-atlas-kubernetes-operator - app.kubernetes.io/name: mongodb-atlas-kubernetes-operator - name: atlasclusters.atlas.mongodb.com -spec: - group: atlas.mongodb.com - names: - kind: AtlasCluster - listKind: AtlasClusterList - plural: atlasclusters - singular: atlascluster - scope: Namespaced - versions: - - name: v1 - schema: - openAPIV3Schema: - description: AtlasCluster is the Schema for the atlasclusters API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: AtlasClusterSpec defines the desired state of AtlasCluster - properties: - advancedClusterSpec: - description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ - properties: - backupEnabled: - type: boolean - biConnector: - description: BiConnectorSpec specifies BI Connector for Atlas - configuration on this cluster - properties: - enabled: - description: Flag that indicates whether or not BI Connector - for Atlas is enabled on the cluster. - type: boolean - readPreference: - description: Source from which the BI Connector for Atlas - reads data. Each BI Connector for Atlas read preference - contains a distinct combination of readPreference and readPreferenceTags - options. - type: string - type: object - clusterType: - type: string - connectionStrings: - description: ConnectionStrings configuration for applications - use to connect to this cluster. - properties: - awsPrivateLink: - additionalProperties: - type: string - type: object - awsPrivateLinkSrv: - additionalProperties: - type: string - type: object - private: - type: string - privateEndpoint: - items: - description: PrivateEndpointSpec connection strings. Each - object describes the connection strings you can use to - connect to this cluster through a private endpoint. Atlas - returns this parameter only if you deployed a private - endpoint to all regions to which you deployed this cluster's - nodes. - properties: - connectionString: - type: string - endpoints: - items: - description: EndpointSpec through which you connect - to Atlas. - properties: - endpointId: - type: string - providerName: - type: string - region: - type: string - type: object - type: array - srvConnectionString: - type: string - type: - type: string - type: object - type: array - privateSrv: - type: string - standard: - type: string - standardSrv: - type: string - type: object - createDate: - type: string - diskSizeGB: - type: integer - encryptionAtRestProvider: - type: string - groupId: - type: string - id: - type: string - labels: - items: - description: LabelSpec contains key-value pairs that tag and - categorize the Cluster/DBUser - properties: - key: - maxLength: 255 - type: string - value: - type: string - required: - - key - - value - type: object - type: array - mongoDBMajorVersion: - type: string - mongoDBVersion: - type: string - name: - type: string - paused: - type: boolean - pitEnabled: - type: boolean - replicationSpecs: - items: - properties: - id: - type: string - numShards: - type: integer - regionConfigs: - items: - properties: - analyticsSpecs: - properties: - diskIOPS: - format: int64 - type: integer - ebsVolumeType: - type: string - instanceSize: - type: string - nodeCount: - type: integer - type: object - autoScaling: - description: AutoScalingSpec configures your cluster - to automatically scale its storage - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot - mode for Performance Advisor is enabled. The - default is false. - type: boolean - compute: - description: Collection of settings that configure - how a cluster might scale its cluster tier and - whether the cluster can scale down. - properties: - enabled: - description: Flag that indicates whether cluster - tier auto-scaling is enabled. The default - is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which - your cluster can automatically scale (such - as M40). Atlas requires this parameter if - "autoScaling.compute.enabled" : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which - your cluster can automatically scale (such - as M10). Atlas requires this parameter if - "autoScaling.compute.scaleDownEnabled" : - true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether - the cluster tier may scale down. Atlas requires - this parameter if "autoScaling.compute.enabled" - : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk - auto-scaling is enabled. The default is true. - type: boolean - type: object - backingProviderName: - type: string - electableSpecs: - properties: - diskIOPS: - format: int64 - type: integer - ebsVolumeType: - type: string - instanceSize: - type: string - nodeCount: - type: integer - type: object - priority: - type: integer - providerName: - type: string - readOnlySpecs: - properties: - diskIOPS: - format: int64 - type: integer - ebsVolumeType: - type: string - instanceSize: - type: string - nodeCount: - type: integer - type: object - regionName: - type: string - type: object - type: array - zoneName: - type: string - type: object - type: array - rootCertType: - type: string - stateName: - type: string - versionReleaseSystem: - type: string - type: object - backupRef: - description: Backup schedule for the AtlasCluster - properties: - name: - description: Name is the name of the Kubernetes Resource - type: string - namespace: - description: Namespace is the namespace of the Kubernetes Resource - type: string - required: - - name - type: object - clusterSpec: - description: Configuration for the advanced cluster API - properties: - autoScaling: - description: Collection of settings that configures auto-scaling - information for the cluster. If you specify the autoScaling - object, you must also specify the providerSettings.autoScaling - object. - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot mode for - Performance Advisor is enabled. The default is false. - type: boolean - compute: - description: Collection of settings that configure how a cluster - might scale its cluster tier and whether the cluster can - scale down. - properties: - enabled: - description: Flag that indicates whether cluster tier - auto-scaling is enabled. The default is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which your cluster - can automatically scale (such as M40). Atlas requires - this parameter if "autoScaling.compute.enabled" : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which your cluster - can automatically scale (such as M10). Atlas requires - this parameter if "autoScaling.compute.scaleDownEnabled" - : true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether the cluster - tier may scale down. Atlas requires this parameter if - "autoScaling.compute.enabled" : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk auto-scaling - is enabled. The default is true. - type: boolean - type: object - biConnector: - description: Configuration of BI Connector for Atlas on this cluster. - The MongoDB Connector for Business Intelligence for Atlas (BI - Connector) is only available for M10 and larger clusters. - properties: - enabled: - description: Flag that indicates whether or not BI Connector - for Atlas is enabled on the cluster. - type: boolean - readPreference: - description: Source from which the BI Connector for Atlas - reads data. Each BI Connector for Atlas read preference - contains a distinct combination of readPreference and readPreferenceTags - options. - type: string - type: object - clusterType: - description: Type of the cluster that you want to create. The - parameter is required if replicationSpecs are set or if Global - Clusters are deployed. - enum: - - REPLICASET - - SHARDED - - GEOSHARDED - type: string - diskSizeGB: - description: Capacity, in gigabytes, of the host's root volume. - Increase this number to add capacity, up to a maximum possible - value of 4096 (i.e., 4 TB). This value must be a positive integer. - The parameter is required if replicationSpecs are configured. - maximum: 4096 - minimum: 0 - type: integer - encryptionAtRestProvider: - description: Cloud service provider that offers Encryption at - Rest. - enum: - - AWS - - GCP - - AZURE - - NONE - type: string - labels: - description: Collection of key-value pairs that tag and categorize - the cluster. Each key and value has a maximum length of 255 - characters. - items: - description: LabelSpec contains key-value pairs that tag and - categorize the Cluster/DBUser - properties: - key: - maxLength: 255 - type: string - value: - type: string - required: - - key - - value - type: object - type: array - mongoDBMajorVersion: - description: Version of the cluster to deploy. - type: string - name: - description: Name of the cluster as it appears in Atlas. After - Atlas creates the cluster, you can't change its name. - type: string - numShards: - description: Positive integer that specifies the number of shards - to deploy for a sharded cluster. The parameter is required if - replicationSpecs are configured - maximum: 50 - minimum: 1 - type: integer - paused: - description: Flag that indicates whether the cluster should be - paused. - type: boolean - pitEnabled: - description: Flag that indicates the cluster uses continuous cloud - backups. - type: boolean - providerBackupEnabled: - description: Applicable only for M10+ clusters. Flag that indicates - if the cluster uses Cloud Backups for backups. - type: boolean - providerSettings: - description: Configuration for the provisioned hosts on which - MongoDB runs. The available options are specific to the cloud - service provider. - properties: - autoScaling: - description: Range of instance sizes to which your cluster - can scale. - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot mode - for Performance Advisor is enabled. The default is false. - type: boolean - compute: - description: Collection of settings that configure how - a cluster might scale its cluster tier and whether the - cluster can scale down. - properties: - enabled: - description: Flag that indicates whether cluster tier - auto-scaling is enabled. The default is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which your - cluster can automatically scale (such as M40). Atlas - requires this parameter if "autoScaling.compute.enabled" - : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which your - cluster can automatically scale (such as M10). Atlas - requires this parameter if "autoScaling.compute.scaleDownEnabled" - : true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether the cluster - tier may scale down. Atlas requires this parameter - if "autoScaling.compute.enabled" : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk auto-scaling - is enabled. The default is true. - type: boolean - type: object - backingProviderName: - description: 'Cloud service provider on which the host for - a multi-tenant cluster is provisioned. This setting only - works when "providerSetting.providerName" : "TENANT" and - "providerSetting.instanceSizeName" : M2 or M5.' - enum: - - AWS - - GCP - - AZURE - type: string - diskIOPS: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - format: int64 - type: integer - diskTypeName: - description: Type of disk if you selected Azure as your cloud - service provider. - type: string - encryptEBSVolume: - description: Flag that indicates whether the Amazon EBS encryption - feature encrypts the host's root volume for both data at - rest within the volume and for data moving between the volume - and the cluster. - type: boolean - instanceSizeName: - description: Atlas provides different cluster tiers, each - with a default storage capacity and RAM size. The cluster - you select is used for all the data-bearing hosts in your - cluster tier. - type: string - providerName: - description: Cloud service provider on which Atlas provisions - the hosts. - enum: - - AWS - - GCP - - AZURE - - TENANT - - SERVERLESS - type: string - regionName: - description: Physical location of your MongoDB cluster. The - region you choose can affect network latency for clients - accessing your databases. - type: string - volumeType: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - enum: - - STANDARD - - PROVISIONED - type: string - required: - - providerName - type: object - replicationSpecs: - description: Configuration for cluster regions. - items: - description: ReplicationSpec represents a configuration for - cluster regions - properties: - numShards: - description: Number of shards to deploy in each specified - zone. The default value is 1. - format: int64 - type: integer - regionsConfig: - additionalProperties: - description: RegionsConfig describes the region’s priority - in elections and the number and type of MongoDB nodes - Atlas deploys to the region. - properties: - analyticsNodes: - description: The number of analytics nodes for Atlas - to deploy to the region. Analytics nodes are useful - for handling analytic data such as reporting queries - from BI Connector for Atlas. Analytics nodes are - read-only, and can never become the primary. If - you do not specify this option, no analytics nodes - are deployed to the region. - format: int64 - type: integer - electableNodes: - description: Number of electable nodes for Atlas to - deploy to the region. Electable nodes can become - the primary and can facilitate local reads. - format: int64 - type: integer - priority: - description: Election priority of the region. For - regions with only replicationSpecs[n].regionsConfig..readOnlyNodes, - set this value to 0. - format: int64 - type: integer - readOnlyNodes: - description: Number of read-only nodes for Atlas to - deploy to the region. Read-only nodes can never - become the primary, but can facilitate local-reads. - format: int64 - type: integer - type: object - description: Configuration for a region. Each regionsConfig - object describes the region's priority in elections and - the number and type of MongoDB nodes that Atlas deploys - to the region. - type: object - zoneName: - description: Name for the zone in a Global Cluster. Don't - provide this value if clusterType is not GEOSHARDED. - type: string - type: object - type: array - required: - - name - - providerSettings - type: object - processArgs: - description: ProcessArgs allows to modify Advanced Configuration Options - properties: - defaultReadConcern: - type: string - defaultWriteConcern: - type: string - failIndexKeyTooLong: - type: boolean - javascriptEnabled: - type: boolean - minimumEnabledTlsProtocol: - type: string - noTableScan: - type: boolean - oplogSizeMB: - format: int64 - type: integer - sampleRefreshIntervalBIConnector: - format: int64 - type: integer - sampleSizeBIConnector: - format: int64 - type: integer - type: object - projectRef: - description: Project is a reference to AtlasProject resource the cluster - belongs to - properties: - name: - description: Name is the name of the Kubernetes Resource - type: string - namespace: - description: Namespace is the namespace of the Kubernetes Resource - type: string - required: - - name - type: object - serverlessSpec: - description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ - properties: - name: - description: Name of the cluster as it appears in Atlas. After - Atlas creates the cluster, you can't change its name. - type: string - providerSettings: - description: Configuration for the provisioned hosts on which - MongoDB runs. The available options are specific to the cloud - service provider. - properties: - autoScaling: - description: Range of instance sizes to which your cluster - can scale. - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot mode - for Performance Advisor is enabled. The default is false. - type: boolean - compute: - description: Collection of settings that configure how - a cluster might scale its cluster tier and whether the - cluster can scale down. - properties: - enabled: - description: Flag that indicates whether cluster tier - auto-scaling is enabled. The default is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which your - cluster can automatically scale (such as M40). Atlas - requires this parameter if "autoScaling.compute.enabled" - : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which your - cluster can automatically scale (such as M10). Atlas - requires this parameter if "autoScaling.compute.scaleDownEnabled" - : true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether the cluster - tier may scale down. Atlas requires this parameter - if "autoScaling.compute.enabled" : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk auto-scaling - is enabled. The default is true. - type: boolean - type: object - backingProviderName: - description: 'Cloud service provider on which the host for - a multi-tenant cluster is provisioned. This setting only - works when "providerSetting.providerName" : "TENANT" and - "providerSetting.instanceSizeName" : M2 or M5.' - enum: - - AWS - - GCP - - AZURE - type: string - diskIOPS: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - format: int64 - type: integer - diskTypeName: - description: Type of disk if you selected Azure as your cloud - service provider. - type: string - encryptEBSVolume: - description: Flag that indicates whether the Amazon EBS encryption - feature encrypts the host's root volume for both data at - rest within the volume and for data moving between the volume - and the cluster. - type: boolean - instanceSizeName: - description: Atlas provides different cluster tiers, each - with a default storage capacity and RAM size. The cluster - you select is used for all the data-bearing hosts in your - cluster tier. - type: string - providerName: - description: Cloud service provider on which Atlas provisions - the hosts. - enum: - - AWS - - GCP - - AZURE - - TENANT - - SERVERLESS - type: string - regionName: - description: Physical location of your MongoDB cluster. The - region you choose can affect network latency for clients - accessing your databases. - type: string - volumeType: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - enum: - - STANDARD - - PROVISIONED - type: string - required: - - providerName - type: object - required: - - name - - providerSettings - type: object - required: - - projectRef - type: object - status: - description: AtlasClusterStatus defines the observed state of AtlasCluster. - properties: - conditions: - description: Conditions is the list of statuses showing the current - state of the Atlas Custom Resource - items: - description: Condition describes the state of an Atlas Custom Resource - at a certain point. - properties: - lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - message: - description: A human readable message indicating details about - the transition. - type: string - reason: - description: The reason for the condition's last transition. - type: string - status: - description: Status of the condition, one of True, False, Unknown. - type: string - type: - description: Type of Atlas Custom Resource condition. - type: string - required: - - status - - type - type: object - type: array - connectionStrings: - description: ConnectionStrings is a set of connection strings that - your applications use to connect to this cluster. - properties: - private: - description: Network-peering-endpoint-aware mongodb:// connection - strings for each interface VPC endpoint you configured to connect - to this cluster. Atlas returns this parameter only if you created - a network peering connection to this cluster. - type: string - privateEndpoint: - description: Private endpoint connection strings. Each object - describes the connection strings you can use to connect to this - cluster through a private endpoint. Atlas returns this parameter - only if you deployed a private endpoint to all regions to which - you deployed this cluster's nodes. - items: - description: PrivateEndpoint connection strings. Each object - describes the connection strings you can use to connect to - this cluster through a private endpoint. Atlas returns this - parameter only if you deployed a private endpoint to all regions - to which you deployed this cluster's nodes. - properties: - connectionString: - description: Private-endpoint-aware mongodb:// connection - string for this private endpoint. - type: string - endpoints: - description: Private endpoint through which you connect - to Atlas when you use connectionStrings.privateEndpoint[n].connectionString - or connectionStrings.privateEndpoint[n].srvConnectionString. - items: - description: Endpoint through which you connect to Atlas - properties: - endpointId: - description: Unique identifier of the private endpoint. - type: string - ip: - description: Private IP address of the private endpoint - network interface you created in your Azure VNet. - type: string - providerName: - description: Cloud provider to which you deployed - the private endpoint. Atlas returns AWS or AZURE. - type: string - region: - description: Region to which you deployed the private - endpoint. - type: string - type: object - type: array - srvConnectionString: - description: Private-endpoint-aware mongodb+srv:// connection - string for this private endpoint. - type: string - type: - description: "Type of MongoDB process that you connect to - with the connection strings \n Atlas returns: \n • MONGOD - for replica sets, or \n • MONGOS for sharded clusters" - type: string - type: object - type: array - privateSrv: - description: Network-peering-endpoint-aware mongodb+srv:// connection - strings for each interface VPC endpoint you configured to connect - to this cluster. Atlas returns this parameter only if you created - a network peering connection to this cluster. Use this URI format - if your driver supports it. If it doesn't, use connectionStrings.private. - type: string - standard: - description: Public mongodb:// connection string for this cluster. - type: string - standardSrv: - description: Public mongodb+srv:// connection string for this - cluster. - type: string - type: object - mongoDBVersion: - description: MongoDBVersion is the version of MongoDB the cluster - runs, in . format. - type: string - mongoURIUpdated: - description: MongoURIUpdated is a timestamp in ISO 8601 date and time - format in UTC when the connection string was last updated. The connection - string changes if you update any of the other values. - type: string - observedGeneration: - description: ObservedGeneration indicates the generation of the resource - specification that the Atlas Operator is aware of. The Atlas Operator - updates this field to the 'metadata.generation' as soon as it starts - reconciliation of the resource. - format: int64 - type: integer - stateName: - description: 'StateName is the current state of the cluster. The possible - states are: IDLE, CREATING, UPDATING, DELETING, DELETED, REPAIRING' - type: string - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml b/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml index c65306b1d7..239c328754 100644 --- a/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml +++ b/bundle/manifests/mongodb-atlas-kubernetes.clusterserviceversion.yaml @@ -117,14 +117,9 @@ spec: apiservicedefinitions: {} customresourcedefinitions: owned: -<<<<<<< HEAD - description: AtlasBackupPolicy is the Schema for the atlasbackuppolicies API displayName: Atlas Backup Policy kind: AtlasBackupPolicy -======= -<<<<<<< Updated upstream - - kind: AtlasBackupPolicy ->>>>>>> 790f9ad (add gcp api) name: atlasbackuppolicies.atlas.mongodb.com version: v1 - description: AtlasBackupSchedule is the Schema for the atlasbackupschedules API @@ -147,34 +142,6 @@ spec: kind: AtlasProject name: atlasprojects.atlas.mongodb.com version: v1 -======= - - description: AtlasBackupPolicy is the Schema for the atlasbackuppolicies API - displayName: Atlas Backup Policy - kind: AtlasBackupPolicy - name: atlasbackuppolicies.atlas.mongodb.com - version: v1 - - description: AtlasBackupSchedule is the Schema for the atlasbackupschedules - API - displayName: Atlas Backup Schedule - kind: AtlasBackupSchedule - name: atlasbackupschedules.atlas.mongodb.com - version: v1 - - description: AtlasCluster is the Schema for the atlasclusters API - displayName: Atlas Cluster - kind: AtlasCluster - name: atlasclusters.atlas.mongodb.com - version: v1 - - description: AtlasDatabaseUser is the Schema for the Atlas Database User API - displayName: Atlas Database User - kind: AtlasDatabaseUser - name: atlasdatabaseusers.atlas.mongodb.com - version: v1 - - description: AtlasProject is the Schema for the atlasprojects API - displayName: Atlas Project - kind: AtlasProject - name: atlasprojects.atlas.mongodb.com - version: v1 ->>>>>>> Stashed changes description: | The MongoDB Atlas Operator provides a native integration between the Kubernetes orchestration platform and MongoDB Atlas — the only multi-cloud document database service that gives you the versatility you need to build sophisticated and resilient applications that can adapt to changing customer demands and market trends. @@ -286,12 +253,11 @@ spec: ``` displayName: MongoDB Atlas Operator icon: - - base64data: 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mrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== - mediatype: image/png + - base64data: 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mrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== + mediatype: image/png install: spec: clusterPermissions: -<<<<<<< HEAD - rules: - apiGroups: - "" @@ -413,146 +379,15 @@ spec: - patch - update serviceAccountName: mongodb-atlas-operator -======= - - rules: - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - - apiGroups: - - "" - resources: - - secrets - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - atlas.mongodb.com - resources: - - atlasbackuppolicies - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - atlas.mongodb.com - resources: - - atlasbackuppolicies/status - verbs: - - get - - patch - - update - - apiGroups: - - atlas.mongodb.com - resources: - - atlasbackupschedules - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - atlas.mongodb.com - resources: - - atlasbackupschedules/status - verbs: - - get - - patch - - update - - apiGroups: - - atlas.mongodb.com - resources: - - atlasclusters - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - atlas.mongodb.com - resources: - - atlasclusters/status - verbs: - - get - - patch - - update - - apiGroups: - - atlas.mongodb.com - resources: - - atlasdatabaseusers - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - atlas.mongodb.com - resources: - - atlasdatabaseusers/status - verbs: - - get - - patch - - update - - apiGroups: - - atlas.mongodb.com - resources: - - atlasprojects - verbs: - - create - - delete - - get - - list - - patch - - update - - watch - - apiGroups: - - atlas.mongodb.com - resources: - - atlasprojects/status - verbs: - - get - - patch - - update - serviceAccountName: mongodb-atlas-operator ->>>>>>> 790f9ad (add gcp api) deployments: - - name: mongodb-atlas-operator - spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/component: controller - app.kubernetes.io/instance: mongodb-atlas-kubernetes-operator - app.kubernetes.io/name: mongodb-atlas-kubernetes-operator - strategy: {} - template: - metadata: - labels: + - name: mongodb-atlas-operator + spec: + replicas: 1 + selector: + matchLabels: app.kubernetes.io/component: controller app.kubernetes.io/instance: mongodb-atlas-kubernetes-operator app.kubernetes.io/name: mongodb-atlas-kubernetes-operator -<<<<<<< HEAD strategy: {} template: metadata: @@ -610,106 +445,54 @@ spec: allowPrivilegeEscalation: false serviceAccountName: mongodb-atlas-operator terminationGracePeriodSeconds: 10 -======= - spec: - containers: - - args: - - --atlas-domain=https://cloud-qa.mongodb.com/ - - --leader-elect - - --health-probe-bind-address=:8081 - - --metrics-bind-address=127.0.0.1:8080 - - --log-level=info - - --log-encoder=json - command: - - /manager - env: - - name: OPERATOR_POD_NAME - valueFrom: - fieldRef: - fieldPath: metadata.name - - name: OPERATOR_NAMESPACE - valueFrom: - fieldRef: - fieldPath: metadata.namespace - image: docker.io/leori/test:CLOUDP-120220-gcp-test-2e14a88 - imagePullPolicy: Always - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 256Mi - requests: - cpu: 100m - memory: 50Mi - securityContext: - allowPrivilegeEscalation: false - serviceAccountName: mongodb-atlas-operator - terminationGracePeriodSeconds: 10 ->>>>>>> 790f9ad (add gcp api) permissions: - - rules: - - apiGroups: - - "" - - coordination.k8s.io - resources: - - configmaps - - leases - verbs: - - get - - list - - watch - - create - - update - - patch - - delete - - apiGroups: - - "" - resources: - - events - verbs: - - create - - patch - serviceAccountName: mongodb-atlas-operator + - rules: + - apiGroups: + - "" + - coordination.k8s.io + resources: + - configmaps + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete + - apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + serviceAccountName: mongodb-atlas-operator strategy: deployment installModes: - - supported: true - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces keywords: - - MongoDB - - Atlas - - Database - - Replica Set - - Cluster + - MongoDB + - Atlas + - Database + - Replica Set + - Cluster links: - - name: MongoDB Atlas Kubernetes - url: https://github.com/mongodb/mongodb-atlas-kubernetes + - name: MongoDB Atlas Kubernetes + url: https://github.com/mongodb/mongodb-atlas-kubernetes maintainers: - - email: support@mongodb.com - name: MongoDB, Inc + - email: support@mongodb.com + name: MongoDB, Inc maturity: beta provider: name: MongoDB, Inc -<<<<<<< HEAD version: 1.0.0 replaces: mongodb-atlas-kubernetes.v0.5.0 -======= - version: 0.0.0 ->>>>>>> 790f9ad (add gcp api) diff --git a/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml b/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml index ea2c1e1b3c..ce8d4c8553 100644 --- a/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml +++ b/config/crd/bases/atlas.mongodb.com_atlasprojects.yaml @@ -158,17 +158,9 @@ spec: required: - name type: object -<<<<<<< HEAD scheme: type: string secretRef: -======= -<<<<<<< Updated upstream - secret: -======= - secretRef: ->>>>>>> Stashed changes ->>>>>>> 790f9ad (add gcp api) description: ResourceRefNamespaced is a reference to a Kubernetes Resource that allows to configure the namespace properties: diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index c64e05659e..54ca60636c 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -7,5 +7,5 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization images: - name: controller - newName: docker.io/leori/test - newTag: CLOUDP-120220-gcp-test-2e14a88 + newName: mongodb-atlas-controller + newTag: latest diff --git a/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml b/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml index 9b2ffa8140..7e05a93d5b 100644 --- a/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml +++ b/config/manifests/bases/mongodb-atlas-kubernetes.clusterserviceversion.yaml @@ -10,10 +10,9 @@ metadata: name: mongodb-atlas-kubernetes.v0.0.0 namespace: placeholder spec: - apiservicedefinitions: {} + apiservicedefinitions: { } customresourcedefinitions: owned: -<<<<<<< Updated upstream - description: AtlasDeployment is the Schema for the atlasclusters API displayName: Atlas Deployment kind: AtlasDeployment @@ -39,34 +38,6 @@ spec: kind: AtlasBackupPolicy name: atlasbackuppolicies.atlas.mongodb.com version: v1 -======= - - description: AtlasBackupPolicy is the Schema for the atlasbackuppolicies API - displayName: Atlas Backup Policy - kind: AtlasBackupPolicy - name: atlasbackuppolicies.atlas.mongodb.com - version: v1 - - description: AtlasBackupSchedule is the Schema for the atlasbackupschedules - API - displayName: Atlas Backup Schedule - kind: AtlasBackupSchedule - name: atlasbackupschedules.atlas.mongodb.com - version: v1 - - description: AtlasCluster is the Schema for the atlasclusters API - displayName: Atlas Cluster - kind: AtlasCluster - name: atlasclusters.atlas.mongodb.com - version: v1 - - description: AtlasDatabaseUser is the Schema for the Atlas Database User API - displayName: Atlas Database User - kind: AtlasDatabaseUser - name: atlasdatabaseusers.atlas.mongodb.com - version: v1 - - description: AtlasProject is the Schema for the atlasprojects API - displayName: Atlas Project - kind: AtlasProject - name: atlasprojects.atlas.mongodb.com - version: v1 ->>>>>>> Stashed changes description: | The MongoDB Atlas Operator provides a native integration between the Kubernetes orchestration platform and MongoDB Atlas — the only multi-cloud document database service that gives you the versatility you need to build sophisticated and resilient applications that can adapt to changing customer demands and market trends. @@ -178,33 +149,33 @@ spec: ``` displayName: MongoDB Atlas Operator icon: - - base64data: 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mrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== - mediatype: image/png + - base64data: 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mrIHXO4A/U+GbMqu5Kcp5HLA+xl9UwbovQWCq/XeGvs4fQBS1FXiBjg4BIbzlL3m8e7O1t7+PdPo7wdVb3KbaWTEXAAADRxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6ZDk1YjhmMjctMWM0NS00YjU1LWEwZTMtNmNmMjM0Yzk1ZWVkIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVhMGY5MTI5LWJlMDItNDVjOS1iNGU4LTU3N2MxZTBiZGJhNyIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjcyNmY4ZGFlLTM4ZTYtNGQ4Ni1hNTI4LWM0NTc4ZGE4ODA0NSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09Ik1hYyBPUyIKICAgR0lNUDpUaW1lU3RhbXA9IjE2MzQ4MzgwMTYyMTQ2MTMiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4yNCIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1YWNhZmVhMC0xZmY5LTRiMmUtYmY0NC02NTM3MzYwMGQzNjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMC0yMVQxODo0MDoxNiswMTowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6528V0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAB3RJTUUH5QoVESgQ+iToFAAAA8xJREFUeNrlW01PU0EUPTPV+oqb4h+wENYKXbmzsjLEKPAHwB1xQ6N7adiboBtrSAT5AaQmBpuYSN25MS17k5Zf0MemFGznungttCkf782bmTels2w6mbnnnnPv3DvzYrBhrMytIT01gz9/f5temkVv/NMUwKsg1MFEGvlizeTy3ALj9zuuGAf4T2QzydEBACwHINXzwwSOE29N7iAWqe7BsoOYsEdITx2ZigcsIupnzqh/8SC0/6Wx+aNy8yTg6X7rWsfEbu96/71JAGQzyY7n/Rg2AcZ3dQdFswA0Exs+je8KYUZ3UDQXA1bmlgFsScwkMFrEx++F4QXgPN/LaZpQR6IxiY2SO6QSGMj3Qd00jpPE5+FkgDz1B3kAMYt8sTQ8AGQzSTTHyqG83z+qcBpplVLQK4Hm2KpC473U2BzLDgcDwgY+QwFRIwP4knLjuwFRIQv0MGB5PgnntKwFAMUs0MMA53Rem/Ge25I4ufvCXgkQVrVXsSSW7JTAq7lpCJQNnK4IEJNhW2jqGdDGsrH6QrB5GyXwWMKXLoi5gdnL8dwuCXjRvy4xs0vjVGDonMa9MNlALQPiJxlJOcvruOlM2yMBzuQ3Q3Al44BFADA8lJ9LrtSKnD2wBwAhe/hhIVIZpWxiQJgG5qHkohYBoPP4q6tks2Qfh1GBzu3xhWQckM0eWgAIfprrBE+SN4LZBACTNIQzF4KO5EAnmxgQwhtckj2WMeBA8gARpqQ9sAcAAfnrbLk4QGBUsQcAHmIzXFLLrbZFDMgXS1KZoN2W1DHVwj6iUH8O4FQKPCcWc3t6AkGCTin0dpUDQPhq6OREgNixD4BmvBBYBlKNTaqpuChVD8B2wQWj98EnOrVA3hf4YHExJLb1l3FUsBeAfLEG0Bef//Y8H28FqSW2VT2p1VgNUi5QLKC4z1qCqoBYt78fkC/WfMWCwMUM21H5oFrzA4n4xrUt724xQy0fxRRVkd/LKQ0lWgHYLrgAvfQXN1vXSYAAmlUeS7VH63yxBMIVUvDdB1jX8S2BmZbYp70scNkRmXtXaQkOXN4b3FJNfbMAAEDzzoLcFRhV4TReaztOGAPAiwdPLgDh8OqUR7M6XoiaB6CbGtts4cLzwbtv1N8Z7hiv+Rsi823xzb0KRB8T7gMA3jxj59dcZoz3snBUY+VpCmD7nautXGcva2Aog8Siqa/Hov1sbuAxJZXgHC/o1Hz0Ehgsmn71/FIxaXz0AAwS8sj0ihYAcBb5CVJ9weFnwLnR1K6PHgC9FyJsFCVwq+9afAQlIITbnxXMjv+6222dh4/VtAAAAABJRU5ErkJggg== + mediatype: image/png install: spec: deployments: null strategy: "" installModes: - - supported: true - type: OwnNamespace - - supported: true - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces + - supported: true + type: OwnNamespace + - supported: true + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces keywords: - - MongoDB - - Atlas - - Database - - Replica Set - - Cluster + - MongoDB + - Atlas + - Database + - Replica Set + - Cluster links: - - name: MongoDB Atlas Kubernetes - url: https://github.com/mongodb/mongodb-atlas-kubernetes + - name: MongoDB Atlas Kubernetes + url: https://github.com/mongodb/mongodb-atlas-kubernetes maintainers: - - email: support@mongodb.com - name: MongoDB, Inc + - email: support@mongodb.com + name: MongoDB, Inc maturity: beta provider: name: MongoDB, Inc diff --git a/deploy/all-in-one.yaml b/deploy/all-in-one.yaml index 6c3cf94179..c1ebe1db83 100644 --- a/deploy/all-in-one.yaml +++ b/deploy/all-in-one.yaml @@ -2048,7 +2048,7 @@ spec: spec: containers: - args: - - --atlas-domain=https://cloud-qa.mongodb.com/ + - --atlas-domain=https://cloud.mongodb.com/ - --leader-elect - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 diff --git a/deploy/clusterwide/clusterwide-config.yaml b/deploy/clusterwide/clusterwide-config.yaml index d92c96632c..2b67889cfb 100644 --- a/deploy/clusterwide/clusterwide-config.yaml +++ b/deploy/clusterwide/clusterwide-config.yaml @@ -239,7 +239,7 @@ spec: spec: containers: - args: - - --atlas-domain=https://cloud-qa.mongodb.com/ + - --atlas-domain=https://cloud.mongodb.com/ - --leader-elect - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 diff --git a/deploy/crds/atlas.mongodb.com_atlasclusters.yaml b/deploy/crds/atlas.mongodb.com_atlasclusters.yaml deleted file mode 100644 index 841fc782fa..0000000000 --- a/deploy/crds/atlas.mongodb.com_atlasclusters.yaml +++ /dev/null @@ -1,858 +0,0 @@ - ---- -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - controller-gen.kubebuilder.io/version: v0.4.1 - creationTimestamp: null - name: atlasclusters.atlas.mongodb.com -spec: - group: atlas.mongodb.com - names: - kind: AtlasCluster - listKind: AtlasClusterList - plural: atlasclusters - singular: atlascluster - scope: Namespaced - versions: - - name: v1 - schema: - openAPIV3Schema: - description: AtlasCluster is the Schema for the atlasclusters API - properties: - apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' - type: string - kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' - type: string - metadata: - type: object - spec: - description: AtlasClusterSpec defines the desired state of AtlasCluster - properties: - advancedClusterSpec: - description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ - properties: - backupEnabled: - type: boolean - biConnector: - description: BiConnectorSpec specifies BI Connector for Atlas - configuration on this cluster - properties: - enabled: - description: Flag that indicates whether or not BI Connector - for Atlas is enabled on the cluster. - type: boolean - readPreference: - description: Source from which the BI Connector for Atlas - reads data. Each BI Connector for Atlas read preference - contains a distinct combination of readPreference and readPreferenceTags - options. - type: string - type: object - clusterType: - type: string - connectionStrings: - description: ConnectionStrings configuration for applications - use to connect to this cluster. - properties: - awsPrivateLink: - additionalProperties: - type: string - type: object - awsPrivateLinkSrv: - additionalProperties: - type: string - type: object - private: - type: string - privateEndpoint: - items: - description: PrivateEndpointSpec connection strings. Each - object describes the connection strings you can use to - connect to this cluster through a private endpoint. Atlas - returns this parameter only if you deployed a private - endpoint to all regions to which you deployed this cluster's - nodes. - properties: - connectionString: - type: string - endpoints: - items: - description: EndpointSpec through which you connect - to Atlas. - properties: - endpointId: - type: string - providerName: - type: string - region: - type: string - type: object - type: array - srvConnectionString: - type: string - type: - type: string - type: object - type: array - privateSrv: - type: string - standard: - type: string - standardSrv: - type: string - type: object - createDate: - type: string - diskSizeGB: - type: integer - encryptionAtRestProvider: - type: string - groupId: - type: string - id: - type: string - labels: - items: - description: LabelSpec contains key-value pairs that tag and - categorize the Cluster/DBUser - properties: - key: - maxLength: 255 - type: string - value: - type: string - required: - - key - - value - type: object - type: array - mongoDBMajorVersion: - type: string - mongoDBVersion: - type: string - name: - type: string - paused: - type: boolean - pitEnabled: - type: boolean - replicationSpecs: - items: - properties: - id: - type: string - numShards: - type: integer - regionConfigs: - items: - properties: - analyticsSpecs: - properties: - diskIOPS: - format: int64 - type: integer - ebsVolumeType: - type: string - instanceSize: - type: string - nodeCount: - type: integer - type: object - autoScaling: - description: AutoScalingSpec configures your cluster - to automatically scale its storage - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot - mode for Performance Advisor is enabled. The - default is false. - type: boolean - compute: - description: Collection of settings that configure - how a cluster might scale its cluster tier and - whether the cluster can scale down. - properties: - enabled: - description: Flag that indicates whether cluster - tier auto-scaling is enabled. The default - is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which - your cluster can automatically scale (such - as M40). Atlas requires this parameter if - "autoScaling.compute.enabled" : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which - your cluster can automatically scale (such - as M10). Atlas requires this parameter if - "autoScaling.compute.scaleDownEnabled" : - true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether - the cluster tier may scale down. Atlas requires - this parameter if "autoScaling.compute.enabled" - : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk - auto-scaling is enabled. The default is true. - type: boolean - type: object - backingProviderName: - type: string - electableSpecs: - properties: - diskIOPS: - format: int64 - type: integer - ebsVolumeType: - type: string - instanceSize: - type: string - nodeCount: - type: integer - type: object - priority: - type: integer - providerName: - type: string - readOnlySpecs: - properties: - diskIOPS: - format: int64 - type: integer - ebsVolumeType: - type: string - instanceSize: - type: string - nodeCount: - type: integer - type: object - regionName: - type: string - type: object - type: array - zoneName: - type: string - type: object - type: array - rootCertType: - type: string - stateName: - type: string - versionReleaseSystem: - type: string - type: object - backupRef: - description: Backup schedule for the AtlasCluster - properties: - name: - description: Name is the name of the Kubernetes Resource - type: string - namespace: - description: Namespace is the namespace of the Kubernetes Resource - type: string - required: - - name - type: object - clusterSpec: - description: Configuration for the advanced cluster API - properties: - autoScaling: - description: Collection of settings that configures auto-scaling - information for the cluster. If you specify the autoScaling - object, you must also specify the providerSettings.autoScaling - object. - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot mode for - Performance Advisor is enabled. The default is false. - type: boolean - compute: - description: Collection of settings that configure how a cluster - might scale its cluster tier and whether the cluster can - scale down. - properties: - enabled: - description: Flag that indicates whether cluster tier - auto-scaling is enabled. The default is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which your cluster - can automatically scale (such as M40). Atlas requires - this parameter if "autoScaling.compute.enabled" : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which your cluster - can automatically scale (such as M10). Atlas requires - this parameter if "autoScaling.compute.scaleDownEnabled" - : true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether the cluster - tier may scale down. Atlas requires this parameter if - "autoScaling.compute.enabled" : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk auto-scaling - is enabled. The default is true. - type: boolean - type: object - biConnector: - description: Configuration of BI Connector for Atlas on this cluster. - The MongoDB Connector for Business Intelligence for Atlas (BI - Connector) is only available for M10 and larger clusters. - properties: - enabled: - description: Flag that indicates whether or not BI Connector - for Atlas is enabled on the cluster. - type: boolean - readPreference: - description: Source from which the BI Connector for Atlas - reads data. Each BI Connector for Atlas read preference - contains a distinct combination of readPreference and readPreferenceTags - options. - type: string - type: object - clusterType: - description: Type of the cluster that you want to create. The - parameter is required if replicationSpecs are set or if Global - Clusters are deployed. - enum: - - REPLICASET - - SHARDED - - GEOSHARDED - type: string - diskSizeGB: - description: Capacity, in gigabytes, of the host's root volume. - Increase this number to add capacity, up to a maximum possible - value of 4096 (i.e., 4 TB). This value must be a positive integer. - The parameter is required if replicationSpecs are configured. - maximum: 4096 - minimum: 0 - type: integer - encryptionAtRestProvider: - description: Cloud service provider that offers Encryption at - Rest. - enum: - - AWS - - GCP - - AZURE - - NONE - type: string - labels: - description: Collection of key-value pairs that tag and categorize - the cluster. Each key and value has a maximum length of 255 - characters. - items: - description: LabelSpec contains key-value pairs that tag and - categorize the Cluster/DBUser - properties: - key: - maxLength: 255 - type: string - value: - type: string - required: - - key - - value - type: object - type: array - mongoDBMajorVersion: - description: Version of the cluster to deploy. - type: string - name: - description: Name of the cluster as it appears in Atlas. After - Atlas creates the cluster, you can't change its name. - type: string - numShards: - description: Positive integer that specifies the number of shards - to deploy for a sharded cluster. The parameter is required if - replicationSpecs are configured - maximum: 50 - minimum: 1 - type: integer - paused: - description: Flag that indicates whether the cluster should be - paused. - type: boolean - pitEnabled: - description: Flag that indicates the cluster uses continuous cloud - backups. - type: boolean - providerBackupEnabled: - description: Applicable only for M10+ clusters. Flag that indicates - if the cluster uses Cloud Backups for backups. - type: boolean - providerSettings: - description: Configuration for the provisioned hosts on which - MongoDB runs. The available options are specific to the cloud - service provider. - properties: - autoScaling: - description: Range of instance sizes to which your cluster - can scale. - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot mode - for Performance Advisor is enabled. The default is false. - type: boolean - compute: - description: Collection of settings that configure how - a cluster might scale its cluster tier and whether the - cluster can scale down. - properties: - enabled: - description: Flag that indicates whether cluster tier - auto-scaling is enabled. The default is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which your - cluster can automatically scale (such as M40). Atlas - requires this parameter if "autoScaling.compute.enabled" - : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which your - cluster can automatically scale (such as M10). Atlas - requires this parameter if "autoScaling.compute.scaleDownEnabled" - : true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether the cluster - tier may scale down. Atlas requires this parameter - if "autoScaling.compute.enabled" : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk auto-scaling - is enabled. The default is true. - type: boolean - type: object - backingProviderName: - description: 'Cloud service provider on which the host for - a multi-tenant cluster is provisioned. This setting only - works when "providerSetting.providerName" : "TENANT" and - "providerSetting.instanceSizeName" : M2 or M5.' - enum: - - AWS - - GCP - - AZURE - type: string - diskIOPS: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - format: int64 - type: integer - diskTypeName: - description: Type of disk if you selected Azure as your cloud - service provider. - type: string - encryptEBSVolume: - description: Flag that indicates whether the Amazon EBS encryption - feature encrypts the host's root volume for both data at - rest within the volume and for data moving between the volume - and the cluster. - type: boolean - instanceSizeName: - description: Atlas provides different cluster tiers, each - with a default storage capacity and RAM size. The cluster - you select is used for all the data-bearing hosts in your - cluster tier. - type: string - providerName: - description: Cloud service provider on which Atlas provisions - the hosts. - enum: - - AWS - - GCP - - AZURE - - TENANT - - SERVERLESS - type: string - regionName: - description: Physical location of your MongoDB cluster. The - region you choose can affect network latency for clients - accessing your databases. - type: string - volumeType: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - enum: - - STANDARD - - PROVISIONED - type: string - required: - - providerName - type: object - replicationSpecs: - description: Configuration for cluster regions. - items: - description: ReplicationSpec represents a configuration for - cluster regions - properties: - numShards: - description: Number of shards to deploy in each specified - zone. The default value is 1. - format: int64 - type: integer - regionsConfig: - additionalProperties: - description: RegionsConfig describes the region’s priority - in elections and the number and type of MongoDB nodes - Atlas deploys to the region. - properties: - analyticsNodes: - description: The number of analytics nodes for Atlas - to deploy to the region. Analytics nodes are useful - for handling analytic data such as reporting queries - from BI Connector for Atlas. Analytics nodes are - read-only, and can never become the primary. If - you do not specify this option, no analytics nodes - are deployed to the region. - format: int64 - type: integer - electableNodes: - description: Number of electable nodes for Atlas to - deploy to the region. Electable nodes can become - the primary and can facilitate local reads. - format: int64 - type: integer - priority: - description: Election priority of the region. For - regions with only replicationSpecs[n].regionsConfig..readOnlyNodes, - set this value to 0. - format: int64 - type: integer - readOnlyNodes: - description: Number of read-only nodes for Atlas to - deploy to the region. Read-only nodes can never - become the primary, but can facilitate local-reads. - format: int64 - type: integer - type: object - description: Configuration for a region. Each regionsConfig - object describes the region's priority in elections and - the number and type of MongoDB nodes that Atlas deploys - to the region. - type: object - zoneName: - description: Name for the zone in a Global Cluster. Don't - provide this value if clusterType is not GEOSHARDED. - type: string - type: object - type: array - required: - - name - - providerSettings - type: object - processArgs: - description: ProcessArgs allows to modify Advanced Configuration Options - properties: - defaultReadConcern: - type: string - defaultWriteConcern: - type: string - failIndexKeyTooLong: - type: boolean - javascriptEnabled: - type: boolean - minimumEnabledTlsProtocol: - type: string - noTableScan: - type: boolean - oplogSizeMB: - format: int64 - type: integer - sampleRefreshIntervalBIConnector: - format: int64 - type: integer - sampleSizeBIConnector: - format: int64 - type: integer - type: object - projectRef: - description: Project is a reference to AtlasProject resource the cluster - belongs to - properties: - name: - description: Name is the name of the Kubernetes Resource - type: string - namespace: - description: Namespace is the namespace of the Kubernetes Resource - type: string - required: - - name - type: object - serverlessSpec: - description: Configuration for the advanced cluster API. https://docs.atlas.mongodb.com/reference/api/clusters-advanced/ - properties: - name: - description: Name of the cluster as it appears in Atlas. After - Atlas creates the cluster, you can't change its name. - type: string - providerSettings: - description: Configuration for the provisioned hosts on which - MongoDB runs. The available options are specific to the cloud - service provider. - properties: - autoScaling: - description: Range of instance sizes to which your cluster - can scale. - properties: - autoIndexingEnabled: - description: Flag that indicates whether autopilot mode - for Performance Advisor is enabled. The default is false. - type: boolean - compute: - description: Collection of settings that configure how - a cluster might scale its cluster tier and whether the - cluster can scale down. - properties: - enabled: - description: Flag that indicates whether cluster tier - auto-scaling is enabled. The default is false. - type: boolean - maxInstanceSize: - description: 'Maximum instance size to which your - cluster can automatically scale (such as M40). Atlas - requires this parameter if "autoScaling.compute.enabled" - : true.' - type: string - minInstanceSize: - description: 'Minimum instance size to which your - cluster can automatically scale (such as M10). Atlas - requires this parameter if "autoScaling.compute.scaleDownEnabled" - : true.' - type: string - scaleDownEnabled: - description: 'Flag that indicates whether the cluster - tier may scale down. Atlas requires this parameter - if "autoScaling.compute.enabled" : true.' - type: boolean - type: object - diskGBEnabled: - description: Flag that indicates whether disk auto-scaling - is enabled. The default is true. - type: boolean - type: object - backingProviderName: - description: 'Cloud service provider on which the host for - a multi-tenant cluster is provisioned. This setting only - works when "providerSetting.providerName" : "TENANT" and - "providerSetting.instanceSizeName" : M2 or M5.' - enum: - - AWS - - GCP - - AZURE - type: string - diskIOPS: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - format: int64 - type: integer - diskTypeName: - description: Type of disk if you selected Azure as your cloud - service provider. - type: string - encryptEBSVolume: - description: Flag that indicates whether the Amazon EBS encryption - feature encrypts the host's root volume for both data at - rest within the volume and for data moving between the volume - and the cluster. - type: boolean - instanceSizeName: - description: Atlas provides different cluster tiers, each - with a default storage capacity and RAM size. The cluster - you select is used for all the data-bearing hosts in your - cluster tier. - type: string - providerName: - description: Cloud service provider on which Atlas provisions - the hosts. - enum: - - AWS - - GCP - - AZURE - - TENANT - - SERVERLESS - type: string - regionName: - description: Physical location of your MongoDB cluster. The - region you choose can affect network latency for clients - accessing your databases. - type: string - volumeType: - description: Disk IOPS setting for AWS storage. Set only if - you selected AWS as your cloud service provider. - enum: - - STANDARD - - PROVISIONED - type: string - required: - - providerName - type: object - required: - - name - - providerSettings - type: object - required: - - projectRef - type: object - status: - description: AtlasClusterStatus defines the observed state of AtlasCluster. - properties: - conditions: - description: Conditions is the list of statuses showing the current - state of the Atlas Custom Resource - items: - description: Condition describes the state of an Atlas Custom Resource - at a certain point. - properties: - lastTransitionTime: - description: Last time the condition transitioned from one status - to another. - format: date-time - type: string - message: - description: A human readable message indicating details about - the transition. - type: string - reason: - description: The reason for the condition's last transition. - type: string - status: - description: Status of the condition, one of True, False, Unknown. - type: string - type: - description: Type of Atlas Custom Resource condition. - type: string - required: - - status - - type - type: object - type: array - connectionStrings: - description: ConnectionStrings is a set of connection strings that - your applications use to connect to this cluster. - properties: - private: - description: Network-peering-endpoint-aware mongodb:// connection - strings for each interface VPC endpoint you configured to connect - to this cluster. Atlas returns this parameter only if you created - a network peering connection to this cluster. - type: string - privateEndpoint: - description: Private endpoint connection strings. Each object - describes the connection strings you can use to connect to this - cluster through a private endpoint. Atlas returns this parameter - only if you deployed a private endpoint to all regions to which - you deployed this cluster's nodes. - items: - description: PrivateEndpoint connection strings. Each object - describes the connection strings you can use to connect to - this cluster through a private endpoint. Atlas returns this - parameter only if you deployed a private endpoint to all regions - to which you deployed this cluster's nodes. - properties: - connectionString: - description: Private-endpoint-aware mongodb:// connection - string for this private endpoint. - type: string - endpoints: - description: Private endpoint through which you connect - to Atlas when you use connectionStrings.privateEndpoint[n].connectionString - or connectionStrings.privateEndpoint[n].srvConnectionString. - items: - description: Endpoint through which you connect to Atlas - properties: - endpointId: - description: Unique identifier of the private endpoint. - type: string - ip: - description: Private IP address of the private endpoint - network interface you created in your Azure VNet. - type: string - providerName: - description: Cloud provider to which you deployed - the private endpoint. Atlas returns AWS or AZURE. - type: string - region: - description: Region to which you deployed the private - endpoint. - type: string - type: object - type: array - srvConnectionString: - description: Private-endpoint-aware mongodb+srv:// connection - string for this private endpoint. - type: string - type: - description: "Type of MongoDB process that you connect to - with the connection strings \n Atlas returns: \n • MONGOD - for replica sets, or \n • MONGOS for sharded clusters" - type: string - type: object - type: array - privateSrv: - description: Network-peering-endpoint-aware mongodb+srv:// connection - strings for each interface VPC endpoint you configured to connect - to this cluster. Atlas returns this parameter only if you created - a network peering connection to this cluster. Use this URI format - if your driver supports it. If it doesn't, use connectionStrings.private. - type: string - standard: - description: Public mongodb:// connection string for this cluster. - type: string - standardSrv: - description: Public mongodb+srv:// connection string for this - cluster. - type: string - type: object - mongoDBVersion: - description: MongoDBVersion is the version of MongoDB the cluster - runs, in . format. - type: string - mongoURIUpdated: - description: MongoURIUpdated is a timestamp in ISO 8601 date and time - format in UTC when the connection string was last updated. The connection - string changes if you update any of the other values. - type: string - observedGeneration: - description: ObservedGeneration indicates the generation of the resource - specification that the Atlas Operator is aware of. The Atlas Operator - updates this field to the 'metadata.generation' as soon as it starts - reconciliation of the resource. - format: int64 - type: integer - stateName: - description: 'StateName is the current state of the cluster. The possible - states are: IDLE, CREATING, UPDATING, DELETING, DELETED, REPAIRING' - type: string - required: - - conditions - type: object - type: object - served: true - storage: true - subresources: - status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/deploy/namespaced/namespaced-config.yaml b/deploy/namespaced/namespaced-config.yaml index 434c5cf322..73906f16a7 100644 --- a/deploy/namespaced/namespaced-config.yaml +++ b/deploy/namespaced/namespaced-config.yaml @@ -241,7 +241,7 @@ spec: spec: containers: - args: - - --atlas-domain=https://cloud-qa.mongodb.com/ + - --atlas-domain=https://cloud.mongodb.com/ - --leader-elect - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 From 77fcd0b1ff6d2ab93c0b4789f81b7d135e1d60e8 Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Wed, 25 May 2022 18:14:13 +0300 Subject: [PATCH 08/11] lint --- test/e2e/api/gcp/gcp.go | 34 ++++++++-------------------------- test/e2e/private_link_test.go | 2 +- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/test/e2e/api/gcp/gcp.go b/test/e2e/api/gcp/gcp.go index 8f26b50c77..653092ce6d 100644 --- a/test/e2e/api/gcp/gcp.go +++ b/test/e2e/api/gcp/gcp.go @@ -17,7 +17,7 @@ type sessionGCP struct { func SessionGCP(gProjectID string) (sessionGCP, error) { computeService, err := compute.NewService(context.Background()) if err != nil { - return sessionGCP{}, fmt.Errorf("compute.NewClient: %v", err) + return sessionGCP{}, fmt.Errorf("compute.NewClient: %w", err) } return sessionGCP{computeService, gProjectID}, nil } @@ -34,11 +34,11 @@ func (s *sessionGCP) AddIPAdress(region, addressName, subnet string) (string, er } _, err := s.computeService.Addresses.Insert(s.gProjectID, region, address).Context(context.Background()).Do() if err != nil { - return "", fmt.Errorf("computeService.Addresses.Insert: %v", err) + return "", fmt.Errorf("computeService.Addresses.Insert: %w", err) } ip, err := s.GetIP(region, addressName, 20, 10) if err != nil { - return "", fmt.Errorf("computeService.Addresses.Get: %v", err) + return "", fmt.Errorf("computeService.Addresses.Get: %w", err) } return ip, nil } @@ -60,7 +60,7 @@ func (s *sessionGCP) GetIP(region, addressName string, try, interval int) (strin func (s *sessionGCP) DeleteIPAdress(region, addressName string) error { _, err := s.computeService.Addresses.Delete(s.gProjectID, region, addressName).Context(context.Background()).Do() if err != nil { - return fmt.Errorf("computeService.Addresses.Delete: %v", err) + return fmt.Errorf("computeService.Addresses.Delete: %w", err) } return nil } @@ -68,37 +68,19 @@ func (s *sessionGCP) DeleteIPAdress(region, addressName string) error { func (s *sessionGCP) AddForwardRule(region, ruleName, addressName, network, subnet, target string) error { rules := &compute.ForwardingRule{ IPAddress: s.formAddressURL(region, addressName), - IPProtocol: "", - AllPorts: false, - AllowGlobalAccess: false, - BackendService: "", - Description: "", - Fingerprint: "", - IpVersion: "", - IsMirroringCollector: false, - Kind: "", - LabelFingerprint: "", Labels: map[string]string{}, - LoadBalancingScheme: "", - MetadataFilters: []*compute.MetadataFilter{}, Name: ruleName, Network: s.formNetworkURL(network), - NetworkTier: "", - PortRange: "", Ports: []string{}, - PscConnectionId: 0, - PscConnectionStatus: "", Region: region, - SelfLink: "", ServiceDirectoryRegistrations: []*compute.ForwardingRuleServiceDirectoryRegistration{}, - ServiceLabel: "", Subnetwork: "", Target: target, ServerResponse: googleapi.ServerResponse{}, } _, err := s.computeService.ForwardingRules.Insert(s.gProjectID, region, rules).Context(context.Background()).Do() if err != nil { - return fmt.Errorf("computeService.ForwardingRules.Insert: %v", err) + return fmt.Errorf("computeService.ForwardingRules.Insert: %w", err) } return nil } @@ -106,7 +88,7 @@ func (s *sessionGCP) AddForwardRule(region, ruleName, addressName, network, subn func (s *sessionGCP) DeleteForwardRule(region, ruleName string, try int, interval time.Duration) error { _, err := s.computeService.ForwardingRules.Delete(s.gProjectID, region, ruleName).Do() if err != nil { - return fmt.Errorf("computeService.ForwardingRules.Delete: %v", err) + return fmt.Errorf("computeService.ForwardingRules.Delete: %w", err) } contain := func(list []*compute.ForwardingRule, name string) bool { @@ -122,7 +104,7 @@ func (s *sessionGCP) DeleteForwardRule(region, ruleName string, try int, interva for i := 0; i < try; i++ { r, err := s.computeService.ForwardingRules.List(s.gProjectID, region).Do() if err != nil { - return fmt.Errorf("computeService.ForwardingRule.List: %v", err) + return fmt.Errorf("computeService.ForwardingRule.List: %w", err) } if !contain(r.Items, ruleName) { deleted = true @@ -147,7 +129,7 @@ func (s *sessionGCP) DeleteForwardRule(region, ruleName string, try int, interva func (s *sessionGCP) DescribePrivateLinkStatus(region, ruleName string) (string, error) { resp, err := s.computeService.ForwardingRules.Get(s.gProjectID, region, ruleName).Context(context.Background()).Do() if err != nil { - return "", fmt.Errorf("computeService.Addresses.Get: %v", err) + return "", fmt.Errorf("computeService.Addresses.Get: %w", err) } return resp.PscConnectionStatus, nil } diff --git a/test/e2e/private_link_test.go b/test/e2e/private_link_test.go index c8419d65dd..6d8f6b4ab1 100644 --- a/test/e2e/private_link_test.go +++ b/test/e2e/private_link_test.go @@ -35,7 +35,7 @@ type privateEndpoint struct { var _ = Describe("UserLogin", Label("privatelink"), func() { var data model.TestDataProvider - + _ = BeforeEach(func() { Eventually(kubecli.GetVersionOutput()).Should(Say(K8sVersion)) checkUpAWSEnviroment() From a44db445f9e40612f41fb1dc417b214ac99e868b Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Wed, 25 May 2022 18:17:17 +0300 Subject: [PATCH 09/11] add env to workflow --- .github/workflows/test-forked.yml | 1 + .github/workflows/test.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/test-forked.yml b/.github/workflows/test-forked.yml index e3bf9e9740..cdf508fea6 100644 --- a/.github/workflows/test-forked.yml +++ b/.github/workflows/test-forked.yml @@ -265,6 +265,7 @@ jobs: AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + GCP_SA_CRED: ${{ secrets.GCP_SA_CRED }} DATADOG_KEY: ${{ secrets.DATADOG_KEY }} run: | helm version diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a9facfc23b..85b38a1595 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -263,6 +263,7 @@ jobs: AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + GCP_SA_CRED: ${{ secrets.GCP_SA_CRED }} DATADOG_KEY: ${{ secrets.DATADOG_KEY }} run: | helm version From 9a2e9d7096815179e533609d8de1aae4879121dc Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Thu, 26 May 2022 18:16:08 +0300 Subject: [PATCH 10/11] fix --- test/e2e/model/project.go | 12 +++++++----- test/e2e/private_link_test.go | 13 +++++++++---- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/test/e2e/model/project.go b/test/e2e/model/project.go index 50412faf43..29bc182e26 100644 --- a/test/e2e/model/project.go +++ b/test/e2e/model/project.go @@ -95,13 +95,15 @@ func (p *AProject) UpdatePrivateLinkID(test cloud.CloudResponse) *AProject { return p } -func (p *AProject) GetPrivateIDByProviderRegion(provider provider.ProviderName, region string) string { - for i, peItem := range p.Spec.PrivateEndpoints { - if (peItem.Provider == provider) && (peItem.Region == region) { - return p.Spec.PrivateEndpoints[i].ID +func (p *AProject) GetPrivateIDByProviderRegion(statusItem status.ProjectPrivateEndpoint) string { + if statusItem.Provider == provider.ProviderAWS { + for i, peItem := range p.Spec.PrivateEndpoints { + if (peItem.Provider == statusItem.Provider) && (peItem.Region == statusItem.Region) { + return p.Spec.PrivateEndpoints[i].ID + } } } - return "" + return statusItem.ID } func (p *AProject) DeletePrivateLink(id string) *AProject { diff --git a/test/e2e/private_link_test.go b/test/e2e/private_link_test.go index 6d8f6b4ab1..249040df36 100644 --- a/test/e2e/private_link_test.go +++ b/test/e2e/private_link_test.go @@ -235,7 +235,11 @@ func privateFlow(userData *model.TestDataProvider, requstedPE []privateEndpoint) for _, peitem := range project.Status.PrivateEndpoints { cloudTest, err := cloud.CreatePEActions(peitem) Expect(err).ShouldNot(HaveOccurred()) - output, err := cloudTest.CreatePrivateEndpoint(peitem.ID) + + privateEndpointID := peitem.ID + Expect(privateEndpointID).ShouldNot(BeEmpty()) + + output, err := cloudTest.CreatePrivateEndpoint(privateEndpointID) Expect(err).ShouldNot(HaveOccurred()) userData.Resources.Project = userData.Resources.Project.UpdatePrivateLinkID(output) } @@ -255,10 +259,11 @@ func privateFlow(userData *model.TestDataProvider, requstedPE []privateEndpoint) for _, peitem := range project.Status.PrivateEndpoints { cloudTest, err := cloud.CreatePEActions(peitem) Expect(err).ShouldNot(HaveOccurred()) - Expect(peitem.ID).ShouldNot(BeEmpty()) + privateEndpointID := userData.Resources.Project.GetPrivateIDByProviderRegion(peitem) + Expect(privateEndpointID).ShouldNot(BeEmpty()) Eventually( func() bool { - return cloudTest.IsStatusPrivateEndpointAvailable(peitem.ID) + return cloudTest.IsStatusPrivateEndpointAvailable(privateEndpointID) }, ).Should(BeTrue()) } @@ -273,7 +278,7 @@ func DeleteAllPrivateEndpoints(data *model.TestDataProvider) { for _, peitem := range project.Status.PrivateEndpoints { cloudTest, err := cloud.CreatePEActions(peitem) if err == nil { - privateEndpointID := peitem.ID + privateEndpointID := data.Resources.Project.GetPrivateIDByProviderRegion(peitem) if privateEndpointID != "" { err = cloudTest.DeletePrivateEndpoint(privateEndpointID) if err != nil { From 9d3287e5ff87ffa948e375b30cf55c15c61299be Mon Sep 17 00:00:00 2001 From: Svetlana Maltseva <5437289+leo-ri@users.noreply.github.com> Date: Fri, 27 May 2022 20:35:10 +0300 Subject: [PATCH 11/11] cleanup --- test/e2e/actions/cloud/aws.go | 11 ++++++----- test/e2e/actions/cloud/azure.go | 11 ++++++----- test/e2e/actions/cloud/cloud.go | 16 +++------------- test/e2e/actions/cloud/gcp.go | 14 +++++++------- test/e2e/model/project.go | 10 ++-------- 5 files changed, 24 insertions(+), 38 deletions(-) diff --git a/test/e2e/actions/cloud/aws.go b/test/e2e/actions/cloud/aws.go index 399ed60c77..e646fc052f 100644 --- a/test/e2e/actions/cloud/aws.go +++ b/test/e2e/actions/cloud/aws.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" + v1 "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" aws "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/aws" @@ -11,23 +12,23 @@ import ( type awsAction struct{} -func (awsAction *awsAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { +func (awsAction *awsAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (v1.PrivateEndpoint, error) { fmt.Print("create AWS LINK") session := aws.SessionAWS(pe.Region) vpcID, err := session.GetVPCID() if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } subnetID, err := session.GetSubnetID() if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } privateEndpointID, err := session.CreatePrivateEndpoint(vpcID, subnetID, pe.ServiceName, privatelinkName) if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } - cResponse := CloudResponse{ + cResponse := v1.PrivateEndpoint{ ID: privateEndpointID, IP: "", Provider: provider.ProviderAWS, diff --git a/test/e2e/actions/cloud/azure.go b/test/e2e/actions/cloud/azure.go index 50f670227a..0da396db32 100644 --- a/test/e2e/actions/cloud/azure.go +++ b/test/e2e/actions/cloud/azure.go @@ -5,6 +5,7 @@ import ( "os" "path" + v1 "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/azure" @@ -20,20 +21,20 @@ var ( subnetName = "default" ) -func (azureAction *azureAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { +func (azureAction *azureAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (v1.PrivateEndpoint, error) { session, err := azure.SessionAzure(os.Getenv("AZURE_SUBSCRIPTION_ID"), config.TagName) if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } err = session.DisableNetworkPolicies(resourceGroup, vpc, subnetName) if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } id, ip, err := session.CreatePrivateEndpoint(pe.Region, resourceGroup, privatelinkName, pe.ServiceResourceID) if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } - cResponse := CloudResponse{ + cResponse := v1.PrivateEndpoint{ ID: id, IP: ip, Provider: provider.ProviderAzure, diff --git a/test/e2e/actions/cloud/cloud.go b/test/e2e/actions/cloud/cloud.go index e14621d17a..05c0328092 100644 --- a/test/e2e/actions/cloud/cloud.go +++ b/test/e2e/actions/cloud/cloud.go @@ -9,7 +9,7 @@ import ( ) type CloudActions interface { - createPrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) (CloudResponse, error) + createPrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) (v1.PrivateEndpoint, error) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) error statusPrivateEndpointPending(region, privateID string) bool statusPrivateEndpointAvailable(region, privateID string) bool @@ -20,16 +20,6 @@ type PEActions struct { PrivateEndpoint status.ProjectPrivateEndpoint } -type CloudResponse struct { - ID string // AWS = PrivateID, AZURE = privateEndpoint Name - IP string - Provider provider.ProviderName - Region string - GoogleProjectID string - GoogleVPC string - GoogleEndpoints v1.GCPEndpoints -} - type Endpoints struct { IP string Name string @@ -73,9 +63,9 @@ func (peActions *PEActions) validation() error { return nil } -func (peActions *PEActions) CreatePrivateEndpoint(name string) (CloudResponse, error) { +func (peActions *PEActions) CreatePrivateEndpoint(name string) (v1.PrivateEndpoint, error) { if err := peActions.validation(); err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } return peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name) } diff --git a/test/e2e/actions/cloud/gcp.go b/test/e2e/actions/cloud/gcp.go index 66354ecac3..651e55d8d2 100644 --- a/test/e2e/actions/cloud/gcp.go +++ b/test/e2e/actions/cloud/gcp.go @@ -19,28 +19,28 @@ var ( googleConnectPrefix = "ao" // Private Service Connect Endpoint Prefix ) -func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (CloudResponse, error) { +func (gcpAction *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (v1.PrivateEndpoint, error) { session, err := gcp.SessionGCP(googleProjectID) if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } - var cResponse CloudResponse + var cResponse v1.PrivateEndpoint for i, target := range pe.ServiceAttachmentNames { addressName := formAddressName(privatelinkName, i) ruleName := formRuleName(privatelinkName, i) ip, err := session.AddIPAdress(pe.Region, addressName, googleSubnetName) if err != nil { - return CloudResponse{}, err + return v1.PrivateEndpoint{}, err } - cResponse.GoogleEndpoints = append(cResponse.GoogleEndpoints, v1.GCPEndpoint{ + cResponse.Endpoints = append(cResponse.Endpoints, v1.GCPEndpoint{ EndpointName: ruleName, IPAddress: ip, }) - cResponse.GoogleVPC = googleVPC + cResponse.EndpointGroupName = googleVPC cResponse.Region = pe.Region cResponse.Provider = pe.Provider - cResponse.GoogleProjectID = googleProjectID + cResponse.GCPProjectID = googleProjectID session.AddForwardRule(pe.Region, ruleName, addressName, googleVPC, googleSubnetName, target) } diff --git a/test/e2e/model/project.go b/test/e2e/model/project.go index 29bc182e26..454970a271 100644 --- a/test/e2e/model/project.go +++ b/test/e2e/model/project.go @@ -8,7 +8,6 @@ import ( "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/project" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider" "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status" - "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/actions/cloud" "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils" ) @@ -81,15 +80,10 @@ func (p *AProject) UpdatePrivateLinkByOrder(i int, id string) *AProject { return p } -func (p *AProject) UpdatePrivateLinkID(test cloud.CloudResponse) *AProject { +func (p *AProject) UpdatePrivateLinkID(test v1.PrivateEndpoint) *AProject { for i, peItem := range p.Spec.PrivateEndpoints { if (peItem.Provider == test.Provider) && (peItem.Region == test.Region) { - p.Spec.PrivateEndpoints[i].ID = test.ID // in case AWS/Azure - p.Spec.PrivateEndpoints[i].IP = test.IP // in case Azure - // in case of GCP - p.Spec.PrivateEndpoints[i].GCPProjectID = test.GoogleProjectID - p.Spec.PrivateEndpoints[i].EndpointGroupName = test.GoogleVPC - p.Spec.PrivateEndpoints[i].Endpoints = test.GoogleEndpoints + p.Spec.PrivateEndpoints[i] = test } } return p