Skip to content

Commit

Permalink
Add new resource for Service Project for Apphub
Browse files Browse the repository at this point in the history
  • Loading branch information
eshagoel06 committed Feb 26, 2024
1 parent 5599650 commit 31bf4fb
Show file tree
Hide file tree
Showing 7 changed files with 179 additions and 0 deletions.
80 changes: 80 additions & 0 deletions mmv1/products/apphub/ServiceProject.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
--- !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: ServiceProject
description: |
Represents a Service project attachment to the Host Project.
immutable: true
autogen_async: true
custom_code: !ruby/object:Provider::Terraform::CustomCode
decoder: 'templates/terraform/decoders/apphub_service_project.go.erb'
examples:
- !ruby/object:Provider::Terraform::Examples
name: "service_project_basic"
primary_resource_id: "example"
config_path: "templates/terraform/examples/apphub_service_project_basic.tf.erb"
vars:
service_project_attachment_id: "project-1"
properties:
- !ruby/object:Api::Type::String
name: name
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
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
23 changes: 23 additions & 0 deletions mmv1/products/apphub/product.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Copyright 2023 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::Product
name: Apphub
display_name: App Hub
versions:
- !ruby/object:Api::Product::Version
name: ga
base_url: https://apphub.googleapis.com/v1/
scopes:
- https://www.googleapis.com/auth/cloud-platform
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
func expand<%= prefix -%><%= titlelize_property(property) -%>(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {

service_project := "projects/" + d.Get("service_project_attachment_id").(string)

return service_project, nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
func flatten<%= prefix -%><%= titlelize_property(property) -%>(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
delete (res, "name")

return res,nil
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
resource "google_apphub_service_project" "<%= 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"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
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)
}

0 comments on commit 31bf4fb

Please sign in to comment.