Skip to content

Commit 762d64a

Browse files
modular-magicianSarahFrench
authored andcommitted
Add validations for Composer 2/3 only fields (#9917) (#17361)
* block upgrade to composer 3 * make isComposer3 more generic, correct imageVersionChangeValidationFunc * added validation for Composer 2/3 specific fields * add tests for validation * add checks in flattenComposerEnvironmentConfig * Update attributes of fields not used in Composer 3 * make customizeDiff functions beta only * remove Computed from gke_cluster * remove Optional instead of Computed * add envCfg.PrivateEnvironmentConfig is nil check * modify isComposer3 to take string * minor correction to avoid merge conflicts [upstream:a58f0e2a4505a5debeac9813042c60f46567c42e] Signed-off-by: Modular Magician <[email protected]>
1 parent efa3b11 commit 762d64a

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

.changelog/9917.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
```release-note:enhancement
2+
composer:
3+
- added validations for Composer 2/3 only fields
4+
- blocked Composer2 -> Composer3 upgrade
5+
- updated attributes of fields not used in Composer 3
6+
```

google/services/composer/resource_composer_environment.go

+49-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package composer
44

55
import (
6+
"context"
67
"fmt"
78
"log"
89
"regexp"
@@ -1394,7 +1395,10 @@ func flattenComposerEnvironmentConfig(envCfg *composer.EnvironmentConfig) interf
13941395
transformed["airflow_uri"] = envCfg.AirflowUri
13951396
transformed["node_config"] = flattenComposerEnvironmentConfigNodeConfig(envCfg.NodeConfig)
13961397
transformed["software_config"] = flattenComposerEnvironmentConfigSoftwareConfig(envCfg.SoftwareConfig)
1397-
transformed["private_environment_config"] = flattenComposerEnvironmentConfigPrivateEnvironmentConfig(envCfg.PrivateEnvironmentConfig)
1398+
imageVersion := envCfg.SoftwareConfig.ImageVersion
1399+
if !isComposer3(imageVersion) {
1400+
transformed["private_environment_config"] = flattenComposerEnvironmentConfigPrivateEnvironmentConfig(envCfg.PrivateEnvironmentConfig)
1401+
}
13981402
transformed["web_server_network_access_control"] = flattenComposerEnvironmentConfigWebServerNetworkAccessControl(envCfg.WebServerNetworkAccessControl)
13991403
transformed["database_config"] = flattenComposerEnvironmentConfigDatabaseConfig(envCfg.DatabaseConfig)
14001404
transformed["web_server_config"] = flattenComposerEnvironmentConfigWebServerConfig(envCfg.WebServerConfig)
@@ -2608,7 +2612,48 @@ func versionsEqual(old, new string) (bool, error) {
26082612
return o.Equal(n), nil
26092613
}
26102614

2611-
func isComposer3(d *schema.ResourceData, config *transport_tpg.Config) bool {
2612-
image_version := d.Get("config.0.software_config.0.image_version").(string)
2613-
return strings.Contains(image_version, "composer-3")
2615+
func isComposer3(imageVersion string) bool {
2616+
return strings.Contains(imageVersion, "composer-3")
2617+
}
2618+
2619+
func imageVersionChangeValidationFunc(ctx context.Context, old, new, meta any) error {
2620+
if old.(string) != "" && !isComposer3(old.(string)) && isComposer3(new.(string)) {
2621+
return fmt.Errorf("upgrade to composer 3 is not yet supported")
2622+
}
2623+
return nil
2624+
}
2625+
2626+
func validateComposer3FieldUsage(d *schema.ResourceDiff, key string, requireComposer3 bool) error {
2627+
_, ok := d.GetOk(key)
2628+
imageVersion := d.Get("config.0.software_config.0.image_version").(string)
2629+
if ok && (isComposer3(imageVersion) != requireComposer3) {
2630+
if requireComposer3 {
2631+
return fmt.Errorf("error in configuration, %s should only be used in Composer 3", key)
2632+
} else {
2633+
return fmt.Errorf("error in configuration, %s should not be used in Composer 3", key)
2634+
}
2635+
}
2636+
return nil
2637+
}
2638+
2639+
func versionValidationCustomizeDiffFunc(ctx context.Context, d *schema.ResourceDiff, meta interface{}) error {
2640+
composer3FieldUsagePolicy := map[string]bool{
2641+
"config.0.node_config.0.max_pods_per_node": false, // not allowed in composer 3
2642+
"config.0.node_config.0.enable_ip_masq_agent": false,
2643+
"config.0.node_config.0.config.0.node_config.0.ip_allocation_policy": false,
2644+
"config.0.private_environment_config": false,
2645+
"config.0.master_authorized_networks_config": false,
2646+
"config.0.node_config.0.composer_network_attachment": true, // allowed only in composer 3
2647+
"config.0.node_config.0.composer_internal_ipv4_cidr_block": true,
2648+
"config.0.software_config.0.web_server_plugins_mode": true,
2649+
"config.0.enable_private_environment": true,
2650+
"config.0.enable_private_builds_only": true,
2651+
"config.0.workloads_config.0.dag_processor": true,
2652+
}
2653+
for key, allowed := range composer3FieldUsagePolicy {
2654+
if err := validateComposer3FieldUsage(d, key, allowed); err != nil {
2655+
return err
2656+
}
2657+
}
2658+
return nil
26142659
}

0 commit comments

Comments
 (0)