Skip to content

Commit

Permalink
Fail when both network_id & vpc_id are set in ipaddress (#99)
Browse files Browse the repository at this point in the history
  • Loading branch information
vishesh92 authored Mar 14, 2024
1 parent d524e07 commit 348253d
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
3 changes: 3 additions & 0 deletions cloudstack/resource_cloudstack_ipaddress.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
39 changes: 39 additions & 0 deletions cloudstack/resource_cloudstack_ipaddress_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ package cloudstack

import (
"fmt"
"regexp"
"testing"

"github.com/apache/cloudstack-go/v2/cloudstack"
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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}"
}`

0 comments on commit 348253d

Please sign in to comment.