This is an automated email from the ASF dual-hosted git repository.
vishesh 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 8c28240 Support additional parameters for cloudstack_nic resource
(#210)
8c28240 is described below
commit 8c282403396be3c13270330c9af8921f8dd9e7c9
Author: Pearl Dsilva <[email protected]>
AuthorDate: Thu Aug 28 05:44:26 2025 -0400
Support additional parameters for cloudstack_nic resource (#210)
---
cloudstack/resource_cloudstack_nic.go | 14 ++++-
cloudstack/resource_cloudstack_nic_test.go | 91 ++++++++++++++++++++++++++----
website/docs/r/nic.html.markdown | 16 ++++++
3 files changed, 110 insertions(+), 11 deletions(-)
diff --git a/cloudstack/resource_cloudstack_nic.go
b/cloudstack/resource_cloudstack_nic.go
index 82f455e..36c25ec 100644
--- a/cloudstack/resource_cloudstack_nic.go
+++ b/cloudstack/resource_cloudstack_nic.go
@@ -53,6 +53,12 @@ func resourceCloudStackNIC() *schema.Resource {
Required: true,
ForceNew: true,
},
+ "mac_address": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ ForceNew: true,
+ },
},
}
}
@@ -66,11 +72,16 @@ func resourceCloudStackNICCreate(d *schema.ResourceData,
meta interface{}) error
d.Get("virtual_machine_id").(string),
)
- // If there is a ipaddres supplied, add it to the parameter struct
+ // If there is an ipaddress supplied, add it to the parameter struct
if ipaddress, ok := d.GetOk("ip_address"); ok {
p.SetIpaddress(ipaddress.(string))
}
+ // If there is a macaddress supplied, add it to the parameter struct
+ if macaddress, ok := d.GetOk("mac_address"); ok {
+ p.SetMacaddress(macaddress.(string))
+ }
+
// Create and attach the new NIC
r, err := Retry(10, retryableAddNicFunc(cs, p))
if err != nil {
@@ -115,6 +126,7 @@ func resourceCloudStackNICRead(d *schema.ResourceData, meta
interface{}) error {
d.Set("ip_address", n.Ipaddress)
d.Set("network_id", n.Networkid)
d.Set("virtual_machine_id", vm.Id)
+ d.Set("mac_address", n.Macaddress)
found = true
break
}
diff --git a/cloudstack/resource_cloudstack_nic_test.go
b/cloudstack/resource_cloudstack_nic_test.go
index 7b66675..d82d542 100644
--- a/cloudstack/resource_cloudstack_nic_test.go
+++ b/cloudstack/resource_cloudstack_nic_test.go
@@ -79,6 +79,28 @@ func TestAccCloudStackNIC_update(t *testing.T) {
})
}
+func TestAccCloudStackNIC_macaddress(t *testing.T) {
+ var nic cloudstack.Nic
+
+ resource.Test(t, resource.TestCase{
+ PreCheck: func() { testAccPreCheck(t) },
+ Providers: testAccProviders,
+ CheckDestroy: testAccCheckCloudStackNICDestroy,
+ Steps: []resource.TestStep{
+ {
+ Config: testAccCloudStackNIC_macaddress,
+ Check: resource.ComposeTestCheckFunc(
+ testAccCheckCloudStackNICExists(
+ "cloudstack_instance.foobar",
"cloudstack_nic.foo", &nic),
+
testAccCheckCloudStackNICMacAddress(&nic),
+ resource.TestCheckResourceAttr(
+ "cloudstack_nic.foo",
"mac_address", "02:1a:4b:3c:5d:6e"),
+ ),
+ },
+ },
+ })
+}
+
func testAccCheckCloudStackNICExists(
v, n string, nic *cloudstack.Nic) resource.TestCheckFunc {
return func(s *terraform.State) error {
@@ -122,7 +144,7 @@ func testAccCheckCloudStackNICAttributes(
nic *cloudstack.Nic) resource.TestCheckFunc {
return func(s *terraform.State) error {
- if nic.Networkname != "terraform-network" {
+ if nic.Networkname != "terraform-network-secondary" {
return fmt.Errorf("Bad network name: %s",
nic.Networkname)
}
@@ -134,7 +156,7 @@ func testAccCheckCloudStackNICIPAddress(
nic *cloudstack.Nic) resource.TestCheckFunc {
return func(s *terraform.State) error {
- if nic.Networkname != "terraform-network" {
+ if nic.Networkname != "terraform-network-secondary" {
return fmt.Errorf("Bad network name: %s",
nic.Networkname)
}
@@ -146,6 +168,22 @@ func testAccCheckCloudStackNICIPAddress(
}
}
+func testAccCheckCloudStackNICMacAddress(
+ nic *cloudstack.Nic) resource.TestCheckFunc {
+ return func(s *terraform.State) error {
+
+ if nic.Networkname != "terraform-network-secondary" {
+ return fmt.Errorf("Bad network name: %s",
nic.Networkname)
+ }
+
+ if nic.Macaddress != "02:1a:4b:3c:5d:6e" {
+ return fmt.Errorf("Bad MAC address: %s", nic.Macaddress)
+ }
+
+ return nil
+ }
+}
+
func testAccCheckCloudStackNICDestroy(s *terraform.State) error {
cs := testAccProvider.Meta().(*cloudstack.CloudStackClient)
@@ -170,16 +208,16 @@ func testAccCheckCloudStackNICDestroy(s *terraform.State)
error {
const testAccCloudStackNIC_basic = `
resource "cloudstack_network" "foo" {
- name = "terraform-network"
- display_text = "terraform-network"
+ name = "terraform-network-primary"
+ display_text = "terraform-network-primary"
cidr = "10.1.1.0/24"
network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService"
zone = "Sandbox-simulator"
}
resource "cloudstack_network" "bar" {
- name = "terraform-network"
- display_text = "terraform-network"
+ name = "terraform-network-secondary"
+ display_text = "terraform-network-secondary"
cidr = "10.1.2.0/24"
network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService"
zone = "Sandbox-simulator"
@@ -202,16 +240,16 @@ resource "cloudstack_nic" "foo" {
const testAccCloudStackNIC_ipaddress = `
resource "cloudstack_network" "foo" {
- name = "terraform-network"
- display_text = "terraform-network"
+ name = "terraform-network-primary"
+ display_text = "terraform-network-primary"
cidr = "10.1.1.0/24"
network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService"
zone = "Sandbox-simulator"
}
resource "cloudstack_network" "bar" {
- name = "terraform-network"
- display_text = "terraform-network"
+ name = "terraform-network-secondary"
+ display_text = "terraform-network-secondary"
cidr = "10.1.2.0/24"
network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService"
zone = "Sandbox-simulator"
@@ -232,3 +270,36 @@ resource "cloudstack_nic" "foo" {
virtual_machine_id = cloudstack_instance.foobar.id
ip_address = "10.1.2.123"
}`
+
+const testAccCloudStackNIC_macaddress = `
+resource "cloudstack_network" "foo" {
+ name = "terraform-network-primary"
+ display_text = "terraform-network-primary"
+ cidr = "10.1.1.0/24"
+ network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService"
+ zone = "Sandbox-simulator"
+}
+
+resource "cloudstack_network" "bar" {
+ name = "terraform-network-secondary"
+ display_text = "terraform-network-secondary"
+ cidr = "10.1.2.0/24"
+ network_offering = "DefaultIsolatedNetworkOfferingWithSourceNatService"
+ zone = "Sandbox-simulator"
+}
+
+resource "cloudstack_instance" "foobar" {
+ name = "terraform-test"
+ display_name = "terraform"
+ service_offering= "Medium Instance"
+ network_id = cloudstack_network.foo.id
+ template = "CentOS 5.6 (64-bit) no GUI (Simulator)"
+ zone = "Sandbox-simulator"
+ expunge = true
+}
+
+resource "cloudstack_nic" "foo" {
+ network_id = cloudstack_network.bar.id
+ virtual_machine_id = cloudstack_instance.foobar.id
+ mac_address = "02:1a:4b:3c:5d:6e"
+}`
diff --git a/website/docs/r/nic.html.markdown b/website/docs/r/nic.html.markdown
index 8254b68..a000e70 100644
--- a/website/docs/r/nic.html.markdown
+++ b/website/docs/r/nic.html.markdown
@@ -22,6 +22,17 @@ resource "cloudstack_nic" "test" {
}
```
+With MAC address:
+
+```hcl
+resource "cloudstack_nic" "test" {
+ network_id = "6eb22f91-7454-4107-89f4-36afcdf33021"
+ ip_address = "192.168.1.1"
+ mac_address = "02:1a:4b:3c:5d:6e"
+ virtual_machine_id = "f8141e2f-4e7e-4c63-9362-986c908b7ea7"
+}
+```
+
## Argument Reference
The following arguments are supported:
@@ -32,6 +43,10 @@ The following arguments are supported:
* `ip_address` - (Optional) The IP address to assign to the NIC. Changing this
forces a new resource to be created.
+* `mac_address` - (Optional) The MAC address to assign to the NIC. If not
specified,
+ a MAC address will be automatically generated. Changing this forces a new
resource
+ to be created.
+
* `virtual_machine_id` - (Required) The ID of the virtual machine to which to
attach the NIC. Changing this forces a new resource to be created.
@@ -41,3 +56,4 @@ The following attributes are exported:
* `id` - The ID of the NIC.
* `ip_address` - The assigned IP address.
+* `mac_address` - The assigned MAC address.