Skip to content

Commit 78d1ab3

Browse files
modular-magicianKhaled Hassanroaks3PeWu
authored
Adding resilience_mode field support to Cloud Composer (#8058) (#5790)
* 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 c6dba46 commit 78d1ab3

File tree

4 files changed

+130
-0
lines changed

4 files changed

+130
-0
lines changed

.changelog/8058.txt

Lines changed: 3 additions & 0 deletions
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-beta/resource_composer_environment_test.go

Lines changed: 96 additions & 0 deletions
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_UpdateComposerV2WithTriggerer(t *testing.T) {
502535
// TODO: This test was seemingly working, but then started to re-run on every gcbrun https://github.com/hashicorp/terraform-provider-google/issues/14160
503536
acctest.SkipIfVcr(t)
@@ -1641,6 +1674,69 @@ resource "google_compute_subnetwork" "test" {
16411674
`, envName, network, subnetwork)
16421675
}
16431676

1677+
func testAccComposerEnvironment_composerV2HighResilience(envName, network, subnetwork string) string {
1678+
return fmt.Sprintf(`
1679+
resource "google_composer_environment" "test" {
1680+
name = "%s"
1681+
region = "us-east1"
1682+
1683+
config {
1684+
node_config {
1685+
network = google_compute_network.test.self_link
1686+
subnetwork = google_compute_subnetwork.test.self_link
1687+
}
1688+
1689+
software_config {
1690+
image_version = "composer-2-airflow-2"
1691+
}
1692+
1693+
workloads_config {
1694+
scheduler {
1695+
cpu = 1.25
1696+
memory_gb = 2.5
1697+
storage_gb = 5.4
1698+
count = 2
1699+
}
1700+
web_server {
1701+
cpu = 1.75
1702+
memory_gb = 3.0
1703+
storage_gb = 4.4
1704+
}
1705+
worker {
1706+
cpu = 0.5
1707+
memory_gb = 2.0
1708+
storage_gb = 3.4
1709+
min_count = 2
1710+
max_count = 5
1711+
}
1712+
}
1713+
environment_size = "ENVIRONMENT_SIZE_MEDIUM"
1714+
resilience_mode = "HIGH_RESILIENCE"
1715+
private_environment_config {
1716+
enable_private_endpoint = true
1717+
cloud_composer_network_ipv4_cidr_block = "10.3.192.0/24"
1718+
master_ipv4_cidr_block = "172.16.194.0/23"
1719+
cloud_sql_ipv4_cidr_block = "10.3.224.0/20"
1720+
}
1721+
}
1722+
}
1723+
1724+
resource "google_compute_network" "test" {
1725+
name = "%s"
1726+
auto_create_subnetworks = false
1727+
}
1728+
1729+
resource "google_compute_subnetwork" "test" {
1730+
name = "%s"
1731+
ip_cidr_range = "10.2.0.0/16"
1732+
region = "us-east1"
1733+
network = google_compute_network.test.self_link
1734+
private_ip_google_access = true
1735+
}
1736+
1737+
`, envName, network, subnetwork)
1738+
}
1739+
16441740
func testAccComposerEnvironment_composerV2PrivateServiceConnect(envName, network, subnetwork string) string {
16451741
return fmt.Sprintf(`
16461742
resource "google_composer_environment" "test" {

google-beta/services/composer/resource_composer_environment.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ var (
6767
"config.0.workloads_config",
6868
"config.0.environment_size",
6969
"config.0.master_authorized_networks_config",
70+
"config.0.resilience_mode",
7071
}
7172

7273
recoveryConfigKeys = []string{
@@ -794,6 +795,15 @@ func ResourceComposerEnvironment() *schema.Resource {
794795
ValidateFunc: validation.StringInSlice([]string{"ENVIRONMENT_SIZE_SMALL", "ENVIRONMENT_SIZE_MEDIUM", "ENVIRONMENT_SIZE_LARGE"}, false),
795796
Description: `The size of the Cloud Composer environment. This field is supported for Cloud Composer environments in versions composer-2.*.*-airflow-*.*.* and newer.`,
796797
},
798+
"resilience_mode": {
799+
Type: schema.TypeString,
800+
Optional: true,
801+
Computed: true,
802+
ForceNew: true,
803+
AtLeastOneOf: composerConfigKeys,
804+
ValidateFunc: validation.StringInSlice([]string{"HIGH_RESILIENCE"}, false),
805+
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.`,
806+
},
797807
"master_authorized_networks_config": {
798808
Type: schema.TypeList,
799809
Optional: true,
@@ -1290,6 +1300,7 @@ func flattenComposerEnvironmentConfig(envCfg *composer.EnvironmentConfig) interf
12901300
transformed["workloads_config"] = flattenComposerEnvironmentConfigWorkloadsConfig(envCfg.WorkloadsConfig)
12911301
transformed["recovery_config"] = flattenComposerEnvironmentConfigRecoveryConfig(envCfg.RecoveryConfig)
12921302
transformed["environment_size"] = envCfg.EnvironmentSize
1303+
transformed["resilience_mode"] = envCfg.ResilienceMode
12931304
transformed["master_authorized_networks_config"] = flattenComposerEnvironmentConfigMasterAuthorizedNetworksConfig(envCfg.MasterAuthorizedNetworksConfig)
12941305
return []interface{}{transformed}
12951306
}
@@ -1631,6 +1642,13 @@ func expandComposerEnvironmentConfig(v interface{}, d *schema.ResourceData, conf
16311642
return nil, err
16321643
}
16331644
transformed.EnvironmentSize = transformedEnvironmentSize
1645+
1646+
transformedResilienceMode, err := expandComposerEnvironmentConfigResilienceMode(original["resilience_mode"], d, config)
1647+
if err != nil {
1648+
return nil, err
1649+
}
1650+
transformed.ResilienceMode = transformedResilienceMode
1651+
16341652
transformedMasterAuthorizedNetworksConfig, err := expandComposerEnvironmentConfigMasterAuthorizedNetworksConfig(original["master_authorized_networks_config"], d, config)
16351653
if err != nil {
16361654
return nil, err
@@ -1865,6 +1883,13 @@ func expandComposerEnvironmentConfigEnvironmentSize(v interface{}, d *schema.Res
18651883
return v.(string), nil
18661884
}
18671885

1886+
func expandComposerEnvironmentConfigResilienceMode(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) (string, error) {
1887+
if v == nil {
1888+
return "", nil
1889+
}
1890+
return v.(string), nil
1891+
}
1892+
18681893
func expandComposerEnvironmentConfigPrivateEnvironmentConfig(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) (*composer.PrivateEnvironmentConfig, error) {
18691894
l := v.([]interface{})
18701895
if len(l) == 0 {

website/docs/r/composer_environment.html.markdown

Lines changed: 6 additions & 0 deletions
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)