Skip to content

Commit f50d0a8

Browse files
* Add Project Tags * Tidy and vendor depencencies Run go mod tidy, go mod vendor. * Use expandToStringSlice for project tags Remove openstack/identity_project_v3.go and use common expandToStringSlice function for project tags. * Docs: add project tags Add "tags" to identity_project_v3 resource and datasource docs. Co-authored-by: Andrei Ozerov <andrei.ozerov92@gmail.com>
1 parent 3f13f7f commit f50d0a8

34 files changed

Lines changed: 7441 additions & 139 deletions

‎openstack/data_source_openstack_identity_project_v3.go‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ func dataSourceIdentityProjectV3() *schema.Resource {
5454
Type: schema.TypeString,
5555
Optional: true,
5656
},
57+
58+
"tags": {
59+
Type: schema.TypeSet,
60+
Computed: true,
61+
Elem: &schema.Schema{Type: schema.TypeString},
62+
Set: schema.HashString,
63+
},
5764
},
5865
}
5966
}
@@ -151,6 +158,7 @@ func dataSourceIdentityProjectV3Attributes(d *schema.ResourceData, project *proj
151158
d.Set("enabled", project.Enabled)
152159
d.Set("name", project.Name)
153160
d.Set("parent_id", project.ParentID)
161+
d.Set("tags", project.Tags)
154162

155163
return nil
156164
}

‎openstack/data_source_openstack_identity_project_v3_test.go‎

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import (
1212
func TestAccOpenStackIdentityV3ProjectDataSource_basic(t *testing.T) {
1313
projectName := fmt.Sprintf("tf_test_%s", acctest.RandString(5))
1414
projectDescription := acctest.RandString(20)
15+
projectTag1 := acctest.RandString(20)
16+
projectTag2 := acctest.RandString(20)
1517

1618
resource.Test(t, resource.TestCase{
1719
PreCheck: func() {
@@ -21,10 +23,10 @@ func TestAccOpenStackIdentityV3ProjectDataSource_basic(t *testing.T) {
2123
Providers: testAccProviders,
2224
Steps: []resource.TestStep{
2325
{
24-
Config: testAccOpenStackIdentityProjectV3DataSource_project(projectName, projectDescription),
26+
Config: testAccOpenStackIdentityProjectV3DataSource_project(projectName, projectDescription, projectTag1, projectTag2),
2527
},
2628
{
27-
Config: testAccOpenStackIdentityProjectV3DataSource_basic(projectName, projectDescription),
29+
Config: testAccOpenStackIdentityProjectV3DataSource_basic(projectName, projectDescription, projectTag1, projectTag2),
2830
Check: resource.ComposeTestCheckFunc(
2931
testAccCheckIdentityV3ProjectDataSourceID("data.openstack_identity_project_v3.project_1"),
3032
resource.TestCheckResourceAttr(
@@ -35,6 +37,8 @@ func TestAccOpenStackIdentityV3ProjectDataSource_basic(t *testing.T) {
3537
"openstack_identity_project_v3.project_1", "enabled", "true"),
3638
resource.TestCheckResourceAttr(
3739
"openstack_identity_project_v3.project_1", "is_domain", "false"),
40+
resource.TestCheckResourceAttr(
41+
"openstack_identity_project_v3.project_1", "tags.#", "2"),
3842
),
3943
},
4044
},
@@ -56,21 +60,22 @@ func testAccCheckIdentityV3ProjectDataSourceID(n string) resource.TestCheckFunc
5660
}
5761
}
5862

59-
func testAccOpenStackIdentityProjectV3DataSource_project(name, description string) string {
63+
func testAccOpenStackIdentityProjectV3DataSource_project(name, description, tag1, tag2 string) string {
6064
return fmt.Sprintf(`
6165
resource "openstack_identity_project_v3" "project_1" {
6266
name = "%s"
6367
description = "%s"
68+
tags = ["%s", "%s"]
6469
}
65-
`, name, description)
70+
`, name, description, tag1, tag2)
6671
}
6772

68-
func testAccOpenStackIdentityProjectV3DataSource_basic(name, description string) string {
73+
func testAccOpenStackIdentityProjectV3DataSource_basic(name, description, tag1, tag2 string) string {
6974
return fmt.Sprintf(`
7075
%s
7176
7277
data "openstack_identity_project_v3" "project_1" {
7378
name = "${openstack_identity_project_v3.project_1.name}"
7479
}
75-
`, testAccOpenStackIdentityProjectV3DataSource_project(name, description))
80+
`, testAccOpenStackIdentityProjectV3DataSource_project(name, description, tag1, tag2))
7681
}

‎openstack/data_source_openstack_identity_user_v3_test.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func testAccOpenStackIdentityUserV3DataSource_user(name, password string) string
9393
password = "%s"
9494
default_project_id = "${openstack_identity_project_v3.project_1.id}"
9595
}
96-
`, testAccOpenStackIdentityProjectV3DataSource_project(fmt.Sprintf("%s_project", name), acctest.RandString(20)), name, password)
96+
`, testAccOpenStackIdentityProjectV3DataSource_project(fmt.Sprintf("%s_project", name), acctest.RandString(20), "tag1", "tag2"), name, password)
9797
}
9898

9999
func testAccOpenStackIdentityUserV3DataSource_basic(name, password string) string {

‎openstack/resource_openstack_identity_project_v3.go‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ func resourceIdentityProjectV3() *schema.Resource {
5858
Optional: true,
5959
Computed: true,
6060
},
61+
62+
"tags": {
63+
Type: schema.TypeSet,
64+
Optional: true,
65+
Elem: &schema.Schema{Type: schema.TypeString},
66+
Set: schema.HashString,
67+
},
6168
},
6269
}
6370
}
@@ -80,6 +87,11 @@ func resourceIdentityProjectV3Create(d *schema.ResourceData, meta interface{}) e
8087
ParentID: d.Get("parent_id").(string),
8188
}
8289

90+
if v, ok := d.GetOk("tags"); ok {
91+
tags := v.(*schema.Set).List()
92+
createOpts.Tags = expandToStringSlice(tags)
93+
}
94+
8395
log.Printf("[DEBUG] openstack_identity_project_v3 create options: %#v", createOpts)
8496
project, err := projects.Create(identityClient, createOpts).Extract()
8597
if err != nil {
@@ -112,6 +124,7 @@ func resourceIdentityProjectV3Read(d *schema.ResourceData, meta interface{}) err
112124
d.Set("name", project.Name)
113125
d.Set("parent_id", project.ParentID)
114126
d.Set("region", GetRegion(d, config))
127+
d.Set("tags", project.Tags)
115128

116129
return nil
117130
}
@@ -159,6 +172,17 @@ func resourceIdentityProjectV3Update(d *schema.ResourceData, meta interface{}) e
159172
updateOpts.Description = &description
160173
}
161174

175+
if d.HasChange("tags") {
176+
hasChange = true
177+
if v, ok := d.GetOk("tags"); ok {
178+
tags := v.(*schema.Set).List()
179+
tagsToUpdate := expandToStringSlice(tags)
180+
updateOpts.Tags = &tagsToUpdate
181+
} else {
182+
updateOpts.Tags = &[]string{}
183+
}
184+
}
185+
162186
if hasChange {
163187
_, err := projects.Update(identityClient, d.Id(), updateOpts).Extract()
164188
if err != nil {

‎openstack/resource_openstack_identity_project_v3_test.go‎

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ func TestAccIdentityV3Project_basic(t *testing.T) {
5353
"openstack_identity_project_v3.project_1", "enabled", "false"),
5454
resource.TestCheckResourceAttr(
5555
"openstack_identity_project_v3.project_1", "is_domain", "false"),
56+
resource.TestCheckResourceAttr(
57+
"openstack_identity_project_v3.project_1", "tags.#", "2"),
58+
resource.TestCheckResourceAttr(
59+
"openstack_identity_project_v3.project_1", "tags.1", "tag1"),
60+
resource.TestCheckResourceAttr(
61+
"openstack_identity_project_v3.project_1", "tags.2", "tag2"),
5662
),
5763
},
5864
},
@@ -126,7 +132,8 @@ func testAccIdentityV3Project_update(projectName string) string {
126132
resource "openstack_identity_project_v3" "project_1" {
127133
name = "%s"
128134
description = "Some project"
129-
enabled = false
135+
enabled = false
136+
tags = ["tag1","tag2"]
130137
}
131138
`, projectName)
132139
}

0 commit comments

Comments
 (0)