From 579436664598ee32c65b0b2db217aa364bf7d01a Mon Sep 17 00:00:00 2001 From: Thomas Krahn Date: Sat, 4 Jul 2020 15:42:37 +0200 Subject: [PATCH] Fix #10, #63 and #68 --- nexus/resource_role.go | 37 +++++++++++++++++++++++-------------- nexus/resource_role_test.go | 7 +++---- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/nexus/resource_role.go b/nexus/resource_role.go index 3b0db7c2..7c6639bc 100644 --- a/nexus/resource_role.go +++ b/nexus/resource_role.go @@ -1,6 +1,8 @@ package nexus import ( + "strings" + nexus "github.com/datadrivers/go-nexus-client" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" ) @@ -34,15 +36,25 @@ func resourceRole() *schema.Resource { }, "privileges": { Description: "The privileges of this role.", - Elem: &schema.Schema{Type: schema.TypeString}, - Optional: true, - Type: schema.TypeList, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Optional: true, + Set: func(v interface{}) int { + return schema.HashString(strings.ToLower(v.(string))) + }, + Type: schema.TypeSet, }, "roles": { Description: "The roles of this role.", - Elem: &schema.Schema{Type: schema.TypeString}, - Optional: true, - Type: schema.TypeList, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Optional: true, + Set: func(v interface{}) int { + return schema.HashString(strings.ToLower(v.(string))) + }, + Type: schema.TypeSet, }, }, } @@ -53,15 +65,14 @@ func getRoleFromResourceData(d *schema.ResourceData) nexus.Role { ID: d.Get("roleid").(string), Name: d.Get("name").(string), Description: d.Get("description").(string), - Privileges: resourceDataStringSlice(d, "privileges"), - Roles: resourceDataStringSlice(d, "roles"), + Privileges: interfaceSliceToStringSlice(d.Get("privileges").(*schema.Set).List()), + Roles: interfaceSliceToStringSlice(d.Get("roles").(*schema.Set).List()), } } func resourceRoleCreate(d *schema.ResourceData, m interface{}) error { nexusClient := m.(nexus.Client) role := getRoleFromResourceData(d) - if err := nexusClient.RoleCreate(role); err != nil { return err } @@ -96,11 +107,9 @@ func resourceRoleUpdate(d *schema.ResourceData, m interface{}) error { nexusClient := m.(nexus.Client) roleID := d.Get("roleid").(string) - if d.HasChange("name") || d.HasChange("description") || d.HasChange("privileges") || d.HasChange("roles") { - role := getRoleFromResourceData(d) - if err := nexusClient.RoleUpdate(roleID, role); err != nil { - return err - } + role := getRoleFromResourceData(d) + if err := nexusClient.RoleUpdate(roleID, role); err != nil { + return err } return resourceRoleRead(d, m) diff --git a/nexus/resource_role_test.go b/nexus/resource_role_test.go index d3285e74..f95a693c 100644 --- a/nexus/resource_role_test.go +++ b/nexus/resource_role_test.go @@ -2,6 +2,7 @@ package nexus import ( "fmt" + "strconv" "strings" "testing" @@ -31,10 +32,8 @@ func TestAccRoleBasic(t *testing.T) { resource.TestCheckResourceAttr("nexus_role.acceptance", "name", roleName), resource.TestCheckResourceAttr("nexus_role.acceptance", "roleid", roleID), resource.TestCheckResourceAttr("nexus_role.acceptance", "description", roleDescription), - resource.TestCheckResourceAttr("nexus_role.acceptance", "roles.#", "1"), - resource.TestCheckResourceAttr("nexus_role.acceptance", "roles.0", roleRoles[0]), - resource.TestCheckResourceAttr("nexus_role.acceptance", "privileges.#", "1"), - resource.TestCheckResourceAttr("nexus_role.acceptance", "privileges.0", rolePrivileges[0]), + resource.TestCheckResourceAttr("nexus_role.acceptance", "privileges.#", strconv.Itoa(len(rolePrivileges))), + resource.TestCheckResourceAttr("nexus_role.acceptance", "roles.#", strconv.Itoa(len(roleRoles))), ), }, {