func resourceSecurityUserPut()

in internal/elasticsearch/security/user.go [108:161]


func resourceSecurityUserPut(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
	client, diags := clients.NewApiClientFromSDKResource(d, meta)
	if diags.HasError() {
		return diags
	}
	usernameId := d.Get("username").(string)
	id, diags := client.ID(ctx, usernameId)
	if diags.HasError() {
		return diags
	}

	var user models.User
	user.Username = usernameId

	if v, ok := d.GetOk("password"); ok && d.HasChange("password") {
		password := v.(string)
		user.Password = &password
	}
	if v, ok := d.GetOk("password_hash"); ok && d.HasChange("password_hash") {
		pass_hash := v.(string)
		user.PasswordHash = &pass_hash
	}

	if v, ok := d.GetOk("email"); ok {
		user.Email = v.(string)
	}
	if v, ok := d.GetOk("full_name"); ok {
		user.FullName = v.(string)
	}
	user.Enabled = d.Get("enabled").(bool)

	roles := make([]string, 0)
	if v, ok := d.GetOk("roles"); ok {
		for _, role := range v.(*schema.Set).List() {
			roles = append(roles, role.(string))
		}
	}
	user.Roles = roles

	if v, ok := d.GetOk("metadata"); ok {
		metadata := make(map[string]interface{})
		if err := json.NewDecoder(strings.NewReader(v.(string))).Decode(&metadata); err != nil {
			return diag.FromErr(err)
		}
		user.Metadata = metadata
	}

	if diags := elasticsearch.PutUser(ctx, client, &user); diags.HasError() {
		return diags
	}

	d.SetId(id.String())
	return resourceSecurityUserRead(ctx, d, meta)
}