func resourceAlibabacloudStackExpressConnectPhysicalConnectionUpdate()

in alibabacloudstack/resource_apsarastack_expressconnect_physicalconnection.go [163:269]


func resourceAlibabacloudStackExpressConnectPhysicalConnectionUpdate(d *schema.ResourceData, meta interface{}) error {
	client := meta.(*connectivity.AlibabacloudStackClient)
	vpcService := VpcService{client}
	d.Partial(true)

	update := false
	request := map[string]interface{}{
		"PhysicalConnectionId": d.Id(),
	}

	if !d.IsNewResource() && d.HasChange("bandwidth") {
		update = true
		if v, ok := d.GetOk("bandwidth"); ok {
			request["bandwidth"] = v
		}
	}
	if !d.IsNewResource() && d.HasChange("circuit_code") {
		update = true
		if v, ok := d.GetOk("circuit_code"); ok {
			request["CircuitCode"] = v
		}
	}
	if !d.IsNewResource() && d.HasChange("description") {
		update = true
		if v, ok := d.GetOk("description"); ok {
			request["Description"] = v
		}
	}
	if !d.IsNewResource() && d.HasChange("line_operator") {
		update = true
		request["LineOperator"] = d.Get("line_operator")
	}
	if !d.IsNewResource() && d.HasChange("peer_location") {
		update = true
		request["PeerLocation"] = d.Get("peer_location")
	}
	if !d.IsNewResource() && d.HasChange("physical_connection_name") {
		update = true
		if v, ok := d.GetOk("physical_connection_name"); ok {
			request["Name"] = v
		}
	}
	if !d.IsNewResource() && d.HasChange("port_type") {
		update = true
		if v, ok := d.GetOk("port_type"); ok {
			request["PortType"] = v
		}
	}
	if !d.IsNewResource() && d.HasChange("redundant_physical_connection_id") {
		update = true
		if v, ok := d.GetOk("redundant_physical_connection_id"); ok {
			request["RedundantPhysicalConnectionId"] = v
		}
	}
	if update {
		action := "ModifyPhysicalConnectionAttribute"
		request["ClientToken"] = buildClientToken("ModifyPhysicalConnectionAttribute")
		_, err := client.DoTeaRequest("POST", "Vpc", "2016-04-28", action, "", nil, nil, request)
		if err != nil {
			return err
		}
	}
	if d.HasChange("status") {
		object, err := vpcService.DescribeExpressConnectPhysicalConnection(d.Id())
		if err != nil {
			return errmsgs.WrapError(err)
		}
		target := d.Get("status").(string)
		if object["Status"].(string) != target {
			if target == "Canceled" {
				request := map[string]interface{}{
					"PhysicalConnectionId": d.Id(),
				}
				action := "CancelPhysicalConnection"
				request["ClientToken"] = buildClientToken("CancelPhysicalConnection")
				_, err := client.DoTeaRequest("POST", "Vpc", "2016-04-28", action, "", nil, nil, request)
				if err != nil {
					return err
				}
			}
			if target == "Enabled" {
				request := map[string]interface{}{
					"PhysicalConnectionId": d.Id(),
				}
				action := "EnablePhysicalConnection"
				request["ClientToken"] = buildClientToken("EnablePhysicalConnection")
				_, err := client.DoTeaRequest("POST", "Vpc", "2016-04-28", action, "", nil, nil, request)
				if err != nil {
					return err
				}
			}
			if target == "Terminated" {
				request := map[string]interface{}{
					"PhysicalConnectionId": d.Id(),
				}
				action := "TerminatePhysicalConnection"
				request["ClientToken"] = buildClientToken("TerminatePhysicalConnection")
				_, err := client.DoTeaRequest("POST", "Vpc", "2016-04-28", action, "", nil, nil, request)
				if err != nil {
					return err
				}
			}
		}
	}
	d.Partial(false)
	return nil
}