in alibabacloudstack/resource_apsarastack_ecs_dedicatedhost.go [269:430]
func resourceAlibabacloudStackEcsDedicatedHostUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
ecsService := EcsService{client}
d.Partial(true)
if !d.IsNewResource() && d.HasChange("tags") {
if err := ecsService.SetResourceTags(d, "ddh"); err != nil {
return errmsgs.WrapError(err)
}
//d.SetPartial("tags")
}
if !d.IsNewResource() && d.HasChange("auto_release_time") {
request := map[string]interface{}{
"DedicatedHostId": d.Id(),
}
request["AutoReleaseTime"] = d.Get("auto_release_time")
action := "ModifyDedicatedHostAutoReleaseTime"
_, err := client.DoTeaRequest("POST", "Ecs", "2014-05-26", action, "", nil, nil, request)
if err != nil {
return err
}
stateConf := BuildStateConf([]string{}, []string{"Available"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, ecsService.EcsDedicatedHostStateRefreshFunc(d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
//d.SetPartial("auto_release_time")
}
if !d.IsNewResource() && d.HasChange("resource_group_id") {
request := map[string]interface{}{
"ResourceId": d.Id(),
"ResourceType": "ddh",
"ResourceGroupId": d.Get("resource_group_id"),
}
action := "JoinResourceGroup"
_, err := client.DoTeaRequest("POST", "Ecs", "2014-05-26", action, "", nil, nil, request)
if err != nil {
return err
}
stateConf := BuildStateConf([]string{}, []string{"Available"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, ecsService.EcsDedicatedHostStateRefreshFunc(d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
//d.SetPartial("resource_group_id")
}
update := false
request := map[string]interface{}{
"DedicatedHostIds": convertListToJsonString(convertListStringToListInterface([]string{d.Id()})),
}
if !d.IsNewResource() && d.HasChange("expired_time") {
update = true
request["Period"] = d.Get("expired_time")
}
if !d.IsNewResource() && d.HasChange("sale_cycle") {
update = true
request["PeriodUnit"] = d.Get("sale_cycle")
}
if update {
action := "RenewDedicatedHosts"
_, err := client.DoTeaRequest("POST", "Ecs", "2014-05-26", action, "", nil, nil, request)
if err != nil {
return err
}
stateConf := BuildStateConf([]string{}, []string{"Available"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, ecsService.EcsDedicatedHostStateRefreshFunc(d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
//d.SetPartial("expired_time")
//d.SetPartial("sale_cycle")
}
update = false
modifyDedicatedHostsChargeTypeReq := map[string]interface{}{
"DedicatedHostIds": convertListToJsonString(convertListStringToListInterface([]string{d.Id()})),
"AutoPay": true,
"Period": d.Get("expired_time"),
}
if !d.IsNewResource() && d.HasChange("payment_type") {
update = true
modifyDedicatedHostsChargeTypeReq["DedicatedHostChargeType"] = d.Get("payment_type")
}
modifyDedicatedHostsChargeTypeReq["PeriodUnit"] = d.Get("sale_cycle")
if update {
if _, ok := d.GetOkExists("detail_fee"); ok {
modifyDedicatedHostsChargeTypeReq["DetailFee"] = d.Get("detail_fee")
}
if _, ok := d.GetOkExists("dry_run"); ok {
modifyDedicatedHostsChargeTypeReq["DryRun"] = d.Get("dry_run")
}
action := "ModifyDedicatedHostsChargeType"
_, err := client.DoTeaRequest("POST", "Ecs", "2014-05-26", action, "", nil, nil, modifyDedicatedHostsChargeTypeReq)
if err != nil {
return err
}
stateConf := BuildStateConf([]string{}, []string{"Available"}, d.Timeout(schema.TimeoutUpdate), 10*time.Second, ecsService.EcsDedicatedHostStateRefreshFunc(d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
// d.SetPartial("detail_fee")
// d.SetPartial("dry_run")
// d.SetPartial("expired_time")
// d.SetPartial("payment_type")
// d.SetPartial("sale_cycle")
}
update = false
modifyDedicatedHostAttributeReq := map[string]interface{}{
"DedicatedHostId": d.Id(),
}
if !d.IsNewResource() && d.HasChange("action_on_maintenance") {
update = true
modifyDedicatedHostAttributeReq["ActionOnMaintenance"] = d.Get("action_on_maintenance")
}
if !d.IsNewResource() && d.HasChange("auto_placement") {
update = true
modifyDedicatedHostAttributeReq["AutoPlacement"] = d.Get("auto_placement")
}
if !d.IsNewResource() && d.HasChange("cpu_over_commit_ratio") {
update = true
modifyDedicatedHostAttributeReq["CpuOverCommitRatio"] = d.Get("cpu_over_commit_ratio")
}
if !d.IsNewResource() && d.HasChange("dedicated_host_name") {
update = true
modifyDedicatedHostAttributeReq["DedicatedHostName"] = d.Get("dedicated_host_name")
}
if !d.IsNewResource() && d.HasChange("description") {
update = true
modifyDedicatedHostAttributeReq["Description"] = d.Get("description")
}
if !d.IsNewResource() && d.HasChange("network_attributes") {
update = true
if d.Get("network_attributes") != nil {
networkAttributesMap := make(map[string]interface{})
for _, networkAttributes := range d.Get("network_attributes").(*schema.Set).List() {
networkAttributesArg := networkAttributes.(map[string]interface{})
networkAttributesMap["SlbUdpTimeout"] = requests.NewInteger(networkAttributesArg["slb_udp_timeout"].(int))
networkAttributesMap["UdpTimeout"] = requests.NewInteger(networkAttributesArg["udp_timeout"].(int))
}
modifyDedicatedHostAttributeReq["NetworkAttributes"] = networkAttributesMap
}
}
if update {
if _, ok := d.GetOk("dedicated_host_cluster_id"); ok {
modifyDedicatedHostAttributeReq["DedicatedHostClusterId"] = d.Get("dedicated_host_cluster_id")
}
action := "ModifyDedicatedHostAttribute"
_, err := client.DoTeaRequest("POST", "Ecs", "2014-05-26", action, "", nil, nil, modifyDedicatedHostAttributeReq)
if err != nil {
return err
}
stateConf := BuildStateConf([]string{}, []string{"Available"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, ecsService.EcsDedicatedHostStateRefreshFunc(d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
// d.SetPartial("action_on_maintenance")
// d.SetPartial("auto_placement")
// d.SetPartial("cpu_over_commit_ratio")
// d.SetPartial("dedicated_host_cluster_id")
// d.SetPartial("dedicated_host_name")
// d.SetPartial("description")
// d.SetPartial("network_attributes")
}
d.Partial(false)
return nil
}