diff --git a/mmv1/products/apphub/ServiceProjectAttachment.yaml b/mmv1/products/apphub/ServiceProjectAttachment.yaml new file mode 100644 index 000000000000..f5e94f53f4c7 --- /dev/null +++ b/mmv1/products/apphub/ServiceProjectAttachment.yaml @@ -0,0 +1,102 @@ +# Copyright 2024 Google Inc. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +--- !ruby/object:Api::Resource +base_url: projects/{{project}}/locations/global/serviceProjectAttachments +create_url: projects/{{project}}/locations/global/serviceProjectAttachments?serviceProjectAttachmentId={{service_project_attachment_id}} +self_link: projects/{{project}}/locations/global/serviceProjectAttachments/{{service_project_attachment_id}} +id_format: projects/{{project}}/locations/global/serviceProjectAttachments/{{service_project_attachment_id}} +import_format: + - projects/{{project}}/locations/global/serviceProjectAttachments/{{service_project_attachment_id}} +name: ServiceProjectAttachment +description: | + Represents a Service project attachment to the Host Project. +immutable: true +autogen_async: true +custom_code: !ruby/object:Provider::Terraform::CustomCode + constants: 'templates/terraform/constants/apphub_service_project.go.erb' +examples: + - !ruby/object:Provider::Terraform::Examples + name: "service_project_attachment_basic" + primary_resource_id: "example" + config_path: "templates/terraform/examples/apphub_service_project_attachment_basic.tf.erb" + vars: + service_project_attachment_id: "project-1" + - !ruby/object:Provider::Terraform::Examples + name: "service_project_attachment_full" + primary_resource_id: "example2" + config_path: "templates/terraform/examples/apphub_service_project_attachment_full.tf.erb" + vars: + service_project_attachment_id: "project-1" +properties: + - !ruby/object:Api::Type::String + name: name + output: true + description: | + "Identifier. The resource name of a ServiceProjectAttachment. Format:\"projects/{host-project-id}/locations/global/serviceProjectAttachments/{service-project-id}.\" " + - !ruby/object:Api::Type::String + name: serviceProject + diff_suppress_func: 'ServiceProjectDiffSuppress' + custom_expand: 'templates/terraform/custom_expand/apphub_service_project.go.erb' + custom_flatten: 'templates/terraform/custom_flatten/apphub_service_project.go.erb' + description: | + "Required. Immutable. Service project name in the format: \"projects/abc\" + or \"projects/123\". As input, project name with either project id or number + are accepted. As output, this field will contain project number. " + immutable: true + - !ruby/object:Api::Type::String + name: createTime + description: 'Output only. Create time. ' + output: true + - !ruby/object:Api::Type::String + name: uid + description: "Output only. A globally unique identifier (in UUID4 format) for the `ServiceProjectAttachment`. " + output: true + - !ruby/object:Api::Type::Enum + name: 'state' + description: | + ServiceProjectAttachment state. + output: true + values: + - :STATE_UNSPECIFIED + - :CREATING + - :ACTIVE + - :DELETING +parameters: + - !ruby/object:Api::Type::String + name: serviceProjectAttachmentId + description: "Required. The service project attachment identifier must contain the + project_id of the service project specified in the service_project_attachment.service_project + field. Hint: \"projects/{project_id}\" " + url_param_only: true + required: true + immutable: true +async: !ruby/object:Api::OpAsync + operation: !ruby/object:Api::OpAsync::Operation + path: name + base_url: "{{op_id}}" + wait_ms: 1000 + timeouts: + result: !ruby/object:Api::OpAsync::Result + path: response + resource_inside_response: true + status: !ruby/object:Api::OpAsync::Status + path: done + complete: true + allowed: + - true + - false + error: !ruby/object:Api::OpAsync::Error + path: error + message: message diff --git a/mmv1/templates/terraform/constants/apphub_service_project.go.erb b/mmv1/templates/terraform/constants/apphub_service_project.go.erb new file mode 100644 index 000000000000..55e38f6b1d44 --- /dev/null +++ b/mmv1/templates/terraform/constants/apphub_service_project.go.erb @@ -0,0 +1,4 @@ +// Suppress all diff for the field Service Project +func ServiceProjectDiffSuppress(_, _, _ string, _ *schema.ResourceData) bool { + return true +} \ No newline at end of file diff --git a/mmv1/templates/terraform/decoders/apphub_service_project.go.erb b/mmv1/templates/terraform/decoders/apphub_service_project.go.erb deleted file mode 100644 index 854dfc72b9ca..000000000000 --- a/mmv1/templates/terraform/decoders/apphub_service_project.go.erb +++ /dev/null @@ -1,3 +0,0 @@ -delete (res, "name") - -return res,nil diff --git a/mmv1/templates/terraform/examples/apphub_service_project_basic.tf.erb b/mmv1/templates/terraform/examples/apphub_service_project_attachment_basic.tf.erb similarity index 70% rename from mmv1/templates/terraform/examples/apphub_service_project_basic.tf.erb rename to mmv1/templates/terraform/examples/apphub_service_project_attachment_basic.tf.erb index c16f49385ca8..212ecc283bed 100644 --- a/mmv1/templates/terraform/examples/apphub_service_project_basic.tf.erb +++ b/mmv1/templates/terraform/examples/apphub_service_project_attachment_basic.tf.erb @@ -1,8 +1,8 @@ -resource "google_apphub_service_project" "<%= ctx[:primary_resource_id] %>" { +resource "google_apphub_service_project_attachment" "<%= ctx[:primary_resource_id] %>" { service_project_attachment_id = google_project.service_project.project_id } resource "google_project" "service_project" { project_id ="<%= ctx[:vars]['service_project_attachment_id'] %>" name = "Service Project" -} +} \ No newline at end of file diff --git a/mmv1/templates/terraform/examples/apphub_service_project_attachment_full.tf.erb b/mmv1/templates/terraform/examples/apphub_service_project_attachment_full.tf.erb new file mode 100644 index 000000000000..9af921da4eec --- /dev/null +++ b/mmv1/templates/terraform/examples/apphub_service_project_attachment_full.tf.erb @@ -0,0 +1,9 @@ +resource "google_apphub_service_project_attachment" "<%= ctx[:primary_resource_id] %>" { + service_project_attachment_id = google_project.service_project_full.project_id + service_project = google_project.service_project_full.project_id +} + +resource "google_project" "service_project_full" { + project_id ="<%= ctx[:vars]['service_project_attachment_id'] %>" + name = "Service Project Full" +} diff --git a/mmv1/third_party/terraform/services/apphub/resource_apphub_service_project_attachment_test.go b/mmv1/third_party/terraform/services/apphub/resource_apphub_service_project_attachment_test.go new file mode 100644 index 000000000000..744c0e35d0eb --- /dev/null +++ b/mmv1/third_party/terraform/services/apphub/resource_apphub_service_project_attachment_test.go @@ -0,0 +1,104 @@ +package apphub_test + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" + + "github.com/hashicorp/terraform-provider-google/google/acctest" +) + +func TestAccApphubServiceProjectAttachment_serviceProjectAttachmentUpdateBasic(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": acctest.RandString(t, 10), + } + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckApphubServiceProjectAttachmentDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccApphubServiceProjectAttachment_serviceProjectAttachmentBasicExample(context), + }, + { + ResourceName: "google_apphub_service_project_attachment.example", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"service_project_attachment_id"}, + }, + { + Config: testAccApphubServiceProjectAttachment_serviceProjectAttachmentUpdateBasic(context), + }, + { + ResourceName: "google_apphub_service_project_attachment.example", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"service_project_attachment_id"}, + }, + }, + }) +} + +func testAccApphubServiceProjectAttachment_serviceProjectAttachmentUpdateBasic(context map[string]interface{}) string { + return acctest.Nprintf(` +resource "google_apphub_service_project_attachment" "example" { + service_project_attachment_id = google_project.service_project_new.project_id +} + +resource "google_project" "service_project_new" { + project_id ="tf-test-project-2%{random_suffix}" + name = "Service Project New" +} +`, context) +} + +func TestAccApphubServiceProjectAttachment_serviceProjectAttachmentUpdateFull(t *testing.T) { + t.Parallel() + + context := map[string]interface{}{ + "random_suffix": acctest.RandString(t, 10), + } + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckApphubServiceProjectAttachmentDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccApphubServiceProjectAttachment_serviceProjectAttachmentFullExample(context), + }, + { + ResourceName: "google_apphub_service_project_attachment.example", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"service_project_attachment_id"}, + }, + { + Config: testAccApphubServiceProjectAttachment_serviceProjectAttachmentUpdateFull(context), + }, + { + ResourceName: "google_apphub_service_project_attachment.example", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"service_project_attachment_id"}, + }, + }, + }) +} + +func testAccApphubServiceProjectAttachment_serviceProjectAttachmentUpdateFull(context map[string]interface{}) string { + return acctest.Nprintf(` +resource "google_apphub_service_project_attachment" "example2" { + service_project_attachment_id = google_project.service_project_full_new.project_id + service_project = google_project.service_project_full_new.project_id +} + +resource "google_project" "service_project_full_new" { + project_id ="tf-test-project-2%{random_suffix}" + name = "Service Project Full New" +} +`, context) +} diff --git a/mmv1/third_party/terraform/services/apphub/resource_apphub_service_project_test.go b/mmv1/third_party/terraform/services/apphub/resource_apphub_service_project_test.go deleted file mode 100644 index d6023cf540cf..000000000000 --- a/mmv1/third_party/terraform/services/apphub/resource_apphub_service_project_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package apphub_test - -import ( - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - "github.com/hashicorp/terraform-provider-google/google/acctest" -) - -func TestAccApphubServiceProject_serviceProjectUpdate(t *testing.T) { - t.Parallel() - - context := map[string]interface{}{ - "random_suffix": acctest.RandString(t, 10), - } - - acctest.VcrTest(t, resource.TestCase{ - PreCheck: func() { acctest.AccTestPreCheck(t) }, - ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), - CheckDestroy: testAccCheckApphubServiceProjectDestroyProducer(t), - Steps: []resource.TestStep{ - { - Config: testAccApphubServiceProject_serviceProjectBasicExample(context), - }, - { - ResourceName: "google_apphub_service_project.example", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"service_project_attachment_id"}, - }, - { - Config: testAccApphubServiceProject_serviceProjectUpdate(context), - }, - { - ResourceName: "google_apphub_service_project.example", - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"service_project_attachment_id"}, - }, - }, - }) -} - -func testAccApphubServiceProject_serviceProjectUpdate(context map[string]interface{}) string { - return acctest.Nprintf(` -resource "google_apphub_service_project" "example" { - service_project_attachment_id = google_project.service_project.project_id -} - -resource "google_project" "service_project" { - project_id ="tf-test-project-2%{random_suffix}" - name = "Service Project New" -} -`, context) -}