diff --git a/openstack/resource_openstack_networking_subnetpool_v2.go b/openstack/resource_openstack_networking_subnetpool_v2.go index 6771cd077..e0b6a425b 100644 --- a/openstack/resource_openstack_networking_subnetpool_v2.go +++ b/openstack/resource_openstack_networking_subnetpool_v2.go @@ -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" ) @@ -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}, + }, }, } } @@ -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) } @@ -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) @@ -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) } diff --git a/openstack/resource_openstack_networking_subnetpool_v2_test.go b/openstack/resource_openstack_networking_subnetpool_v2_test.go index 1b42012f3..93ef5d6f7 100644 --- a/openstack/resource_openstack_networking_subnetpool_v2_test.go +++ b/openstack/resource_openstack_networking_subnetpool_v2_test.go @@ -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" @@ -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" diff --git a/website/docs/r/networking_subnetpool_v2.html.markdown b/website/docs/r/networking_subnetpool_v2.html.markdown index 5444dbdb1..f4bd2c65e 100644 --- a/website/docs/r/networking_subnetpool_v2.html.markdown +++ b/website/docs/r/networking_subnetpool_v2.html.markdown @@ -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: @@ -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