This is an automated email from the ASF dual-hosted git repository.
sureshanaparti pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/cloudstack-terraform-provider.git
The following commit(s) were added to refs/heads/main by this push:
new 7b2f74b Add VR address parameter to network (#326)
7b2f74b is described below
commit 7b2f74b8adbbb2b6f70183a7ee162d4c1b9f2f07
Author: bddvlpr <[email protected]>
AuthorDate: Wed Sep 2 06:51:27 2026 +0200
Add VR address parameter to network (#326)
---
cloudstack/resource_cloudstack_network.go | 20 ++++++++++
cloudstack/resource_cloudstack_network_test.go | 53 ++++++++++++++++++++++++++
website/docs/r/network.html.markdown | 20 ++++++++--
3 files changed, 90 insertions(+), 3 deletions(-)
diff --git a/cloudstack/resource_cloudstack_network.go
b/cloudstack/resource_cloudstack_network.go
index 1aebe76..f530a1d 100644
--- a/cloudstack/resource_cloudstack_network.go
+++ b/cloudstack/resource_cloudstack_network.go
@@ -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,
@@ -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))
diff --git a/cloudstack/resource_cloudstack_network_test.go
b/cloudstack/resource_cloudstack_network_test.go
index 6fc82ac..de06b8e 100644
--- a/cloudstack/resource_cloudstack_network_test.go
+++ b/cloudstack/resource_cloudstack_network_test.go
@@ -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 {
@@ -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"
diff --git a/website/docs/r/network.html.markdown
b/website/docs/r/network.html.markdown
index 4adae63..ad3031c 100644
--- a/website/docs/r/network.html.markdown
+++ b/website/docs/r/network.html.markdown
@@ -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"
}
```
@@ -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