diff --git a/products/apigateway/api.yaml b/products/apigateway/api.yaml index da42e296815e..154dfae87c08 100644 --- a/products/apigateway/api.yaml +++ b/products/apigateway/api.yaml @@ -99,7 +99,7 @@ objects: references: !ruby/object:Api::Resource::ReferenceLinks guides: 'Official Documentation': - 'https://cloud.google.com/api-gateway/docs/quickstart' + 'https://cloud.google.com/api-gateway/docs/creating-api-config' api: 'https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs' parameters: - !ruby/object:Api::Type::String @@ -113,7 +113,6 @@ objects: name: apiConfigId description: | Identifier to assign to the API Config. Must be unique within scope of the parent resource(api). - required: true input: true url_param_only: true properties: diff --git a/products/apigateway/terraform.yaml b/products/apigateway/terraform.yaml index 647bdbc4c68a..3f456253ef49 100644 --- a/products/apigateway/terraform.yaml +++ b/products/apigateway/terraform.yaml @@ -32,6 +32,7 @@ overrides: !ruby/object:Overrides::ResourceOverrides vars: name: "api" - !ruby/object:Provider::Terraform::Examples + skip_docs: true min_version: beta name: "apigateway_api_full" primary_resource_id: "api" @@ -43,6 +44,10 @@ overrides: !ruby/object:Overrides::ResourceOverrides managedService: !ruby/object:Overrides::Terraform::PropertyOverride default_from_api: true ApiConfig: !ruby/object:Overrides::Terraform::ResourceOverride + docs: !ruby/object:Provider::Terraform::Docs + optional_properties: | + * `api_config_id_prefix` - (Optional) Creates a unique name beginning with the + specified prefix. If this and api_config_id are unspecified, a random value is chosen for the name. timeouts: !ruby/object:Api::Timeouts insert_minutes: 6 update_minutes: 6 @@ -63,6 +68,7 @@ overrides: !ruby/object:Overrides::ResourceOverrides vars: name: "api-cfg" - !ruby/object:Provider::Terraform::Examples + skip_docs: true min_version: beta name: "apigateway_api_config_full" primary_resource_id: "api_cfg" @@ -73,6 +79,11 @@ overrides: !ruby/object:Overrides::ResourceOverrides default_from_api: true gatewayConfig: !ruby/object:Overrides::Terraform::PropertyOverride ignore_read: true + apiConfigId: !ruby/object:Overrides::Terraform::PropertyOverride + default_from_api: true + custom_code: !ruby/object:Provider::Terraform::CustomCode + extra_schema_entry: templates/terraform/extra_schema_entry/api_config.erb + encoder: 'templates/terraform/encoders/api_config.go.erb' Gateway: !ruby/object:Overrides::Terraform::ResourceOverride timeouts: !ruby/object:Api::Timeouts insert_minutes: 6 @@ -92,6 +103,7 @@ overrides: !ruby/object:Overrides::ResourceOverrides vars: name: "api-gw" - !ruby/object:Provider::Terraform::Examples + skip_docs: true min_version: beta name: "apigateway_gateway_full" primary_resource_id: "api_gw" diff --git a/templates/terraform/encoders/api_config.go.erb b/templates/terraform/encoders/api_config.go.erb new file mode 100644 index 000000000000..39d38b3d715c --- /dev/null +++ b/templates/terraform/encoders/api_config.go.erb @@ -0,0 +1,13 @@ +var apiConfigId string +if v, ok := d.GetOk("api_config_id"); ok { + apiConfigId = v.(string) +} else if v, ok := d.GetOk("api_config_id_prefix"); ok { + apiConfigId = resource.PrefixedUniqueId(v.(string)) +} else { + apiConfigId = resource.UniqueId() +} + +if err := d.Set("api_config_id", apiConfigId); err != nil { + return nil, fmt.Errorf("Error setting api_config_id: %s", err) +} +return obj, nil \ No newline at end of file diff --git a/templates/terraform/examples/apigateway_api_config_basic.tf.erb b/templates/terraform/examples/apigateway_api_config_basic.tf.erb index 869355cb55d1..7916082647f7 100644 --- a/templates/terraform/examples/apigateway_api_config_basic.tf.erb +++ b/templates/terraform/examples/apigateway_api_config_basic.tf.erb @@ -6,7 +6,7 @@ resource "google_api_gateway_api" "<%= ctx[:primary_resource_id] %>" { resource "google_api_gateway_api_config" "<%= ctx[:primary_resource_id] %>" { provider = google-beta api = google_api_gateway_api.<%= ctx[:primary_resource_id] %>.api_id - api_config_id = "<%= ctx[:vars]["name"] %>" + api_config_id_prefix = "api-cfg-" openapi_documents { document { @@ -14,4 +14,7 @@ resource "google_api_gateway_api_config" "<%= ctx[:primary_resource_id] %>" { contents = filebase64("test-fixtures/apigateway/openapi.yaml") } } + lifecycle { + create_before_destroy = true + } } diff --git a/templates/terraform/examples/apigateway_gateway_basic.tf.erb b/templates/terraform/examples/apigateway_gateway_basic.tf.erb index ab95187c8f16..28f12e0c7a28 100644 --- a/templates/terraform/examples/apigateway_gateway_basic.tf.erb +++ b/templates/terraform/examples/apigateway_gateway_basic.tf.erb @@ -6,7 +6,7 @@ resource "google_api_gateway_api" "<%= ctx[:primary_resource_id] %>" { resource "google_api_gateway_api_config" "<%= ctx[:primary_resource_id] %>" { provider = google-beta api = google_api_gateway_api.<%= ctx[:primary_resource_id] %>.api_id - api_config_id = "<%= ctx[:vars]["name"] %>" + api_config_id_prefix = "tf-test-" openapi_documents { document { @@ -14,6 +14,9 @@ resource "google_api_gateway_api_config" "<%= ctx[:primary_resource_id] %>" { contents = filebase64("test-fixtures/apigateway/openapi.yaml") } } + lifecycle { + create_before_destroy = true + } } resource "google_api_gateway_gateway" "<%= ctx[:primary_resource_id] %>" { diff --git a/templates/terraform/extra_schema_entry/api_config.erb b/templates/terraform/extra_schema_entry/api_config.erb new file mode 100644 index 000000000000..6dcbbe788285 --- /dev/null +++ b/templates/terraform/extra_schema_entry/api_config.erb @@ -0,0 +1,7 @@ +"api_config_id_prefix": { + Type: schema.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + ConflictsWith: []string{"api_config_id"}, +},