diff --git a/cloudstack/resource_cloudstack_ipaddress.go b/cloudstack/resource_cloudstack_ipaddress.go index 8f5f1ffc..5a1ad08f 100644 --- a/cloudstack/resource_cloudstack_ipaddress.go +++ b/cloudstack/resource_cloudstack_ipaddress.go @@ -100,6 +100,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..1f4b3fa5 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}" +}`