Skip to content

Commit

Permalink
google secure_source_manager hook resource
Browse files Browse the repository at this point in the history
  • Loading branch information
ericzzzzzzz committed Dec 9, 2024
1 parent e56ce0e commit 92928e3
Show file tree
Hide file tree
Showing 4 changed files with 310 additions and 0 deletions.
146 changes: 146 additions & 0 deletions mmv1/products/securesourcemanager/Hook.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# 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.

---
name: Hook
description: Hook is a user-defined HTTP callback triggered by an event.
references:
guides:
Official Documentation: https://cloud.google.com/secure-source-manager/docs/overview
docs: null
id_format: projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks/{{hook_id}}
base_url: projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks?hook_id={{hook_id}}
self_link: projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks/{{hook_id}}
import_format:
- projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks/{{hook_id}}
- "{{hook_id}}"
timeouts:
insert_minutes: 20
update_minutes: 20
delete_minutes: 20
autogen_async: true
update_verb: PATCH
update_mask: true
async:
actions:
- create
- delete
type: OpAsync
operation:
base_url: "{{op_id}}"
result:
resource_inside_response: false
custom_code: null
examples:
- name: secure_source_manager_hook_basic
primary_resource_id: basic
vars:
hook_id: my-basic-hook
repository_id: my-basic-repository
instance_id: my-basic-instance
prevent_destroy: "true"
test_vars_overrides:
prevent_destroy: "false"
oics_vars_overrides:
prevent_destroy: "false"
- name: secure_source_manager_hook_with_fields
primary_resource_id: default
vars:
hook_id: my-initial-hook
repository_id: my-initial-repository
instance_id: my-initial-instance
prevent_destroy: "true"
test_vars_overrides:
prevent_destroy: "false"
oics_vars_overrides:
prevent_destroy: "false"
parameters:
- name: hook_id
type: String
description: |
The ID for the Hook.
url_param_only: true
required: true
- name: location
type: String
description: |
The location for the Repository.
url_param_only: true
required: true
- name: repository_id
type: String
description: |
The ID for the Repository.
url_param_only: true
required: true
properties:
- name: name
type: String
description: >
A unique identifier for a Hook. The name should be of the format:
`projects/{project}/locations/{location_id}/repositories/{repository_id}/hooks/{hook_id}`
output: true
- name: targetUri
type: String
description: |
The target URI to which the payloads will be delivered.
required: true
- name: disabled
type: Boolean
description: |
Determines if the hook disabled or not.
Set to true to stop sending traffic.
- name: events
type: Array
description: |
The events that trigger hook on.
item_type:
type: Enum
enum_values:
- UNSPECIFIED
- PUSH
- PULL_REQUEST
- name: createTime
type: Time
description: |
Create timestamp.
output: true
- name: updateTime
type: Time
description: |
Update timestamp.
output: true
- name: uid
type: String
description: |
Unique identifier of the hook.
output: true
- name: etag
type: String
description: |
This checksum is computed by the server based on the value of other
fields, and may be sent on update and delete requests to ensure the
client has an up-to-date value before proceeding.
- name: pushOption
type: NestedObject
description: |
The trigger option for push events.
properties:
- name: branchFilter
type: String
description: |
Trigger hook for matching branches only.
Specified as glob pattern. If empty or *, events for all branches are
reported. Examples: main, {main,release*}.
See https://pkg.go.dev/github.com/gobwas/glob documentation.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
resource "google_secure_source_manager_instance" "instance" {
location = "us-central1"
instance_id = "{{index $.Vars "instance_id"}}"
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "{{index $.Vars "prevent_destroy"}}"
}
}

resource "google_secure_source_manager_repository" "repository" {
repository_id = "{{index $.Vars "repository_id"}}"
location = google_secure_source_manager_instance.instance.location
instance = google_secure_source_manager_instance.instance.name
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "{{index $.Vars "prevent_destroy"}}"
}
}

resource "google_secure_source_manager_hook" "basic" {
branch_rule_id = "{{index $.Vars "branch_rule_id"}}"
repository_id = google_secure_source_manager_repository.repository.repository_id
location = google_secure_source_manager_repository.repository.location
target_uri = "https://www.example.com"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
resource "google_secure_source_manager_instance" "instance" {
location = "us-central1"
instance_id = "{{index $.Vars "instance_id"}}"
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "{{index $.Vars "prevent_destroy"}}"
}
}

resource "google_secure_source_manager_repository" "repository" {
repository_id = "{{index $.Vars "repository_id"}}"
instance = google_secure_source_manager_instance.instance.name
location = google_secure_source_manager_instance.instance.location
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "{{index $.Vars "prevent_destroy"}}"
}
}

resource "google_secure_source_manager_hook" "default" {
hook_id = "{{index $.Vars "hook_id"}}"
location = google_secure_source_manager_repository.repository.location
repository_id = google_secure_source_manager_repository.repository.repository_id
target_uri = "https://www.example.com"
disabled = false
push_option {
branch_filter = "main"
}
events = ["PUSH", "PULL_REQUEST"]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package securesourcemanager_test

import (
"testing"

"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-provider-google/google/acctest"
)

func TestAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_update(t *testing.T) {
t.Parallel()

context := map[string]interface{}{
"prevent_destroy": false,
"random_suffix": acctest.RandString(t, 10),
}

acctest.VcrTest(t, resource.TestCase{
PreCheck: func() { acctest.AccTestPreCheck(t) },
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
Steps: []resource.TestStep{
{
Config: testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_full(context),
},
{
ResourceName: "google_secure_source_manager_hook.default",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"hook_id", "location", "repository_id"},
},
{
Config: testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_update(context),
},
{
ResourceName: "google_secure_source_manager_hook.default",
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"hook_id", "location", "repository_id"},
},
},
})
}

func testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_full(context map[string]interface{}) string {
return acctest.Nprintf(`
resource "google_secure_source_manager_instance" "instance" {
location = "us-central1"
instance_id = "tf-test-my-initial-instance%{random_suffix}"
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "%{prevent_destroy}"
}
}
resource "google_secure_source_manager_repository" "repository" {
repository_id = "tf-test-my-initial-repository%{random_suffix}"
instance = google_secure_source_manager_instance.instance.name
location = google_secure_source_manager_instance.instance.location
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "%{prevent_destroy}"
}
}
resource "google_secure_source_manager_hook" "default" {
hook_id = "tf-test-my-initial-hook%{random_suffix}"
location = google_secure_source_manager_repository.repository.location
repository_id = google_secure_source_manager_repository.repository.repository_id
events = ["PUSH", "PULL_REQUEST"]
push_option {
branch_filter = "main"
}
target_uri = "https://www.example.com"
disabled = false
}
`, context)
}

func testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_update(context map[string]interface{}) string {
return acctest.Nprintf(`
resource "google_secure_source_manager_instance" "instance" {
location = "us-central1"
instance_id = "tf-test-my-initial-instance%{random_suffix}"
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "%{prevent_destroy}"
}
}
resource "google_secure_source_manager_repository" "repository" {
repository_id = "tf-test-my-initial-repository%{random_suffix}"
instance = google_secure_source_manager_instance.instance.name
location = google_secure_source_manager_instance.instance.location
# Prevent accidental deletions.
lifecycle {
prevent_destroy = "%{prevent_destroy}"
}
}
resource "google_secure_source_manager_hook" "default" {
hook_id = "tf-test-my-initial-hook%{random_suffix}"
location = google_secure_source_manager_repository.repository.location
repository_id = google_secure_source_manager_repository.repository.repository_id
events = ["PUSH", "PULL_REQUEST"]
target_uri = "https://www.updated.com"
disabled = true
}
`, context)
}

0 comments on commit 92928e3

Please sign in to comment.