|
3 | 3 | package composer
|
4 | 4 |
|
5 | 5 | import (
|
| 6 | + "context" |
6 | 7 | "fmt"
|
7 | 8 | "log"
|
8 | 9 | "regexp"
|
@@ -1394,7 +1395,10 @@ func flattenComposerEnvironmentConfig(envCfg *composer.EnvironmentConfig) interf
|
1394 | 1395 | transformed["airflow_uri"] = envCfg.AirflowUri
|
1395 | 1396 | transformed["node_config"] = flattenComposerEnvironmentConfigNodeConfig(envCfg.NodeConfig)
|
1396 | 1397 | 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 | + } |
1398 | 1402 | transformed["web_server_network_access_control"] = flattenComposerEnvironmentConfigWebServerNetworkAccessControl(envCfg.WebServerNetworkAccessControl)
|
1399 | 1403 | transformed["database_config"] = flattenComposerEnvironmentConfigDatabaseConfig(envCfg.DatabaseConfig)
|
1400 | 1404 | transformed["web_server_config"] = flattenComposerEnvironmentConfigWebServerConfig(envCfg.WebServerConfig)
|
@@ -2608,7 +2612,48 @@ func versionsEqual(old, new string) (bool, error) {
|
2608 | 2612 | return o.Equal(n), nil
|
2609 | 2613 | }
|
2610 | 2614 |
|
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 |
2614 | 2659 | }
|
0 commit comments