Skip to content

Commit

Permalink
Add tags support for Neutron subnetpools
Browse files Browse the repository at this point in the history
This allows us to set/get tags for subnetpools via terraform templates,
and requires the recently added changes to gophercloud that enable
the relevant features of the Neutron APIs to be accessed.

Issue: terraform-provider-openstack#453
  • Loading branch information
Steven Hardy committed Oct 24, 2018
1 parent 240f979 commit 90196c3
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
27 changes: 27 additions & 0 deletions openstack/resource_openstack_networking_subnetpool_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/hashicorp/terraform/helper/schema"

"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/attributestags"
"github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/subnetpools"
)

Expand Down Expand Up @@ -125,6 +126,11 @@ func resourceNetworkingSubnetPoolV2() *schema.Resource {
Optional: true,
ForceNew: true,
},
"tags": &schema.Schema{
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
},
}
}
Expand Down Expand Up @@ -174,6 +180,16 @@ func resourceNetworkingSubnetPoolV2Create(d *schema.ResourceData, meta interface

d.SetId(s.ID)

tags := networkV2AttributesTags(d)
if len(tags) > 0 {
tagOpts := attributestags.ReplaceAllOpts{Tags: tags}
tags, err := attributestags.ReplaceAll(networkingClient, "subnetpools", s.ID, tagOpts).Extract()
if err != nil {
return fmt.Errorf("Error creating Tags on Subnetpool: %s", err)
}
log.Printf("[DEBUG] Set Tags = %+v on Subnetpool %+v", tags, s.ID)
}

log.Printf("[DEBUG] Created Subnetpool %s: %#v", s.ID, s)
return resourceNetworkingSubnetPoolV2Read(d, meta)
}
Expand Down Expand Up @@ -207,6 +223,7 @@ func resourceNetworkingSubnetPoolV2Read(d *schema.ResourceData, meta interface{}
d.Set("description", s.Description)
d.Set("revision_number", s.RevisionNumber)
d.Set("region", GetRegion(d, config))
d.Set("tags", s.Tags)

if err := d.Set("prefixes", s.Prefixes); err != nil {
log.Printf("[WARN] unable to set prefixes: %s", err)
Expand Down Expand Up @@ -275,6 +292,16 @@ func resourceNetworkingSubnetPoolV2Update(d *schema.ResourceData, meta interface
return fmt.Errorf("Error updating OpenStack Neutron Subnetpool: %s", err)
}

if d.HasChange("tags") {
tags := networkV2AttributesTags(d)
tagOpts := attributestags.ReplaceAllOpts{Tags: tags}
tags, err := attributestags.ReplaceAll(networkingClient, "subnetpools", d.Id(), tagOpts).Extract()
if err != nil {
return fmt.Errorf("Error updating Tags on Subnetpool: %s", err)
}
log.Printf("[DEBUG] Updated Tags = %+v on Subnetpool %+v", tags, d.Id())
}

return resourceNetworkingSubnetPoolV2Read(d, meta)
}

Expand Down
55 changes: 55 additions & 0 deletions openstack/resource_openstack_networking_subnetpool_v2_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,27 @@ func testAccCheckNetworkingV2SubnetPoolPrefixesConsistency(n string, subnetpool
}
}

func TestAccNetworkingV2SubnetPool_tags(t *testing.T) {
var subnetPool subnetpools.SubnetPool

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckNetworkingV2SubnetPoolDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccNetworkingV2SubnetPool_tags,
Check: resource.ComposeTestCheckFunc(
testAccCheckNetworkingV2SubnetPoolExists("openstack_networking_subnetpool_v2.subnetpool_1", &subnetPool),
testAccCheckNetworkingV2Tags(
"openstack_networking_subnetpool_v2.subnetpool_1",
[]string{"a", "b", "c"}),
),
},
},
})
}

const testAccNetworkingV2SubnetPoolBasic = `
resource "openstack_networking_subnetpool_v2" "subnetpool_1" {
name = "subnetpool_1"
Expand All @@ -152,6 +173,40 @@ resource "openstack_networking_subnetpool_v2" "subnetpool_1" {
}
`

const testAccNetworkingV2SubnetPool_tags = `
resource "openstack_networking_subnetpool_v2" "subnetpool_1" {
name = "subnetpool_1"
description = "terraform subnetpool acceptance test"
prefixes = ["10.10.0.0/16", "10.11.11.0/24"]
default_quota = 4
default_prefixlen = 25
min_prefixlen = 24
max_prefixlen = 30
tags = ["a", "b", "c"]
}
`

const testAccNetworkingV2SubnetPool_tags_update = `
resource "openstack_networking_subnetpool_v2" "subnetpool_1" {
name = "subnetpool_1"
description = "terraform subnetpool acceptance test"
prefixes = ["10.10.0.0/16", "10.11.11.0/24"]
default_quota = 4
default_prefixlen = 25
min_prefixlen = 24
max_prefixlen = 30
tags = ["a", "b", "c", "d"]
}
`

const testAccNetworkingV2SubnetPoolPrefixLengths = `
resource "openstack_networking_subnetpool_v2" "subnetpool_1" {
name = "subnetpool_1"
Expand Down
3 changes: 3 additions & 0 deletions website/docs/r/networking_subnetpool_v2.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ The following arguments are supported:

* `value_specs` - (Optional) Map of additional options.

* `tags` - (Optional) A set of string tags for the subnetpool

## Attributes Reference

The following attributes are exported:
Expand All @@ -120,6 +122,7 @@ The following attributes are exported:
* `is_default` - See Argument Reference above.
* `revision_number` - The revision number of the subnetpool.
* `value_specs` - See Argument Reference above.
* `tags` - See Argument Reference above.

## Import

Expand Down

0 comments on commit 90196c3

Please sign in to comment.