in alibabacloudstack/resource_apsarastack_autoscaling_scalingconfiguration.go [312:447]
func modifyEssScalingConfiguration(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
request := ess.CreateModifyScalingConfigurationRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ScalingConfigurationId = d.Id()
if d.HasChange("override") {
request.Override = requests.NewBoolean(d.Get("override").(bool))
}
if d.HasChange("zone_id") && d.Get("zone_id").(string) != "" {
request.ZoneId = d.Get("zone_id").(string)
}
if d.HasChange("image_id") || d.Get("override").(bool) {
request.ImageId = d.Get("image_id").(string)
}
hasChangeInstanceType := d.HasChange("instance_type")
hasChangeInstanceTypes := d.HasChange("instance_types")
if hasChangeInstanceType || hasChangeInstanceTypes || d.Get("override").(bool) {
instanceType := d.Get("instance_type").(string)
instanceTypes := d.Get("instance_types").([]interface{})
if instanceType == "" && (instanceTypes == nil || len(instanceTypes) == 0) {
return fmt.Errorf("instance_type must be assigned")
}
types := make([]string, 0, int(MaxScalingConfigurationInstanceTypes))
if instanceTypes != nil && len(instanceTypes) > 0 {
types = expandStringList(instanceTypes)
}
if instanceType != "" {
types = append(types, instanceType)
}
request.InstanceTypes = &types
}
hasChangeSecurityGroupId := d.HasChange("security_group_ids")
if hasChangeSecurityGroupId || d.Get("override").(bool) {
securityGroupIds := d.Get("security_group_ids").([]interface{})
if len(securityGroupIds) <= 0 {
return fmt.Errorf("securityGroupIds must be assigned")
}
sgs := make([]string, 0, len(securityGroupIds))
for _, sg := range securityGroupIds {
sgs = append(sgs, sg.(string))
}
request.SecurityGroupIds = &sgs
}
if d.HasChange("scaling_configuration_name") {
request.ScalingConfigurationName = d.Get("scaling_configuration_name").(string)
}
if d.HasChange("system_disk_category") {
request.SystemDiskCategory = d.Get("system_disk_category").(string)
}
if d.HasChange("system_disk_size") {
request.SystemDiskSize = requests.NewInteger(d.Get("system_disk_size").(int))
}
if d.HasChange("user_data") {
if v, ok := d.GetOk("user_data"); ok && v.(string) != "" {
_, base64DecodeError := base64.StdEncoding.DecodeString(v.(string))
if base64DecodeError == nil {
request.UserData = v.(string)
} else {
request.UserData = base64.StdEncoding.EncodeToString([]byte(v.(string)))
}
}
}
if d.HasChanges("role_name", "ram_role_name") {
request.RamRoleName = connectivity.GetResourceData(d, "role_name", "ram_role_name").(string)
}
if d.HasChanges("key_name", "key_pair_name") {
request.KeyPairName = connectivity.GetResourceData(d, "key_name", "key_pair_name").(string)
}
if d.HasChange("instance_name") {
request.InstanceName = d.Get("instance_name").(string)
}
if d.HasChange("system_disk_auto_snapshot_policy_id") {
request.SystemDiskAutoSnapshotPolicyId = d.Get("system_disk_auto_snapshot_policy_id").(string)
}
if d.HasChange("tags") {
if v, ok := d.GetOk("tags"); ok {
tags := "{"
for key, value := range v.(map[string]interface{}) {
tags += "\"" + key + "\"" + ":" + "\"" + value.(string) + "\"" + ","
}
request.Tags = strings.TrimSuffix(tags, ",") + "}"
}
}
if d.HasChange("host_name") {
request.HostName = d.Get("host_name").(string)
}
if d.HasChange("data_disk") {
dds, ok := d.GetOk("data_disk")
if ok {
disks := dds.([]interface{})
createDataDisks := make([]ess.ModifyScalingConfigurationDataDisk, 0, len(disks))
for _, e := range disks {
pack := e.(map[string]interface{})
dataDisk := ess.ModifyScalingConfigurationDataDisk{
Size: strconv.Itoa(pack["size"].(int)),
Category: pack["category"].(string),
SnapshotId: pack["snapshot_id"].(string),
Encrypted: pack["encrypted"].(string),
KMSKeyId: pack["kms_key_id"].(string),
DeleteWithInstance: strconv.FormatBool(pack["delete_with_instance"].(bool)),
Device: pack["device"].(string),
Description: pack["description"].(string),
AutoSnapshotPolicyId: pack["auto_snapshot_policy_id"].(string),
DiskName: pack["name"].(string),
}
createDataDisks = append(createDataDisks, dataDisk)
}
request.DataDisk = &createDataDisks
}
}
raw, err := client.WithEssClient(func(essClient *ess.Client) (interface{}, error) {
return essClient.ModifyScalingConfiguration(request)
})
if err != nil {
errmsg := ""
if bresponse, ok := raw.(*ess.ModifyScalingConfigurationResponse); ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
}