From afc340e93e64b9d6cd89e3d9196335978e824aeb Mon Sep 17 00:00:00 2001 From: The Magician Date: Mon, 17 Dec 2018 11:17:40 -0800 Subject: [PATCH] Remove duplicates from provider resource map, add dupe test (#2683) /cc @rileykarson --- google/provider.go | 278 +++++++++++++++++++--------------------- google/provider_test.go | 7 + google/utils.go | 14 +- 3 files changed, 154 insertions(+), 145 deletions(-) diff --git a/google/provider.go b/google/provider.go index adba6f4b..01e71541 100644 --- a/google/provider.go +++ b/google/provider.go @@ -72,8 +72,8 @@ func Provider() terraform.ResourceProvider { "google_compute_forwarding_rule": dataSourceGoogleComputeForwardingRule(), "google_compute_image": dataSourceGoogleComputeImage(), "google_compute_instance": dataSourceGoogleComputeInstance(), - "google_compute_instance_group": dataSourceGoogleComputeInstanceGroup(), "google_compute_global_address": dataSourceGoogleComputeGlobalAddress(), + "google_compute_instance_group": dataSourceGoogleComputeInstanceGroup(), "google_compute_lb_ip_ranges": dataSourceGoogleComputeLbIpRanges(), "google_compute_network": dataSourceGoogleComputeNetwork(), "google_compute_regions": dataSourceGoogleComputeRegions(), @@ -101,153 +101,145 @@ func Provider() terraform.ResourceProvider { "google_storage_project_service_account": dataSourceGoogleStorageProjectServiceAccount(), }, - ResourcesMap: mergeResourceMaps( - GeneratedComputeResourcesMap, - GeneratedDnsResourcesMap, - GeneratedRedisResourcesMap, - GeneratedResourceManagerResourcesMap, - GeneratedStorageResourcesMap, - GeneratedMonitoringResourcesMap, - map[string]*schema.Resource{ - "google_app_engine_application": resourceAppEngineApplication(), - "google_bigquery_dataset": resourceBigQueryDataset(), - "google_bigquery_table": resourceBigQueryTable(), - "google_bigtable_instance": resourceBigtableInstance(), - "google_bigtable_table": resourceBigtableTable(), - "google_billing_account_iam_binding": ResourceIamBindingWithImport(IamBillingAccountSchema, NewBillingAccountIamUpdater, BillingAccountIdParseFunc), - "google_billing_account_iam_member": ResourceIamMemberWithImport(IamBillingAccountSchema, NewBillingAccountIamUpdater, BillingAccountIdParseFunc), - "google_billing_account_iam_policy": ResourceIamPolicyWithImport(IamBillingAccountSchema, NewBillingAccountIamUpdater, BillingAccountIdParseFunc), - "google_cloudbuild_trigger": resourceCloudBuildTrigger(), - "google_cloudfunctions_function": resourceCloudFunctionsFunction(), - "google_cloudiot_registry": resourceCloudIoTRegistry(), - "google_composer_environment": resourceComposerEnvironment(), - "google_compute_autoscaler": resourceComputeAutoscaler(), - "google_compute_address": resourceComputeAddress(), - "google_compute_attached_disk": resourceComputeAttachedDisk(), - "google_compute_backend_service": resourceComputeBackendService(), - "google_compute_disk": resourceComputeDisk(), - "google_compute_firewall": resourceComputeFirewall(), - "google_compute_forwarding_rule": resourceComputeForwardingRule(), - "google_compute_global_forwarding_rule": resourceComputeGlobalForwardingRule(), - "google_compute_health_check": resourceComputeHealthCheck(), - "google_compute_image": resourceComputeImage(), - "google_compute_instance": resourceComputeInstance(), - "google_compute_instance_from_template": resourceComputeInstanceFromTemplate(), - "google_compute_instance_group": resourceComputeInstanceGroup(), - "google_compute_instance_group_manager": resourceComputeInstanceGroupManager(), - "google_compute_instance_template": resourceComputeInstanceTemplate(), - "google_compute_network": resourceComputeNetwork(), - "google_compute_network_peering": resourceComputeNetworkPeering(), - "google_compute_project_metadata": resourceComputeProjectMetadata(), - "google_compute_project_metadata_item": resourceComputeProjectMetadataItem(), - "google_compute_region_autoscaler": resourceComputeRegionAutoscaler(), - "google_compute_region_backend_service": resourceComputeRegionBackendService(), - "google_compute_region_instance_group_manager": resourceComputeRegionInstanceGroupManager(), - "google_compute_route": resourceComputeRoute(), - "google_compute_router": resourceComputeRouter(), - "google_compute_router_interface": resourceComputeRouterInterface(), - "google_compute_router_nat": resourceComputeRouterNat(), - "google_compute_router_peer": resourceComputeRouterPeer(), - "google_compute_security_policy": resourceComputeSecurityPolicy(), - "google_compute_shared_vpc_host_project": resourceComputeSharedVpcHostProject(), - "google_compute_shared_vpc_service_project": resourceComputeSharedVpcServiceProject(), - "google_compute_ssl_certificate": resourceComputeSslCertificate(), - "google_compute_ssl_policy": resourceComputeSslPolicy(), - "google_compute_subnetwork": resourceComputeSubnetwork(), - "google_compute_target_https_proxy": resourceComputeTargetHttpsProxy(), - "google_compute_target_tcp_proxy": resourceComputeTargetTcpProxy(), - "google_compute_target_pool": resourceComputeTargetPool(), - "google_compute_url_map": resourceComputeUrlMap(), - "google_compute_vpn_gateway": resourceComputeVpnGateway(), - "google_compute_vpn_tunnel": resourceComputeVpnTunnel(), - "google_container_cluster": resourceContainerCluster(), - "google_container_node_pool": resourceContainerNodePool(), - "google_dataflow_job": resourceDataflowJob(), - "google_dataproc_cluster": resourceDataprocCluster(), - "google_dataproc_job": resourceDataprocJob(), - "google_dns_record_set": resourceDnsRecordSet(), - "google_endpoints_service": resourceEndpointsService(), - "google_folder": resourceGoogleFolder(), - "google_folder_iam_binding": ResourceIamBindingWithImport(IamFolderSchema, NewFolderIamUpdater, FolderIdParseFunc), - "google_folder_iam_member": ResourceIamMemberWithImport(IamFolderSchema, NewFolderIamUpdater, FolderIdParseFunc), - "google_folder_iam_policy": ResourceIamPolicyWithImport(IamFolderSchema, NewFolderIamUpdater, FolderIdParseFunc), - "google_folder_organization_policy": resourceGoogleFolderOrganizationPolicy(), - "google_logging_billing_account_sink": resourceLoggingBillingAccountSink(), - "google_logging_billing_account_exclusion": ResourceLoggingExclusion(BillingAccountLoggingExclusionSchema, NewBillingAccountLoggingExclusionUpdater, billingAccountLoggingExclusionIdParseFunc), - "google_logging_organization_sink": resourceLoggingOrganizationSink(), - "google_logging_organization_exclusion": ResourceLoggingExclusion(OrganizationLoggingExclusionSchema, NewOrganizationLoggingExclusionUpdater, organizationLoggingExclusionIdParseFunc), - "google_logging_folder_sink": resourceLoggingFolderSink(), - "google_logging_folder_exclusion": ResourceLoggingExclusion(FolderLoggingExclusionSchema, NewFolderLoggingExclusionUpdater, folderLoggingExclusionIdParseFunc), - "google_logging_project_sink": resourceLoggingProjectSink(), - "google_logging_project_exclusion": ResourceLoggingExclusion(ProjectLoggingExclusionSchema, NewProjectLoggingExclusionUpdater, projectLoggingExclusionIdParseFunc), - "google_kms_key_ring": resourceKmsKeyRing(), - "google_kms_key_ring_iam_binding": ResourceIamBindingWithImport(IamKmsKeyRingSchema, NewKmsKeyRingIamUpdater, KeyRingIdParseFunc), - "google_kms_key_ring_iam_member": ResourceIamMemberWithImport(IamKmsKeyRingSchema, NewKmsKeyRingIamUpdater, KeyRingIdParseFunc), - "google_kms_key_ring_iam_policy": ResourceIamPolicyWithImport(IamKmsKeyRingSchema, NewKmsKeyRingIamUpdater, KeyRingIdParseFunc), - "google_kms_crypto_key": resourceKmsCryptoKey(), - "google_kms_crypto_key_iam_binding": ResourceIamBindingWithImport(IamKmsCryptoKeySchema, NewKmsCryptoKeyIamUpdater, CryptoIdParseFunc), - "google_kms_crypto_key_iam_member": ResourceIamMemberWithImport(IamKmsCryptoKeySchema, NewKmsCryptoKeyIamUpdater, CryptoIdParseFunc), - "google_sourcerepo_repository": resourceSourceRepoRepository(), - "google_spanner_instance": resourceSpannerInstance(), - "google_spanner_instance_iam_binding": ResourceIamBindingWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc), - "google_spanner_instance_iam_member": ResourceIamMemberWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc), - "google_spanner_instance_iam_policy": ResourceIamPolicyWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc), - "google_spanner_database": resourceSpannerDatabase(), - "google_spanner_database_iam_binding": ResourceIamBindingWithImport(IamSpannerDatabaseSchema, NewSpannerDatabaseIamUpdater, SpannerDatabaseIdParseFunc), - "google_spanner_database_iam_member": ResourceIamMemberWithImport(IamSpannerDatabaseSchema, NewSpannerDatabaseIamUpdater, SpannerDatabaseIdParseFunc), - "google_spanner_database_iam_policy": ResourceIamPolicyWithImport(IamSpannerDatabaseSchema, NewSpannerDatabaseIamUpdater, SpannerDatabaseIdParseFunc), - "google_sql_database": resourceSqlDatabase(), - "google_sql_database_instance": resourceSqlDatabaseInstance(), - "google_sql_ssl_cert": resourceSqlSslCert(), - "google_sql_user": resourceSqlUser(), - "google_organization_iam_binding": ResourceIamBindingWithImport(IamOrganizationSchema, NewOrganizationIamUpdater, OrgIdParseFunc), - "google_organization_iam_custom_role": resourceGoogleOrganizationIamCustomRole(), - "google_organization_iam_member": ResourceIamMemberWithImport(IamOrganizationSchema, NewOrganizationIamUpdater, OrgIdParseFunc), - "google_organization_iam_policy": ResourceIamPolicyWithImport(IamOrganizationSchema, NewOrganizationIamUpdater, OrgIdParseFunc), - "google_organization_policy": resourceGoogleOrganizationPolicy(), - "google_project": resourceGoogleProject(), - "google_project_iam_policy": resourceGoogleProjectIamPolicy(), - "google_project_iam_binding": ResourceIamBindingWithImport(IamProjectSchema, NewProjectIamUpdater, ProjectIdParseFunc), - "google_project_iam_member": ResourceIamMemberWithImport(IamProjectSchema, NewProjectIamUpdater, ProjectIdParseFunc), - "google_project_service": resourceGoogleProjectService(), - "google_project_iam_custom_role": resourceGoogleProjectIamCustomRole(), - "google_project_organization_policy": resourceGoogleProjectOrganizationPolicy(), - "google_project_usage_export_bucket": resourceProjectUsageBucket(), - "google_project_services": resourceGoogleProjectServices(), - "google_pubsub_topic": resourcePubsubTopic(), - "google_pubsub_topic_iam_binding": ResourceIamBindingWithImport(IamPubsubTopicSchema, NewPubsubTopicIamUpdater, PubsubTopicIdParseFunc), - "google_pubsub_topic_iam_member": ResourceIamMemberWithImport(IamPubsubTopicSchema, NewPubsubTopicIamUpdater, PubsubTopicIdParseFunc), - "google_pubsub_topic_iam_policy": ResourceIamPolicyWithImport(IamPubsubTopicSchema, NewPubsubTopicIamUpdater, PubsubTopicIdParseFunc), - "google_pubsub_subscription": resourcePubsubSubscription(), - "google_pubsub_subscription_iam_binding": ResourceIamBindingWithImport(IamPubsubSubscriptionSchema, NewPubsubSubscriptionIamUpdater, PubsubSubscriptionIdParseFunc), - "google_pubsub_subscription_iam_member": ResourceIamMemberWithImport(IamPubsubSubscriptionSchema, NewPubsubSubscriptionIamUpdater, PubsubSubscriptionIdParseFunc), - "google_pubsub_subscription_iam_policy": ResourceIamPolicyWithImport(IamPubsubSubscriptionSchema, NewPubsubSubscriptionIamUpdater, PubsubSubscriptionIdParseFunc), - "google_runtimeconfig_config": resourceRuntimeconfigConfig(), - "google_runtimeconfig_variable": resourceRuntimeconfigVariable(), - "google_service_account": resourceGoogleServiceAccount(), - "google_service_account_iam_binding": ResourceIamBindingWithImport(IamServiceAccountSchema, NewServiceAccountIamUpdater, ServiceAccountIdParseFunc), - "google_service_account_iam_member": ResourceIamMemberWithImport(IamServiceAccountSchema, NewServiceAccountIamUpdater, ServiceAccountIdParseFunc), - "google_service_account_iam_policy": ResourceIamPolicyWithImport(IamServiceAccountSchema, NewServiceAccountIamUpdater, ServiceAccountIdParseFunc), - "google_service_account_key": resourceGoogleServiceAccountKey(), - "google_storage_bucket": resourceStorageBucket(), - "google_storage_bucket_acl": resourceStorageBucketAcl(), - // Legacy roles such as roles/storage.legacyBucketReader are automatically added - // when creating a bucket. For this reason, it is better not to add the authoritative - // google_storage_bucket_iam_policy resource. - "google_storage_bucket_iam_binding": ResourceIamBinding(IamStorageBucketSchema, NewStorageBucketIamUpdater), - "google_storage_bucket_iam_member": ResourceIamMember(IamStorageBucketSchema, NewStorageBucketIamUpdater), - "google_storage_bucket_iam_policy": ResourceIamPolicy(IamStorageBucketSchema, NewStorageBucketIamUpdater), - "google_storage_bucket_object": resourceStorageBucketObject(), - "google_storage_object_acl": resourceStorageObjectAcl(), - "google_storage_default_object_acl": resourceStorageDefaultObjectAcl(), - "google_storage_notification": resourceStorageNotification(), - }, - ), + ResourcesMap: ResourceMap(), ConfigureFunc: providerConfigure, } } +func ResourceMap() map[string]*schema.Resource { + resourceMap, _ := ResourceMapWithErrors() + return resourceMap +} + +func ResourceMapWithErrors() (map[string]*schema.Resource, error) { + return mergeResourceMaps( + GeneratedComputeResourcesMap, + GeneratedDnsResourcesMap, + GeneratedRedisResourcesMap, + GeneratedResourceManagerResourcesMap, + GeneratedStorageResourcesMap, + GeneratedMonitoringResourcesMap, + map[string]*schema.Resource{ + "google_app_engine_application": resourceAppEngineApplication(), + "google_bigquery_dataset": resourceBigQueryDataset(), + "google_bigquery_table": resourceBigQueryTable(), + "google_bigtable_instance": resourceBigtableInstance(), + "google_bigtable_table": resourceBigtableTable(), + "google_billing_account_iam_binding": ResourceIamBindingWithImport(IamBillingAccountSchema, NewBillingAccountIamUpdater, BillingAccountIdParseFunc), + "google_billing_account_iam_member": ResourceIamMemberWithImport(IamBillingAccountSchema, NewBillingAccountIamUpdater, BillingAccountIdParseFunc), + "google_billing_account_iam_policy": ResourceIamPolicyWithImport(IamBillingAccountSchema, NewBillingAccountIamUpdater, BillingAccountIdParseFunc), + "google_cloudbuild_trigger": resourceCloudBuildTrigger(), + "google_cloudfunctions_function": resourceCloudFunctionsFunction(), + "google_cloudiot_registry": resourceCloudIoTRegistry(), + "google_composer_environment": resourceComposerEnvironment(), + "google_compute_attached_disk": resourceComputeAttachedDisk(), + "google_compute_backend_service": resourceComputeBackendService(), + "google_compute_global_forwarding_rule": resourceComputeGlobalForwardingRule(), + "google_compute_image": resourceComputeImage(), + "google_compute_instance": resourceComputeInstance(), + "google_compute_instance_from_template": resourceComputeInstanceFromTemplate(), + "google_compute_instance_group": resourceComputeInstanceGroup(), + "google_compute_instance_group_manager": resourceComputeInstanceGroupManager(), + "google_compute_instance_template": resourceComputeInstanceTemplate(), + "google_compute_network": resourceComputeNetwork(), + "google_compute_network_peering": resourceComputeNetworkPeering(), + "google_compute_project_metadata": resourceComputeProjectMetadata(), + "google_compute_project_metadata_item": resourceComputeProjectMetadataItem(), + "google_compute_region_backend_service": resourceComputeRegionBackendService(), + "google_compute_region_instance_group_manager": resourceComputeRegionInstanceGroupManager(), + "google_compute_router_interface": resourceComputeRouterInterface(), + "google_compute_router_nat": resourceComputeRouterNat(), + "google_compute_router_peer": resourceComputeRouterPeer(), + "google_compute_security_policy": resourceComputeSecurityPolicy(), + "google_compute_shared_vpc_host_project": resourceComputeSharedVpcHostProject(), + "google_compute_shared_vpc_service_project": resourceComputeSharedVpcServiceProject(), + "google_compute_target_pool": resourceComputeTargetPool(), + "google_container_cluster": resourceContainerCluster(), + "google_container_node_pool": resourceContainerNodePool(), + "google_dataflow_job": resourceDataflowJob(), + "google_dataproc_cluster": resourceDataprocCluster(), + "google_dataproc_job": resourceDataprocJob(), + "google_dns_record_set": resourceDnsRecordSet(), + "google_endpoints_service": resourceEndpointsService(), + "google_folder": resourceGoogleFolder(), + "google_folder_iam_binding": ResourceIamBindingWithImport(IamFolderSchema, NewFolderIamUpdater, FolderIdParseFunc), + "google_folder_iam_member": ResourceIamMemberWithImport(IamFolderSchema, NewFolderIamUpdater, FolderIdParseFunc), + "google_folder_iam_policy": ResourceIamPolicyWithImport(IamFolderSchema, NewFolderIamUpdater, FolderIdParseFunc), + "google_folder_organization_policy": resourceGoogleFolderOrganizationPolicy(), + "google_logging_billing_account_sink": resourceLoggingBillingAccountSink(), + "google_logging_billing_account_exclusion": ResourceLoggingExclusion(BillingAccountLoggingExclusionSchema, NewBillingAccountLoggingExclusionUpdater, billingAccountLoggingExclusionIdParseFunc), + "google_logging_organization_sink": resourceLoggingOrganizationSink(), + "google_logging_organization_exclusion": ResourceLoggingExclusion(OrganizationLoggingExclusionSchema, NewOrganizationLoggingExclusionUpdater, organizationLoggingExclusionIdParseFunc), + "google_logging_folder_sink": resourceLoggingFolderSink(), + "google_logging_folder_exclusion": ResourceLoggingExclusion(FolderLoggingExclusionSchema, NewFolderLoggingExclusionUpdater, folderLoggingExclusionIdParseFunc), + "google_logging_project_sink": resourceLoggingProjectSink(), + "google_logging_project_exclusion": ResourceLoggingExclusion(ProjectLoggingExclusionSchema, NewProjectLoggingExclusionUpdater, projectLoggingExclusionIdParseFunc), + "google_kms_key_ring": resourceKmsKeyRing(), + "google_kms_key_ring_iam_binding": ResourceIamBindingWithImport(IamKmsKeyRingSchema, NewKmsKeyRingIamUpdater, KeyRingIdParseFunc), + "google_kms_key_ring_iam_member": ResourceIamMemberWithImport(IamKmsKeyRingSchema, NewKmsKeyRingIamUpdater, KeyRingIdParseFunc), + "google_kms_key_ring_iam_policy": ResourceIamPolicyWithImport(IamKmsKeyRingSchema, NewKmsKeyRingIamUpdater, KeyRingIdParseFunc), + "google_kms_crypto_key": resourceKmsCryptoKey(), + "google_kms_crypto_key_iam_binding": ResourceIamBindingWithImport(IamKmsCryptoKeySchema, NewKmsCryptoKeyIamUpdater, CryptoIdParseFunc), + "google_kms_crypto_key_iam_member": ResourceIamMemberWithImport(IamKmsCryptoKeySchema, NewKmsCryptoKeyIamUpdater, CryptoIdParseFunc), + "google_sourcerepo_repository": resourceSourceRepoRepository(), + "google_spanner_instance": resourceSpannerInstance(), + "google_spanner_instance_iam_binding": ResourceIamBindingWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc), + "google_spanner_instance_iam_member": ResourceIamMemberWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc), + "google_spanner_instance_iam_policy": ResourceIamPolicyWithImport(IamSpannerInstanceSchema, NewSpannerInstanceIamUpdater, SpannerInstanceIdParseFunc), + "google_spanner_database": resourceSpannerDatabase(), + "google_spanner_database_iam_binding": ResourceIamBindingWithImport(IamSpannerDatabaseSchema, NewSpannerDatabaseIamUpdater, SpannerDatabaseIdParseFunc), + "google_spanner_database_iam_member": ResourceIamMemberWithImport(IamSpannerDatabaseSchema, NewSpannerDatabaseIamUpdater, SpannerDatabaseIdParseFunc), + "google_spanner_database_iam_policy": ResourceIamPolicyWithImport(IamSpannerDatabaseSchema, NewSpannerDatabaseIamUpdater, SpannerDatabaseIdParseFunc), + "google_sql_database": resourceSqlDatabase(), + "google_sql_database_instance": resourceSqlDatabaseInstance(), + "google_sql_ssl_cert": resourceSqlSslCert(), + "google_sql_user": resourceSqlUser(), + "google_organization_iam_binding": ResourceIamBindingWithImport(IamOrganizationSchema, NewOrganizationIamUpdater, OrgIdParseFunc), + "google_organization_iam_custom_role": resourceGoogleOrganizationIamCustomRole(), + "google_organization_iam_member": ResourceIamMemberWithImport(IamOrganizationSchema, NewOrganizationIamUpdater, OrgIdParseFunc), + "google_organization_iam_policy": ResourceIamPolicyWithImport(IamOrganizationSchema, NewOrganizationIamUpdater, OrgIdParseFunc), + "google_organization_policy": resourceGoogleOrganizationPolicy(), + "google_project": resourceGoogleProject(), + "google_project_iam_policy": resourceGoogleProjectIamPolicy(), + "google_project_iam_binding": ResourceIamBindingWithImport(IamProjectSchema, NewProjectIamUpdater, ProjectIdParseFunc), + "google_project_iam_member": ResourceIamMemberWithImport(IamProjectSchema, NewProjectIamUpdater, ProjectIdParseFunc), + "google_project_service": resourceGoogleProjectService(), + "google_project_iam_custom_role": resourceGoogleProjectIamCustomRole(), + "google_project_organization_policy": resourceGoogleProjectOrganizationPolicy(), + "google_project_usage_export_bucket": resourceProjectUsageBucket(), + "google_project_services": resourceGoogleProjectServices(), + "google_pubsub_topic": resourcePubsubTopic(), + "google_pubsub_topic_iam_binding": ResourceIamBindingWithImport(IamPubsubTopicSchema, NewPubsubTopicIamUpdater, PubsubTopicIdParseFunc), + "google_pubsub_topic_iam_member": ResourceIamMemberWithImport(IamPubsubTopicSchema, NewPubsubTopicIamUpdater, PubsubTopicIdParseFunc), + "google_pubsub_topic_iam_policy": ResourceIamPolicyWithImport(IamPubsubTopicSchema, NewPubsubTopicIamUpdater, PubsubTopicIdParseFunc), + "google_pubsub_subscription": resourcePubsubSubscription(), + "google_pubsub_subscription_iam_binding": ResourceIamBindingWithImport(IamPubsubSubscriptionSchema, NewPubsubSubscriptionIamUpdater, PubsubSubscriptionIdParseFunc), + "google_pubsub_subscription_iam_member": ResourceIamMemberWithImport(IamPubsubSubscriptionSchema, NewPubsubSubscriptionIamUpdater, PubsubSubscriptionIdParseFunc), + "google_pubsub_subscription_iam_policy": ResourceIamPolicyWithImport(IamPubsubSubscriptionSchema, NewPubsubSubscriptionIamUpdater, PubsubSubscriptionIdParseFunc), + "google_runtimeconfig_config": resourceRuntimeconfigConfig(), + "google_runtimeconfig_variable": resourceRuntimeconfigVariable(), + "google_service_account": resourceGoogleServiceAccount(), + "google_service_account_iam_binding": ResourceIamBindingWithImport(IamServiceAccountSchema, NewServiceAccountIamUpdater, ServiceAccountIdParseFunc), + "google_service_account_iam_member": ResourceIamMemberWithImport(IamServiceAccountSchema, NewServiceAccountIamUpdater, ServiceAccountIdParseFunc), + "google_service_account_iam_policy": ResourceIamPolicyWithImport(IamServiceAccountSchema, NewServiceAccountIamUpdater, ServiceAccountIdParseFunc), + "google_service_account_key": resourceGoogleServiceAccountKey(), + "google_storage_bucket": resourceStorageBucket(), + "google_storage_bucket_acl": resourceStorageBucketAcl(), + // Legacy roles such as roles/storage.legacyBucketReader are automatically added + // when creating a bucket. For this reason, it is better not to add the authoritative + // google_storage_bucket_iam_policy resource. + "google_storage_bucket_iam_binding": ResourceIamBinding(IamStorageBucketSchema, NewStorageBucketIamUpdater), + "google_storage_bucket_iam_member": ResourceIamMember(IamStorageBucketSchema, NewStorageBucketIamUpdater), + "google_storage_bucket_iam_policy": ResourceIamPolicy(IamStorageBucketSchema, NewStorageBucketIamUpdater), + "google_storage_bucket_object": resourceStorageBucketObject(), + "google_storage_object_acl": resourceStorageObjectAcl(), + "google_storage_default_object_acl": resourceStorageDefaultObjectAcl(), + "google_storage_notification": resourceStorageNotification(), + }, + ) +} + func providerConfigure(d *schema.ResourceData) (interface{}, error) { credentials := d.Get("credentials").(string) config := Config{ diff --git a/google/provider_test.go b/google/provider_test.go index bdaa686a..e3b34308 100644 --- a/google/provider_test.go +++ b/google/provider_test.go @@ -70,6 +70,13 @@ func TestProvider_impl(t *testing.T) { var _ terraform.ResourceProvider = Provider() } +func TestProvider_noDuplicatesInResourceMap(t *testing.T) { + _, err := ResourceMapWithErrors() + if err != nil { + t.Error(err) + } +} + func testAccPreCheck(t *testing.T) { if v := os.Getenv("GOOGLE_CREDENTIALS_FILE"); v != "" { creds, err := ioutil.ReadFile(v) diff --git a/google/utils.go b/google/utils.go index bd512094..31982f9f 100644 --- a/google/utils.go +++ b/google/utils.go @@ -348,16 +348,26 @@ func mergeSchemas(a, b map[string]*schema.Schema) map[string]*schema.Schema { return merged } -func mergeResourceMaps(ms ...map[string]*schema.Resource) map[string]*schema.Resource { +func mergeResourceMaps(ms ...map[string]*schema.Resource) (map[string]*schema.Resource, error) { merged := make(map[string]*schema.Resource) + duplicates := []string{} for _, m := range ms { for k, v := range m { + if _, ok := merged[k]; ok { + duplicates = append(duplicates, k) + } + merged[k] = v } } - return merged + var err error + if len(duplicates) > 0 { + err = fmt.Errorf("saw duplicates in mergeResourceMaps: %v", duplicates) + } + + return merged, err } func retry(retryFunc func() error) error {