You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ha...@apache.org on 2022/01/11 16:33:44 UTC

[cloudstack-terraform-provider] branch FixTerraformDestroyForIpAddress updated: 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.

This is an automated email from the ASF dual-hosted git repository.

harikrishna pushed a commit to branch FixTerraformDestroyForIpAddress
in repository https://gitbox.apache.org/repos/asf/cloudstack-terraform-provider.git


The following commit(s) were added to refs/heads/FixTerraformDestroyForIpAddress by this push:
     new f6386b0  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.
f6386b0 is described below

commit f6386b0951ca7e6c987c3129d824c03e5ce848f3
Author: Harikrishna Patnala <ha...@gmail.com>
AuthorDate: Tue Jan 11 13:17:02 2022 +0530

    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.
---
 cloudstack/resource_cloudstack_ipaddress.go | 36 ++++++++++++++++++-----------
 1 file changed, 22 insertions(+), 14 deletions(-)

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 @@ func resourceCloudStackIPAddress() *schema.Resource {
 				Computed: true,
 			},
 
+			"is_source_nat": {
+				Type:     schema.TypeBool,
+				Computed: true,
+			},
+
 			"tags": tagsSchema(),
 		},
 	}
@@ -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)
@@ -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