Skip to content

Commit 1f5b72c

Browse files
Add Stateful ip field to instance group manager (#6695) (#13260)
* Add Stateful Ips field to Instance Group Manager and region instance group manager Signed-off-by: Modular Magician <[email protected]> Signed-off-by: Modular Magician <[email protected]>
1 parent f7389f5 commit 1f5b72c

5 files changed

+62
-32
lines changed

.changelog/6695.txt

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
```release-note:enhancement
2+
Add Stateful IP fields to instance group manager
3+
4+
```

google/resource_compute_instance_group_manager.go

+12-9
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,8 @@ func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta inte
425425
AutoHealingPolicies: expandAutoHealingPolicies(d.Get("auto_healing_policies").([]interface{})),
426426
Versions: expandVersions(d.Get("version").([]interface{})),
427427
UpdatePolicy: expandUpdatePolicy(d.Get("update_policy").([]interface{})),
428-
StatefulPolicy: expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List()),
428+
StatefulPolicy: expandStatefulPolicy(d),
429+
429430
// Force send TargetSize to allow a value of 0.
430431
ForceSendFields: []string{"TargetSize"},
431432
}
@@ -701,7 +702,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
701702
}
702703

703704
if d.HasChange("stateful_disk") {
704-
updatedManager.StatefulPolicy = expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List())
705+
updatedManager.StatefulPolicy = expandStatefulPolicy(d)
705706
change = true
706707
}
707708

@@ -874,19 +875,22 @@ func expandAutoHealingPolicies(configured []interface{}) []*compute.InstanceGrou
874875
return autoHealingPolicies
875876
}
876877

877-
func expandStatefulPolicy(configured []interface{}) *compute.StatefulPolicy {
878+
func expandStatefulPolicy(d *schema.ResourceData) *compute.StatefulPolicy {
879+
preservedState := &compute.StatefulPolicyPreservedState{}
880+
stateful_disks := d.Get("stateful_disk").(*schema.Set).List()
878881
disks := make(map[string]compute.StatefulPolicyPreservedStateDiskDevice)
879-
for _, raw := range configured {
882+
for _, raw := range stateful_disks {
880883
data := raw.(map[string]interface{})
881884
disk := compute.StatefulPolicyPreservedStateDiskDevice{
882885
AutoDelete: data["delete_rule"].(string),
883886
}
884887
disks[data["device_name"].(string)] = disk
885888
}
886-
if len(disks) > 0 {
887-
return &compute.StatefulPolicy{PreservedState: &compute.StatefulPolicyPreservedState{Disks: disks}}
888-
}
889-
return nil
889+
preservedState.Disks = disks
890+
statefulPolicy := &compute.StatefulPolicy{PreservedState: preservedState}
891+
statefulPolicy.ForceSendFields = append(statefulPolicy.ForceSendFields, "PreservedState")
892+
893+
return statefulPolicy
890894
}
891895

892896
func expandVersions(configured []interface{}) []*compute.InstanceGroupManagerVersion {
@@ -999,7 +1003,6 @@ func flattenStatefulPolicy(statefulPolicy *compute.StatefulPolicy) []map[string]
9991003
}
10001004
return result
10011005
}
1002-
10031006
func flattenUpdatePolicy(updatePolicy *compute.InstanceGroupManagerUpdatePolicy) []map[string]interface{} {
10041007
results := []map[string]interface{}{}
10051008
if updatePolicy != nil {

google/resource_compute_instance_group_manager_test.go

+23-10
Original file line numberDiff line numberDiff line change
@@ -367,14 +367,15 @@ func TestAccInstanceGroupManager_stateful(t *testing.T) {
367367
target := fmt.Sprintf("tf-test-igm-%s", randString(t, 10))
368368
igm := fmt.Sprintf("tf-test-igm-%s", randString(t, 10))
369369
hck := fmt.Sprintf("tf-test-igm-%s", randString(t, 10))
370+
network := fmt.Sprintf("tf-test-igm-%s", randString(t, 10))
370371

371372
vcrTest(t, resource.TestCase{
372373
PreCheck: func() { testAccPreCheck(t) },
373374
Providers: testAccProviders,
374375
CheckDestroy: testAccCheckInstanceGroupManagerDestroyProducer(t),
375376
Steps: []resource.TestStep{
376377
{
377-
Config: testAccInstanceGroupManager_stateful(template, target, igm, hck),
378+
Config: testAccInstanceGroupManager_stateful(network, template, target, igm, hck),
378379
},
379380
{
380381
ResourceName: "google_compute_instance_group_manager.igm-basic",
@@ -383,7 +384,7 @@ func TestAccInstanceGroupManager_stateful(t *testing.T) {
383384
ImportStateVerifyIgnore: []string{"status"},
384385
},
385386
{
386-
Config: testAccInstanceGroupManager_statefulUpdated(template, target, igm, hck),
387+
Config: testAccInstanceGroupManager_statefulUpdated(network, template, target, igm, hck),
387388
},
388389
{
389390
ResourceName: "google_compute_instance_group_manager.igm-basic",
@@ -1332,13 +1333,17 @@ resource "google_compute_instance_group_manager" "igm-basic" {
13321333
`, primaryTemplate, canaryTemplate, igm)
13331334
}
13341335

1335-
func testAccInstanceGroupManager_stateful(template, target, igm, hck string) string {
1336+
func testAccInstanceGroupManager_stateful(network, template, target, igm, hck string) string {
13361337
return fmt.Sprintf(`
13371338
data "google_compute_image" "my_image" {
13381339
family = "debian-11"
13391340
project = "debian-cloud"
13401341
}
13411342
1343+
resource "google_compute_network" "igm-basic" {
1344+
name = "%s"
1345+
}
1346+
13421347
resource "google_compute_instance_template" "igm-basic" {
13431348
name = "%s"
13441349
machine_type = "e2-medium"
@@ -1367,6 +1372,10 @@ resource "google_compute_instance_template" "igm-basic" {
13671372
network = "default"
13681373
}
13691374
1375+
network_interface {
1376+
network = google_compute_network.igm-basic.self_link
1377+
}
1378+
13701379
service_account {
13711380
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
13721381
}
@@ -1401,16 +1410,20 @@ resource "google_compute_http_health_check" "zero" {
14011410
check_interval_sec = 1
14021411
timeout_sec = 1
14031412
}
1404-
`, template, target, igm, hck)
1413+
`, network, template, target, igm, hck)
14051414
}
14061415

1407-
func testAccInstanceGroupManager_statefulUpdated(template, target, igm, hck string) string {
1416+
func testAccInstanceGroupManager_statefulUpdated(network, template, target, igm, hck string) string {
14081417
return fmt.Sprintf(`
14091418
data "google_compute_image" "my_image" {
14101419
family = "debian-11"
14111420
project = "debian-cloud"
14121421
}
14131422
1423+
resource "google_compute_network" "igm-basic" {
1424+
name = "%s"
1425+
}
1426+
14141427
resource "google_compute_instance_template" "igm-basic" {
14151428
name = "%s"
14161429
machine_type = "e2-medium"
@@ -1439,6 +1452,10 @@ resource "google_compute_instance_template" "igm-basic" {
14391452
network = "default"
14401453
}
14411454
1455+
network_interface {
1456+
network = google_compute_network.igm-basic.self_link
1457+
}
1458+
14421459
service_account {
14431460
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
14441461
}
@@ -1466,10 +1483,6 @@ resource "google_compute_instance_group_manager" "igm-basic" {
14661483
delete_rule = "NEVER"
14671484
}
14681485
1469-
stateful_disk {
1470-
device_name = "my-stateful-disk2"
1471-
delete_rule = "ON_PERMANENT_INSTANCE_DELETION"
1472-
}
14731486
}
14741487
14751488
resource "google_compute_http_health_check" "zero" {
@@ -1478,7 +1491,7 @@ resource "google_compute_http_health_check" "zero" {
14781491
check_interval_sec = 1
14791492
timeout_sec = 1
14801493
}
1481-
`, template, target, igm, hck)
1494+
`, network, template, target, igm, hck)
14821495
}
14831496

14841497
func testAccInstanceGroupManager_waitForStatus(template, target, igm, perInstanceConfig string) string {

google/resource_compute_region_instance_group_manager.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ func resourceComputeRegionInstanceGroupManagerCreate(d *schema.ResourceData, met
428428
Versions: expandVersions(d.Get("version").([]interface{})),
429429
UpdatePolicy: expandRegionUpdatePolicy(d.Get("update_policy").([]interface{})),
430430
DistributionPolicy: expandDistributionPolicy(d),
431-
StatefulPolicy: expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List()),
431+
StatefulPolicy: expandStatefulPolicy(d),
432432
// Force send TargetSize to allow size of 0.
433433
ForceSendFields: []string{"TargetSize"},
434434
}
@@ -610,7 +610,6 @@ func resourceComputeRegionInstanceGroupManagerRead(d *schema.ResourceData, meta
610610
if err = d.Set("status", flattenStatus(manager.Status)); err != nil {
611611
return fmt.Errorf("Error setting status in state: %s", err.Error())
612612
}
613-
614613
// If unset in state set to default value
615614
if d.Get("wait_for_instances_status").(string) == "" {
616615
if err = d.Set("wait_for_instances_status", "STABLE"); err != nil {
@@ -667,7 +666,7 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
667666
}
668667

669668
if d.HasChange("stateful_disk") {
670-
updatedManager.StatefulPolicy = expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List())
669+
updatedManager.StatefulPolicy = expandStatefulPolicy(d)
671670
change = true
672671
}
673672

google/resource_compute_region_instance_group_manager_test.go

+21-10
Original file line numberDiff line numberDiff line change
@@ -373,14 +373,15 @@ func TestAccRegionInstanceGroupManager_stateful(t *testing.T) {
373373

374374
template := fmt.Sprintf("tf-test-rigm-%s", randString(t, 10))
375375
igm := fmt.Sprintf("tf-test-rigm-%s", randString(t, 10))
376+
network := fmt.Sprintf("tf-test-igm-%s", randString(t, 10))
376377

377378
vcrTest(t, resource.TestCase{
378379
PreCheck: func() { testAccPreCheck(t) },
379380
Providers: testAccProviders,
380381
CheckDestroy: testAccCheckRegionInstanceGroupManagerDestroyProducer(t),
381382
Steps: []resource.TestStep{
382383
{
383-
Config: testAccRegionInstanceGroupManager_stateful(template, igm),
384+
Config: testAccRegionInstanceGroupManager_stateful(template, network, igm),
384385
},
385386
{
386387
ResourceName: "google_compute_region_instance_group_manager.igm-basic",
@@ -389,7 +390,7 @@ func TestAccRegionInstanceGroupManager_stateful(t *testing.T) {
389390
ImportStateVerifyIgnore: []string{"status"},
390391
},
391392
{
392-
Config: testAccRegionInstanceGroupManager_statefulUpdate(template, igm),
393+
Config: testAccRegionInstanceGroupManager_statefulUpdate(template, network, igm),
393394
},
394395
{
395396
ResourceName: "google_compute_region_instance_group_manager.igm-basic",
@@ -1315,13 +1316,15 @@ resource "google_compute_region_instance_group_manager" "igm-rolling-update-poli
13151316
`, igm)
13161317
}
13171318

1318-
func testAccRegionInstanceGroupManager_stateful(template, igm string) string {
1319+
func testAccRegionInstanceGroupManager_stateful(network, template, igm string) string {
13191320
return fmt.Sprintf(`
13201321
data "google_compute_image" "my_image" {
13211322
family = "debian-11"
13221323
project = "debian-cloud"
13231324
}
1324-
1325+
resource "google_compute_network" "igm-basic" {
1326+
name = "%s"
1327+
}
13251328
resource "google_compute_instance_template" "igm-basic" {
13261329
name = "%s"
13271330
machine_type = "e2-medium"
@@ -1341,6 +1344,9 @@ resource "google_compute_instance_template" "igm-basic" {
13411344
network_interface {
13421345
network = "default"
13431346
}
1347+
network_interface {
1348+
network = google_compute_network.igm-basic.self_link
1349+
}
13441350
}
13451351
13461352
resource "google_compute_region_instance_group_manager" "igm-basic" {
@@ -1366,17 +1372,19 @@ resource "google_compute_region_instance_group_manager" "igm-basic" {
13661372
device_name = "stateful-disk"
13671373
delete_rule = "NEVER"
13681374
}
1369-
}
1370-
`, template, igm)
1375+
}
1376+
`, network, template, igm)
13711377
}
13721378

1373-
func testAccRegionInstanceGroupManager_statefulUpdate(template, igm string) string {
1379+
func testAccRegionInstanceGroupManager_statefulUpdate(network, template, igm string) string {
13741380
return fmt.Sprintf(`
13751381
data "google_compute_image" "my_image" {
13761382
family = "debian-11"
13771383
project = "debian-cloud"
13781384
}
1379-
1385+
resource "google_compute_network" "igm-basic" {
1386+
name = "%s"
1387+
}
13801388
resource "google_compute_instance_template" "igm-basic" {
13811389
name = "%s"
13821390
machine_type = "e2-medium"
@@ -1396,6 +1404,9 @@ resource "google_compute_instance_template" "igm-basic" {
13961404
network_interface {
13971405
network = "default"
13981406
}
1407+
network_interface {
1408+
network = google_compute_network.igm-basic.self_link
1409+
}
13991410
}
14001411
14011412
resource "google_compute_region_instance_group_manager" "igm-basic" {
@@ -1426,6 +1437,6 @@ resource "google_compute_region_instance_group_manager" "igm-basic" {
14261437
device_name = "stateful-disk2"
14271438
delete_rule = "ON_PERMANENT_INSTANCE_DELETION"
14281439
}
1429-
}
1430-
`, template, igm)
1440+
}
1441+
`, network, template, igm)
14311442
}

0 commit comments

Comments
 (0)