Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add must_change_password attribute to rancher2_user resource #1380

Merged
merged 1 commit into from
Aug 7, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/data-sources/user.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ data "rancher2_user" "foo" {
* `name` - (Computed) The user common name (string)
* `annotations` - (Computed) Annotations of the resource (map)
* `enabled` - (Computed) The user is enabled (bool)
* `must_change_password` - (Computed) The user must change password at first login (bool)
* `principal_ids` - (Computed) The user principal IDs (list)
* `labels` - (Computed) Labels of the resource (map)
2 changes: 2 additions & 0 deletions docs/resources/user.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ resource "rancher2_user" "foo" {
username = "foo"
password = "changeme"
enabled = true
must_change_password = true
}
# Create a new rancher2 global_role_binding for User
resource "rancher2_global_role_binding" "foo" {
Expand All @@ -33,6 +34,7 @@ The following arguments are supported:
* `username` - (Required/ForceNew) The user username (string)
* `password` - (Required/ForceNew) The user password (string)
* `name` - (Optional) The user full name (string)
* `must_change_password` - (Optional)The user must change password at first login (bool)
* `annotations` - (Optional/Computed) Annotations for global role binding (map)
* `labels` - (Optional/Computed) Labels for global role binding (map)

Expand Down
4 changes: 4 additions & 0 deletions rancher2/data_source_rancher2_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ func dataSourceRancher2User() *schema.Resource {
Type: schema.TypeBool,
Computed: true,
},
"must_change_password": {
Type: schema.TypeBool,
Computed: true,
},
"is_external": {
Type: schema.TypeBool,
Optional: true,
Expand Down
9 changes: 5 additions & 4 deletions rancher2/resource_rancher2_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,11 @@ func resourceRancher2UserUpdate(d *schema.ResourceData, meta interface{}) error
}

update := map[string]interface{}{
"name": d.Get("name").(string),
"enabled": d.Get("enabled").(bool),
"annotations": toMapString(d.Get("annotations").(map[string]interface{})),
"labels": toMapString(d.Get("labels").(map[string]interface{})),
"name": d.Get("name").(string),
"enabled": d.Get("enabled").(bool),
"must_change_password": d.Get("must_change_password").(bool),
"annotations": toMapString(d.Get("annotations").(map[string]interface{})),
"labels": toMapString(d.Get("labels").(map[string]interface{})),
}

newUser, err := client.User.Update(user, update)
Expand Down
61 changes: 59 additions & 2 deletions rancher2/resource_rancher2_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ const (
)

var (
testAccRancher2User string
testAccRancher2UserUpdate string
testAccRancher2User string
testAccRancher2UserUpdate string
testAccRancher2UserUpdatePasswordReset string
)

func init() {
Expand All @@ -26,6 +27,7 @@ resource "` + testAccRancher2UserType + `" "foo" {
username = "foo"
password = "TestACC123456"
enabled = true
must_change_password = true
}
alegrey91 marked this conversation as resolved.
Show resolved Hide resolved
`
testAccRancher2UserUpdate = `
Expand All @@ -34,8 +36,19 @@ resource "` + testAccRancher2UserType + `" "foo" {
username = "foo"
password = "TestACC1234567"
enabled = false
must_change_password = true
}
`

testAccRancher2UserUpdatePasswordReset = `
resource "` + testAccRancher2UserType + `" "foo" {
name = "Terraform user acceptance test - Updated"
username = "foo"
password = "TestACC1234567"
enabled = true
must_change_password = false
}
`
}

func TestAccRancher2User_basic(t *testing.T) {
Expand All @@ -52,6 +65,7 @@ func TestAccRancher2User_basic(t *testing.T) {
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "name", "Terraform user acceptance test"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "password", "TestACC123456"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "enabled", "true"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "must_change_password", "true"),
),
},
{
Expand All @@ -61,6 +75,48 @@ func TestAccRancher2User_basic(t *testing.T) {
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "name", "Terraform user acceptance test - Updated"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "password", "TestACC1234567"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "enabled", "false"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "must_change_password", "true"),
),
},
{
Config: testAccRancher2User,
Check: resource.ComposeTestCheckFunc(
testAccCheckRancher2UserExists(testAccRancher2UserType+".foo", user),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "name", "Terraform user acceptance test"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "password", "TestACC123456"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "enabled", "true"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "must_change_password", "true"),
),
},
},
})
}

func TestAccRancher2User_passwordReset(t *testing.T) {
var user *managementClient.User

resource.Test(t, resource.TestCase{
Providers: testAccProviders,
CheckDestroy: testAccCheckRancher2UserDestroy,
Steps: []resource.TestStep{
{
Config: testAccRancher2User,
Check: resource.ComposeTestCheckFunc(
testAccCheckRancher2UserExists(testAccRancher2UserType+".foo", user),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "name", "Terraform user acceptance test"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "password", "TestACC123456"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "enabled", "true"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "must_change_password", "true"),
),
},
{
Config: testAccRancher2UserUpdatePasswordReset,
Check: resource.ComposeTestCheckFunc(
testAccCheckRancher2UserExists(testAccRancher2UserType+".foo", user),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "name", "Terraform user acceptance test - Updated (password reset)"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "password", "TestACC1234567"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "enabled", "true"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "must_change_password", "false"),
),
},
{
Expand All @@ -70,6 +126,7 @@ func TestAccRancher2User_basic(t *testing.T) {
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "name", "Terraform user acceptance test"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "password", "TestACC123456"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "enabled", "true"),
resource.TestCheckResourceAttr(testAccRancher2UserType+".foo", "must_change_password", "true"),
),
},
},
Expand Down
5 changes: 5 additions & 0 deletions rancher2/schema_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,11 @@ func userFields() map[string]*schema.Schema {
Optional: true,
Default: true,
},
"must_change_password": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"name": {
Type: schema.TypeString,
Optional: true,
Expand Down
2 changes: 2 additions & 0 deletions rancher2/structure_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ func flattenUser(d *schema.ResourceData, in *managementClient.User) error {
d.SetId(in.ID)
d.Set("username", in.Username)
d.Set("enabled", in.Enabled)
d.Set("must_change_password", in.MustChangePassword)

if len(in.Name) > 0 {
d.Set("name", in.Name)
Expand Down Expand Up @@ -55,6 +56,7 @@ func expandUser(in *schema.ResourceData) *managementClient.User {
obj.Username = in.Get("username").(string)
enabled := in.Get("enabled").(bool)
obj.Enabled = &enabled
obj.MustChangePassword = in.Get("must_change_password").(bool)

if v, ok := in.Get("name").(string); ok && len(v) > 0 {
obj.Name = v
Expand Down
14 changes: 8 additions & 6 deletions rancher2/structure_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ var (

func init() {
testUserConf = &managementClient.User{
Name: "name",
Username: "username",
Enabled: newTrue(),
Name: "name",
Username: "username",
Enabled: newTrue(),
MustChangePassword: *newTrue(),
}
testUserInterface = map[string]interface{}{
"name": "name",
"username": "username",
"enabled": true,
"name": "name",
"username": "username",
"enabled": true,
"must_change_password": true,
}
}

Expand Down