in internal/provider/sdk/resource_gitlab_group.go [747:898]
func resourceGitlabGroupUpdate(ctx context.Context, d *schema.ResourceData, meta any) diag.Diagnostics {
client := meta.(*gitlab.Client)
options := &gitlab.UpdateGroupOptions{}
if d.HasChange("name") {
options.Name = gitlab.Ptr(d.Get("name").(string))
}
if d.HasChange("path") {
options.Path = gitlab.Ptr(d.Get("path").(string))
}
if d.HasChange("default_branch") {
options.DefaultBranch = gitlab.Ptr(d.Get("default_branch").(string))
}
if d.HasChange("description") {
options.Description = gitlab.Ptr(d.Get("description").(string))
}
if d.HasChange("lfs_enabled") {
options.LFSEnabled = gitlab.Ptr(d.Get("lfs_enabled").(bool))
}
if d.HasChange("request_access_enabled") {
options.RequestAccessEnabled = gitlab.Ptr(d.Get("request_access_enabled").(bool))
}
// Always set visibility ; workaround for
// https://gitlab.com/gitlab-org/gitlab-foss/-/issues/38459
if v, ok := d.GetOk("visibility_level"); ok {
options.Visibility = stringToVisibilityLevel(v.(string))
}
if d.HasChange("project_creation_level") {
options.ProjectCreationLevel = stringToProjectCreationLevel(d.Get("project_creation_level").(string))
}
if d.HasChange("subgroup_creation_level") {
options.SubGroupCreationLevel = stringToSubGroupCreationLevel(d.Get("subgroup_creation_level").(string))
}
if d.HasChange("require_two_factor_authentication") {
options.RequireTwoFactorAuth = gitlab.Ptr(d.Get("require_two_factor_authentication").(bool))
}
if d.HasChange("two_factor_grace_period") {
options.TwoFactorGracePeriod = gitlab.Ptr(d.Get("two_factor_grace_period").(int))
}
if d.HasChange("auto_devops_enabled") {
options.AutoDevopsEnabled = gitlab.Ptr(d.Get("auto_devops_enabled").(bool))
}
if d.HasChange("emails_enabled") {
options.EmailsEnabled = gitlab.Ptr(d.Get("emails_enabled").(bool))
}
if d.HasChange("mentions_disabled") {
options.MentionsDisabled = gitlab.Ptr(d.Get("mentions_disabled").(bool))
}
if d.HasChange("share_with_group_lock") {
options.ShareWithGroupLock = gitlab.Ptr(d.Get("share_with_group_lock").(bool))
}
if d.HasChange("default_branch_protection") {
// nolint:staticcheck // SA1019 ignore deprecated DefaultBranchProtection
options.DefaultBranchProtection = gitlab.Ptr(d.Get("default_branch_protection").(int))
}
if d.HasChange("default_branch_protection_defaults.0") {
options.DefaultBranchProtectionDefaults = gitlab.Ptr(expandDefaultBranchProtectionDefaults(d))
}
if d.HasChange("prevent_forking_outside_group") {
options.PreventForkingOutsideGroup = gitlab.Ptr(d.Get("prevent_forking_outside_group").(bool))
}
if d.HasChange("membership_lock") {
options.MembershipLock = gitlab.Ptr(d.Get("membership_lock").(bool))
}
if d.HasChange("extra_shared_runners_minutes_limit") {
options.ExtraSharedRunnersMinutesLimit = gitlab.Ptr(d.Get("extra_shared_runners_minutes_limit").(int))
}
if d.HasChange("shared_runners_minutes_limit") {
options.SharedRunnersMinutesLimit = gitlab.Ptr(d.Get("shared_runners_minutes_limit").(int))
}
if d.HasChange("ip_restriction_ranges") {
options.IPRestrictionRanges = stringListToCommaSeparatedString(d.Get("ip_restriction_ranges").([]any))
}
if d.HasChange("allowed_email_domains_list") {
options.AllowedEmailDomainsList = stringListToCommaSeparatedString(d.Get("allowed_email_domains_list").([]any))
}
avatar, err := handleAvatarOnUpdate(d)
if err != nil {
return diag.FromErr(err)
}
if avatar != nil {
options.Avatar = &gitlab.GroupAvatar{
Filename: avatar.Filename,
Image: avatar.Image,
}
}
if d.HasChange("wiki_access_level") {
options.WikiAccessLevel = stringToAccessControlValue(d.Get("wiki_access_level").(string))
}
if d.HasChange("shared_runners_setting") {
options.SharedRunnersSetting = stringToSharedRunnersSetting(d.Get("shared_runners_setting").(string))
}
tflog.Debug(ctx, "update gitlab group", map[string]any{
"group_id": d.Id(),
"options": fmt.Sprintf("%+v", options),
})
_, _, err = client.Groups.UpdateGroup(d.Id(), options, gitlab.WithContext(ctx))
if err != nil {
return diag.FromErr(err)
}
if d.HasChange("parent_id") {
err = transferSubGroup(ctx, d, client)
if err != nil {
return diag.FromErr(err)
}
}
if d.HasChange("push_rules") {
err := editOrAddGroupPushRules(ctx, client, d.Id(), d)
if err != nil {
if api.Is404(err) {
tflog.Error(ctx, "[ERROR] Failed to edit push rules for group", map[string]any{
"group_id": d.Id(),
"error": err,
})
return diag.Errorf("Group push rules are not supported in your version of GitLab")
}
return diag.Errorf("Failed to edit push rules for group %q: %s", d.Id(), err)
}
}
return resourceGitlabGroupRead(ctx, d, meta)
}