in teamcity/role.go [247:339]
func (r *roleResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
var plan roleResourceModel
diags := req.Plan.Get(ctx, &plan)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
var oldState roleResourceModel
diags = req.State.Get(ctx, &oldState)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
var newState roleResourceModel
var stateIncluded []types.String
oldState.Included.ElementsAs(ctx, &stateIncluded, false)
var planIncluded []types.String
plan.Included.ElementsAs(ctx, &planIncluded, false)
// items present in old state but missing in a plan -> remove
for _, i := range stateIncluded {
if !contains(planIncluded, i) {
actual, err := r.client.RemoveIncludedRole(plan.Id.ValueString(), i.ValueString())
if err != nil {
resp.Diagnostics.AddError(
"Error removing included role",
"Unexpected error: "+err.Error(),
)
return
}
newState = r.readState(actual)
}
}
// items missing in old state but present in a plan -> add
for _, i := range planIncluded {
if !contains(stateIncluded, i) {
actual, err := r.client.AddIncludedRole(plan.Id.ValueString(), i.ValueString())
if err != nil {
resp.Diagnostics.AddError(
"Error adding included role",
"Unexpected error: "+err.Error(),
)
return
}
newState = r.readState(actual)
}
}
var statePerms []types.String
oldState.Permissions.ElementsAs(ctx, &statePerms, false)
var planPerms []types.String
plan.Permissions.ElementsAs(ctx, &planPerms, false)
// items present in old state but missing in a plan -> remove
for _, i := range statePerms {
if !contains(planPerms, i) {
actual, err := r.client.RemovePermission(plan.Id.ValueString(), i.ValueString())
if err != nil {
resp.Diagnostics.AddError(
"Error removing permission",
"Unexpected error: "+err.Error(),
)
return
}
newState = r.readState(actual)
}
}
// items missing in old state but present in a plan -> add
for _, i := range planPerms {
if !contains(statePerms, i) {
actual, err := r.client.AddPermission(plan.Id.ValueString(), i.ValueString())
if err != nil {
resp.Diagnostics.AddError(
"Error adding permission",
"Unexpected error: "+err.Error(),
)
return
}
newState = r.readState(actual)
}
}
diags = resp.State.Set(ctx, newState)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
}