in alicloud/resource_alicloud_ess_eci_scaling_configuration.go [1425:1909]
func resourceAliyunEssEciScalingConfigurationUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
essService := EssService{client}
d.Partial(true)
sgId := d.Get("scaling_group_id").(string)
group, err := essService.DescribeEssScalingGroup(sgId)
if err != nil {
return WrapError(err)
}
if d.HasChange("active") {
c, err := essService.DescribeEssEciScalingConfiguration(d.Id())
if err != nil {
if NotFoundError(err) {
d.SetId("")
return nil
}
return WrapError(err)
}
if d.Get("active").(bool) {
if c["LifecycleState"] == string(Inactive) {
modifyGroupRequest := ess.CreateModifyScalingGroupRequest()
modifyGroupRequest.ScalingGroupId = sgId
modifyGroupRequest.ActiveScalingConfigurationId = d.Id()
_, err := client.WithEssClient(func(essClient *ess.Client) (interface{}, error) {
return essClient.ModifyScalingGroup(modifyGroupRequest)
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), modifyGroupRequest.GetActionName(), AlibabaCloudSdkGoERROR)
}
}
if group.LifecycleState == string(Inactive) {
enableGroupRequest := ess.CreateEnableScalingGroupRequest()
enableGroupRequest.RegionId = client.RegionId
enableGroupRequest.ScalingGroupId = sgId
_, err := client.WithEssClient(func(essClient *ess.Client) (interface{}, error) {
return essClient.EnableScalingGroup(enableGroupRequest)
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), enableGroupRequest.GetActionName(), AlibabaCloudSdkGoERROR)
}
}
}
d.SetPartial("active")
}
request := map[string]interface{}{
"ScalingConfigurationId": d.Id(),
"RegionId": client.RegionId,
}
update := false
if d.HasChange("scaling_configuration_name") {
update = true
request["ScalingConfigurationName"] = d.Get("scaling_configuration_name")
}
if d.HasChange("description") {
update = true
request["Description"] = d.Get("description")
}
if d.HasChange("security_group_id") {
update = true
request["SecurityGroupId"] = d.Get("security_group_id")
}
if d.HasChange("container_group_name") {
update = true
request["ContainerGroupName"] = d.Get("container_group_name")
}
if d.HasChange("restart_policy") {
update = true
request["RestartPolicy"] = d.Get("restart_policy")
}
if d.HasChange("cpu") {
update = true
request["Cpu"] = d.Get("cpu")
}
if d.HasChange("memory") {
update = true
request["Memory"] = d.Get("memory")
}
if d.HasChange("resource_group_id") {
update = true
request["ResourceGroupId"] = d.Get("resource_group_id")
}
if d.HasChange("dns_policy") {
update = true
request["DnsPolicy"] = d.Get("dns_policy")
}
if d.HasChange("cost_optimization") {
update = true
request["CostOptimization"] = d.Get("cost_optimization")
}
if d.HasChange("enable_sls") {
update = true
request["EnableSls"] = d.Get("enable_sls")
}
if d.HasChange("image_snapshot_id") {
update = true
request["ImageSnapshotId"] = d.Get("image_snapshot_id")
}
if d.HasChange("instance_family_level") {
update = true
request["InstanceFamilyLevel"] = d.Get("instance_family_level")
}
if d.HasChange("ram_role_name") {
update = true
request["RamRoleName"] = d.Get("ram_role_name")
}
if d.HasChange("termination_grace_period_seconds") {
update = true
request["TerminationGracePeriodSeconds"] = d.Get("termination_grace_period_seconds")
}
if d.HasChange("auto_match_image_cache") {
update = true
request["AutoMatchImageCache"] = d.Get("auto_match_image_cache")
}
if d.HasChange("ipv6_address_count") {
update = true
request["Ipv6AddressCount"] = d.Get("ipv6_address_count")
}
if d.HasChange("cpu_options_core") {
if v, ok := d.GetOkExists("cpu_options_core"); ok {
if v != 0 {
update = true
request["CpuOptionsCore"] = v
}
}
}
if d.HasChange("cpu_options_threads_per_core") {
if v, ok := d.GetOkExists("cpu_options_threads_per_core"); ok {
if v != 0 {
update = true
request["CpuOptionsThreadsPerCore"] = v
}
}
}
if d.HasChange("active_deadline_seconds") {
update = true
v := d.Get("active_deadline_seconds")
request["ActiveDeadlineSeconds"] = v
}
if d.HasChange("spot_strategy") {
update = true
request["SpotStrategy"] = d.Get("spot_strategy")
}
if d.HasChange("spot_price_limit") {
update = true
request["SpotPriceLimit"] = strconv.FormatFloat(d.Get("spot_price_limit").(float64), 'f', 2, 64)
}
if d.HasChange("auto_create_eip") {
update = true
request["AutoCreateEip"] = d.Get("auto_create_eip")
}
if d.HasChange("eip_bandwidth") {
update = true
request["EipBandwidth"] = d.Get("eip_bandwidth")
}
if d.HasChange("host_name") {
update = true
request["HostName"] = d.Get("host_name")
}
if d.HasChange("ingress_bandwidth") {
update = true
request["IngressBandwidth"] = d.Get("ingress_bandwidth")
}
if d.HasChange("egress_bandwidth") {
update = true
request["EgressBandwidth"] = d.Get("egress_bandwidth")
}
if d.HasChange("ephemeral_storage") {
update = true
request["EphemeralStorage"] = d.Get("ephemeral_storage")
}
if d.HasChange("load_balancer_weight") {
update = true
request["LoadBalancerWeight"] = d.Get("load_balancer_weight")
}
if d.HasChange("tags") {
update = true
count := 1
for key, value := range d.Get("tags").(map[string]interface{}) {
request[fmt.Sprintf("Tag.%d.Key", count)] = key
request[fmt.Sprintf("Tag.%d.Value", count)] = value
count++
}
}
if d.HasChange("image_registry_credentials") {
update = true
if v, ok := d.GetOk("image_registry_credentials"); ok {
imageRegisryCredentialMaps := make([]map[string]interface{}, 0)
for _, raw := range v.(*schema.Set).List() {
obj := raw.(map[string]interface{})
imageRegisryCredentialMaps = append(imageRegisryCredentialMaps, map[string]interface{}{
"Password": obj["password"],
"Server": obj["server"],
"UserName": obj["username"],
})
}
request["ImageRegistryCredential"] = imageRegisryCredentialMaps
}
}
if d.HasChange("dns_config_options") {
update = true
if v, ok := d.GetOk("dns_config_options"); ok {
dnsConfigOptionMaps := make([]map[string]interface{}, 0)
for _, raw := range v.(*schema.Set).List() {
obj := raw.(map[string]interface{})
dnsConfigOptionMaps = append(dnsConfigOptionMaps, map[string]interface{}{
"Name": obj["name"],
"Value": obj["value"],
})
}
request["DnsConfigOption"] = dnsConfigOptionMaps
}
}
if d.HasChange("security_context_sysctls") {
update = true
if v, ok := d.GetOk("security_context_sysctls"); ok {
securityContextSysctlMaps := make([]map[string]interface{}, 0)
for _, raw := range v.(*schema.Set).List() {
obj := raw.(map[string]interface{})
securityContextSysctlMaps = append(securityContextSysctlMaps, map[string]interface{}{
"Name": obj["name"],
"Value": obj["value"],
})
}
request["SecurityContextSysctl"] = securityContextSysctlMaps
}
}
if d.HasChange("acr_registry_infos") {
update = true
if v, ok := d.GetOk("acr_registry_infos"); ok {
acrRegistryInfoMaps := make([]map[string]interface{}, 0)
for _, raw := range v.(*schema.Set).List() {
obj := raw.(map[string]interface{})
acrRegistryInfoMaps = append(acrRegistryInfoMaps, map[string]interface{}{
"Domain": expandStringList(obj["domains"].(*schema.Set).List()),
"InstanceName": obj["instance_name"],
"InstanceId": obj["instance_id"],
"RegionId": obj["region_id"],
})
}
request["AcrRegistryInfo"] = acrRegistryInfoMaps
}
}
if d.HasChange("containers") {
update = true
Containers := make([]map[string]interface{}, len(d.Get("containers").([]interface{})))
for i, ContainersValue := range d.Get("containers").([]interface{}) {
ContainersMap := ContainersValue.(map[string]interface{})
Containers[i] = make(map[string]interface{})
Containers[i]["SecurityContext.Capability.Add"] = ContainersMap["security_context_capability_adds"]
Containers[i]["LifecyclePreStopHandlerExec"] = ContainersMap["lifecycle_pre_stop_handler_execs"]
Containers[i]["SecurityContext.ReadOnlyRootFilesystem"] = ContainersMap["security_context_read_only_root_file_system"]
Containers[i]["Tty"] = ContainersMap["tty"]
Containers[i]["Stdin"] = ContainersMap["stdin"]
Containers[i]["SecurityContext.RunAsUser"] = ContainersMap["security_context_run_as_user"]
Containers[i]["WorkingDir"] = ContainersMap["working_dir"]
Containers[i]["Arg"] = ContainersMap["args"]
Containers[i]["Cpu"] = ContainersMap["cpu"]
Containers[i]["Gpu"] = ContainersMap["gpu"]
Containers[i]["Memory"] = ContainersMap["memory"]
Containers[i]["Name"] = ContainersMap["name"]
Containers[i]["Image"] = ContainersMap["image"]
Containers[i]["ImagePullPolicy"] = ContainersMap["image_pull_policy"]
Containers[i]["Command"] = ContainersMap["commands"]
Containers[i]["ReadinessProbe.Exec.Command"] = ContainersMap["readiness_probe_exec_commands"]
if ContainersMap["readiness_probe_period_seconds"] != nil && ContainersMap["readiness_probe_period_seconds"] != 0 {
Containers[i]["ReadinessProbe.PeriodSeconds"] = ContainersMap["readiness_probe_period_seconds"]
}
Containers[i]["ReadinessProbe.HttpGet.Path"] = ContainersMap["readiness_probe_http_get_path"]
if ContainersMap["readiness_probe_failure_threshold"] != 0 {
Containers[i]["ReadinessProbe.FailureThreshold"] = ContainersMap["readiness_probe_failure_threshold"]
}
if ContainersMap["readiness_probe_initial_delay_seconds"] != 0 {
Containers[i]["ReadinessProbe.InitialDelaySeconds"] = ContainersMap["readiness_probe_initial_delay_seconds"]
}
if ContainersMap["readiness_probe_http_get_port"] != 0 {
Containers[i]["ReadinessProbe.HttpGet.Port"] = ContainersMap["readiness_probe_http_get_port"]
}
Containers[i]["ReadinessProbe.HttpGet.Scheme"] = ContainersMap["readiness_probe_http_get_scheme"]
if ContainersMap["readiness_probe_tcp_socket_port"] != 0 {
Containers[i]["ReadinessProbe.TcpSocket.Port"] = ContainersMap["readiness_probe_tcp_socket_port"]
}
if ContainersMap["readiness_probe_success_threshold"] != nil && ContainersMap["readiness_probe_success_threshold"] != 0 {
Containers[i]["ReadinessProbe.SuccessThreshold"] = ContainersMap["readiness_probe_success_threshold"]
}
if ContainersMap["readiness_probe_timeout_seconds"] != nil && ContainersMap["readiness_probe_timeout_seconds"] != 0 {
Containers[i]["ReadinessProbe.TimeoutSeconds"] = ContainersMap["readiness_probe_timeout_seconds"]
}
Containers[i]["LivenessProbe.Exec.Command"] = ContainersMap["liveness_probe_exec_commands"]
if ContainersMap["liveness_probe_period_seconds"] != nil && ContainersMap["liveness_probe_period_seconds"] != 0 {
Containers[i]["LivenessProbe.PeriodSeconds"] = ContainersMap["liveness_probe_period_seconds"]
}
Containers[i]["LivenessProbe.HttpGet.Path"] = ContainersMap["liveness_probe_http_get_path"]
if ContainersMap["liveness_probe_failure_threshold"] != 0 {
Containers[i]["LivenessProbe.FailureThreshold"] = ContainersMap["liveness_probe_failure_threshold"]
}
if ContainersMap["liveness_probe_initial_delay_seconds"] != 0 {
Containers[i]["LivenessProbe.InitialDelaySeconds"] = ContainersMap["liveness_probe_initial_delay_seconds"]
}
if ContainersMap["liveness_probe_http_get_port"] != 0 {
Containers[i]["LivenessProbe.HttpGet.Port"] = ContainersMap["liveness_probe_http_get_port"]
}
Containers[i]["LivenessProbe.HttpGet.Scheme"] = ContainersMap["liveness_probe_http_get_scheme"]
if ContainersMap["liveness_probe_tcp_socket_port"] != 0 {
Containers[i]["LivenessProbe.TcpSocket.Port"] = ContainersMap["liveness_probe_tcp_socket_port"]
}
if ContainersMap["liveness_probe_success_threshold"] != nil && ContainersMap["liveness_probe_success_threshold"] != 0 {
Containers[i]["LivenessProbe.SuccessThreshold"] = ContainersMap["liveness_probe_success_threshold"]
}
if ContainersMap["liveness_probe_timeout_seconds"] != nil && ContainersMap["liveness_probe_timeout_seconds"] != 0 {
Containers[i]["LivenessProbe.TimeoutSeconds"] = ContainersMap["liveness_probe_timeout_seconds"]
}
EnvironmentVars := make([]map[string]interface{}, len(ContainersMap["environment_vars"].(*schema.Set).List()))
for i, EnvironmentVarsValue := range ContainersMap["environment_vars"].(*schema.Set).List() {
EnvironmentVarsMap := EnvironmentVarsValue.(map[string]interface{})
EnvironmentVars[i] = make(map[string]interface{})
EnvironmentVars[i]["Key"] = EnvironmentVarsMap["key"]
EnvironmentVars[i]["Value"] = EnvironmentVarsMap["value"]
EnvironmentVars[i]["FieldRef.FieldPath"] = EnvironmentVarsMap["field_ref_field_path"]
}
Containers[i]["EnvironmentVar"] = EnvironmentVars
Ports := make([]map[string]interface{}, len(ContainersMap["ports"].(*schema.Set).List()))
for i, PortsValue := range ContainersMap["ports"].(*schema.Set).List() {
PortsMap := PortsValue.(map[string]interface{})
Ports[i] = make(map[string]interface{})
Ports[i]["Port"] = PortsMap["port"]
Ports[i]["Protocol"] = PortsMap["protocol"]
}
Containers[i]["Port"] = Ports
VolumeMounts := make([]map[string]interface{}, len(ContainersMap["volume_mounts"].(*schema.Set).List()))
for i, VolumeMountsValue := range ContainersMap["volume_mounts"].(*schema.Set).List() {
VolumeMountsMap := VolumeMountsValue.(map[string]interface{})
VolumeMounts[i] = make(map[string]interface{})
VolumeMounts[i]["MountPath"] = VolumeMountsMap["mount_path"]
VolumeMounts[i]["Name"] = VolumeMountsMap["name"]
VolumeMounts[i]["ReadOnly"] = VolumeMountsMap["read_only"]
VolumeMounts[i]["SubPath"] = VolumeMountsMap["sub_path"]
if VolumeMountsMap["mount_propagation"] != nil && VolumeMountsMap["mount_propagation"] != "" {
VolumeMounts[i]["MountPropagation"] = VolumeMountsMap["mount_propagation"]
}
}
Containers[i]["VolumeMount"] = VolumeMounts
}
request["Container"] = Containers
}
if d.HasChange("init_containers") {
update = true
InitContainers := make([]map[string]interface{}, len(d.Get("init_containers").([]interface{})))
for i, InitContainersValue := range d.Get("init_containers").([]interface{}) {
InitContainersMap := InitContainersValue.(map[string]interface{})
InitContainers[i] = make(map[string]interface{})
InitContainers[i]["WorkingDir"] = InitContainersMap["working_dir"]
InitContainers[i]["Arg"] = InitContainersMap["args"]
InitContainers[i]["Cpu"] = InitContainersMap["cpu"]
InitContainers[i]["Gpu"] = InitContainersMap["gpu"]
InitContainers[i]["Memory"] = InitContainersMap["memory"]
InitContainers[i]["Name"] = InitContainersMap["name"]
InitContainers[i]["Image"] = InitContainersMap["image"]
InitContainers[i]["ImagePullPolicy"] = InitContainersMap["image_pull_policy"]
InitContainers[i]["Command"] = InitContainersMap["commands"]
InitContainers[i]["SecurityContext.Capability.Add"] = InitContainersMap["security_context_capability_adds"]
InitContainers[i]["SecurityContext.ReadOnlyRootFilesystem"] = InitContainersMap["security_context_read_only_root_file_system"]
InitContainers[i]["SecurityContext.RunAsUser"] = InitContainersMap["security_context_run_as_user"]
EnvironmentVars := make([]map[string]interface{}, len(InitContainersMap["environment_vars"].(*schema.Set).List()))
for i, EnvironmentVarsValue := range InitContainersMap["environment_vars"].(*schema.Set).List() {
EnvironmentVarsMap := EnvironmentVarsValue.(map[string]interface{})
EnvironmentVars[i] = make(map[string]interface{})
EnvironmentVars[i]["Key"] = EnvironmentVarsMap["key"]
EnvironmentVars[i]["Value"] = EnvironmentVarsMap["value"]
EnvironmentVars[i]["FieldRef.FieldPath"] = EnvironmentVarsMap["field_ref_field_path"]
}
InitContainers[i]["InitContainerEnvironmentVar"] = EnvironmentVars
Ports := make([]map[string]interface{}, len(InitContainersMap["ports"].(*schema.Set).List()))
for i, PortsValue := range InitContainersMap["ports"].(*schema.Set).List() {
PortsMap := PortsValue.(map[string]interface{})
Ports[i] = make(map[string]interface{})
Ports[i]["Port"] = PortsMap["port"]
Ports[i]["Protocol"] = PortsMap["protocol"]
}
InitContainers[i]["InitContainerPort"] = Ports
VolumeMounts := make([]map[string]interface{}, len(InitContainersMap["volume_mounts"].(*schema.Set).List()))
for i, VolumeMountsValue := range InitContainersMap["volume_mounts"].(*schema.Set).List() {
VolumeMountsMap := VolumeMountsValue.(map[string]interface{})
VolumeMounts[i] = make(map[string]interface{})
VolumeMounts[i]["MountPath"] = VolumeMountsMap["mount_path"]
VolumeMounts[i]["Name"] = VolumeMountsMap["name"]
VolumeMounts[i]["ReadOnly"] = VolumeMountsMap["read_only"]
VolumeMounts[i]["SubPath"] = VolumeMountsMap["sub_path"]
if VolumeMountsMap["mount_propagation"] != nil && VolumeMountsMap["mount_propagation"] != "" {
VolumeMounts[i]["MountPropagation"] = VolumeMountsMap["mount_propagation"]
}
}
InitContainers[i]["InitContainerVolumeMount"] = VolumeMounts
}
request["InitContainer"] = InitContainers
}
if d.HasChange("volumes") {
update = true
Volumes := make([]map[string]interface{}, len(d.Get("volumes").(*schema.Set).List()))
for i, VolumesValue := range d.Get("volumes").(*schema.Set).List() {
VolumesMap := VolumesValue.(map[string]interface{})
Volumes[i] = make(map[string]interface{})
ConfigFileVolumeConfigFileToPaths := make([]map[string]interface{}, len(VolumesMap["config_file_volume_config_file_to_paths"].(*schema.Set).List()))
for i, ConfigFileVolumeConfigFileToPathsValue := range VolumesMap["config_file_volume_config_file_to_paths"].(*schema.Set).List() {
ConfigFileVolumeConfigFileToPathsMap := ConfigFileVolumeConfigFileToPathsValue.(map[string]interface{})
ConfigFileVolumeConfigFileToPaths[i] = make(map[string]interface{})
ConfigFileVolumeConfigFileToPaths[i]["Content"] = ConfigFileVolumeConfigFileToPathsMap["content"]
ConfigFileVolumeConfigFileToPaths[i]["Path"] = ConfigFileVolumeConfigFileToPathsMap["path"]
if ConfigFileVolumeConfigFileToPathsMap["mode"] != nil && ConfigFileVolumeConfigFileToPathsMap["mode"] != 0 {
ConfigFileVolumeConfigFileToPaths[i]["Mode"] = ConfigFileVolumeConfigFileToPathsMap["mode"]
}
}
Volumes[i]["ConfigFileVolumeConfigFileToPath"] = ConfigFileVolumeConfigFileToPaths
Volumes[i]["DiskVolume.DiskId"] = VolumesMap["disk_volume_disk_id"]
Volumes[i]["HostPathVolume.Type"] = VolumesMap["host_path_volume_type"]
Volumes[i]["EmptyDirVolume.SizeLimit"] = VolumesMap["empty_dir_volume_size_limit"]
Volumes[i]["EmptyDirVolume.Medium"] = VolumesMap["empty_dir_volume_medium"]
Volumes[i]["HostPathVolume.Path"] = VolumesMap["host_path_volume_path"]
if VolumesMap["config_file_volume_default_mode"] != nil && VolumesMap["config_file_volume_default_mode"] != 0 {
Volumes[i]["ConfigFileVolumeDefaultMode"] = VolumesMap["config_file_volume_default_mode"]
}
Volumes[i]["DiskVolume.FsType"] = VolumesMap["disk_volume_fs_type"]
Volumes[i]["DiskVolume.DiskSize"] = VolumesMap["disk_volume_disk_size"]
Volumes[i]["FlexVolume.Driver"] = VolumesMap["flex_volume_driver"]
Volumes[i]["FlexVolume.FsType"] = VolumesMap["flex_volume_fs_type"]
Volumes[i]["FlexVolume.Options"] = VolumesMap["flex_volume_options"]
Volumes[i]["NFSVolume.Path"] = VolumesMap["nfs_volume_path"]
Volumes[i]["NFSVolume.Server"] = VolumesMap["nfs_volume_server"]
Volumes[i]["NFSVolume.ReadOnly"] = VolumesMap["nfs_volume_read_only"]
Volumes[i]["Name"] = VolumesMap["name"]
Volumes[i]["Type"] = VolumesMap["type"]
}
request["Volume"] = Volumes
}
if d.HasChange("host_aliases") {
update = true
aliases := make([]map[string]interface{}, len(d.Get("host_aliases").(*schema.Set).List()))
for i, value := range d.Get("host_aliases").(*schema.Set).List() {
aliasMap := value.(map[string]interface{})
aliases[i] = make(map[string]interface{})
aliases[i]["Hostname"] = aliasMap["hostnames"]
aliases[i]["Ip"] = aliasMap["ip"]
}
request["HostAliase"] = aliases
}
if d.HasChange("instance_types") {
update = true
instanceTypes := d.Get("instance_types").([]interface{})
types := make([]string, 0, int(5))
if instanceTypes != nil && len(instanceTypes) > 0 {
types = expandStringList(instanceTypes)
}
request["InstanceType"] = types
}
if update {
_, err = client.RpcPost("Ess", "2014-08-28", "ModifyEciScalingConfiguration", nil, request, false)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_ess_eci_scaling_configuration", "ModifyEciScalingConfiguration", AlibabaCloudSdkGoERROR)
}
}
d.Partial(false)
return resourceAliyunEssEciScalingConfigurationRead(d, meta)
}