Skip to content

Commit 878b589

Browse files
jaimecbThiryn
andauthored
B #589: Fix tag settings for reservations (#607)
* Fix tag settings for reservations * B #589: Override inherited tags from reservation_vnet * B #589: Add inherited tag test case --------- Signed-off-by: Jaime Conchello <jconchello@opennebula.io> Co-authored-by: Dorian Jolivald <dorian.jolivald@true.nl>
1 parent ca174b3 commit 878b589

File tree

2 files changed

+52
-6
lines changed

2 files changed

+52
-6
lines changed

opennebula/resource_opennebula_virtual_network.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,42 @@ func resourceOpennebulaVirtualNetworkCreate(ctx context.Context, d *schema.Resou
483483
return diags
484484
}
485485

486+
update := false
487+
vnTemplate := vnet.Template
488+
if tags, ok := d.Get("tags").(map[string]interface{}); ok {
489+
for k, v := range tags {
490+
update = true
491+
key := strings.ToUpper(k)
492+
p, _ := vnTemplate.GetPair(key)
493+
if p != nil {
494+
vnTemplate.Del(key)
495+
}
496+
vnTemplate.AddPair(key, v)
497+
}
498+
}
499+
// add default tags if they aren't overriden
500+
if len(config.defaultTags) > 0 {
501+
for k, v := range config.defaultTags {
502+
update = true
503+
key := strings.ToUpper(k)
504+
p, _ := vnTemplate.GetPair(key)
505+
if p != nil {
506+
continue
507+
}
508+
vnTemplate.AddPair(key, v)
509+
}
510+
}
511+
if update {
512+
err := vnc.Update(vnTemplate.String(), parameters.Replace)
513+
if err != nil {
514+
diags = append(diags, diag.Diagnostic{
515+
Severity: diag.Error,
516+
Summary: "Failed to update content",
517+
Detail: fmt.Sprintf("virtual network (ID: %s): %s", d.Id(), err),
518+
})
519+
return diags
520+
}
521+
}
486522
d.SetId(fmt.Sprintf("%v", vnet.ID))
487523

488524
log.Printf("[DEBUG] New VNET reservation ID: %d", vnet.ID)

opennebula/resource_opennebula_virtual_network_test.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ func TestAccVirtualNetwork(t *testing.T) {
195195
resource.TestCheckResourceAttr("opennebula_virtual_network.reservation1", "reservation_size", "5"),
196196
resource.TestCheckResourceAttr("opennebula_virtual_network.reservation1", "reservation_first_ip", "172.16.100.115"),
197197
resource.TestCheckResourceAttr("opennebula_virtual_network.reservation1", "permissions", "660"),
198+
resource.TestCheckResourceAttr("opennebula_virtual_network.reservation1", "tags.MY_TAG", "tag_value"),
199+
resource.TestCheckResourceAttr("opennebula_virtual_network.reservation1", "tags.environment", "DEV"),
198200
resource.TestCheckResourceAttrSet("opennebula_virtual_network.reservation1", "uid"),
199201
resource.TestCheckResourceAttrSet("opennebula_virtual_network.reservation1", "gid"),
200202
resource.TestCheckResourceAttrSet("opennebula_virtual_network.reservation1", "uname"),
@@ -544,6 +546,10 @@ var testAccVirtualNetworkReservationConfig = `
544546
permissions = "660"
545547
group = "users"
546548
549+
tags = {
550+
environment = "example"
551+
app = "test_app"
552+
}
547553
lifecycle {
548554
ignore_changes = [ar, hold_ips]
549555
}
@@ -579,14 +585,18 @@ var testAccVirtualNetworkReservationConfig = `
579585
}
580586
581587
resource "opennebula_virtual_network" "reservation1" {
582-
name = "terravnetres"
583-
description = "my terraform vnet"
584-
reservation_vnet = opennebula_virtual_network.test.id
585-
reservation_size = 5
588+
name = "terravnetres"
589+
description = "my terraform vnet"
590+
reservation_vnet = opennebula_virtual_network.test.id
591+
reservation_size = 5
586592
reservation_ar_id = opennebula_virtual_network_address_range.test.id
587593
reservation_first_ip = "172.16.100.115"
588-
security_groups = [0]
589-
permissions = 660
594+
security_groups = [0]
595+
permissions = 660
596+
tags = {
597+
MY_TAG = "tag_value"
598+
environment = "DEV"
599+
}
590600
}
591601
592602
resource "opennebula_virtual_network" "reservation2" {

0 commit comments

Comments
 (0)