diff --git a/examples/aws-privatelink-endpoint/data-federation-online-archive/README.md b/examples/aws-privatelink-endpoint/data-federation-online-archive/README.md new file mode 100644 index 0000000000..7fd0e9fef3 --- /dev/null +++ b/examples/aws-privatelink-endpoint/data-federation-online-archive/README.md @@ -0,0 +1,85 @@ +# Example - Privatelink for Data Federation and Online Archive + +Setup private connection to a [Data Federation or Online Archive](https://www.mongodb.com/docs/atlas/data-federation/tutorial/config-private-endpoint/) utilizing [Amazon Virtual Private Cloud (aws vpc)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html). + + +## Dependencies + +* Terraform v0.13 +* An AWS account - provider.aws: version = "~> 4" +* A MongoDB Atlas account - provider.mongodbatlas: version = "~> 1.10" + +## Usage + +**1\. Ensure your AWS and MongoDB Atlas credentials are set up.** + +This can be done using environment variables: + +```bash +export MONGODB_ATLAS_PUBLIC_KEY="xxxx" +export MONGODB_ATLAS_PRIVATE_KEY="xxxx" +``` + +``` bash +$ export AWS_SECRET_ACCESS_KEY='your secret key' +$ export AWS_ACCESS_KEY_ID='your key id' +``` + +... or the `~/.aws/credentials` file. + +``` +$ cat ~/.aws/credentials +[default] +aws_access_key_id = your key id +aws_secret_access_key = your secret key + +``` +... or follow as in the `variables.tf` file and create **terraform.tfvars** file with all the variable values, ex: +``` +access_key = "" +secret_key = "" +public_key = "" +private_key = "" +project_id = "" +``` + +**2\. Review the Terraform plan.** + +Execute the below command and ensure you are happy with the plan. + +``` bash +$ terraform plan +``` +This project currently performs the below deployments: + +- MongoDB Atlas Dedicated Cluster - M10 +- AWS Custom VPC, Internet Gateway, Route Tables, Subnets with Public and Private access +- PrivateLink Connection at MongoDB Atlas +- Create VPC Endpoint in AWS + +**3\. Configure the security group as required.** + +The security group in this configuration allows All Traffic access in Inbound and Outbound Rules. + +**4\. Execute the Terraform apply.** + +Now execute the plan to provision the AWS and Atlas resources. + +``` bash +$ terraform apply +``` + +**5\. Destroy the resources.** + +Once you are finished your testing, ensure you destroy the resources to avoid unnecessary charges. + +``` bash +$ terraform destroy +``` + +**What's the resource dependency chain?** +1. `mongodbatlas_project` must exist for any of the following +2. `aws_vpc_endpoint` is dependent on the `mongodbatlas_privatelink_endpoint`, and its dependencies. +3. `mongodbatlas_privatelink_endpoint_service` is dependent on `aws_vpc_endpoint` and its dependencies. +4. `mongodbatlas_privatelink_endpoint_service_data_federation_online_archive` is dependent on the `mongodbatlas_project` and `aws_vpc_endpoint` + diff --git a/examples/aws-privatelink-endpoint/data-federation-online-archive/atlas-privatelink.tf b/examples/aws-privatelink-endpoint/data-federation-online-archive/atlas-privatelink.tf new file mode 100644 index 0000000000..244569b5e9 --- /dev/null +++ b/examples/aws-privatelink-endpoint/data-federation-online-archive/atlas-privatelink.tf @@ -0,0 +1,12 @@ +resource "mongodbatlas_privatelink_endpoint" "pe_east" { + project_id = var.project_id + provider_name = "AWS" + region = "us-east-1" +} + +resource "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = var.project_id + endpoint_id = aws_vpc_endpoint.vpce_east.id + provider_name = "AWS" + comment = "Terraform Acceptance Test" +} diff --git a/examples/aws-privatelink-endpoint/data-federation-online-archive/aws-vpc.tf b/examples/aws-privatelink-endpoint/data-federation-online-archive/aws-vpc.tf new file mode 100644 index 0000000000..63540c8cf6 --- /dev/null +++ b/examples/aws-privatelink-endpoint/data-federation-online-archive/aws-vpc.tf @@ -0,0 +1,57 @@ +resource "aws_vpc_endpoint" "vpce_east" { + vpc_id = aws_vpc.vpc_east.id + service_name = mongodbatlas_privatelink_endpoint.pe_east.endpoint_service_name + vpc_endpoint_type = "Interface" + subnet_ids = [aws_subnet.subnet_east_a.id, aws_subnet.subnet_east_b.id] + security_group_ids = [aws_security_group.sg_east.id] +} + +resource "aws_vpc" "vpc_east" { + cidr_block = "10.0.0.0/16" + enable_dns_hostnames = true + enable_dns_support = true +} + +resource "aws_internet_gateway" "ig_east" { + vpc_id = aws_vpc.vpc_east.id +} + +resource "aws_route" "route_east" { + route_table_id = aws_vpc.vpc_east.main_route_table_id + destination_cidr_block = "0.0.0.0/0" + gateway_id = aws_internet_gateway.ig_east.id +} + +resource "aws_subnet" "subnet_east_a" { + vpc_id = aws_vpc.vpc_east.id + cidr_block = "10.0.1.0/24" + map_public_ip_on_launch = true + availability_zone = "us-east-1a" +} + +resource "aws_subnet" "subnet_east_b" { + vpc_id = aws_vpc.vpc_east.id + cidr_block = "10.0.2.0/24" + map_public_ip_on_launch = false + availability_zone = "us-east-1b" +} + +resource "aws_security_group" "sg_east" { + name_prefix = "default-" + description = "Default security group for all instances in vpc" + vpc_id = aws_vpc.vpc_east.id + ingress { + from_port = 0 + to_port = 0 + protocol = "tcp" + cidr_blocks = [ + "0.0.0.0/0", + ] + } + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } +} diff --git a/examples/aws-privatelink-endpoint/data-federation-online-archive/provider.tf b/examples/aws-privatelink-endpoint/data-federation-online-archive/provider.tf new file mode 100644 index 0000000000..db121f16f2 --- /dev/null +++ b/examples/aws-privatelink-endpoint/data-federation-online-archive/provider.tf @@ -0,0 +1,9 @@ +provider "mongodbatlas" { + public_key = var.public_key + private_key = var.private_key +} +provider "aws" { + access_key = var.access_key + secret_key = var.secret_key + region = "us-east-1" +} diff --git a/examples/aws-privatelink-endpoint/data-federation-online-archive/variables.tf b/examples/aws-privatelink-endpoint/data-federation-online-archive/variables.tf new file mode 100644 index 0000000000..49124d78b7 --- /dev/null +++ b/examples/aws-privatelink-endpoint/data-federation-online-archive/variables.tf @@ -0,0 +1,15 @@ +variable "public_key" { + description = "The public API key for MongoDB Atlas" +} +variable "private_key" { + description = "The private API key for MongoDB Atlas" +} +variable "access_key" { + description = "The access key for AWS Account" +} +variable "secret_key" { + description = "The secret key for AWS Account" +} +variable "project_id" { + description = "Atlas project ID" +} diff --git a/examples/aws-privatelink-endpoint/data-federation-online-archive/versions.tf b/examples/aws-privatelink-endpoint/data-federation-online-archive/versions.tf new file mode 100644 index 0000000000..5584f665d2 --- /dev/null +++ b/examples/aws-privatelink-endpoint/data-federation-online-archive/versions.tf @@ -0,0 +1,11 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + } + mongodbatlas = { + source = "mongodb/mongodbatlas" + } + } + required_version = ">= 0.13" +} diff --git a/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.go b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.go new file mode 100644 index 0000000000..2e9e4a6f8b --- /dev/null +++ b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.go @@ -0,0 +1,66 @@ +package mongodbatlas + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" +) + +func dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveRead, + Schema: map[string]*schema.Schema{ + "project_id": { + Type: schema.TypeString, + Required: true, + }, + "endpoint_id": { + Type: schema.TypeString, + Required: true, + }, + "provider_name": { + Type: schema.TypeString, + Computed: true, + }, + "comment": { + Type: schema.TypeString, + Computed: true, + }, + "type": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*MongoDBClient).Atlas + projectID := d.Get("project_id").(string) + endopointID := d.Get("endpoint_id").(string) + + privateEndpoint, _, err := conn.DataLakes.GetPrivateLinkEndpoint(context.Background(), projectID, endopointID) + if err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + if err := d.Set("comment", privateEndpoint.Comment); err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + if err := d.Set("provider_name", privateEndpoint.Provider); err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + if err := d.Set("type", privateEndpoint.Type); err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + d.SetId(encodeStateID(map[string]string{ + "project_id": projectID, + "endpoint_id": endopointID, + })) + + return nil +} diff --git a/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive_test.go b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive_test.go new file mode 100644 index 0000000000..594c692f7d --- /dev/null +++ b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive_test.go @@ -0,0 +1,50 @@ +package mongodbatlas + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var ( + dataSourcePrivatelinkEndpointServiceDataFederetionDataArchive = "data.mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.test" +) + +func TestAccDataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive_basic(t *testing.T) { + testCheckPrivateEndpointServiceDataFederationOnlineArchiveRun(t) + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + ProviderFactories: testAccProviderFactories, + CheckDestroy: testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveDestroy, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveConfig(projectID, endpointID), + Check: resource.ComposeTestCheckFunc( + testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveExists(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive), + resource.TestCheckResourceAttr(dataSourcePrivatelinkEndpointServiceDataFederetionDataArchive, "project_id", projectID), + resource.TestCheckResourceAttr(dataSourcePrivatelinkEndpointServiceDataFederetionDataArchive, "endpoint_id", endpointID), + resource.TestCheckResourceAttrSet(dataSourcePrivatelinkEndpointServiceDataFederetionDataArchive, "comment"), + resource.TestCheckResourceAttrSet(dataSourcePrivatelinkEndpointServiceDataFederetionDataArchive, "type"), + resource.TestCheckResourceAttrSet(dataSourcePrivatelinkEndpointServiceDataFederetionDataArchive, "provider_name"), + ), + }, + }, + }) +} + +func testAccDataSourceMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveConfig(projectID, endpointID string) string { + return fmt.Sprintf(` + resource "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = %[1]q + endpoint_id = %[2]q + provider_name = "AWS" + comment = "Terraform Acceptance Test" + } + + data "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.test.project_id + endpoint_id = mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.test.endpoint_id + } + `, projectID, endpointID) +} diff --git a/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archives.go b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archives.go new file mode 100644 index 0000000000..702c25bb17 --- /dev/null +++ b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archives.go @@ -0,0 +1,86 @@ +package mongodbatlas + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/id" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + matlas "go.mongodb.org/atlas/mongodbatlas" +) + +const errorPrivateEndpointServiceDataFederationOnlineArchiveList = "error reading Private Endpoings for projectId %s: %s" + +func dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchives() *schema.Resource { + return &schema.Resource{ + ReadContext: dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchivesRead, + Schema: map[string]*schema.Schema{ + "project_id": { + Type: schema.TypeString, + Required: true, + }, + "results": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "endpoint_id": { + Type: schema.TypeString, + Required: true, + }, + "provider_name": { + Type: schema.TypeString, + Computed: true, + }, + "comment": { + Type: schema.TypeString, + Computed: true, + }, + "type": { + Type: schema.TypeString, + Computed: true, + }, + }, + }, + }, + }, + } +} + +func dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchivesRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*MongoDBClient).Atlas + projectID := d.Get("project_id").(string) + + privateEndpoints, _, err := conn.DataLakes.ListPrivateLinkEndpoint(context.Background(), projectID) + if err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveList, projectID, err) + } + + if err := d.Set("results", flattenPrivateLinkEndpointDataLakeResponse(privateEndpoints.Results)); err != nil { + return diag.FromErr(fmt.Errorf(errorDataLakeSetting, "results", projectID, err)) + } + + d.SetId(id.UniqueId()) + + return nil +} + +func flattenPrivateLinkEndpointDataLakeResponse(atlasPrivateLinkEndpointDataLakes []*matlas.PrivateLinkEndpointDataLake) []map[string]interface{} { + if len(atlasPrivateLinkEndpointDataLakes) == 0 { + return []map[string]interface{}{} + } + + results := make([]map[string]interface{}, len(atlasPrivateLinkEndpointDataLakes)) + + for i, atlasPrivateLinkEndpointDataLake := range atlasPrivateLinkEndpointDataLakes { + results[i] = map[string]interface{}{ + "endpoint_id": atlasPrivateLinkEndpointDataLake.EndpointID, + "provider_name": atlasPrivateLinkEndpointDataLake.Provider, + "comment": atlasPrivateLinkEndpointDataLake.Comment, + "type": atlasPrivateLinkEndpointDataLake.Type, + } + } + + return results +} diff --git a/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archives_test.go b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archives_test.go new file mode 100644 index 0000000000..df71962e56 --- /dev/null +++ b/mongodbatlas/data_source_mongodbatlas_privatelink_endpoint_service_data_federation_online_archives_test.go @@ -0,0 +1,46 @@ +package mongodbatlas + +import ( + "fmt" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +var ( + dataSourcePrivatelinkEndpointServiceDataFederetionDataArchives = "data.mongodbatlas_privatelink_endpoint_service_data_federation_online_archives.test" +) + +func TestAccDataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchives_basic(t *testing.T) { + testCheckPrivateEndpointServiceDataFederationOnlineArchiveRun(t) + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + ProviderFactories: testAccProviderFactories, + CheckDestroy: testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveDestroy, + Steps: []resource.TestStep{ + { + Config: testAccDataSourceMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchivesConfig(projectID, endpointID), + Check: resource.ComposeTestCheckFunc( + testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveExists(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive), + resource.TestCheckResourceAttr(dataSourcePrivatelinkEndpointServiceDataFederetionDataArchives, "project_id", projectID), + resource.TestCheckResourceAttrSet(dataSourcePrivatelinkEndpointServiceDataFederetionDataArchives, "results.#"), + ), + }, + }, + }) +} + +func testAccDataSourceMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchivesConfig(projectID, endpointID string) string { + return fmt.Sprintf(` + resource "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = %[1]q + endpoint_id = %[2]q + provider_name = "AWS" + comment = "Terraform Acceptance Test" + } + + data "mongodbatlas_privatelink_endpoint_service_data_federation_online_archives" "test" { + project_id = mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.test.project_id + } + `, projectID, endpointID) +} diff --git a/mongodbatlas/provider.go b/mongodbatlas/provider.go index 904d3f4a1a..d74f6df56e 100644 --- a/mongodbatlas/provider.go +++ b/mongodbatlas/provider.go @@ -145,141 +145,144 @@ func Provider() *schema.Provider { func getDataSourcesMap() map[string]*schema.Resource { dataSourcesMap := map[string]*schema.Resource{ - "mongodbatlas_advanced_cluster": dataSourceMongoDBAtlasAdvancedCluster(), - "mongodbatlas_advanced_clusters": dataSourceMongoDBAtlasAdvancedClusters(), - "mongodbatlas_custom_db_role": dataSourceMongoDBAtlasCustomDBRole(), - "mongodbatlas_custom_db_roles": dataSourceMongoDBAtlasCustomDBRoles(), - "mongodbatlas_database_user": dataSourceMongoDBAtlasDatabaseUser(), - "mongodbatlas_database_users": dataSourceMongoDBAtlasDatabaseUsers(), - "mongodbatlas_api_key": dataSourceMongoDBAtlasAPIKey(), - "mongodbatlas_api_keys": dataSourceMongoDBAtlasAPIKeys(), - "mongodbatlas_access_list_api_key": dataSourceMongoDBAtlasAccessListAPIKey(), - "mongodbatlas_access_list_api_keys": dataSourceMongoDBAtlasAccessListAPIKeys(), - "mongodbatlas_project_api_key": dataSourceMongoDBAtlasProjectAPIKey(), - "mongodbatlas_project_api_keys": dataSourceMongoDBAtlasProjectAPIKeys(), - "mongodbatlas_roles_org_id": dataSourceMongoDBAtlasOrgID(), - "mongodbatlas_project": dataSourceMongoDBAtlasProject(), - "mongodbatlas_projects": dataSourceMongoDBAtlasProjects(), - "mongodbatlas_cluster": dataSourceMongoDBAtlasCluster(), - "mongodbatlas_clusters": dataSourceMongoDBAtlasClusters(), - "mongodbatlas_network_container": dataSourceMongoDBAtlasNetworkContainer(), - "mongodbatlas_network_containers": dataSourceMongoDBAtlasNetworkContainers(), - "mongodbatlas_network_peering": dataSourceMongoDBAtlasNetworkPeering(), - "mongodbatlas_network_peerings": dataSourceMongoDBAtlasNetworkPeerings(), - "mongodbatlas_maintenance_window": dataSourceMongoDBAtlasMaintenanceWindow(), - "mongodbatlas_auditing": dataSourceMongoDBAtlasAuditing(), - "mongodbatlas_team": dataSourceMongoDBAtlasTeam(), - "mongodbatlas_teams": dataSourceMongoDBAtlasTeam(), - "mongodbatlas_global_cluster_config": dataSourceMongoDBAtlasGlobalCluster(), - "mongodbatlas_alert_configuration": dataSourceMongoDBAtlasAlertConfiguration(), - "mongodbatlas_alert_configurations": dataSourceMongoDBAtlasAlertConfigurations(), - "mongodbatlas_x509_authentication_database_user": dataSourceMongoDBAtlasX509AuthDBUser(), - "mongodbatlas_private_endpoint_regional_mode": dataSourceMongoDBAtlasPrivateEndpointRegionalMode(), - "mongodbatlas_privatelink_endpoint": dataSourceMongoDBAtlasPrivateLinkEndpoint(), - "mongodbatlas_privatelink_endpoint_service": dataSourceMongoDBAtlasPrivateEndpointServiceLink(), - "mongodbatlas_privatelink_endpoint_service_serverless": dataSourceMongoDBAtlasPrivateLinkEndpointServerless(), - "mongodbatlas_privatelink_endpoints_service_serverless": dataSourceMongoDBAtlasPrivateLinkEndpointsServiceServerless(), - "mongodbatlas_privatelink_endpoint_service_adl": dataSourceMongoDBAtlasPrivateLinkEndpointServiceADL(), - "mongodbatlas_privatelink_endpoints_service_adl": dataSourceMongoDBAtlasPrivateLinkEndpointsServiceADL(), - "mongodbatlas_cloud_backup_schedule": dataSourceMongoDBAtlasCloudBackupSchedule(), - "mongodbatlas_third_party_integrations": dataSourceMongoDBAtlasThirdPartyIntegrations(), - "mongodbatlas_third_party_integration": dataSourceMongoDBAtlasThirdPartyIntegration(), - "mongodbatlas_project_ip_access_list": dataSourceMongoDBAtlasProjectIPAccessList(), - "mongodbatlas_cloud_provider_access": dataSourceMongoDBAtlasCloudProviderAccessList(), - "mongodbatlas_cloud_provider_access_setup": dataSourceMongoDBAtlasCloudProviderAccessSetup(), - "mongodbatlas_custom_dns_configuration_cluster_aws": dataSourceMongoDBAtlasCustomDNSConfigurationAWS(), - "mongodbatlas_online_archive": dataSourceMongoDBAtlasOnlineArchive(), - "mongodbatlas_online_archives": dataSourceMongoDBAtlasOnlineArchives(), - "mongodbatlas_ldap_configuration": dataSourceMongoDBAtlasLDAPConfiguration(), - "mongodbatlas_ldap_verify": dataSourceMongoDBAtlasLDAPVerify(), - "mongodbatlas_search_index": dataSourceMongoDBAtlasSearchIndex(), - "mongodbatlas_search_indexes": dataSourceMongoDBAtlasSearchIndexes(), - "mongodbatlas_data_lake": dataSourceMongoDBAtlasDataLake(), - "mongodbatlas_data_lakes": dataSourceMongoDBAtlasDataLakes(), - "mongodbatlas_data_lake_pipeline_run": dataSourceMongoDBAtlasDataLakePipelineRun(), - "mongodbatlas_data_lake_pipeline_runs": dataSourceMongoDBAtlasDataLakePipelineRuns(), - "mongodbatlas_data_lake_pipeline": dataSourceMongoDBAtlasDataLakePipeline(), - "mongodbatlas_data_lake_pipelines": dataSourceMongoDBAtlasDataLakePipelines(), - "mongodbatlas_event_trigger": dataSourceMongoDBAtlasEventTrigger(), - "mongodbatlas_event_triggers": dataSourceMongoDBAtlasEventTriggers(), - "mongodbatlas_project_invitation": dataSourceMongoDBAtlasProjectInvitation(), - "mongodbatlas_org_invitation": dataSourceMongoDBAtlasOrgInvitation(), - "mongodbatlas_cloud_backup_snapshot": dataSourceMongoDBAtlasCloudBackupSnapshot(), - "mongodbatlas_cloud_backup_snapshots": dataSourceMongoDBAtlasCloudBackupSnapshots(), - "mongodbatlas_backup_compliance_policy": dataSourceMongoDBAtlasBackupCompliancePolicy(), - "mongodbatlas_cloud_backup_snapshot_restore_job": dataSourceMongoDBAtlasCloudBackupSnapshotRestoreJob(), - "mongodbatlas_cloud_backup_snapshot_restore_jobs": dataSourceMongoDBAtlasCloudBackupSnapshotRestoreJobs(), - "mongodbatlas_cloud_backup_snapshot_export_bucket": datasourceMongoDBAtlasCloudBackupSnapshotExportBucket(), - "mongodbatlas_cloud_backup_snapshot_export_buckets": datasourceMongoDBAtlasCloudBackupSnapshotExportBuckets(), - "mongodbatlas_cloud_backup_snapshot_export_job": datasourceMongoDBAtlasCloudBackupSnapshotExportJob(), - "mongodbatlas_cloud_backup_snapshot_export_jobs": datasourceMongoDBAtlasCloudBackupSnapshotExportJobs(), - "mongodbatlas_federated_settings": dataSourceMongoDBAtlasFederatedSettings(), - "mongodbatlas_federated_settings_identity_provider": dataSourceMongoDBAtlasFederatedSettingsIdentityProvider(), - "mongodbatlas_federated_settings_identity_providers": dataSourceMongoDBAtlasFederatedSettingsIdentityProviders(), - "mongodbatlas_federated_settings_org_config": dataSourceMongoDBAtlasFederatedSettingsOrganizationConfig(), - "mongodbatlas_federated_settings_org_configs": dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigs(), - "mongodbatlas_federated_settings_org_role_mapping": dataSourceMongoDBAtlasFederatedSettingsOrganizationRoleMapping(), - "mongodbatlas_federated_settings_org_role_mappings": dataSourceMongoDBAtlasFederatedSettingsOrganizationRoleMappings(), - "mongodbatlas_federated_database_instance": dataSourceMongoDBAtlasFederatedDatabaseInstance(), - "mongodbatlas_federated_database_instances": dataSourceMongoDBAtlasFederatedDatabaseInstances(), - "mongodbatlas_serverless_instance": dataSourceMongoDBAtlasServerlessInstance(), - "mongodbatlas_serverless_instances": dataSourceMongoDBAtlasServerlessInstances(), + "mongodbatlas_advanced_cluster": dataSourceMongoDBAtlasAdvancedCluster(), + "mongodbatlas_advanced_clusters": dataSourceMongoDBAtlasAdvancedClusters(), + "mongodbatlas_custom_db_role": dataSourceMongoDBAtlasCustomDBRole(), + "mongodbatlas_custom_db_roles": dataSourceMongoDBAtlasCustomDBRoles(), + "mongodbatlas_database_user": dataSourceMongoDBAtlasDatabaseUser(), + "mongodbatlas_database_users": dataSourceMongoDBAtlasDatabaseUsers(), + "mongodbatlas_api_key": dataSourceMongoDBAtlasAPIKey(), + "mongodbatlas_api_keys": dataSourceMongoDBAtlasAPIKeys(), + "mongodbatlas_access_list_api_key": dataSourceMongoDBAtlasAccessListAPIKey(), + "mongodbatlas_access_list_api_keys": dataSourceMongoDBAtlasAccessListAPIKeys(), + "mongodbatlas_project_api_key": dataSourceMongoDBAtlasProjectAPIKey(), + "mongodbatlas_project_api_keys": dataSourceMongoDBAtlasProjectAPIKeys(), + "mongodbatlas_roles_org_id": dataSourceMongoDBAtlasOrgID(), + "mongodbatlas_project": dataSourceMongoDBAtlasProject(), + "mongodbatlas_projects": dataSourceMongoDBAtlasProjects(), + "mongodbatlas_cluster": dataSourceMongoDBAtlasCluster(), + "mongodbatlas_clusters": dataSourceMongoDBAtlasClusters(), + "mongodbatlas_network_container": dataSourceMongoDBAtlasNetworkContainer(), + "mongodbatlas_network_containers": dataSourceMongoDBAtlasNetworkContainers(), + "mongodbatlas_network_peering": dataSourceMongoDBAtlasNetworkPeering(), + "mongodbatlas_network_peerings": dataSourceMongoDBAtlasNetworkPeerings(), + "mongodbatlas_maintenance_window": dataSourceMongoDBAtlasMaintenanceWindow(), + "mongodbatlas_auditing": dataSourceMongoDBAtlasAuditing(), + "mongodbatlas_team": dataSourceMongoDBAtlasTeam(), + "mongodbatlas_teams": dataSourceMongoDBAtlasTeam(), + "mongodbatlas_global_cluster_config": dataSourceMongoDBAtlasGlobalCluster(), + "mongodbatlas_alert_configuration": dataSourceMongoDBAtlasAlertConfiguration(), + "mongodbatlas_alert_configurations": dataSourceMongoDBAtlasAlertConfigurations(), + "mongodbatlas_x509_authentication_database_user": dataSourceMongoDBAtlasX509AuthDBUser(), + "mongodbatlas_private_endpoint_regional_mode": dataSourceMongoDBAtlasPrivateEndpointRegionalMode(), + "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive": dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive(), + "mongodbatlas_privatelink_endpoint_service_data_federation_online_archives": dataSourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchives(), + "mongodbatlas_privatelink_endpoint": dataSourceMongoDBAtlasPrivateLinkEndpoint(), + "mongodbatlas_privatelink_endpoint_service": dataSourceMongoDBAtlasPrivateEndpointServiceLink(), + "mongodbatlas_privatelink_endpoint_service_serverless": dataSourceMongoDBAtlasPrivateLinkEndpointServerless(), + "mongodbatlas_privatelink_endpoints_service_serverless": dataSourceMongoDBAtlasPrivateLinkEndpointsServiceServerless(), + "mongodbatlas_privatelink_endpoint_service_adl": dataSourceMongoDBAtlasPrivateLinkEndpointServiceADL(), + "mongodbatlas_privatelink_endpoints_service_adl": dataSourceMongoDBAtlasPrivateLinkEndpointsServiceADL(), + "mongodbatlas_cloud_backup_schedule": dataSourceMongoDBAtlasCloudBackupSchedule(), + "mongodbatlas_third_party_integrations": dataSourceMongoDBAtlasThirdPartyIntegrations(), + "mongodbatlas_third_party_integration": dataSourceMongoDBAtlasThirdPartyIntegration(), + "mongodbatlas_project_ip_access_list": dataSourceMongoDBAtlasProjectIPAccessList(), + "mongodbatlas_cloud_provider_access": dataSourceMongoDBAtlasCloudProviderAccessList(), + "mongodbatlas_cloud_provider_access_setup": dataSourceMongoDBAtlasCloudProviderAccessSetup(), + "mongodbatlas_custom_dns_configuration_cluster_aws": dataSourceMongoDBAtlasCustomDNSConfigurationAWS(), + "mongodbatlas_online_archive": dataSourceMongoDBAtlasOnlineArchive(), + "mongodbatlas_online_archives": dataSourceMongoDBAtlasOnlineArchives(), + "mongodbatlas_ldap_configuration": dataSourceMongoDBAtlasLDAPConfiguration(), + "mongodbatlas_ldap_verify": dataSourceMongoDBAtlasLDAPVerify(), + "mongodbatlas_search_index": dataSourceMongoDBAtlasSearchIndex(), + "mongodbatlas_search_indexes": dataSourceMongoDBAtlasSearchIndexes(), + "mongodbatlas_data_lake": dataSourceMongoDBAtlasDataLake(), + "mongodbatlas_data_lakes": dataSourceMongoDBAtlasDataLakes(), + "mongodbatlas_data_lake_pipeline_run": dataSourceMongoDBAtlasDataLakePipelineRun(), + "mongodbatlas_data_lake_pipeline_runs": dataSourceMongoDBAtlasDataLakePipelineRuns(), + "mongodbatlas_data_lake_pipeline": dataSourceMongoDBAtlasDataLakePipeline(), + "mongodbatlas_data_lake_pipelines": dataSourceMongoDBAtlasDataLakePipelines(), + "mongodbatlas_event_trigger": dataSourceMongoDBAtlasEventTrigger(), + "mongodbatlas_event_triggers": dataSourceMongoDBAtlasEventTriggers(), + "mongodbatlas_project_invitation": dataSourceMongoDBAtlasProjectInvitation(), + "mongodbatlas_org_invitation": dataSourceMongoDBAtlasOrgInvitation(), + "mongodbatlas_cloud_backup_snapshot": dataSourceMongoDBAtlasCloudBackupSnapshot(), + "mongodbatlas_cloud_backup_snapshots": dataSourceMongoDBAtlasCloudBackupSnapshots(), + "mongodbatlas_backup_compliance_policy": dataSourceMongoDBAtlasBackupCompliancePolicy(), + "mongodbatlas_cloud_backup_snapshot_restore_job": dataSourceMongoDBAtlasCloudBackupSnapshotRestoreJob(), + "mongodbatlas_cloud_backup_snapshot_restore_jobs": dataSourceMongoDBAtlasCloudBackupSnapshotRestoreJobs(), + "mongodbatlas_cloud_backup_snapshot_export_bucket": datasourceMongoDBAtlasCloudBackupSnapshotExportBucket(), + "mongodbatlas_cloud_backup_snapshot_export_buckets": datasourceMongoDBAtlasCloudBackupSnapshotExportBuckets(), + "mongodbatlas_cloud_backup_snapshot_export_job": datasourceMongoDBAtlasCloudBackupSnapshotExportJob(), + "mongodbatlas_cloud_backup_snapshot_export_jobs": datasourceMongoDBAtlasCloudBackupSnapshotExportJobs(), + "mongodbatlas_federated_settings": dataSourceMongoDBAtlasFederatedSettings(), + "mongodbatlas_federated_settings_identity_provider": dataSourceMongoDBAtlasFederatedSettingsIdentityProvider(), + "mongodbatlas_federated_settings_identity_providers": dataSourceMongoDBAtlasFederatedSettingsIdentityProviders(), + "mongodbatlas_federated_settings_org_config": dataSourceMongoDBAtlasFederatedSettingsOrganizationConfig(), + "mongodbatlas_federated_settings_org_configs": dataSourceMongoDBAtlasFederatedSettingsOrganizationConfigs(), + "mongodbatlas_federated_settings_org_role_mapping": dataSourceMongoDBAtlasFederatedSettingsOrganizationRoleMapping(), + "mongodbatlas_federated_settings_org_role_mappings": dataSourceMongoDBAtlasFederatedSettingsOrganizationRoleMappings(), + "mongodbatlas_federated_database_instance": dataSourceMongoDBAtlasFederatedDatabaseInstance(), + "mongodbatlas_federated_database_instances": dataSourceMongoDBAtlasFederatedDatabaseInstances(), + "mongodbatlas_serverless_instance": dataSourceMongoDBAtlasServerlessInstance(), + "mongodbatlas_serverless_instances": dataSourceMongoDBAtlasServerlessInstances(), } return dataSourcesMap } func getResourcesMap() map[string]*schema.Resource { resourcesMap := map[string]*schema.Resource{ - "mongodbatlas_advanced_cluster": resourceMongoDBAtlasAdvancedCluster(), - "mongodbatlas_api_key": resourceMongoDBAtlasAPIKey(), - "mongodbatlas_access_list_api_key": resourceMongoDBAtlasAccessListAPIKey(), - "mongodbatlas_project_api_key": resourceMongoDBAtlasProjectAPIKey(), - "mongodbatlas_custom_db_role": resourceMongoDBAtlasCustomDBRole(), - "mongodbatlas_database_user": resourceMongoDBAtlasDatabaseUser(), - "mongodbatlas_project": resourceMongoDBAtlasProject(), - "mongodbatlas_cluster": resourceMongoDBAtlasCluster(), - "mongodbatlas_network_container": resourceMongoDBAtlasNetworkContainer(), - "mongodbatlas_network_peering": resourceMongoDBAtlasNetworkPeering(), - "mongodbatlas_encryption_at_rest": resourceMongoDBAtlasEncryptionAtRest(), - "mongodbatlas_maintenance_window": resourceMongoDBAtlasMaintenanceWindow(), - "mongodbatlas_auditing": resourceMongoDBAtlasAuditing(), - "mongodbatlas_team": resourceMongoDBAtlasTeam(), - "mongodbatlas_teams": resourceMongoDBAtlasTeam(), - "mongodbatlas_global_cluster_config": resourceMongoDBAtlasGlobalCluster(), - "mongodbatlas_alert_configuration": resourceMongoDBAtlasAlertConfiguration(), - "mongodbatlas_x509_authentication_database_user": resourceMongoDBAtlasX509AuthDBUser(), - "mongodbatlas_private_endpoint_regional_mode": resourceMongoDBAtlasPrivateEndpointRegionalMode(), - "mongodbatlas_privatelink_endpoint": resourceMongoDBAtlasPrivateLinkEndpoint(), - "mongodbatlas_privatelink_endpoint_serverless": resourceMongoDBAtlasPrivateLinkEndpointServerless(), - "mongodbatlas_privatelink_endpoint_service": resourceMongoDBAtlasPrivateEndpointServiceLink(), - "mongodbatlas_privatelink_endpoint_service_adl": resourceMongoDBAtlasPrivateLinkEndpointServiceADL(), - "mongodbatlas_privatelink_endpoint_service_serverless": resourceMongoDBAtlasPrivateLinkEndpointServiceServerless(), - "mongodbatlas_third_party_integration": resourceMongoDBAtlasThirdPartyIntegration(), - "mongodbatlas_project_ip_access_list": resourceMongoDBAtlasProjectIPAccessList(), - "mongodbatlas_cloud_provider_access": resourceMongoDBAtlasCloudProviderAccess(), - "mongodbatlas_online_archive": resourceMongoDBAtlasOnlineArchive(), - "mongodbatlas_custom_dns_configuration_cluster_aws": resourceMongoDBAtlasCustomDNSConfiguration(), - "mongodbatlas_ldap_configuration": resourceMongoDBAtlasLDAPConfiguration(), - "mongodbatlas_ldap_verify": resourceMongoDBAtlasLDAPVerify(), - "mongodbatlas_cloud_provider_access_setup": resourceMongoDBAtlasCloudProviderAccessSetup(), - "mongodbatlas_cloud_provider_access_authorization": resourceMongoDBAtlasCloudProviderAccessAuthorization(), - "mongodbatlas_search_index": resourceMongoDBAtlasSearchIndex(), - "mongodbatlas_data_lake": resourceMongoDBAtlasDataLake(), - "mongodbatlas_data_lake_pipeline": resourceMongoDBAtlasDataLakePipeline(), - "mongodbatlas_event_trigger": resourceMongoDBAtlasEventTriggers(), - "mongodbatlas_cloud_backup_schedule": resourceMongoDBAtlasCloudBackupSchedule(), - "mongodbatlas_project_invitation": resourceMongoDBAtlasProjectInvitation(), - "mongodbatlas_org_invitation": resourceMongoDBAtlasOrgInvitation(), - "mongodbatlas_cloud_backup_snapshot": resourceMongoDBAtlasCloudBackupSnapshot(), - "mongodbatlas_backup_compliance_policy": resourceMongoDBAtlasBackupCompliancePolicy(), - "mongodbatlas_cloud_backup_snapshot_restore_job": resourceMongoDBAtlasCloudBackupSnapshotRestoreJob(), - "mongodbatlas_cloud_backup_snapshot_export_bucket": resourceMongoDBAtlasCloudBackupSnapshotExportBucket(), - "mongodbatlas_cloud_backup_snapshot_export_job": resourceMongoDBAtlasCloudBackupSnapshotExportJob(), - "mongodbatlas_federated_settings_org_config": resourceMongoDBAtlasFederatedSettingsOrganizationConfig(), - "mongodbatlas_federated_settings_org_role_mapping": resourceMongoDBAtlasFederatedSettingsOrganizationRoleMapping(), - "mongodbatlas_federated_settings_identity_provider": resourceMongoDBAtlasFederatedSettingsIdentityProvider(), - "mongodbatlas_federated_database_instance": resourceMongoDBAtlasFederatedDatabaseInstance(), - "mongodbatlas_serverless_instance": resourceMongoDBAtlasServerlessInstance(), + "mongodbatlas_advanced_cluster": resourceMongoDBAtlasAdvancedCluster(), + "mongodbatlas_api_key": resourceMongoDBAtlasAPIKey(), + "mongodbatlas_access_list_api_key": resourceMongoDBAtlasAccessListAPIKey(), + "mongodbatlas_project_api_key": resourceMongoDBAtlasProjectAPIKey(), + "mongodbatlas_custom_db_role": resourceMongoDBAtlasCustomDBRole(), + "mongodbatlas_database_user": resourceMongoDBAtlasDatabaseUser(), + "mongodbatlas_project": resourceMongoDBAtlasProject(), + "mongodbatlas_cluster": resourceMongoDBAtlasCluster(), + "mongodbatlas_network_container": resourceMongoDBAtlasNetworkContainer(), + "mongodbatlas_network_peering": resourceMongoDBAtlasNetworkPeering(), + "mongodbatlas_encryption_at_rest": resourceMongoDBAtlasEncryptionAtRest(), + "mongodbatlas_maintenance_window": resourceMongoDBAtlasMaintenanceWindow(), + "mongodbatlas_auditing": resourceMongoDBAtlasAuditing(), + "mongodbatlas_team": resourceMongoDBAtlasTeam(), + "mongodbatlas_teams": resourceMongoDBAtlasTeam(), + "mongodbatlas_global_cluster_config": resourceMongoDBAtlasGlobalCluster(), + "mongodbatlas_alert_configuration": resourceMongoDBAtlasAlertConfiguration(), + "mongodbatlas_x509_authentication_database_user": resourceMongoDBAtlasX509AuthDBUser(), + "mongodbatlas_private_endpoint_regional_mode": resourceMongoDBAtlasPrivateEndpointRegionalMode(), + "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive": resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive(), + "mongodbatlas_privatelink_endpoint": resourceMongoDBAtlasPrivateLinkEndpoint(), + "mongodbatlas_privatelink_endpoint_serverless": resourceMongoDBAtlasPrivateLinkEndpointServerless(), + "mongodbatlas_privatelink_endpoint_service": resourceMongoDBAtlasPrivateEndpointServiceLink(), + "mongodbatlas_privatelink_endpoint_service_adl": resourceMongoDBAtlasPrivateLinkEndpointServiceADL(), + "mongodbatlas_privatelink_endpoint_service_serverless": resourceMongoDBAtlasPrivateLinkEndpointServiceServerless(), + "mongodbatlas_third_party_integration": resourceMongoDBAtlasThirdPartyIntegration(), + "mongodbatlas_project_ip_access_list": resourceMongoDBAtlasProjectIPAccessList(), + "mongodbatlas_cloud_provider_access": resourceMongoDBAtlasCloudProviderAccess(), + "mongodbatlas_online_archive": resourceMongoDBAtlasOnlineArchive(), + "mongodbatlas_custom_dns_configuration_cluster_aws": resourceMongoDBAtlasCustomDNSConfiguration(), + "mongodbatlas_ldap_configuration": resourceMongoDBAtlasLDAPConfiguration(), + "mongodbatlas_ldap_verify": resourceMongoDBAtlasLDAPVerify(), + "mongodbatlas_cloud_provider_access_setup": resourceMongoDBAtlasCloudProviderAccessSetup(), + "mongodbatlas_cloud_provider_access_authorization": resourceMongoDBAtlasCloudProviderAccessAuthorization(), + "mongodbatlas_search_index": resourceMongoDBAtlasSearchIndex(), + "mongodbatlas_data_lake": resourceMongoDBAtlasDataLake(), + "mongodbatlas_data_lake_pipeline": resourceMongoDBAtlasDataLakePipeline(), + "mongodbatlas_event_trigger": resourceMongoDBAtlasEventTriggers(), + "mongodbatlas_cloud_backup_schedule": resourceMongoDBAtlasCloudBackupSchedule(), + "mongodbatlas_project_invitation": resourceMongoDBAtlasProjectInvitation(), + "mongodbatlas_org_invitation": resourceMongoDBAtlasOrgInvitation(), + "mongodbatlas_cloud_backup_snapshot": resourceMongoDBAtlasCloudBackupSnapshot(), + "mongodbatlas_backup_compliance_policy": resourceMongoDBAtlasBackupCompliancePolicy(), + "mongodbatlas_cloud_backup_snapshot_restore_job": resourceMongoDBAtlasCloudBackupSnapshotRestoreJob(), + "mongodbatlas_cloud_backup_snapshot_export_bucket": resourceMongoDBAtlasCloudBackupSnapshotExportBucket(), + "mongodbatlas_cloud_backup_snapshot_export_job": resourceMongoDBAtlasCloudBackupSnapshotExportJob(), + "mongodbatlas_federated_settings_org_config": resourceMongoDBAtlasFederatedSettingsOrganizationConfig(), + "mongodbatlas_federated_settings_org_role_mapping": resourceMongoDBAtlasFederatedSettingsOrganizationRoleMapping(), + "mongodbatlas_federated_settings_identity_provider": resourceMongoDBAtlasFederatedSettingsIdentityProvider(), + "mongodbatlas_federated_database_instance": resourceMongoDBAtlasFederatedDatabaseInstance(), + "mongodbatlas_serverless_instance": resourceMongoDBAtlasServerlessInstance(), } return resourcesMap } diff --git a/mongodbatlas/provider_test.go b/mongodbatlas/provider_test.go index 0335be2f92..6689d6bfdf 100644 --- a/mongodbatlas/provider_test.go +++ b/mongodbatlas/provider_test.go @@ -220,3 +220,9 @@ func testCheckFederatedSettings(tb testing.TB) { tb.Fatal("`MONGODB_ATLAS_FEDERATED_PROJECT_ID`, `MONGODB_ATLAS_FEDERATED_ORG_ID` and `MONGODB_ATLAS_FEDERATION_SETTINGS_ID` must be set for federated settings/verify acceptance testing") } } + +func testCheckPrivateEndpointServiceDataFederationOnlineArchiveRun(tb testing.TB) { + if os.Getenv("MONGODB_ATLAS_PRIVATE_ENDPOINT_ID") == "" { + tb.Skip("`MONGODB_ATLAS_PRIVATE_ENDPOINT_ID` must be set for Private Endpoint Service Data Federation and Online Archive acceptance testing") + } +} diff --git a/mongodbatlas/resource_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.go b/mongodbatlas/resource_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.go new file mode 100644 index 0000000000..6e1f307edf --- /dev/null +++ b/mongodbatlas/resource_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.go @@ -0,0 +1,194 @@ +package mongodbatlas + +import ( + "context" + "errors" + "fmt" + "net/http" + "strings" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + matlas "go.mongodb.org/atlas/mongodbatlas" +) + +const ( + errorPrivateEndpointServiceDataFederationOnlineArchiveCreate = "error creating a Private Endpoing for projectId %s: %s" + errorPrivateEndpointServiceDataFederationOnlineArchiveDelete = "error deleting Private Endpoing %s for projectId %s: %s" + errorPrivateEndpointServiceDataFederationOnlineArchiveRead = "error reading Private Endpoing %s for projectId %s: %s" + errorPrivateEndpointServiceDataFederationOnlineArchiveImport = "error importing Private Endpoing %s for projectId %s: %w" + endpointType = "DATA_LAKE" +) + +func resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive() *schema.Resource { + return &schema.Resource{ + CreateContext: resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveCreate, + ReadContext: resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveRead, + DeleteContext: resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveDelete, + Importer: &schema.ResourceImporter{ + StateContext: resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveImportState, + }, + Schema: map[string]*schema.Schema{ + "project_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "endpoint_id": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "provider_name": { + Type: schema.TypeString, + Required: true, + ForceNew: true, + }, + "comment": { + Type: schema.TypeString, + Optional: true, + ForceNew: true, + }, + "type": { + Type: schema.TypeString, + Computed: true, + }, + }, + } +} + +func resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*MongoDBClient).Atlas + projectID := d.Get("project_id").(string) + endpointID := d.Get("endpoint_id").(string) + + _, _, err := conn.DataLakes.CreatePrivateLinkEndpoint(ctx, projectID, newPrivateLinkEndpointDataLake(d)) + if err != nil { + return diag.FromErr(fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveCreate, projectID, err)) + } + + d.SetId(encodeStateID(map[string]string{ + "project_id": projectID, + "endpoint_id": endpointID, + })) + + return resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveRead(ctx, d, meta) +} + +func resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*MongoDBClient).Atlas + ids := decodeStateID(d.Id()) + projectID := ids["project_id"] + endopointID := ids["endpoint_id"] + + privateEndpoint, resp, err := conn.DataLakes.GetPrivateLinkEndpoint(context.Background(), projectID, endopointID) + if err != nil { + if resp != nil && resp.StatusCode == http.StatusNotFound { + d.SetId("") + return nil + } + + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + if err := d.Set("comment", privateEndpoint.Comment); err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + if err := d.Set("provider_name", privateEndpoint.Provider); err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + if err := d.Set("type", privateEndpoint.Type); err != nil { + return diag.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveRead, endopointID, projectID, err) + } + + return nil +} + +func resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + conn := meta.(*MongoDBClient).Atlas + ids := decodeStateID(d.Id()) + projectID := ids["project_id"] + endpointID := ids["endpoint_id"] + + _, err := conn.DataLakes.DeletePrivateLinkEndpoint(ctx, projectID, endpointID) + if err != nil { + return diag.FromErr(fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveDelete, endpointID, projectID, err)) + } + + d.SetId("") + + return nil +} + +func resourceMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveImportState(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { + conn := meta.(*MongoDBClient).Atlas + projectID, endpointID, err := splitAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive(d.Id()) + if err != nil { + return nil, err + } + + privateEndpoint, _, err := conn.DataLakes.GetPrivateLinkEndpoint(ctx, projectID, endpointID) + if err != nil { + return nil, fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveImport, endpointID, projectID, err) + } + + if err := d.Set("comment", privateEndpoint.Comment); err != nil { + return nil, fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveImport, endpointID, projectID, err) + } + + if err := d.Set("provider_name", privateEndpoint.Provider); err != nil { + return nil, fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveImport, endpointID, projectID, err) + } + + if err := d.Set("type", privateEndpoint.Type); err != nil { + return nil, fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveImport, endpointID, projectID, err) + } + + if err := d.Set("endpoint_id", privateEndpoint.EndpointID); err != nil { + return nil, fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveImport, endpointID, projectID, err) + } + + if err := d.Set("project_id", projectID); err != nil { + return nil, fmt.Errorf(errorPrivateEndpointServiceDataFederationOnlineArchiveImport, endpointID, projectID, err) + } + + d.SetId(encodeStateID(map[string]string{ + "project_id": projectID, + "endpoint_id": endpointID, + })) + + return []*schema.ResourceData{d}, nil +} + +func splitAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive(id string) (projectID, endpointID string, err error) { + var parts = strings.Split(id, "--") + + if len(parts) != 2 { + err = errors.New("import format error: to import a Data Lake, use the format {project_id}--{name}") + return + } + + projectID = parts[0] + endpointID = parts[1] + + return +} + +func newPrivateLinkEndpointDataLake(d *schema.ResourceData) *matlas.PrivateLinkEndpointDataLake { + out := matlas.PrivateLinkEndpointDataLake{ + EndpointID: d.Get("endpoint_id").(string), + Type: endpointType, + } + + if v, ok := d.GetOk("comment"); ok { + out.Comment = v.(string) + } + + if v, ok := d.GetOk("provider_name"); ok && v != "" { + out.Provider = strings.ToUpper(v.(string)) + } + + return &out +} diff --git a/mongodbatlas/resource_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive_test.go b/mongodbatlas/resource_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive_test.go new file mode 100644 index 0000000000..f19404abb5 --- /dev/null +++ b/mongodbatlas/resource_mongodbatlas_privatelink_endpoint_service_data_federation_online_archive_test.go @@ -0,0 +1,114 @@ +package mongodbatlas + +import ( + "context" + "fmt" + "os" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + "github.com/hashicorp/terraform-plugin-sdk/v2/terraform" +) + +var ( + resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive = "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.test" + projectID = os.Getenv("MONGODB_ATLAS_PROJECT_ID") + endpointID = os.Getenv("MONGODB_ATLAS_PRIVATE_ENDPOINT_ID") +) + +func TestAccMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchive_basic(t *testing.T) { + testCheckPrivateEndpointServiceDataFederationOnlineArchiveRun(t) + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + ProviderFactories: testAccProviderFactories, + CheckDestroy: testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveDestroy, + Steps: []resource.TestStep{ + { + Config: testAccMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveConfig(projectID, endpointID), + Check: resource.ComposeTestCheckFunc( + testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveExists(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive), + resource.TestCheckResourceAttr(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive, "project_id", projectID), + resource.TestCheckResourceAttr(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive, "endpoint_id", endpointID), + resource.TestCheckResourceAttrSet(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive, "comment"), + resource.TestCheckResourceAttrSet(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive, "type"), + resource.TestCheckResourceAttrSet(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive, "provider_name"), + ), + }, + { + ResourceName: resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive, + ImportStateIdFunc: testAccCheckMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveFunc(resourceNamePrivatelinkEdnpointServiceDataFederationOnlineArchive), + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccCheckMongoDBAtlasPrivatelinkEndpointServiceDataFederationOnlineArchiveFunc(resourceName string) resource.ImportStateIdFunc { + return func(s *terraform.State) (string, error) { + rs, ok := s.RootModule().Resources[resourceName] + if !ok { + return "", fmt.Errorf("not found: %s", resourceName) + } + + ids := decodeStateID(rs.Primary.ID) + + return fmt.Sprintf("%s--%s", ids["project_id"], ids["endpoint_id"]), nil + } +} + +func testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveDestroy(s *terraform.State) error { + client := testAccProvider.Meta().(*MongoDBClient).Atlas + + for _, rs := range s.RootModule().Resources { + if rs.Type != "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" { + continue + } + + ids := decodeStateID(rs.Primary.ID) + + _, _, err := client.DataLakes.GetPrivateLinkEndpoint(context.Background(), ids["project_id"], ids["endpoint_id"]) + + if err == nil { + return fmt.Errorf("Private endpoint service data federation online archive still exists") + } + } + + return nil +} + +func testAccCheckMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveExists(resourceName string) resource.TestCheckFunc { + return func(s *terraform.State) error { + client := testAccProvider.Meta().(*MongoDBClient).Atlas + + rs, ok := s.RootModule().Resources[resourceName] + + if !ok { + return fmt.Errorf("Private endpoint service data federation online archive not found: %s", resourceName) + } + + if rs.Primary.ID == "" { + return fmt.Errorf("Private endpoint service data federation online archive ID not set") + } + + ids := decodeStateID(rs.Primary.ID) + _, _, err := client.DataLakes.GetPrivateLinkEndpoint(context.Background(), ids["project_id"], ids["endpoint_id"]) + + if err != nil { + return err + } + + return nil + } +} + +func testAccMongoDBAtlasPrivateEndpointServiceDataFederationOnlineArchiveConfig(projectID, endpointID string) string { + return fmt.Sprintf(` + resource "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = %[1]q + endpoint_id = %[2]q + provider_name = "AWS" + comment = "Terraform Acceptance Test" + } + `, projectID, endpointID) +} diff --git a/website/docs/d/privatelink_endpoint_service_data_federation_online_archive.markdown b/website/docs/d/privatelink_endpoint_service_data_federation_online_archive.markdown new file mode 100644 index 0000000000..aea5b2c3a9 --- /dev/null +++ b/website/docs/d/privatelink_endpoint_service_data_federation_online_archive.markdown @@ -0,0 +1,51 @@ +--- +layout: "mongodbatlas" +page_title: "MongoDB Atlas: mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" +sidebar_current: "docs-mongodbatlas-data-source-privatelink-endpoint-service-data-federation-online-archive" +description: |- + Provides a data source for a Private Endpoint Service Data Federation Online Archive. +--- + +# Data Source: mongodbatlas_privatelink_endpoint_service_data_federation_online_archive + +`mongodbatlas_privatelink_endpoint_service_data_federation_online_archive` describes a Private Endpoint Service resource for Data Federation and Online Archive. + +-> **NOTE:** Groups and projects are synonymous terms. You may find `groupId` in the official documentation. + +## Example Usage + +```terraform +resource "mongodbatlas_project" "atlas-project" { + org_id = var.atlas_org_id + name = var.atlas_project_name +} + +resource "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = mongodbatlas_project.atlas-project.id + endpoint_id = "" + provider_name = "AWS" + comment = "Test" +} + +data "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test_data_source" { + project_id = mongodbatlas_project.atlas-project.id + endpoint_id = mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.test.endpoint_id +} + + + +## Argument Reference + +* `project_id` (Required) - Unique 24-hexadecimal digit string that identifies your project. +* `endpoint_id` (Required) - Unique 22-character alphanumeric string that identifies the private endpoint. See [Atlas Data Lake supports Amazon Web Services private endpoints using the AWS PrivateLink feature](https://www.mongodb.com/docs/atlas/reference/api-resources-spec/#tag/Data-Federation/operation/createDataFederationPrivateEndpoint:~:text=Atlas%20Data%20Lake%20supports%20Amazon%20Web%20Services%20private%20endpoints%20using%20the%20AWS%20PrivateLink%20feature). + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `type` - Human-readable label that identifies the resource type associated with this private endpoint. +* `comment` - Human-readable string to associate with this private endpoint. +* `provider_name` - Human-readable label that identifies the cloud service provider. + +See [MongoDB Atlas API](https://www.mongodb.com/docs/atlas/reference/api-resources-spec/#tag/Data-Federation/operation/createDataFederationPrivateEndpoint) Documentation for more information. + diff --git a/website/docs/d/privatelink_endpoint_service_data_federation_online_archives.markdown b/website/docs/d/privatelink_endpoint_service_data_federation_online_archives.markdown new file mode 100644 index 0000000000..4dcabea393 --- /dev/null +++ b/website/docs/d/privatelink_endpoint_service_data_federation_online_archives.markdown @@ -0,0 +1,53 @@ +--- +layout: "mongodbatlas" +page_title: "MongoDB Atlas: mongodbatlas_privatelink_endpoint_service_data_federation_online_archives" +sidebar_current: "docs-mongodbatlas-data-source-privatelink-endpoint-service-data-federation-online-archives" +description: |- + Provides a data source for a Private Endpoints Service Data Federation Online Archive. +--- + +# Data Source: mongodbatlas_privatelink_endpoint_service_data_federation_online_archives + +`mongodbatlas_privatelink_endpoint_service_data_federation_online_archives` describes Private Endpoint Service resources for Data Federation and Online Archive. + +-> **NOTE:** Groups and projects are synonymous terms. You may find `groupId` in the official documentation. + +## Example Usage + +```terraform +resource "mongodbatlas_project" "atlas-project" { + org_id = var.atlas_org_id + name = var.atlas_project_name +} + +resource "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = mongodbatlas_project.atlas-project.id + endpoint_id = "" + provider_name = "AWS" + comment = "Test" +} + +data "mongodbatlas_privatelink_endpoint_service_data_federation_online_archives" "test_data_source" { + project_id = mongodbatlas_project.atlas-project.id +} + + + +## Argument Reference + +* `project_id` (Required) - Unique 24-hexadecimal digit string that identifies your project. + +## Attributes Reference +* `results` - A list where each represents a Private Endpoint Service + + +### Private Endpoint Service +In addition to all arguments above, the following attributes are exported: + +* `endpoint_id` - Unique 22-character alphanumeric string that identifies the private endpoint. See [Atlas Data Lake supports Amazon Web Services private endpoints using the AWS PrivateLink feature](https://www.mongodb.com/docs/atlas/reference/api-resources-spec/#tag/Data-Federation/operation/createDataFederationPrivateEndpoint:~:text=Atlas%20Data%20Lake%20supports%20Amazon%20Web%20Services%20private%20endpoints%20using%20the%20AWS%20PrivateLink%20feature). +* `type` - Human-readable label that identifies the resource type associated with this private endpoint. +* `comment` - Human-readable string to associate with this private endpoint. +* `provider_name` - Human-readable label that identifies the cloud service provider. + +See [MongoDB Atlas API](https://www.mongodb.com/docs/atlas/reference/api-resources-spec/#tag/Data-Federation/operation/createDataFederationPrivateEndpoint) Documentation for more information. + diff --git a/website/docs/r/privatelink_endpoint_service_data_federation_online_archive.markdown b/website/docs/r/privatelink_endpoint_service_data_federation_online_archive.markdown new file mode 100644 index 0000000000..340b3ef658 --- /dev/null +++ b/website/docs/r/privatelink_endpoint_service_data_federation_online_archive.markdown @@ -0,0 +1,52 @@ +--- +layout: "mongodbatlas" +page_title: "MongoDB Atlas: mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" +sidebar_current: "docs-mongodbatlas-resource-privatelink-endpoint-service-data-federation-online-archive" +description: |- + Provides a Privatelink Endpoint Service Data Federation Online Archive resource. +--- + +# Resource: mongodbatlas_privatelink_endpoint_service_data_federation_online_archive + +`mongodbatlas_privatelink_endpoint_service_data_federation_online_archive` provides a Private Endpoint Service resource for Data Federation and Online Archive. The resource allows you to create and manage a private endpoint for Federated Database Instances and Online Archives to the specified project. + +-> **NOTE:** Groups and projects are synonymous terms. You may find `groupId` in the official documentation. + +## Example Usage + +```terraform +resource "mongodbatlas_project" "atlas-project" { + org_id = var.atlas_org_id + name = var.atlas_project_name +} + +resource "mongodbatlas_privatelink_endpoint_service_data_federation_online_archive" "test" { + project_id = mongodbatlas_project.atlas-project.id + endpoint_id = "" + provider_name = "AWS" + comment = "Test" +} + +## Argument Reference + +* `project_id` (Required) - Unique 24-hexadecimal digit string that identifies your project. +* `endpoint_id` (Required) - Unique 22-character alphanumeric string that identifies the private endpoint. See [Atlas Data Lake supports Amazon Web Services private endpoints using the AWS PrivateLink feature](https://www.mongodb.com/docs/atlas/reference/api-resources-spec/#tag/Data-Federation/operation/createDataFederationPrivateEndpoint:~:text=Atlas%20Data%20Lake%20supports%20Amazon%20Web%20Services%20private%20endpoints%20using%20the%20AWS%20PrivateLink%20feature). +* `provider_name` (Required) - Human-readable label that identifies the cloud service provider. + +## Attributes Reference + +In addition to all arguments above, the following attributes are exported: + +* `type` - Human-readable label that identifies the resource type associated with this private endpoint. +* `comment` - Human-readable string to associate with this private endpoint. + +## Import + +Private Endpoint Service resource for Data Federation and Online Archive can be imported using project ID, endpoint ID, in the format `project_id`--`endpoint_id`, e.g. + +``` +$ terraform import mongodbatlas_privatelink_endpoint_service_data_federation_online_archive.example 1112222b3bf99403840e8934--vpce-3bf78b0ddee411ba1 +``` + +See [MongoDB Atlas API](https://www.mongodb.com/docs/atlas/reference/api-resources-spec/#tag/Data-Federation/operation/createDataFederationPrivateEndpoint) Documentation for more information. +