Skip to content

Commit

Permalink
Merge pull request apache#30 from apache/FixTerraformDestroyForIpAddress
Browse files Browse the repository at this point in the history
Fix ip address deletion during "terraform destory" command
  • Loading branch information
harikrishna-patnala authored Jan 18, 2022
2 parents fe012a2 + f6386b0 commit 9496d6a
Showing 1 changed file with 22 additions and 14 deletions.
36 changes: 22 additions & 14 deletions cloudstack/resource_cloudstack_ipaddress.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ func resourceCloudStackIPAddress() *schema.Resource {
Computed: true,
},

"is_source_nat": {
Type: schema.TypeBool,
Computed: true,
},

"tags": tagsSchema(),
},
}
Expand Down Expand Up @@ -154,6 +159,7 @@ func resourceCloudStackIPAddressRead(d *schema.ResourceData, meta interface{}) e
}

d.Set("is_portable", ip.Isportable)
d.Set("is_source_nat", ip.Issourcenat)

// Updated the IP address
d.Set("ip_address", ip.Ipaddress)
Expand Down Expand Up @@ -182,21 +188,23 @@ func resourceCloudStackIPAddressRead(d *schema.ResourceData, meta interface{}) e
}

func resourceCloudStackIPAddressDelete(d *schema.ResourceData, meta interface{}) error {
cs := meta.(*cloudstack.CloudStackClient)

// Create a new parameter struct
p := cs.Address.NewDisassociateIpAddressParams(d.Id())

// Disassociate the IP address
if _, err := cs.Address.DisassociateIpAddress(p); err != nil {
// This is a very poor way to be told the ID does no longer exist :(
if strings.Contains(err.Error(), fmt.Sprintf(
"Invalid parameter id value=%s due to incorrect long value format, "+
"or entity does not exist", d.Id())) {
return nil
if !d.Get("is_source_nat").(bool) {
cs := meta.(*cloudstack.CloudStackClient)

// Create a new parameter struct
p := cs.Address.NewDisassociateIpAddressParams(d.Id())

// Disassociate the IP address
if _, err := cs.Address.DisassociateIpAddress(p); err != nil {
// This is a very poor way to be told the ID does no longer exist :(
if strings.Contains(err.Error(), fmt.Sprintf(
"Invalid parameter id value=%s due to incorrect long value format, "+
"or entity does not exist", d.Id())) {
return nil
}

return fmt.Errorf("Error disassociating IP address %s: %s", d.Id(), err)
}

return fmt.Errorf("Error disassociating IP address %s: %s", d.Id(), err)
}

return nil
Expand Down

0 comments on commit 9496d6a

Please sign in to comment.