From 348253d7586d75d2ebc7895b6ec7f6e4066269f8 Mon Sep 17 00:00:00 2001 From: Vishesh Date: Thu, 14 Mar 2024 17:25:22 +0530 Subject: [PATCH] Fail when both network_id & vpc_id are set in ipaddress (#99) --- cloudstack/resource_cloudstack_ipaddress.go | 3 ++ .../resource_cloudstack_ipaddress_test.go | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/cloudstack/resource_cloudstack_ipaddress.go b/cloudstack/resource_cloudstack_ipaddress.go index 98ad47ec..10a7c73a 100644 --- a/cloudstack/resource_cloudstack_ipaddress.go +++ b/cloudstack/resource_cloudstack_ipaddress.go @@ -99,6 +99,9 @@ func resourceCloudStackIPAddressCreate(d *schema.ResourceData, meta interface{}) if networkid, ok := d.GetOk("network_id"); ok { // Set the networkid p.SetNetworkid(networkid.(string)) + if vpcid, ok := d.GetOk("vpc_id"); ok && vpcid.(string) != "" { + return fmt.Errorf("set only network_id or vpc_id") + } } if vpcid, ok := d.GetOk("vpc_id"); ok { diff --git a/cloudstack/resource_cloudstack_ipaddress_test.go b/cloudstack/resource_cloudstack_ipaddress_test.go index 90058de0..98a32f6b 100644 --- a/cloudstack/resource_cloudstack_ipaddress_test.go +++ b/cloudstack/resource_cloudstack_ipaddress_test.go @@ -21,6 +21,7 @@ package cloudstack import ( "fmt" + "regexp" "testing" "github.com/apache/cloudstack-go/v2/cloudstack" @@ -67,6 +68,22 @@ func TestAccCloudStackIPAddress_vpc(t *testing.T) { }) } +func TestAccCloudStackIPAddress_vpcid_with_network_id(t *testing.T) { + + regex := regexp.MustCompile("set only network_id or vpc_id") + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckCloudStackIPAddressDestroy, + Steps: []resource.TestStep{ + { + ExpectError: regex, + Config: testAccCloudStackIPAddress_vpcid_with_network_id, + }, + }, + }) +} + func testAccCheckCloudStackIPAddressExists( n string, ipaddr *cloudstack.PublicIpAddress) resource.TestCheckFunc { return func(s *terraform.State) error { @@ -145,3 +162,25 @@ resource "cloudstack_ipaddress" "foo" { vpc_id = "${cloudstack_vpc.foo.id}" zone = "${cloudstack_vpc.foo.zone}" }` + +const testAccCloudStackIPAddress_vpcid_with_network_id = ` +resource "cloudstack_vpc" "foo" { + name = "terraform-vpc" + cidr = "10.0.0.0/8" + vpc_offering = "Default VPC offering" + zone = "Sandbox-simulator" +} + +resource "cloudstack_network" "foo" { + name = "terraform-network" + cidr = "10.1.1.0/24" + network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService" + source_nat_ip = true + zone = "Sandbox-simulator" +} + +resource "cloudstack_ipaddress" "foo" { + vpc_id = "${cloudstack_vpc.foo.id}" + network_id = "${cloudstack_network.foo.id}" + zone = "${cloudstack_vpc.foo.zone}" +}`