Skip to content

Commit e4ab776

Browse files
Add DatabaseConfig and WebServerConfig to Cloud Composer's EnvironmentConfig (#3863) (#2419)
Signed-off-by: Modular Magician <[email protected]>
1 parent 9cb97f3 commit e4ab776

File tree

4 files changed

+567
-206
lines changed

4 files changed

+567
-206
lines changed

.changelog/3863.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 `database_config` and `web_server_config` to `google_composer_environment` resource (TPGB only)
3+
```

google-beta/resource_composer_environment.go

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ var (
5050
"config.0.software_config",
5151
"config.0.private_environment_config",
5252
"config.0.web_server_network_access_control",
53+
"config.0.database_config",
54+
"config.0.web_server_config",
5355
}
5456

5557
allowedIpRangesConfig = &schema.Resource{
@@ -386,6 +388,42 @@ func resourceComposerEnvironment() *schema.Resource {
386388
},
387389
},
388390
},
391+
"database_config": {
392+
Type: schema.TypeList,
393+
Optional: true,
394+
Computed: true,
395+
AtLeastOneOf: composerConfigKeys,
396+
MaxItems: 1,
397+
Description: `The configuration of Cloud SQL instance that is used by the Apache Airflow software.`,
398+
Elem: &schema.Resource{
399+
Schema: map[string]*schema.Schema{
400+
"machine_type": {
401+
Type: schema.TypeString,
402+
Required: true,
403+
ForceNew: true,
404+
Description: `Optional. Cloud SQL machine type used by Airflow database. It has to be one of: db-n1-standard-2, db-n1-standard-4, db-n1-standard-8 or db-n1-standard-16. If not specified, db-n1-standard-2 will be used.`,
405+
},
406+
},
407+
},
408+
},
409+
"web_server_config": {
410+
Type: schema.TypeList,
411+
Optional: true,
412+
Computed: true,
413+
AtLeastOneOf: composerConfigKeys,
414+
MaxItems: 1,
415+
Description: `The configuration settings for the Airflow web server App Engine instance.`,
416+
Elem: &schema.Resource{
417+
Schema: map[string]*schema.Schema{
418+
"machine_type": {
419+
Type: schema.TypeString,
420+
Required: true,
421+
ForceNew: true,
422+
Description: `Optional. Machine type on which Airflow web server is running. It has to be one of: composer-n1-webserver-2, composer-n1-webserver-4 or composer-n1-webserver-8. If not specified, composer-n1-webserver-2 will be used. Value custom is returned only in response, if Airflow web server parameters were manually changed to a non-standard values.`,
423+
},
424+
},
425+
},
426+
},
389427
"airflow_uri": {
390428
Type: schema.TypeString,
391429
Computed: true,
@@ -623,6 +661,30 @@ func resourceComposerEnvironmentUpdate(d *schema.ResourceData, meta interface{})
623661
}
624662
d.SetPartial("config")
625663
}
664+
665+
if d.HasChange("config.0.database_config") {
666+
patchObj := &composer.Environment{Config: &composer.EnvironmentConfig{}}
667+
if config != nil {
668+
patchObj.Config.DatabaseConfig = config.DatabaseConfig
669+
}
670+
err = resourceComposerEnvironmentPatchField("config.databaseConfig", patchObj, d, tfConfig)
671+
if err != nil {
672+
return err
673+
}
674+
d.SetPartial("config")
675+
}
676+
677+
if d.HasChange("config.0.web_server_config") {
678+
patchObj := &composer.Environment{Config: &composer.EnvironmentConfig{}}
679+
if config != nil {
680+
patchObj.Config.WebServerConfig = config.WebServerConfig
681+
}
682+
err = resourceComposerEnvironmentPatchField("config.webServerConfig", patchObj, d, tfConfig)
683+
if err != nil {
684+
return err
685+
}
686+
d.SetPartial("config")
687+
}
626688
}
627689

628690
if d.HasChange("labels") {
@@ -740,6 +802,8 @@ func flattenComposerEnvironmentConfig(envCfg *composer.EnvironmentConfig) interf
740802
transformed["software_config"] = flattenComposerEnvironmentConfigSoftwareConfig(envCfg.SoftwareConfig)
741803
transformed["private_environment_config"] = flattenComposerEnvironmentConfigPrivateEnvironmentConfig(envCfg.PrivateEnvironmentConfig)
742804
transformed["web_server_network_access_control"] = flattenComposerEnvironmentConfigWebServerNetworkAccessControl(envCfg.WebServerNetworkAccessControl)
805+
transformed["database_config"] = flattenComposerEnvironmentConfigDatabaseConfig(envCfg.DatabaseConfig)
806+
transformed["web_server_config"] = flattenComposerEnvironmentConfigWebServerConfig(envCfg.WebServerConfig)
743807

744808
return []interface{}{transformed}
745809
}
@@ -765,6 +829,28 @@ func flattenComposerEnvironmentConfigWebServerNetworkAccessControl(accessControl
765829
return []interface{}{webServerNetworkAccessControl}
766830
}
767831

832+
func flattenComposerEnvironmentConfigDatabaseConfig(databaseCfg *composer.DatabaseConfig) interface{} {
833+
if databaseCfg == nil {
834+
return nil
835+
}
836+
837+
transformed := make(map[string]interface{})
838+
transformed["machine_type"] = databaseCfg.MachineType
839+
840+
return []interface{}{transformed}
841+
}
842+
843+
func flattenComposerEnvironmentConfigWebServerConfig(webServerCfg *composer.WebServerConfig) interface{} {
844+
if webServerCfg == nil {
845+
return nil
846+
}
847+
848+
transformed := make(map[string]interface{})
849+
transformed["machine_type"] = webServerCfg.MachineType
850+
851+
return []interface{}{transformed}
852+
}
853+
768854
func flattenComposerEnvironmentConfigPrivateEnvironmentConfig(envCfg *composer.PrivateEnvironmentConfig) interface{} {
769855
if envCfg == nil {
770856
return nil
@@ -877,6 +963,18 @@ func expandComposerEnvironmentConfig(v interface{}, d *schema.ResourceData, conf
877963
}
878964
transformed.WebServerNetworkAccessControl = transformedWebServerNetworkAccessControl
879965

966+
transformedDatabaseConfig, err := expandComposerEnvironmentConfigDatabaseConfig(original["database_config"], d, config)
967+
if err != nil {
968+
return nil, err
969+
}
970+
transformed.DatabaseConfig = transformedDatabaseConfig
971+
972+
transformedWebServerConfig, err := expandComposerEnvironmentConfigWebServerConfig(original["web_server_config"], d, config)
973+
if err != nil {
974+
return nil, err
975+
}
976+
transformed.WebServerConfig = transformedWebServerConfig
977+
880978
return transformed, nil
881979
}
882980

@@ -916,6 +1014,34 @@ func expandComposerEnvironmentConfigWebServerNetworkAccessControl(v interface{},
9161014
return transformed, nil
9171015
}
9181016

1017+
func expandComposerEnvironmentConfigDatabaseConfig(v interface{}, d *schema.ResourceData, config *Config) (*composer.DatabaseConfig, error) {
1018+
l := v.([]interface{})
1019+
if len(l) == 0 || l[0] == nil {
1020+
return nil, nil
1021+
}
1022+
raw := l[0]
1023+
original := raw.(map[string]interface{})
1024+
1025+
transformed := &composer.DatabaseConfig{}
1026+
transformed.MachineType = original["machine_type"].(string)
1027+
1028+
return transformed, nil
1029+
}
1030+
1031+
func expandComposerEnvironmentConfigWebServerConfig(v interface{}, d *schema.ResourceData, config *Config) (*composer.WebServerConfig, error) {
1032+
l := v.([]interface{})
1033+
if len(l) == 0 || l[0] == nil {
1034+
return nil, nil
1035+
}
1036+
raw := l[0]
1037+
original := raw.(map[string]interface{})
1038+
1039+
transformed := &composer.WebServerConfig{}
1040+
transformed.MachineType = original["machine_type"].(string)
1041+
1042+
return transformed, nil
1043+
}
1044+
9191045
func expandComposerEnvironmentConfigPrivateEnvironmentConfig(v interface{}, d *schema.ResourceData, config *Config) (*composer.PrivateEnvironmentConfig, error) {
9201046
l := v.([]interface{})
9211047
if len(l) == 0 {

0 commit comments

Comments
 (0)