Skip to content

Commit e045265

Browse files
authored
Add google secure source manager hook resource (#15050)
1 parent 93ef242 commit e045265

File tree

5 files changed

+348
-0
lines changed

5 files changed

+348
-0
lines changed
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
# Copyright 2025 Google Inc.
2+
# Licensed under the Apache License, Version 2.0 (the "License");
3+
# you may not use this file except in compliance with the License.
4+
# You may obtain a copy of the License at
5+
#
6+
# http://www.apache.org/licenses/LICENSE-2.0
7+
#
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
14+
---
15+
name: Hook
16+
description: Hook is a user-defined HTTP callback triggered by an event.
17+
references:
18+
guides:
19+
Official Documentation: https://cloud.google.com/secure-source-manager/docs/overview
20+
docs: null
21+
id_format: projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks/{{hook_id}}
22+
base_url: projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks?hook_id={{hook_id}}
23+
self_link: projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks/{{hook_id}}
24+
import_format:
25+
- projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}/hooks/{{hook_id}}
26+
- "{{hook_id}}"
27+
timeouts:
28+
insert_minutes: 20
29+
update_minutes: 20
30+
delete_minutes: 20
31+
autogen_async: true
32+
update_verb: PATCH
33+
update_mask: true
34+
async:
35+
actions:
36+
- create
37+
- delete
38+
type: OpAsync
39+
operation:
40+
base_url: "{{op_id}}"
41+
result:
42+
resource_inside_response: false
43+
custom_code: null
44+
examples:
45+
- name: secure_source_manager_hook_basic
46+
primary_resource_id: basic
47+
vars:
48+
hook_id: my-basic-hook
49+
repository_id: my-basic-repository
50+
instance_id: my-basic-instance
51+
prevent_destroy: "true"
52+
deletion_policy: '"PREVENT"'
53+
test_vars_overrides:
54+
prevent_destroy: "false"
55+
'deletion_policy': '"DELETE"'
56+
oics_vars_overrides:
57+
prevent_destroy: "false"
58+
'deletion_policy': '"DELETE"'
59+
ignore_read_extra:
60+
- 'deletion_policy'
61+
- name: secure_source_manager_hook_with_fields
62+
primary_resource_id: default
63+
vars:
64+
hook_id: my-initial-hook
65+
repository_id: my-initial-repository
66+
instance_id: my-initial-instance
67+
prevent_destroy: "true"
68+
deletion_policy: '"PREVENT"'
69+
test_vars_overrides:
70+
prevent_destroy: "false"
71+
'deletion_policy': '"DELETE"'
72+
oics_vars_overrides:
73+
prevent_destroy: "false"
74+
'deletion_policy': '"DELETE"'
75+
ignore_read_extra:
76+
- 'deletion_policy'
77+
parameters:
78+
- name: hook_id
79+
type: String
80+
description: |
81+
The ID for the Hook.
82+
url_param_only: true
83+
required: true
84+
- name: location
85+
type: String
86+
description: |
87+
The location for the Repository.
88+
url_param_only: true
89+
required: true
90+
- name: repository_id
91+
type: String
92+
description: |
93+
The ID for the Repository.
94+
url_param_only: true
95+
required: true
96+
properties:
97+
- name: name
98+
type: String
99+
description: |
100+
A unique identifier for a Hook. The name should be of the format:
101+
`projects/{project}/locations/{location_id}/repositories/{repository_id}/hooks/{hook_id}`
102+
output: true
103+
- name: targetUri
104+
type: String
105+
description: |
106+
The target URI to which the payloads will be delivered.
107+
required: true
108+
- name: disabled
109+
type: Boolean
110+
description: |
111+
Determines if the hook disabled or not.
112+
Set to true to stop sending traffic.
113+
- name: events
114+
type: Array
115+
description: |
116+
The events that trigger hook on.
117+
item_type:
118+
type: Enum
119+
enum_values:
120+
- PUSH
121+
- PULL_REQUEST
122+
default_from_api: true
123+
- name: createTime
124+
type: Time
125+
description: |
126+
Create timestamp.
127+
output: true
128+
- name: updateTime
129+
type: Time
130+
description: |
131+
Update timestamp.
132+
output: true
133+
- name: uid
134+
type: String
135+
description: |
136+
Unique identifier of the hook.
137+
output: true
138+
- name: sensitiveQueryString
139+
type: String
140+
sensitive: true
141+
ignore_read: true
142+
description: |
143+
The sensitive query string to be appended to the target URI.
144+
- name: pushOption
145+
type: NestedObject
146+
allow_empty_object: true
147+
send_empty_value: true
148+
default_from_api: true
149+
description: |
150+
The trigger option for push events.
151+
properties:
152+
- name: branchFilter
153+
type: String
154+
description: |
155+
Trigger hook for matching branches only.
156+
Specified as glob pattern. If empty or *, events for all branches are
157+
reported. Examples: main, {main,release*}.
158+
See https://pkg.go.dev/github.com/gobwas/glob documentation.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
resource "google_secure_source_manager_instance" "instance" {
2+
location = "us-central1"
3+
instance_id = "{{index $.Vars "instance_id"}}"
4+
5+
# Prevent accidental deletions.
6+
deletion_policy = "{{index $.Vars "deletion_policy"}}"
7+
}
8+
9+
resource "google_secure_source_manager_repository" "repository" {
10+
repository_id = "{{index $.Vars "repository_id"}}"
11+
location = google_secure_source_manager_instance.instance.location
12+
instance = google_secure_source_manager_instance.instance.name
13+
14+
# Prevent accidental deletions.
15+
deletion_policy = "{{index $.Vars "deletion_policy"}}"
16+
}
17+
18+
resource "google_secure_source_manager_hook" "basic" {
19+
hook_id = "{{index $.Vars "hook_id"}}"
20+
repository_id = google_secure_source_manager_repository.repository.repository_id
21+
location = google_secure_source_manager_repository.repository.location
22+
target_uri = "https://www.example.com"
23+
# default event
24+
events = ["PUSH"]
25+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
resource "google_secure_source_manager_instance" "instance" {
2+
location = "us-central1"
3+
instance_id = "{{index $.Vars "instance_id"}}"
4+
5+
# Prevent accidental deletions.
6+
deletion_policy = "{{index $.Vars "deletion_policy"}}"
7+
}
8+
9+
resource "google_secure_source_manager_repository" "repository" {
10+
repository_id = "{{index $.Vars "repository_id"}}"
11+
location = google_secure_source_manager_instance.instance.location
12+
instance = google_secure_source_manager_instance.instance.name
13+
14+
# Prevent accidental deletions.
15+
deletion_policy = "{{index $.Vars "deletion_policy"}}"
16+
}
17+
18+
resource "google_secure_source_manager_hook" "push_option_empty" {
19+
hook_id = "{{index $.Vars "hook_id"}}"
20+
repository_id = google_secure_source_manager_repository.repository.repository_id
21+
location = google_secure_source_manager_repository.repository.location
22+
target_uri = "https://www.example.com"
23+
# default event
24+
events = ["PUSH"]
25+
push_option {
26+
}
27+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
resource "google_secure_source_manager_instance" "instance" {
2+
location = "us-central1"
3+
instance_id = "{{index $.Vars "instance_id"}}"
4+
5+
# Prevent accidental deletions.
6+
deletion_policy = "{{index $.Vars "deletion_policy"}}"
7+
}
8+
9+
resource "google_secure_source_manager_repository" "repository" {
10+
repository_id = "{{index $.Vars "repository_id"}}"
11+
instance = google_secure_source_manager_instance.instance.name
12+
location = google_secure_source_manager_instance.instance.location
13+
14+
# Prevent accidental deletions.
15+
deletion_policy = "{{index $.Vars "deletion_policy"}}"
16+
}
17+
18+
resource "google_secure_source_manager_hook" "default" {
19+
hook_id = "{{index $.Vars "hook_id"}}"
20+
location = google_secure_source_manager_repository.repository.location
21+
repository_id = google_secure_source_manager_repository.repository.repository_id
22+
target_uri = "https://www.example.com"
23+
sensitive_query_string = "auth=fake_token"
24+
disabled = false
25+
push_option {
26+
branch_filter = "main"
27+
}
28+
events = ["PUSH", "PULL_REQUEST"]
29+
}
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
package securesourcemanager_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
7+
"github.com/hashicorp/terraform-provider-google/google/acctest"
8+
)
9+
10+
func TestAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_update(t *testing.T) {
11+
t.Parallel()
12+
13+
context := map[string]interface{}{
14+
"deletion_policy": "DELETE",
15+
"random_suffix": acctest.RandString(t, 10),
16+
}
17+
18+
acctest.VcrTest(t, resource.TestCase{
19+
PreCheck: func() { acctest.AccTestPreCheck(t) },
20+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
21+
Steps: []resource.TestStep{
22+
{
23+
Config: testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_full(context),
24+
},
25+
{
26+
ResourceName: "google_secure_source_manager_hook.default",
27+
ImportState: true,
28+
ImportStateVerify: true,
29+
ImportStateVerifyIgnore: []string{"hook_id", "location", "repository_id", "sensitive_query_string"},
30+
},
31+
{
32+
Config: testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_update(context),
33+
},
34+
{
35+
ResourceName: "google_secure_source_manager_hook.default",
36+
ImportState: true,
37+
ImportStateVerify: true,
38+
ImportStateVerifyIgnore: []string{"hook_id", "location", "repository_id", "sensitive_query_string"},
39+
},
40+
},
41+
})
42+
}
43+
44+
func testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_full(context map[string]interface{}) string {
45+
return acctest.Nprintf(`
46+
resource "google_secure_source_manager_instance" "instance" {
47+
location = "us-central1"
48+
instance_id = "tf-test-my-initial-instance%{random_suffix}"
49+
50+
# Prevent accidental deletions.
51+
deletion_policy = "%{deletion_policy}"
52+
}
53+
54+
resource "google_secure_source_manager_repository" "repository" {
55+
repository_id = "tf-test-my-initial-repository%{random_suffix}"
56+
instance = google_secure_source_manager_instance.instance.name
57+
location = google_secure_source_manager_instance.instance.location
58+
59+
# Prevent accidental deletions.
60+
deletion_policy = "%{deletion_policy}"
61+
}
62+
63+
resource "google_secure_source_manager_hook" "default" {
64+
hook_id = "tf-test-my-initial-hook%{random_suffix}"
65+
location = google_secure_source_manager_repository.repository.location
66+
repository_id = google_secure_source_manager_repository.repository.repository_id
67+
events = ["PUSH", "PULL_REQUEST"]
68+
push_option {
69+
branch_filter = "main"
70+
}
71+
target_uri = "https://www.example.com"
72+
sensitive_query_string = "auth=fake_token"
73+
disabled = false
74+
}
75+
`, context)
76+
}
77+
78+
func testAccSecureSourceManagerHook_secureSourceManagerHookWithFieldsExample_update(context map[string]interface{}) string {
79+
return acctest.Nprintf(`
80+
resource "google_secure_source_manager_instance" "instance" {
81+
location = "us-central1"
82+
instance_id = "tf-test-my-initial-instance%{random_suffix}"
83+
84+
# Prevent accidental deletions.
85+
deletion_policy = "%{deletion_policy}"
86+
}
87+
88+
resource "google_secure_source_manager_repository" "repository" {
89+
repository_id = "tf-test-my-initial-repository%{random_suffix}"
90+
instance = google_secure_source_manager_instance.instance.name
91+
location = google_secure_source_manager_instance.instance.location
92+
93+
# Prevent accidental deletions.
94+
deletion_policy = "%{deletion_policy}"
95+
}
96+
97+
resource "google_secure_source_manager_hook" "default" {
98+
hook_id = "tf-test-my-initial-hook%{random_suffix}"
99+
location = google_secure_source_manager_repository.repository.location
100+
repository_id = google_secure_source_manager_repository.repository.repository_id
101+
events = ["PUSH", "PULL_REQUEST"]
102+
push_option {
103+
}
104+
target_uri = "https://www.update.com"
105+
sensitive_query_string = "auth=fake_token"
106+
disabled = true
107+
}
108+
`, context)
109+
}

0 commit comments

Comments
 (0)