This is an automated email from the ASF dual-hosted git repository. sudo87 pushed a commit to branch fix/storage-range-import-project-displaytext in repository https://gitbox.apache.org/repos/asf/cloudstack-terraform-provider.git
commit c1996e30aa088f8a16b330df6b60cf7e712d989b Author: Manoj Kumar <[email protected]> AuthorDate: Fri Aug 28 15:46:49 2026 +0530 Mark storage_network_ip_range netmask/start_ip/end_ip as ForceNew CloudStack's updateStorageNetworkIpRange API validates a new IP range against the record's own current start/end IPs without excluding the record being updated, so any in-place edit of these fields fails with a self-overlap error (errorcode 530). Switching the update call to only send changed fields (d.HasChange instead of d.GetOk) did not help — the failure is identical even when only the genuinely-changed field is sent, confirming this is a server-side validation bug rather than something the provider can work around. Mark these fields ForceNew so the plan matches reality: Terraform now proposes a replacement instead of an update that is guaranteed to fail. Reproduced and reverified against ACS 4.23.0.0. --- .../resource_cloudstack_storage_network_ip_range.go | 19 +++++++++++-------- website/docs/r/storage_network_ip_range.html.markdown | 11 ++++++++++- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/cloudstack/resource_cloudstack_storage_network_ip_range.go b/cloudstack/resource_cloudstack_storage_network_ip_range.go index 709108d..24d317e 100644 --- a/cloudstack/resource_cloudstack_storage_network_ip_range.go +++ b/cloudstack/resource_cloudstack_storage_network_ip_range.go @@ -47,6 +47,7 @@ func resourceCloudStackStorageNetworkIpRange() *schema.Resource { Description: "the netmask for the storage network IP range", Type: schema.TypeString, Required: true, + ForceNew: true, }, "pod_id": { Description: "the Pod ID for the storage network IP range", @@ -58,12 +59,14 @@ func resourceCloudStackStorageNetworkIpRange() *schema.Resource { Description: "the beginning IP address in the storage network IP range", Type: schema.TypeString, Required: true, + ForceNew: true, }, "end_ip": { Description: "the ending IP address in the storage network IP range", Type: schema.TypeString, Optional: true, Computed: true, + ForceNew: true, }, "vlan": { Description: "the optional VLAN of the storage network IP range", @@ -136,17 +139,17 @@ func resourceCloudStackStorageNetworkIpRangeUpdate(d *schema.ResourceData, meta p := cs.Network.NewUpdateStorageNetworkIpRangeParams(d.Id()) - if v, ok := d.GetOk("netmask"); ok { - p.SetNetmask(v.(string)) + if d.HasChange("netmask") { + p.SetNetmask(d.Get("netmask").(string)) } - if v, ok := d.GetOk("start_ip"); ok { - p.SetStartip(v.(string)) + if d.HasChange("start_ip") { + p.SetStartip(d.Get("start_ip").(string)) } - if v, ok := d.GetOk("end_ip"); ok { - p.SetEndip(v.(string)) + if d.HasChange("end_ip") { + p.SetEndip(d.Get("end_ip").(string)) } - if v, ok := d.GetOk("vlan"); ok { - p.SetVlan(v.(int)) + if d.HasChange("vlan") { + p.SetVlan(d.Get("vlan").(int)) } _, err := cs.Network.UpdateStorageNetworkIpRange(p) diff --git a/website/docs/r/storage_network_ip_range.html.markdown b/website/docs/r/storage_network_ip_range.html.markdown index 9deb789..5d1cf7e 100644 --- a/website/docs/r/storage_network_ip_range.html.markdown +++ b/website/docs/r/storage_network_ip_range.html.markdown @@ -33,11 +33,20 @@ The following arguments are supported: this forces a new resource to be created. - `gateway` - (Required) The gateway for the storage network IP range. Changing this forces a new resource to be created. -- `netmask` - (Required) The netmask for the storage network IP range. +- `netmask` - (Required) The netmask for the storage network IP range. Changing + this forces a new resource to be created. - `start_ip` - (Required) The beginning IP address in the storage network IP range. + Changing this forces a new resource to be created. - `end_ip` - (Optional) The ending IP address in the storage network IP range. + Changing this forces a new resource to be created. - `vlan` - (Optional) The optional VLAN of the storage network IP range. +`netmask`, `start_ip`, and `end_ip` force replacement rather than an in-place +update: CloudStack's `updateStorageNetworkIpRange` API validates a new range +against the record's own current IPs without excluding the record being +updated, so any in-place edit of these fields fails with an IP overlap error +against itself. + ## Attributes Reference The following attributes are exported:
