Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions cloudstack/resource_cloudstack_network.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,18 @@ func resourceCloudStackNetwork() *schema.Resource {
ForceNew: true,
},

"routerip": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},

"routeripv6": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},

"startip": {
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -293,6 +305,14 @@ func resourceCloudStackNetworkCreate(d *schema.ResourceData, meta interface{}) e
}
}

if routerip, ok := d.GetOk("routerip"); ok {
p.SetRouterip(routerip.(string))
}

if routeripv6, ok := d.GetOk("routeripv6"); ok {
p.SetRouteripv6(routeripv6.(string))
}

// Set the network domain if we have one
if networkDomain, ok := d.GetOk("network_domain"); ok {
p.SetNetworkdomain(networkDomain.(string))
Expand Down
53 changes: 53 additions & 0 deletions cloudstack/resource_cloudstack_network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,27 @@ func TestAccCloudStackNetwork_ipv6_custom_gateway(t *testing.T) {
})
}

func TestAccCloudStackNetwork_routerIPs(t *testing.T) {
var network cloudstack.Network

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckCloudStackNetworkDestroy,
Steps: []resource.TestStep{
{
Config: testAccCloudStackNetwork_routerIPs,
Check: resource.ComposeTestCheckFunc(
testAccCheckCloudStackNetworkExists(
"cloudstack_network.router_ips", &network),
resource.TestCheckResourceAttr(
"cloudstack_network.router_ips", "routerip", "10.20.0.2"),
),
},
},
})
}

func testAccCheckCloudStackNetworkExists(
n string, network *cloudstack.Network) resource.TestCheckFunc {
return func(s *terraform.State) error {
Expand Down Expand Up @@ -633,6 +654,38 @@ resource "cloudstack_network" "foo" {
zone = "Sandbox-simulator"
}`

const testAccCloudStackNetwork_routerIPs = `
resource "cloudstack_network_offering" "router_ips" {
name = "terraform-router-ip-network-offering"
display_text = "Terraform Router IP Network Offering"
guest_ip_type = "Shared"
traffic_type = "Guest"
network_rate = 200
conserve_mode = true
enable = true
specify_vlan = true
specify_ip_ranges = true
supported_services = ["Dhcp", "Dns", "UserData"]
service_provider_list = {
Dhcp = "VirtualRouter"
Dns = "VirtualRouter"
UserData = "VirtualRouter"
}
}

resource "cloudstack_network" "router_ips" {
name = "terraform-router-ip-network"
display_text = "terraform-router-ip-network"
cidr = "10.20.0.0/24"
gateway = "10.20.0.1"
startip = "10.20.0.2"
endip = "10.20.0.250"
routerip = "10.20.0.2"
network_offering = cloudstack_network_offering.router_ips.id
zone = "Sandbox-simulator"
vlan = 300
}`

const testAccCloudStackNetwork_vpcProjectInheritance = `
resource "cloudstack_vpc" "foo" {
name = "terraform-vpc"
Expand Down
20 changes: 17 additions & 3 deletions website/docs/r/network.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,20 @@ resource "cloudstack_network" "default" {
}
```

With IPv6 support:
Shared network with explicit IPv4 and IPv6 router addresses:

```hcl
resource "cloudstack_network" "ipv6" {
resource "cloudstack_network" "shared" {
name = "test-network-ipv6"
cidr = "10.0.0.0/16"
startip = "10.0.0.2"
endip = "10.0.255.254"
ip6cidr = "2001:db8::/64"
network_offering = "Default Network"
startipv6 = "2001:db8::2"
endipv6 = "2001:db8::ffff"
routerip = "10.0.0.2"
routeripv6 = "2001:db8::2"
network_offering = "Shared Network Offering"
zone = "zone-1"
}
```
Expand Down Expand Up @@ -86,6 +92,14 @@ The following arguments are supported:
in this network. Must fall within `ip6cidr`. Defaults to the second address
in the subnet (network address + 1, e.g., 2001:db8::1 for 2001:db8::/64).

* `routerip` - (Optional) IPv4 address to assign to the router in a shared
network. Requires CloudStack 4.16 or later. Changing this forces a new
resource to be created.

* `routeripv6` - (Optional) IPv6 address to assign to the router in a shared
network. Requires CloudStack 4.16 or later. Changing this forces a new
resource to be created.

* `startipv6` - (Optional) Start of the IPv6 block that will be available on the
network. Must fall within `ip6cidr`. Only applied when the network offering
has `specifyipranges` enabled; in that case it defaults to the second
Expand Down