Fix ip address deletion during "terraform destory" command. All created IP addresses will be destroyed but the IP having source nat, does not have to be deassociated.
diff --git a/cloudstack/resource_cloudstack_ipaddress.go b/cloudstack/resource_cloudstack_ipaddress.go
index 743cd10..98ad47e 100644
--- a/cloudstack/resource_cloudstack_ipaddress.go
+++ b/cloudstack/resource_cloudstack_ipaddress.go
@@ -72,6 +72,11 @@
 				Computed: true,
 			},
 
+			"is_source_nat": {
+				Type:     schema.TypeBool,
+				Computed: true,
+			},
+
 			"tags": tagsSchema(),
 		},
 	}
@@ -154,6 +159,7 @@
 	}
 
 	d.Set("is_portable", ip.Isportable)
+	d.Set("is_source_nat", ip.Issourcenat)
 
 	// Updated the IP address
 	d.Set("ip_address", ip.Ipaddress)
@@ -182,21 +188,23 @@
 }
 
 func resourceCloudStackIPAddressDelete(d *schema.ResourceData, meta interface{}) error {
-	cs := meta.(*cloudstack.CloudStackClient)
+	if !d.Get("is_source_nat").(bool) {
+		cs := meta.(*cloudstack.CloudStackClient)
 
-	// Create a new parameter struct
-	p := cs.Address.NewDisassociateIpAddressParams(d.Id())
+		// 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
+		// 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