Skip to content

Commit 3b1428c

Browse files
modular-magicianKhaled Hassanroaks3PeWu
authored
Adding resilience_mode field support to Cloud Composer (#8058) (#14939)
* Adding High Resilience Fields Support To Terraform * Bumping composer api version to 0.125.0 * Adding Test for composerV2HighResilience * Fixing function name * retrigger checks * retrigger checks * Replacing go.sum with the fresh version * Replacing go.mod.erb with the fresh version * Removing high resilience test and adding field to composerv2 test * Fixing Indentation * Remove HighResilience TEST * Removing HR test * Fixing Removing ComposerV2 test * Fixing go mod and go sum * Added Test for HighResilience * Fixed Indentation * Revert go.mod.erb and go.sum changes * Apply review comments * retrigger checks --------- Signed-off-by: Modular Magician <[email protected]> Co-authored-by: Khaled Hassan <[email protected]> Co-authored-by: Ryan Oaks <[email protected]> Co-authored-by: Przemek Wiech <[email protected]>
1 parent f832b63 commit 3b1428c

File tree

4 files changed

+130
-0
lines changed

4 files changed

+130
-0
lines changed

.changelog/8058.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
composer: added `resilience_mode` field in `google_composer_environment`
3+
```

google/resource_composer_environment_test.go

+96
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,39 @@ func TestAccComposerEnvironment_ComposerV2(t *testing.T) {
498498
})
499499
}
500500

501+
func TestAccComposerEnvironment_ComposerV2HighResilience(t *testing.T) {
502+
t.Parallel()
503+
504+
envName := fmt.Sprintf("%s-%d", testComposerEnvironmentPrefix, RandInt(t))
505+
network := fmt.Sprintf("%s-%d", testComposerNetworkPrefix, RandInt(t))
506+
subnetwork := network + "-1"
507+
508+
VcrTest(t, resource.TestCase{
509+
PreCheck: func() { acctest.AccTestPreCheck(t) },
510+
ProtoV5ProviderFactories: ProtoV5ProviderFactories(t),
511+
CheckDestroy: testAccComposerEnvironmentDestroyProducer(t),
512+
Steps: []resource.TestStep{
513+
{
514+
Config: testAccComposerEnvironment_composerV2HighResilience(envName, network, subnetwork),
515+
},
516+
{
517+
ResourceName: "google_composer_environment.test",
518+
ImportState: true,
519+
ImportStateVerify: true,
520+
},
521+
// This is a terrible clean-up step in order to get destroy to succeed,
522+
// due to dangling firewall rules left by the Composer Environment blocking network deletion.
523+
// TODO(dzarmola): Remove this check if firewall rules bug gets fixed by Composer.
524+
{
525+
PlanOnly: true,
526+
ExpectNonEmptyPlan: false,
527+
Config: testAccComposerEnvironment_composerV2HighResilience(envName, network, subnetwork),
528+
Check: testAccCheckClearComposerEnvironmentFirewalls(t, network),
529+
},
530+
},
531+
})
532+
}
533+
501534
func TestAccComposerEnvironment_UpdateComposerV2(t *testing.T) {
502535
t.Parallel()
503536

@@ -1595,6 +1628,69 @@ resource "google_compute_subnetwork" "test" {
15951628
`, envName, network, subnetwork)
15961629
}
15971630

1631+
func testAccComposerEnvironment_composerV2HighResilience(envName, network, subnetwork string) string {
1632+
return fmt.Sprintf(`
1633+
resource "google_composer_environment" "test" {
1634+
name = "%s"
1635+
region = "us-east1"
1636+
1637+
config {
1638+
node_config {
1639+
network = google_compute_network.test.self_link
1640+
subnetwork = google_compute_subnetwork.test.self_link
1641+
}
1642+
1643+
software_config {
1644+
image_version = "composer-2-airflow-2"
1645+
}
1646+
1647+
workloads_config {
1648+
scheduler {
1649+
cpu = 1.25
1650+
memory_gb = 2.5
1651+
storage_gb = 5.4
1652+
count = 2
1653+
}
1654+
web_server {
1655+
cpu = 1.75
1656+
memory_gb = 3.0
1657+
storage_gb = 4.4
1658+
}
1659+
worker {
1660+
cpu = 0.5
1661+
memory_gb = 2.0
1662+
storage_gb = 3.4
1663+
min_count = 2
1664+
max_count = 5
1665+
}
1666+
}
1667+
environment_size = "ENVIRONMENT_SIZE_MEDIUM"
1668+
resilience_mode = "HIGH_RESILIENCE"
1669+
private_environment_config {
1670+
enable_private_endpoint = true
1671+
cloud_composer_network_ipv4_cidr_block = "10.3.192.0/24"
1672+
master_ipv4_cidr_block = "172.16.194.0/23"
1673+
cloud_sql_ipv4_cidr_block = "10.3.224.0/20"
1674+
}
1675+
}
1676+
}
1677+
1678+
resource "google_compute_network" "test" {
1679+
name = "%s"
1680+
auto_create_subnetworks = false
1681+
}
1682+
1683+
resource "google_compute_subnetwork" "test" {
1684+
name = "%s"
1685+
ip_cidr_range = "10.2.0.0/16"
1686+
region = "us-east1"
1687+
network = google_compute_network.test.self_link
1688+
private_ip_google_access = true
1689+
}
1690+
1691+
`, envName, network, subnetwork)
1692+
}
1693+
15981694
func testAccComposerEnvironment_composerV2PrivateServiceConnect(envName, network, subnetwork string) string {
15991695
return fmt.Sprintf(`
16001696
resource "google_composer_environment" "test" {

google/services/composer/resource_composer_environment.go

+25
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ var (
6666
"config.0.workloads_config",
6767
"config.0.environment_size",
6868
"config.0.master_authorized_networks_config",
69+
"config.0.resilience_mode",
6970
}
7071

7172
recoveryConfigKeys = []string{
@@ -739,6 +740,15 @@ func ResourceComposerEnvironment() *schema.Resource {
739740
ValidateFunc: validation.StringInSlice([]string{"ENVIRONMENT_SIZE_SMALL", "ENVIRONMENT_SIZE_MEDIUM", "ENVIRONMENT_SIZE_LARGE"}, false),
740741
Description: `The size of the Cloud Composer environment. This field is supported for Cloud Composer environments in versions composer-2.*.*-airflow-*.*.* and newer.`,
741742
},
743+
"resilience_mode": {
744+
Type: schema.TypeString,
745+
Optional: true,
746+
Computed: true,
747+
ForceNew: true,
748+
AtLeastOneOf: composerConfigKeys,
749+
ValidateFunc: validation.StringInSlice([]string{"HIGH_RESILIENCE"}, false),
750+
Description: `Whether high resilience is enabled or not. This field is supported for Cloud Composer environments in versions composer-2.1.15-airflow-*.*.* and newer.`,
751+
},
742752
"master_authorized_networks_config": {
743753
Type: schema.TypeList,
744754
Optional: true,
@@ -1205,6 +1215,7 @@ func flattenComposerEnvironmentConfig(envCfg *composer.EnvironmentConfig) interf
12051215
transformed["workloads_config"] = flattenComposerEnvironmentConfigWorkloadsConfig(envCfg.WorkloadsConfig)
12061216
transformed["recovery_config"] = flattenComposerEnvironmentConfigRecoveryConfig(envCfg.RecoveryConfig)
12071217
transformed["environment_size"] = envCfg.EnvironmentSize
1218+
transformed["resilience_mode"] = envCfg.ResilienceMode
12081219
transformed["master_authorized_networks_config"] = flattenComposerEnvironmentConfigMasterAuthorizedNetworksConfig(envCfg.MasterAuthorizedNetworksConfig)
12091220
return []interface{}{transformed}
12101221
}
@@ -1520,6 +1531,13 @@ func expandComposerEnvironmentConfig(v interface{}, d *schema.ResourceData, conf
15201531
return nil, err
15211532
}
15221533
transformed.EnvironmentSize = transformedEnvironmentSize
1534+
1535+
transformedResilienceMode, err := expandComposerEnvironmentConfigResilienceMode(original["resilience_mode"], d, config)
1536+
if err != nil {
1537+
return nil, err
1538+
}
1539+
transformed.ResilienceMode = transformedResilienceMode
1540+
15231541
transformedMasterAuthorizedNetworksConfig, err := expandComposerEnvironmentConfigMasterAuthorizedNetworksConfig(original["master_authorized_networks_config"], d, config)
15241542
if err != nil {
15251543
return nil, err
@@ -1743,6 +1761,13 @@ func expandComposerEnvironmentConfigEnvironmentSize(v interface{}, d *schema.Res
17431761
return v.(string), nil
17441762
}
17451763

1764+
func expandComposerEnvironmentConfigResilienceMode(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) (string, error) {
1765+
if v == nil {
1766+
return "", nil
1767+
}
1768+
return v.(string), nil
1769+
}
1770+
17461771
func expandComposerEnvironmentConfigPrivateEnvironmentConfig(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) (*composer.PrivateEnvironmentConfig, error) {
17471772
l := v.([]interface{})
17481773
if len(l) == 0 {

website/docs/r/composer_environment.html.markdown

+6
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,12 @@ The `config` block supports:
679679
environment size are `ENVIRONMENT_SIZE_SMALL`, `ENVIRONMENT_SIZE_MEDIUM`,
680680
and `ENVIRONMENT_SIZE_LARGE`.
681681

682+
* `resilience_mode` -
683+
(Optional, Cloud Composer 2.1.15 or newer only)
684+
The resilience mode states whether high resilience is enabled for
685+
the environment or not. Value for resilience mode is `HIGH_RESILIENCE`.
686+
If unspecified, defaults to standard resilience.
687+
682688
* `master_authorized_networks_config` -
683689
(Optional)
684690
Configuration options for the master authorized networks feature. Enabled

0 commit comments

Comments
 (0)