alicloud/resource_alicloud_ess_eci_scaling_configuration.go (1,883 lines of code) (raw):
package alicloud
import (
"fmt"
"regexp"
"strconv"
"time"
"github.com/hashicorp/terraform-plugin-sdk/helper/validation"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/aliyun/alibaba-cloud-sdk-go/services/ess"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
func resourceAlicloudEssEciScalingConfiguration() *schema.Resource {
return &schema.Resource{
Create: resourceAliyunEssEciScalingConfigurationCreate,
Read: resourceAliyunEssEciScalingConfigurationRead,
Update: resourceAliyunEssEciScalingConfigurationUpdate,
Delete: resourceAliyunEssEciScalingConfigurationDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(3 * time.Minute),
Delete: schema.DefaultTimeout(3 * time.Minute),
},
Schema: map[string]*schema.Schema{
"active": {
Type: schema.TypeBool,
Optional: true,
},
"force_delete": {
Type: schema.TypeBool,
Optional: true,
},
"scaling_group_id": {
Type: schema.TypeString,
ForceNew: true,
Required: true,
},
"scaling_configuration_name": {
Type: schema.TypeString,
Optional: true,
Computed: true,
ValidateFunc: StringMatch(regexp.MustCompile(`^[\\u4e00-\\u9fa5a-zA-Z0-9][\\u4e00-\\u9fa5a-zA-Z0-9\-_.]{1,63}$`), "It must be 2 to 64 characters in length and can contain letters, digits, underscores (_), hyphens (-), and periods (.). It must start with a letter or a digit."),
},
"description": {
Type: schema.TypeString,
Optional: true,
},
"security_group_id": {
Type: schema.TypeString,
Optional: true,
},
"container_group_name": {
Type: schema.TypeString,
Optional: true,
},
"restart_policy": {
Type: schema.TypeString,
Optional: true,
},
"cpu": {
Type: schema.TypeFloat,
Optional: true,
},
"memory": {
Type: schema.TypeFloat,
Optional: true,
},
"resource_group_id": {
Type: schema.TypeString,
Optional: true,
},
"dns_policy": {
Type: schema.TypeString,
Optional: true,
},
"cost_optimization": {
Type: schema.TypeBool,
Optional: true,
},
"enable_sls": {
Type: schema.TypeBool,
Optional: true,
},
"instance_family_level": {
Type: schema.TypeString,
Optional: true,
},
"image_snapshot_id": {
Type: schema.TypeString,
Optional: true,
},
"ram_role_name": {
Type: schema.TypeString,
Optional: true,
},
"termination_grace_period_seconds": {
Type: schema.TypeInt,
Optional: true,
},
"auto_match_image_cache": {
Type: schema.TypeBool,
Optional: true,
},
"ipv6_address_count": {
Type: schema.TypeInt,
Optional: true,
},
"cpu_options_core": {
Type: schema.TypeInt,
Optional: true,
ValidateFunc: IntAtLeast(1),
},
"cpu_options_threads_per_core": {
Type: schema.TypeInt,
Optional: true,
ValidateFunc: IntAtLeast(1),
},
"active_deadline_seconds": {
Type: schema.TypeInt,
Optional: true,
ValidateFunc: validation.IntAtLeast(1),
},
"spot_strategy": {
Type: schema.TypeString,
Optional: true,
},
"spot_price_limit": {
Type: schema.TypeFloat,
Optional: true,
},
"auto_create_eip": {
Type: schema.TypeBool,
Optional: true,
},
"eip_bandwidth": {
Type: schema.TypeInt,
Optional: true,
},
"host_name": {
Type: schema.TypeString,
Optional: true,
},
"ingress_bandwidth": {
Type: schema.TypeInt,
Optional: true,
},
"egress_bandwidth": {
Type: schema.TypeInt,
Optional: true,
},
"ephemeral_storage": {
Type: schema.TypeInt,
Optional: true,
},
"load_balancer_weight": {
Type: schema.TypeInt,
Optional: true,
},
"tags": tagsSchema(),
"acr_registry_infos": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"domains": {
Type: schema.TypeSet,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Optional: true,
},
"instance_name": {
Type: schema.TypeString,
Optional: true,
},
"instance_id": {
Type: schema.TypeString,
Optional: true,
},
"region_id": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"image_registry_credentials": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"password": {
Type: schema.TypeString,
Optional: true,
},
"server": {
Type: schema.TypeString,
Optional: true,
},
"username": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"dns_config_options": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Optional: true,
},
"value": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"security_context_sysctls": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Optional: true,
},
"value": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"containers": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"security_context_capability_adds": {
Type: schema.TypeList,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Optional: true,
},
"lifecycle_pre_stop_handler_execs": {
Type: schema.TypeList,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Optional: true,
},
"security_context_read_only_root_file_system": {
Type: schema.TypeBool,
Optional: true,
},
"tty": {
Type: schema.TypeBool,
Optional: true,
},
"stdin": {
Type: schema.TypeBool,
Optional: true,
},
"security_context_run_as_user": {
Type: schema.TypeInt,
Optional: true,
},
"ports": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"protocol": {
Type: schema.TypeString,
Optional: true,
},
"port": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"environment_vars": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"key": {
Type: schema.TypeString,
Optional: true,
},
"value": {
Type: schema.TypeString,
Optional: true,
},
"field_ref_field_path": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"working_dir": {
Type: schema.TypeString,
Optional: true,
},
"args": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"cpu": {
Type: schema.TypeFloat,
Optional: true,
},
"gpu": {
Type: schema.TypeInt,
Optional: true,
},
"memory": {
Type: schema.TypeFloat,
Optional: true,
},
"name": {
Type: schema.TypeString,
Optional: true,
},
"image": {
Type: schema.TypeString,
Optional: true,
},
"image_pull_policy": {
Type: schema.TypeString,
Optional: true,
},
"volume_mounts": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"mount_path": {
Type: schema.TypeString,
Optional: true,
},
"mount_propagation": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"sub_path": {
Type: schema.TypeString,
Optional: true,
},
"name": {
Type: schema.TypeString,
Optional: true,
},
"read_only": {
Type: schema.TypeBool,
Optional: true,
},
},
},
},
"commands": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"liveness_probe_exec_commands": {
Type: schema.TypeList,
Elem: &schema.Schema{Type: schema.TypeString},
Optional: true,
},
"liveness_probe_period_seconds": {
Type: schema.TypeInt,
Optional: true,
},
"liveness_probe_http_get_path": {
Type: schema.TypeString,
Optional: true,
},
"liveness_probe_failure_threshold": {
Type: schema.TypeInt,
Optional: true,
},
"liveness_probe_initial_delay_seconds": {
Type: schema.TypeInt,
Optional: true,
},
"liveness_probe_http_get_port": {
Type: schema.TypeInt,
Optional: true,
},
"liveness_probe_http_get_scheme": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringInSlice([]string{"HTTP", "HTTPS"}, false),
},
"liveness_probe_tcp_socket_port": {
Type: schema.TypeInt,
Optional: true,
},
"liveness_probe_success_threshold": {
Type: schema.TypeInt,
Optional: true,
},
"liveness_probe_timeout_seconds": {
Type: schema.TypeInt,
Optional: true,
},
"readiness_probe_exec_commands": {
Type: schema.TypeList,
Elem: &schema.Schema{Type: schema.TypeString},
Optional: true,
},
"readiness_probe_period_seconds": {
Type: schema.TypeInt,
Optional: true,
},
"readiness_probe_http_get_path": {
Type: schema.TypeString,
Optional: true,
},
"readiness_probe_failure_threshold": {
Type: schema.TypeInt,
Optional: true,
},
"readiness_probe_initial_delay_seconds": {
Type: schema.TypeInt,
Optional: true,
},
"readiness_probe_http_get_port": {
Type: schema.TypeInt,
Optional: true,
},
"readiness_probe_http_get_scheme": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"HTTP", "HTTPS"}, false),
Optional: true,
},
"readiness_probe_tcp_socket_port": {
Type: schema.TypeInt,
Optional: true,
},
"readiness_probe_success_threshold": {
Type: schema.TypeInt,
Optional: true,
},
"readiness_probe_timeout_seconds": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"instance_types": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
MaxItems: 5,
},
},
"init_containers": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"security_context_capability_adds": {
Type: schema.TypeList,
Elem: &schema.Schema{
Type: schema.TypeString,
},
Optional: true,
},
"security_context_read_only_root_file_system": {
Type: schema.TypeBool,
Optional: true,
},
"security_context_run_as_user": {
Type: schema.TypeInt,
Optional: true,
},
"ports": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"protocol": {
Type: schema.TypeString,
Optional: true,
},
"port": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"environment_vars": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"key": {
Type: schema.TypeString,
Optional: true,
},
"value": {
Type: schema.TypeString,
Optional: true,
},
"field_ref_field_path": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"working_dir": {
Type: schema.TypeString,
Optional: true,
},
"args": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"cpu": {
Type: schema.TypeFloat,
Optional: true,
},
"gpu": {
Type: schema.TypeInt,
Optional: true,
},
"memory": {
Type: schema.TypeFloat,
Optional: true,
},
"name": {
Type: schema.TypeString,
Optional: true,
},
"image": {
Type: schema.TypeString,
Optional: true,
},
"image_pull_policy": {
Type: schema.TypeString,
Optional: true,
},
"volume_mounts": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"mount_path": {
Type: schema.TypeString,
Optional: true,
},
"mount_propagation": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"sub_path": {
Type: schema.TypeString,
Optional: true,
},
"name": {
Type: schema.TypeString,
Optional: true,
},
"read_only": {
Type: schema.TypeBool,
Optional: true,
},
},
},
},
"commands": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
},
},
},
"volumes": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"config_file_volume_config_file_to_paths": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"content": {
Type: schema.TypeString,
Optional: true,
},
"path": {
Type: schema.TypeString,
Optional: true,
},
"mode": {
Type: schema.TypeInt,
Optional: true,
},
},
},
},
"disk_volume_disk_id": {
Type: schema.TypeString,
Optional: true,
},
"host_path_volume_type": {
Type: schema.TypeString,
Optional: true,
},
"host_path_volume_path": {
Type: schema.TypeString,
Optional: true,
},
"config_file_volume_default_mode": {
Type: schema.TypeInt,
Optional: true,
},
"empty_dir_volume_medium": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"empty_dir_volume_size_limit": {
Type: schema.TypeString,
Optional: true,
},
"disk_volume_fs_type": {
Type: schema.TypeString,
Optional: true,
},
"disk_volume_disk_size": {
Type: schema.TypeInt,
Optional: true,
},
"flex_volume_driver": {
Type: schema.TypeString,
Optional: true,
},
"flex_volume_fs_type": {
Type: schema.TypeString,
Optional: true,
},
"flex_volume_options": {
Type: schema.TypeString,
Optional: true,
},
"nfs_volume_path": {
Type: schema.TypeString,
Optional: true,
},
"nfs_volume_read_only": {
Type: schema.TypeBool,
Optional: true,
},
"nfs_volume_server": {
Type: schema.TypeString,
Optional: true,
},
"name": {
Type: schema.TypeString,
Optional: true,
},
"type": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
"host_aliases": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"hostnames": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"ip": {
Type: schema.TypeString,
Optional: true,
},
},
},
},
},
}
}
func resourceAliyunEssEciScalingConfigurationCreate(d *schema.ResourceData, meta interface{}) error {
// Ensure instance_type is generation three
client := meta.(*connectivity.AliyunClient)
var response map[string]interface{}
action := "CreateEciScalingConfiguration"
request := make(map[string]interface{})
var err error
request["ScalingGroupId"] = d.Get("scaling_group_id")
request["ScalingConfigurationName"] = d.Get("scaling_configuration_name")
request["Description"] = d.Get("description")
request["SecurityGroupId"] = d.Get("security_group_id")
request["ContainerGroupName"] = d.Get("container_group_name")
request["RestartPolicy"] = d.Get("restart_policy")
request["Cpu"] = d.Get("cpu")
request["Memory"] = d.Get("memory")
request["ResourceGroupId"] = d.Get("resource_group_id")
request["DnsPolicy"] = d.Get("dns_policy")
request["EnableSls"] = d.Get("enable_sls")
request["RamRoleName"] = d.Get("ram_role_name")
request["AutoCreateEip"] = d.Get("auto_create_eip")
request["EipBandwidth"] = d.Get("eip_bandwidth")
request["HostName"] = d.Get("host_name")
request["IngressBandwidth"] = d.Get("ingress_bandwidth")
request["EgressBandwidth"] = d.Get("egress_bandwidth")
request["SpotStrategy"] = d.Get("spot_strategy")
request["ImageSnapshotId"] = d.Get("image_snapshot_id")
request["TerminationGracePeriodSeconds"] = d.Get("termination_grace_period_seconds")
request["AutoMatchImageCache"] = d.Get("auto_match_image_cache")
request["Ipv6AddressCount"] = d.Get("ipv6_address_count")
if v, ok := d.GetOkExists("cpu_options_core"); ok {
request["CpuOptionsCore"] = requests.NewInteger(v.(int))
}
if v, ok := d.GetOk("instance_family_level"); ok {
request["InstanceFamilyLevel"] = v
}
if v, ok := d.GetOkExists("cpu_options_threads_per_core"); ok {
request["CpuOptionsThreadsPerCore"] = requests.NewInteger(v.(int))
}
if v, ok := d.GetOkExists("cost_optimization"); ok {
request["CostOptimization"] = v.(bool)
}
request["EphemeralStorage"] = d.Get("ephemeral_storage")
request["LoadBalancerWeight"] = d.Get("load_balancer_weight")
if v, ok := d.GetOk("active_deadline_seconds"); ok {
request["ActiveDeadlineSeconds"] = v
}
if v, ok := d.GetOk("spot_price_limit"); ok {
request["SpotPriceLimit"] = strconv.FormatFloat(v.(float64), 'f', 2, 64)
}
if v, ok := d.GetOk("tags"); ok {
count := 1
for key, value := range v.(map[string]interface{}) {
request[fmt.Sprintf("Tag.%d.Key", count)] = key
request[fmt.Sprintf("Tag.%d.Value", count)] = value
count++
}
}
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 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 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 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
}
Containers := make([]map[string]interface{}, len(d.Get("containers").([]interface{})))
for i, v := range d.Get("containers").([]interface{}) {
ContainersMap := v.(map[string]interface{})
Containers[i] = make(map[string]interface{})
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
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]["FieldRefFieldPath"] = EnvironmentVarsMap["field_ref_field_path"]
}
Containers[i]["EnvironmentVar"] = EnvironmentVars
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]["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]["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"]
}
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
Containers[i]["Command"] = ContainersMap["commands"]
}
request["Container"] = Containers
// instance_types
types := make([]string, 0, int(5))
instanceTypes := d.Get("instance_types").([]interface{})
if instanceTypes != nil && len(instanceTypes) > 0 {
types = expandStringList(instanceTypes)
request["InstanceType"] = types
}
if _, ok := d.GetOk("init_containers"); ok {
InitContainers := make([]map[string]interface{}, len(d.Get("init_containers").([]interface{})))
for i, v := range d.Get("init_containers").([]interface{}) {
InitContainersMap := v.(map[string]interface{})
InitContainers[i] = make(map[string]interface{})
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
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]["FieldRefFieldPath"] = EnvironmentVarsMap["field_ref_field_path"]
}
InitContainers[i]["InitContainerEnvironmentVar"] = EnvironmentVars
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]["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"]
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
InitContainers[i]["Command"] = InitContainersMap["commands"]
}
request["InitContainer"] = InitContainers
}
if v, ok := d.GetOk("volumes"); ok {
Volumes := make([]map[string]interface{}, len(v.(*schema.Set).List()))
for i, v := range v.(*schema.Set).List() {
VolumesMap := v.(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]["HostPathVolume.Path"] = VolumesMap["host_path_volume_path"]
Volumes[i]["EmptyDirVolume.SizeLimit"] = VolumesMap["empty_dir_volume_size_limit"]
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]["EmptyDirVolume.Medium"] = VolumesMap["empty_dir_volume_medium"]
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 v, ok := d.GetOk("host_aliases"); ok {
HostAliases := make([]map[string]interface{}, len(v.(*schema.Set).List()))
for i, HostAliasesValue := range v.(*schema.Set).List() {
HostAliasesMap := HostAliasesValue.(map[string]interface{})
HostAliases[i] = make(map[string]interface{})
HostAliases[i]["Hostname"] = HostAliasesMap["hostnames"]
HostAliases[i]["Ip"] = HostAliasesMap["ip"]
}
request["HostAliase"] = HostAliases
}
response, err = client.RpcPost("Ess", "2014-08-28", action, nil, request, true)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_ess_eci_scaling_configuration", action, AlibabaCloudSdkGoERROR)
}
d.SetId(fmt.Sprint(response["ScalingConfigurationId"]))
return resourceAliyunEssEciScalingConfigurationUpdate(d, meta)
}
func resourceAliyunEssEciScalingConfigurationRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
essService := EssService{client}
o, err := essService.DescribeEssEciScalingConfiguration(d.Id())
if err != nil {
if NotFoundError(err) {
d.SetId("")
return nil
}
return WrapError(err)
}
d.Set("active", d.Get("active"))
d.Set("force_delete", d.Get("force_delete"))
d.Set("scaling_group_id", o["ScalingGroupId"])
d.Set("scaling_configuration_name", o["ScalingConfigurationName"])
d.Set("description", o["Description"])
d.Set("security_group_id", o["SecurityGroupId"])
d.Set("container_group_name", o["ContainerGroupName"])
d.Set("restart_policy", o["RestartPolicy"])
d.Set("cpu", o["Cpu"])
d.Set("memory", o["Memory"])
d.Set("resource_group_id", o["ResourceGroupId"])
d.Set("dns_policy", o["DnsPolicy"])
d.Set("enable_sls", o["SlsEnable"])
d.Set("cost_optimization", o["CostOptimization"])
d.Set("image_snapshot_id", o["ImageSnapshotId"])
if o["InstanceFamilyLevel"] != nil && o["InstanceFamilyLevel"] != "" {
d.Set("instance_family_level", o["InstanceFamilyLevel"])
}
d.Set("ram_role_name", o["RamRoleName"])
d.Set("termination_grace_period_seconds", o["TerminationGracePeriodSeconds"])
d.Set("auto_match_image_cache", o["AutoMatchImageCache"])
d.Set("ipv6_address_count", o["Ipv6AddressCount"])
if o["CpuOptionsCore"] != nil && o["CpuOptionsCore"] != 0 {
d.Set("cpu_options_core", o["CpuOptionsCore"])
}
if o["CpuOptionsThreadsPerCore"] != nil && o["CpuOptionsThreadsPerCore"] != 0 {
d.Set("cpu_options_threads_per_core", o["CpuOptionsThreadsPerCore"])
}
if o["ActiveDeadlineSeconds"] != nil && o["ActiveDeadlineSeconds"] != 0 {
d.Set("active_deadline_seconds", o["ActiveDeadlineSeconds"])
}
d.Set("auto_create_eip", o["AutoCreateEip"])
d.Set("eip_bandwidth", o["EipBandwidth"])
d.Set("host_name", o["HostName"])
d.Set("ingress_bandwidth", o["IngressBandwidth"])
d.Set("egress_bandwidth", o["EgressBandwidth"])
d.Set("ephemeral_storage", o["EphemeralStorage"])
d.Set("load_balancer_weight", o["LoadBalancerWeight"])
d.Set("tags", o["Tags"])
d.Set("instance_types", o["InstanceTypes"])
d.Set("spot_strategy", o["SpotStrategy"])
if o["spot_price_limit"] != nil {
d.Set("spot_price_limit", strconv.FormatFloat(o["SpotPriceLimit"].(float64), 'f', 2, 64))
}
credentials := make([]map[string]interface{}, 0)
if credentialList, ok := o["ImageRegistryCredentials"].([]interface{}); ok {
for _, v := range credentialList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"password": m1["Password"],
"server": m1["Server"],
"username": m1["UserName"],
}
credentials = append(credentials, temp1)
}
}
}
d.Set("image_registry_credentials", credentials)
options := make([]map[string]interface{}, 0)
if optionList, ok := o["DnsConfigOptions"].([]interface{}); ok {
for _, v := range optionList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"name": m1["Name"],
"value": m1["Value"],
}
options = append(options, temp1)
}
}
}
d.Set("dns_config_options", options)
sysctls := make([]map[string]interface{}, 0)
if sysctlList, ok := o["SecurityContextSysCtls"].([]interface{}); ok {
for _, v := range sysctlList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"name": m1["Name"],
"value": m1["Value"],
}
sysctls = append(sysctls, temp1)
}
}
}
d.Set("security_context_sysctls", sysctls)
acrRegistryInfos := make([]map[string]interface{}, 0)
if acrRegistryInfoList, ok := o["AcrRegistryInfos"].([]interface{}); ok {
for _, v := range acrRegistryInfoList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"domains": m1["Domains"],
"instance_name": m1["InstanceName"],
"instance_id": m1["InstanceId"],
"region_id": m1["RegionId"],
}
acrRegistryInfos = append(acrRegistryInfos, temp1)
}
}
}
d.Set("acr_registry_infos", acrRegistryInfos)
containers := make([]map[string]interface{}, 0)
if containersList, ok := o["Containers"].([]interface{}); ok {
for _, v := range containersList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"security_context_capability_adds": m1["SecurityContextCapabilityAdds"],
"lifecycle_pre_stop_handler_execs": m1["LifecyclePreStopHandlerExecs"],
"security_context_read_only_root_file_system": m1["SecurityContextReadOnlyRootFilesystem"],
"tty": m1["Tty"],
"stdin": m1["Stdin"],
"security_context_run_as_user": m1["SecurityContextRunAsUser"],
"working_dir": m1["WorkingDir"],
"args": m1["Args"],
"cpu": m1["Cpu"],
"gpu": m1["Gpu"],
"memory": m1["Memory"],
"name": m1["Name"],
"image": m1["Image"],
"image_pull_policy": m1["ImagePullPolicy"],
"commands": m1["Commands"],
"readiness_probe_exec_commands": m1["ReadinessProbeExecCommands"],
"readiness_probe_http_get_path": m1["ReadinessProbeHttpGetPath"],
"readiness_probe_failure_threshold": m1["ReadinessProbeFailureThreshold"],
"readiness_probe_initial_delay_seconds": m1["ReadinessProbeInitialDelaySeconds"],
"readiness_probe_http_get_port": m1["ReadinessProbeHttpGetPort"],
"readiness_probe_http_get_scheme": m1["ReadinessProbeHttpGetScheme"],
"readiness_probe_tcp_socket_port": m1["ReadinessProbeTcpSocketPort"],
"liveness_probe_exec_commands": m1["LivenessProbeExecCommands"],
"liveness_probe_http_get_path": m1["LivenessProbeHttpGetPath"],
"liveness_probe_failure_threshold": m1["LivenessProbeFailureThreshold"],
"liveness_probe_initial_delay_seconds": m1["LivenessProbeInitialDelaySeconds"],
"liveness_probe_http_get_port": m1["LivenessProbeHttpGetPort"],
"liveness_probe_http_get_scheme": m1["LivenessProbeHttpGetScheme"],
"liveness_probe_tcp_socket_port": m1["LivenessProbeTcpSocketPort"],
}
if m1["LivenessProbeTimeoutSeconds"] != nil && m1["LivenessProbeTimeoutSeconds"] != 0 {
temp1["liveness_probe_timeout_seconds"] = m1["LivenessProbeTimeoutSeconds"]
}
if m1["LivenessProbeSuccessThreshold"] != nil && m1["LivenessProbeSuccessThreshold"] != 0 {
temp1["liveness_probe_success_threshold"] = m1["LivenessProbeSuccessThreshold"]
}
if m1["LivenessProbePeriodSeconds"] != nil && m1["LivenessProbePeriodSeconds"] != 0 {
temp1["liveness_probe_period_seconds"] = m1["LivenessProbePeriodSeconds"]
}
if m1["ReadinessProbeTimeoutSeconds"] != nil && m1["ReadinessProbeTimeoutSeconds"] != 0 {
temp1["readiness_probe_timeout_seconds"] = m1["ReadinessProbeTimeoutSeconds"]
}
if m1["ReadinessProbeSuccessThreshold"] != nil && m1["ReadinessProbeSuccessThreshold"] != 0 {
temp1["readiness_probe_success_threshold"] = m1["ReadinessProbeSuccessThreshold"]
}
if m1["ReadinessProbePeriodSeconds"] != nil && m1["ReadinessProbePeriodSeconds"] != 0 {
temp1["readiness_probe_period_seconds"] = m1["ReadinessProbePeriodSeconds"]
}
if m1["EnvironmentVars"] != nil {
environmentVarsMaps := make([]map[string]interface{}, 0)
for _, environmentVarsValue := range m1["EnvironmentVars"].([]interface{}) {
environmentVars := environmentVarsValue.(map[string]interface{})
environmentVarsMap := map[string]interface{}{
"key": environmentVars["Key"],
"value": environmentVars["Value"],
"field_ref_field_path": environmentVars["FieldRefFieldPath"],
}
environmentVarsMaps = append(environmentVarsMaps, environmentVarsMap)
}
temp1["environment_vars"] = environmentVarsMaps
}
if m1["Ports"] != nil {
portsMaps := make([]map[string]interface{}, 0)
for _, portsValue := range m1["Ports"].([]interface{}) {
ports := portsValue.(map[string]interface{})
portsMap := map[string]interface{}{
"port": ports["Port"],
"protocol": ports["Protocol"],
}
portsMaps = append(portsMaps, portsMap)
}
temp1["ports"] = portsMaps
}
if m1["VolumeMounts"] != nil {
volumeMountsMaps := make([]map[string]interface{}, 0)
for _, volumeMountsValue := range m1["VolumeMounts"].([]interface{}) {
volumeMounts := volumeMountsValue.(map[string]interface{})
volumeMountsMap := map[string]interface{}{
"mount_path": volumeMounts["MountPath"],
"name": volumeMounts["Name"],
"read_only": volumeMounts["ReadOnly"],
"sub_path": volumeMounts["SubPath"],
}
if volumeMounts["MountPropagation"] != nil && volumeMounts["MountPropagation"] != "" {
volumeMountsMap["mount_propagation"] = volumeMounts["MountPropagation"]
}
volumeMountsMaps = append(volumeMountsMaps, volumeMountsMap)
}
temp1["volume_mounts"] = volumeMountsMaps
}
containers = append(containers, temp1)
}
}
}
if err := d.Set("containers", containers); err != nil {
return WrapError(err)
}
initContainers := make([]map[string]interface{}, 0)
if initContainersList, ok := o["InitContainers"].([]interface{}); ok {
for _, v := range initContainersList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"security_context_capability_adds": m1["SecurityContextCapabilityAdds"],
"security_context_read_only_root_file_system": m1["SecurityContextReadOnlyRootFilesystem"],
"security_context_run_as_user": m1["SecurityContextRunAsUser"],
"working_dir": m1["WorkingDir"],
"args": m1["InitContainerArgs"],
"cpu": m1["Cpu"],
"gpu": m1["Gpu"],
"memory": m1["Memory"],
"image": m1["Image"],
"image_pull_policy": m1["ImagePullPolicy"],
"name": m1["Name"],
"commands": m1["InitContainerCommands"],
}
if m1["InitContainerEnvironmentVars"] != nil {
environmentVarsMaps := make([]map[string]interface{}, 0)
for _, environmentVarsValue := range m1["InitContainerEnvironmentVars"].([]interface{}) {
environmentVars := environmentVarsValue.(map[string]interface{})
environmentVarsMap := map[string]interface{}{
"key": environmentVars["Key"],
"value": environmentVars["Value"],
"field_ref_field_path": environmentVars["FieldRefFieldPath"],
}
environmentVarsMaps = append(environmentVarsMaps, environmentVarsMap)
}
temp1["environment_vars"] = environmentVarsMaps
}
if m1["InitContainerPorts"] != nil {
portsMaps := make([]map[string]interface{}, 0)
for _, portsValue := range m1["InitContainerPorts"].([]interface{}) {
ports := portsValue.(map[string]interface{})
portsMap := map[string]interface{}{
"port": ports["Port"],
"protocol": ports["Protocol"],
}
portsMaps = append(portsMaps, portsMap)
}
temp1["ports"] = portsMaps
}
if m1["InitContainerVolumeMounts"] != nil {
volumeMountsMaps := make([]map[string]interface{}, 0)
for _, volumeMountsValue := range m1["InitContainerVolumeMounts"].([]interface{}) {
volumeMounts := volumeMountsValue.(map[string]interface{})
volumeMountsMap := map[string]interface{}{
"mount_path": volumeMounts["MountPath"],
"name": volumeMounts["Name"],
"read_only": volumeMounts["ReadOnly"],
"sub_path": volumeMounts["SubPath"],
}
if volumeMounts["MountPropagation"] != nil && volumeMounts["MountPropagation"] != "" {
volumeMountsMap["mount_propagation"] = volumeMounts["MountPropagation"]
}
volumeMountsMaps = append(volumeMountsMaps, volumeMountsMap)
}
temp1["volume_mounts"] = volumeMountsMaps
}
initContainers = append(initContainers, temp1)
}
}
}
if err := d.Set("init_containers", initContainers); err != nil {
return WrapError(err)
}
volumes := make([]map[string]interface{}, 0)
if volumesList, ok := o["Volumes"].([]interface{}); ok {
for _, v := range volumesList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"disk_volume_disk_id": m1["DiskVolumeDiskId"],
"disk_volume_fs_type": m1["DiskVolumeFsType"],
"disk_volume_disk_size": m1["DiskVolumeDiskSize"],
"flex_volume_driver": m1["FlexVolumeDriver"],
"flex_volume_fs_type": m1["FlexVolumeFsType"],
"flex_volume_options": m1["FlexVolumeOptions"],
"nfs_volume_path": m1["NFSVolumePath"],
"nfs_volume_read_only": m1["NFSVolumeReadOnly"],
"nfs_volume_server": m1["NFSVolumeServer"],
"name": m1["Name"],
"type": m1["Type"],
"empty_dir_volume_medium": m1["EmptyDirVolumeMedium"],
}
if m1["HostPathVolumeType"] != nil && m1["HostPathVolumeType"] != "" {
temp1["host_path_volume_type"] = m1["HostPathVolumeType"]
}
if m1["EmptyDirVolumeSizeLimit"] != nil && m1["EmptyDirVolumeSizeLimit"] != "" {
temp1["empty_dir_volume_size_limit"] = m1["EmptyDirVolumeSizeLimit"]
}
if m1["HostPathVolumePath"] != nil && m1["HostPathVolumePath"] != "" {
temp1["host_path_volume_path"] = m1["HostPathVolumePath"]
}
if m1["ConfigFileVolumeDefaultMode"] != nil && m1["ConfigFileVolumeDefaultMode"] != 0 {
temp1["config_file_volume_default_mode"] = m1["ConfigFileVolumeDefaultMode"]
}
if m1["ConfigFileVolumeConfigFileToPaths"] != nil {
configFileVolumeConfigFileToPathsMaps := make([]map[string]interface{}, 0)
for _, configFileVolumeConfigFileToPathsValue := range m1["ConfigFileVolumeConfigFileToPaths"].([]interface{}) {
configFileVolumeConfigFileToPaths := configFileVolumeConfigFileToPathsValue.(map[string]interface{})
configFileVolumeConfigFileToPathsMap := map[string]interface{}{
"content": configFileVolumeConfigFileToPaths["Content"],
"path": configFileVolumeConfigFileToPaths["Path"],
}
if configFileVolumeConfigFileToPaths["Mode"] != nil && configFileVolumeConfigFileToPaths["Mode"] != 0 {
configFileVolumeConfigFileToPathsMap["mode"] = configFileVolumeConfigFileToPaths["Mode"]
}
configFileVolumeConfigFileToPathsMaps = append(configFileVolumeConfigFileToPathsMaps, configFileVolumeConfigFileToPathsMap)
}
temp1["config_file_volume_config_file_to_paths"] = configFileVolumeConfigFileToPathsMaps
}
volumes = append(volumes, temp1)
}
}
}
if err := d.Set("volumes", volumes); err != nil {
return WrapError(err)
}
hostAliases := make([]map[string]interface{}, 0)
if hostAliasesList, ok := o["HostAliases"].([]interface{}); ok {
for _, v := range hostAliasesList {
if m1, ok := v.(map[string]interface{}); ok {
temp1 := map[string]interface{}{
"hostnames": m1["Hostnames"],
"ip": m1["Ip"],
}
hostAliases = append(hostAliases, temp1)
}
}
}
if err := d.Set("host_aliases", hostAliases); err != nil {
return WrapError(err)
}
return nil
}
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)
}
func resourceAliyunEssEciScalingConfigurationDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
essService := EssService{client}
var err error
o, err := essService.DescribeEssEciScalingConfiguration(d.Id())
if err != nil {
if NotFoundError(err) {
return nil
}
return WrapError(err)
}
if d.Get("force_delete").(bool) {
request := ess.CreateDeleteScalingGroupRequest()
request.ScalingGroupId = o["ScalingGroupId"].(string)
request.ForceDelete = requests.NewBoolean(true)
request.RegionId = client.RegionId
raw, err := client.WithEssClient(func(essClient *ess.Client) (interface{}, error) {
return essClient.DeleteScalingGroup(request)
})
if err != nil {
if IsExpectedErrors(err, []string{"InvalidScalingGroupId.NotFound"}) {
return nil
}
return WrapErrorf(err, DefaultErrorMsg, d.Id(), request.GetActionName(), AlibabaCloudSdkGoERROR)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return WrapError(essService.WaitForEssScalingGroup(d.Id(), Deleted, DefaultTimeout))
} else {
request := map[string]interface{}{
"ScalingConfigurationId": d.Id(),
"RegionId": client.RegionId,
}
_, err = client.RpcPost("Ess", "2014-08-28", "DeleteEciScalingConfiguration", nil, request, false)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), "DeleteEciScalingConfiguration", AlibabaCloudSdkGoERROR)
}
return nil
}
}