Skip to content

Commit

Permalink
allow to add ips to vrouter nics (#2)
Browse files Browse the repository at this point in the history
Co-authored-by: Dorian Jolivald <[email protected]>
  • Loading branch information
Thiryn and Thiryn authored Jul 29, 2024
1 parent 03e006a commit 1a43706
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
7 changes: 7 additions & 0 deletions opennebula/helpers_vr.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,13 @@ func vrNICAttach(ctx context.Context, timeout time.Duration, controller *goca.Co
updatedNICsLoop:
for i, nic := range updatedNICs {

// For VRouter NICs, floating IPs are set using the "IP" field, but it is represented
// as the "VROUTER_IP" field.
if vrouterIP, err := nic.GetStr("VROUTER_IP"); err == nil {
if _, err = nic.GetStr("IP"); err != nil {
nic.Add("IP", vrouterIP)
}
}
for _, pair := range nicTpl.Pairs {

value, err := nic.GetStr(pair.Key())
Expand Down
12 changes: 12 additions & 0 deletions opennebula/resource_opennebula_virtual_router_nic.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ func resourceOpennebulaVirtualRouterNIC() *schema.Resource {
Default: false,
ForceNew: true,
},
"ip": {
Type: schema.TypeString,
Optional: true,
Default: "",
ForceNew: true,
},
},
}
}
Expand Down Expand Up @@ -137,6 +143,10 @@ func resourceOpennebulaVirtualRouterNICCreate(ctx context.Context, d *schema.Res
}
}

if v, ok := d.GetOk("ip"); ok {
nicTpl.Add("IP", v.(string))
}

// wait before checking NIC
nicID, err := vrNICAttach(ctx, d.Timeout(schema.TimeoutCreate), controller, vRouterID, nicTpl)
if err != nil {
Expand Down Expand Up @@ -198,6 +208,7 @@ func resourceOpennebulaVirtualRouterNICRead(ctx context.Context, d *schema.Resou
network, _ := nic.Get(shared.Network)
model, _ := nic.Get(shared.Model)
virtioQueues, _ := nic.GetStr("VIRTIO_QUEUES")
ip, _ := nic.Get("VROUTER_IP")

sg := make([]int, 0)
securityGroupsArray, _ := nic.Get(shared.SecurityGroups)
Expand All @@ -219,6 +230,7 @@ func resourceOpennebulaVirtualRouterNICRead(ctx context.Context, d *schema.Resou
d.Set("security_groups", sg)
d.Set("floating_ip", strings.ToUpper(floatingIP) == "YES")
d.Set("floating_only", strings.ToUpper(floatingOnly) == "YES")
d.Set("ip", ip)

return nil
}
Expand Down
24 changes: 24 additions & 0 deletions opennebula/resource_opennebula_virtual_router_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,17 @@ func TestAccVirtualRouter(t *testing.T) {
resource.TestCheckResourceAttrSet("opennebula_virtual_router.test", "gname"),
resource.TestCheckResourceAttrSet("opennebula_virtual_router_nic.nic1", "network_id"),
resource.TestCheckResourceAttrSet("opennebula_virtual_router_nic.nic2", "network_id"),
resource.TestCheckResourceAttrSet("opennebula_virtual_router_nic.nic3", "network_id"),
resource.TestCheckResourceAttrSet("opennebula_virtual_router_nic.nic4", "network_id"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic1", "floating_ip", "true"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic1", "floating_only", "true"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic1", "ip", ""),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic2", "floating_ip", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic2", "floating_only", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic2", "ip", ""),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic3", "floating_ip", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic3", "floating_only", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic3", "ip", "10.0.0.1"),
testAccCheckVirtualRouterPermissions(&shared.Permissions{
OwnerU: 1,
OwnerM: 1,
Expand All @@ -148,6 +155,9 @@ func TestAccVirtualRouter(t *testing.T) {
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic1", "floating_only", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic2", "floating_ip", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic2", "floating_only", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic3", "floating_ip", "yes"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic3", "floating_only", "false"),
resource.TestCheckResourceAttr("opennebula_virtual_router_nic.nic3", "ip", "10.0.0.2"),
testAccCheckVirtualRouterPermissions(&shared.Permissions{
OwnerU: 1,
OwnerM: 1,
Expand Down Expand Up @@ -473,6 +483,12 @@ resource "opennebula_virtual_router_nic" "nic1" {
virtual_router_id = opennebula_virtual_router.test.id
network_id = opennebula_virtual_network.network1.id
}
resource "opennebula_virtual_router_nic" "nic3" {
ip = "10.0.0.1"
virtual_router_id = opennebula_virtual_router.test.id
network_id = opennebula_virtual_network.network1.id
}
`
var testAccVirtualRouterUpdateNICs = testAccVirtualRouterMachineTemplate + testAccVirtualRouterVNet + `
Expand Down Expand Up @@ -519,4 +535,12 @@ resource "opennebula_virtual_router_nic" "nic1" {
virtual_router_id = opennebula_virtual_router.test.id
network_id = opennebula_virtual_network.network1.id
}
resource "opennebula_virtual_router_nic" "nic3" {
floating_ip = true
ip = "10.0.0.2"
virtual_router_id = opennebula_virtual_router.test.id
network_id = opennebula_virtual_network.network1.id
}
`

0 comments on commit 1a43706

Please sign in to comment.