Skip to content

Commit c7a4309

Browse files
authored
Multicast group producer activation (#15890)
1 parent a9da349 commit c7a4309

File tree

3 files changed

+373
-0
lines changed

3 files changed

+373
-0
lines changed
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
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: MulticastGroupProducerActivation
16+
description: Create a multicast group producer activation in the specified
17+
location of the current project.
18+
references:
19+
guides:
20+
'Create Multicast Group Producer Activation': 'https://docs.cloud.google.com/vpc/docs/multicast/enable-producer-network#activate-producer'
21+
api: 'https://docs.cloud.google.com/vpc/docs/multicast/reference/rest/v1/projects.locations.multicastGroupProducerActivations'
22+
base_url: projects/{{project}}/locations/{{location}}/multicastGroupProducerActivations
23+
update_mask: true
24+
self_link: projects/{{project}}/locations/{{location}}/multicastGroupProducerActivations/{{multicast_group_producer_activation_id}}
25+
create_url: projects/{{project}}/locations/{{location}}/multicastGroupProducerActivations?multicastGroupProducerActivationId={{multicast_group_producer_activation_id}}
26+
update_verb: PATCH
27+
id_format: projects/{{project}}/locations/{{location}}/multicastGroupProducerActivations/{{multicast_group_producer_activation_id}}
28+
import_format:
29+
- projects/{{project}}/locations/{{location}}/multicastGroupProducerActivations/{{multicast_group_producer_activation_id}}
30+
examples:
31+
- name: network_services_multicast_group_producer_activation_basic
32+
primary_resource_id: mgpa_test
33+
vars:
34+
network_name: test-network-mgpa
35+
domain_name: test-domain-mgpa
36+
domain_activation_name: test-domain-activation-mgpa
37+
producer_association_name: test-producer-association-mgpa
38+
internal_range_name: test-internal-range-mgpa
39+
group_range_name: test-group-range-mgpa
40+
group_range_activation_name: test-mgra-mgpa
41+
group_producer_activation_name: test-mgpa-mgpa
42+
autogen_async: true
43+
async:
44+
operation:
45+
timeouts:
46+
insert_minutes: 20
47+
update_minutes: 20
48+
delete_minutes: 20
49+
base_url: '{{op_id}}'
50+
actions:
51+
- create
52+
- delete
53+
- update
54+
type: OpAsync
55+
result:
56+
resource_inside_response: true
57+
include_project: false
58+
autogen_status: TXVsdGljYXN0R3JvdXBQcm9kdWNlckFjdGl2YXRpb24=
59+
parameters:
60+
- name: location
61+
type: String
62+
description: Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122.
63+
immutable: true
64+
url_param_only: true
65+
required: true
66+
- name: multicastGroupProducerActivationId
67+
type: String
68+
description: |-
69+
A unique name for the multicast group producer activation.
70+
The name is restricted to letters, numbers, and hyphen, with the first
71+
character a letter, and the last a letter or a number. The name must not
72+
exceed 48 characters.
73+
immutable: true
74+
url_param_only: true
75+
required: true
76+
properties:
77+
- name: createTime
78+
type: String
79+
description: |-
80+
The timestamp when the multicast group producer activation was created.
81+
output: true
82+
- name: description
83+
type: String
84+
description: An optional text description of the multicast group producer activation.
85+
- name: labels
86+
type: KeyValueLabels
87+
description: Labels as key-value pairs
88+
- name: multicastGroupRangeActivation
89+
type: String
90+
description: |-
91+
The resource name of the multicast group range activationcreated by the
92+
admin in the same zone as this multicast group producer activation. Use the
93+
following format:
94+
// `projects/*/locations/*/multicastGroupRangeActivations/*`.
95+
immutable: true
96+
required: true
97+
- name: multicastProducerAssociation
98+
type: String
99+
description: |-
100+
The resource name of the multicast producer association that is in the
101+
same zone as this multicast group producer activation.
102+
Use the following format:
103+
`projects/*/locations/*/multicastProducerAssociations/*`.
104+
immutable: true
105+
required: true
106+
- name: name
107+
type: String
108+
description: |-
109+
Identifier. The resource name of the multicast group producer activation.
110+
Use the following format:
111+
`projects/*/locations/*/multicastGroupProducerActivations/*`.
112+
output: true
113+
- name: state
114+
type: NestedObject
115+
description: The multicast resource's state.
116+
output: true
117+
properties:
118+
- name: state
119+
type: String
120+
description: |-
121+
The state of the multicast resource.
122+
Possible values:
123+
CREATING
124+
ACTIVE
125+
DELETING
126+
DELETE_FAILED
127+
UPDATING
128+
UPDATE_FAILED
129+
INACTIVE
130+
output: true
131+
- name: uniqueId
132+
type: String
133+
description: |-
134+
The Google-generated UUID for the resource. This value is
135+
unique across all multicast group producer activation resources. If a group
136+
producer activation is deleted and another with the same name is created,
137+
the new group producer activation is assigned a different unique_id.
138+
output: true
139+
- name: updateTime
140+
type: String
141+
description: |-
142+
The timestamp when the multicast group producer activation
143+
was most recently updated.
144+
output: true
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
resource "google_compute_network" "network" {
2+
name = "{{index $.Vars "network_name"}}"
3+
auto_create_subnetworks = false
4+
}
5+
6+
resource "google_network_services_multicast_domain" "multicast_domain" {
7+
multicast_domain_id = "{{index $.Vars "domain_name"}}"
8+
location = "global"
9+
admin_network = google_compute_network.network.id
10+
connection_config { connection_type="SAME_VPC"}
11+
depends_on = [google_compute_network.network]
12+
}
13+
14+
resource "google_network_services_multicast_domain_activation" "multicast_domain_activation" {
15+
multicast_domain_activation_id = "{{index $.Vars "domain_activation_name"}}"
16+
location = "us-central1-b"
17+
multicast_domain = google_network_services_multicast_domain.multicast_domain.id
18+
}
19+
20+
resource "google_network_services_multicast_producer_association" "producer_association" {
21+
multicast_producer_association_id = "{{index $.Vars "producer_association_name"}}"
22+
location = "us-central1-b"
23+
network = google_compute_network.network.id
24+
multicast_domain_activation = google_network_services_multicast_domain_activation.multicast_domain_activation.id
25+
depends_on = [google_compute_network.network]
26+
}
27+
28+
29+
resource "google_network_connectivity_internal_range" "internal_range" {
30+
name = "{{index $.Vars "internal_range_name"}}"
31+
network = google_compute_network.network.self_link
32+
usage = "FOR_VPC"
33+
peering = "FOR_SELF"
34+
ip_cidr_range = "224.2.0.2/32"
35+
}
36+
37+
resource "google_network_services_multicast_group_range" "group_range" {
38+
multicast_group_range_id = "{{index $.Vars "group_range_name"}}"
39+
location = "global"
40+
reserved_internal_range = google_network_connectivity_internal_range.internal_range.id
41+
multicast_domain = google_network_services_multicast_domain.multicast_domain.id
42+
}
43+
44+
resource "google_network_services_multicast_group_range_activation" "group_range_activation" {
45+
multicast_group_range_activation_id = "{{index $.Vars "group_range_activation_name"}}"
46+
location = "us-central1-b"
47+
multicast_group_range = google_network_services_multicast_group_range.group_range.id
48+
multicast_domain_activation = google_network_services_multicast_domain_activation.multicast_domain_activation.id
49+
}
50+
51+
resource "google_network_services_multicast_group_producer_activation" {{$.PrimaryResourceId}} {
52+
multicast_group_producer_activation_id = "{{index $.Vars "group_producer_activation_name"}}"
53+
location = "us-central1-b"
54+
multicast_group_range_activation = google_network_services_multicast_group_range_activation.group_range_activation.id
55+
multicast_producer_association = google_network_services_multicast_producer_association.producer_association.id
56+
}
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
package networkservices_test
2+
3+
import (
4+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
5+
"github.com/hashicorp/terraform-plugin-testing/plancheck"
6+
"github.com/hashicorp/terraform-provider-google/google/acctest"
7+
"testing"
8+
)
9+
10+
func TestAccNetworkServicesMulticastGroupProducerActivation_networkServicesMulticastGroupProducerActivationUpdateExample(t *testing.T) {
11+
t.Parallel()
12+
13+
context := map[string]interface{}{
14+
"random_suffix": acctest.RandString(t, 10),
15+
}
16+
17+
acctest.VcrTest(t, resource.TestCase{
18+
PreCheck: func() { acctest.AccTestPreCheck(t) },
19+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
20+
CheckDestroy: testAccCheckNetworkServicesMulticastGroupProducerActivationDestroyProducer(t),
21+
Steps: []resource.TestStep{
22+
{
23+
Config: testAccNetworkServicesMulticastGroupProducerActivation_networkServicesMulticastGroupProducerActivationUpdateExample_full(context),
24+
},
25+
{
26+
ResourceName: "google_network_services_multicast_group_producer_activation.mgpa_test",
27+
ImportState: true,
28+
ImportStateVerify: true,
29+
ImportStateVerifyIgnore: []string{"labels", "location", "multicast_group_producer_activation_id", "terraform_labels"},
30+
},
31+
{
32+
Config: testAccNetworkServicesMulticastGroupProducerActivation_networkServicesMulticastGroupProducerActivationUpdateExample_diff(context),
33+
ConfigPlanChecks: resource.ConfigPlanChecks{
34+
PreApply: []plancheck.PlanCheck{
35+
plancheck.ExpectResourceAction("google_network_services_multicast_group_producer_activation.mgpa_test", plancheck.ResourceActionUpdate),
36+
},
37+
},
38+
},
39+
{
40+
ResourceName: "google_network_services_multicast_group_producer_activation.mgpa_test",
41+
ImportState: true,
42+
ImportStateVerify: true,
43+
ImportStateVerifyIgnore: []string{"labels", "location", "multicast_group_producer_activation_id", "terraform_labels"},
44+
},
45+
},
46+
})
47+
}
48+
49+
func testAccNetworkServicesMulticastGroupProducerActivation_networkServicesMulticastGroupProducerActivationUpdateExample_full(context map[string]interface{}) string {
50+
return acctest.Nprintf(`
51+
resource "google_compute_network" "network" {
52+
name = "tf-test-test-network-mgpa%{random_suffix}"
53+
auto_create_subnetworks = false
54+
}
55+
56+
resource "google_network_services_multicast_domain" "multicast_domain" {
57+
multicast_domain_id = "tf-test-test-domain-mgpa%{random_suffix}"
58+
location = "global"
59+
admin_network = google_compute_network.network.id
60+
connection_config { connection_type="SAME_VPC"}
61+
depends_on = [google_compute_network.network]
62+
}
63+
64+
resource "google_network_services_multicast_domain_activation" "multicast_domain_activation" {
65+
multicast_domain_activation_id = "tf-test-test-domain-activation-mgpa%{random_suffix}"
66+
location = "us-central1-b"
67+
multicast_domain = google_network_services_multicast_domain.multicast_domain.id
68+
}
69+
70+
resource "google_network_services_multicast_producer_association" "producer_association" {
71+
multicast_producer_association_id = "tf-test-test-producer-association-mgpa%{random_suffix}"
72+
location = "us-central1-b"
73+
network = google_compute_network.network.id
74+
multicast_domain_activation = google_network_services_multicast_domain_activation.multicast_domain_activation.id
75+
depends_on = [google_compute_network.network]
76+
}
77+
78+
79+
resource "google_network_connectivity_internal_range" "internal_range" {
80+
name = "tf-test-test-internal-range-mgpa%{random_suffix}"
81+
network = google_compute_network.network.self_link
82+
usage = "FOR_VPC"
83+
peering = "FOR_SELF"
84+
ip_cidr_range = "224.2.0.2/32"
85+
}
86+
87+
resource "google_network_services_multicast_group_range" "group_range" {
88+
multicast_group_range_id = "tf-test-test-group-range-mgpa%{random_suffix}"
89+
location = "global"
90+
reserved_internal_range = google_network_connectivity_internal_range.internal_range.id
91+
multicast_domain = google_network_services_multicast_domain.multicast_domain.id
92+
}
93+
94+
resource "google_network_services_multicast_group_range_activation" "group_range_activation" {
95+
multicast_group_range_activation_id = "tf-test-test-mgra-mgpa%{random_suffix}"
96+
location = "us-central1-b"
97+
multicast_group_range = google_network_services_multicast_group_range.group_range.id
98+
multicast_domain_activation = google_network_services_multicast_domain_activation.multicast_domain_activation.id
99+
}
100+
101+
resource "google_network_services_multicast_group_producer_activation" mgpa_test {
102+
multicast_group_producer_activation_id = "tf-test-test-mgpa-mgpa%{random_suffix}"
103+
location = "us-central1-b"
104+
description = "my description"
105+
labels = {
106+
"test-label" = "test-value"
107+
}
108+
multicast_group_range_activation = google_network_services_multicast_group_range_activation.group_range_activation.id
109+
multicast_producer_association = google_network_services_multicast_producer_association.producer_association.id
110+
}
111+
`, context)
112+
}
113+
114+
func testAccNetworkServicesMulticastGroupProducerActivation_networkServicesMulticastGroupProducerActivationUpdateExample_diff(context map[string]interface{}) string {
115+
return acctest.Nprintf(`
116+
resource "google_compute_network" "network" {
117+
name = "tf-test-test-network-mgpa%{random_suffix}"
118+
auto_create_subnetworks = false
119+
}
120+
121+
resource "google_network_services_multicast_domain" "multicast_domain" {
122+
multicast_domain_id = "tf-test-test-domain-mgpa%{random_suffix}"
123+
location = "global"
124+
admin_network = google_compute_network.network.id
125+
connection_config { connection_type="SAME_VPC"}
126+
depends_on = [google_compute_network.network]
127+
}
128+
129+
resource "google_network_services_multicast_domain_activation" "multicast_domain_activation" {
130+
multicast_domain_activation_id = "tf-test-test-domain-activation-mgpa%{random_suffix}"
131+
location = "us-central1-b"
132+
multicast_domain = google_network_services_multicast_domain.multicast_domain.id
133+
}
134+
135+
resource "google_network_services_multicast_producer_association" "producer_association" {
136+
multicast_producer_association_id = "tf-test-test-producer-association-mgpa%{random_suffix}"
137+
location = "us-central1-b"
138+
network = google_compute_network.network.id
139+
multicast_domain_activation = google_network_services_multicast_domain_activation.multicast_domain_activation.id
140+
depends_on = [google_compute_network.network]
141+
}
142+
143+
144+
resource "google_network_connectivity_internal_range" "internal_range" {
145+
name = "tf-test-test-internal-range-mgpa%{random_suffix}"
146+
network = google_compute_network.network.self_link
147+
usage = "FOR_VPC"
148+
peering = "FOR_SELF"
149+
ip_cidr_range = "224.2.0.2/32"
150+
}
151+
152+
resource "google_network_services_multicast_group_range" "group_range" {
153+
multicast_group_range_id = "tf-test-test-group-range-mgpa%{random_suffix}"
154+
location = "global"
155+
reserved_internal_range = google_network_connectivity_internal_range.internal_range.id
156+
multicast_domain = google_network_services_multicast_domain.multicast_domain.id
157+
}
158+
159+
resource "google_network_services_multicast_group_range_activation" "group_range_activation" {
160+
multicast_group_range_activation_id = "tf-test-test-mgra-mgpa%{random_suffix}"
161+
location = "us-central1-b"
162+
multicast_group_range = google_network_services_multicast_group_range.group_range.id
163+
multicast_domain_activation = google_network_services_multicast_domain_activation.multicast_domain_activation.id
164+
}
165+
166+
resource "google_network_services_multicast_group_producer_activation" mgpa_test {
167+
multicast_group_producer_activation_id = "tf-test-test-mgpa-mgpa%{random_suffix}"
168+
location = "us-central1-b"
169+
multicast_group_range_activation = google_network_services_multicast_group_range_activation.group_range_activation.id
170+
multicast_producer_association = google_network_services_multicast_producer_association.producer_association.id
171+
}
172+
`, context)
173+
}

0 commit comments

Comments
 (0)