in teamcity/pool_resource.go [159:214]
func (r *poolResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
// get current state
var state models.PoolDataModel
diags := req.State.Get(ctx, &state)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
// get refreshed pool
pool, err := r.client.GetPool(state.Name.ValueString())
if err != nil && errors.Is(err, context.DeadlineExceeded) {
resp.Diagnostics.AddError(
"Agent Pool not found: Timeout",
err.Error(),
)
return
}
if err != nil {
resp.Diagnostics.AddAttributeError(
path.Root("name"),
"Agent Pool not found",
"Cannot get an Agent Pool since there is no Agent Pool with the provided name.",
)
return
}
// refresh state to reflect resource not found
if pool == nil {
resp.State.RemoveResource(ctx)
return
}
// overwrite with refreshed state
state = models.PoolDataModel{
Name: types.StringValue(string(pool.Name)),
Size: pool.GetSize(),
Id: types.Int64Value(int64(*(pool.Id))),
Projects: types.SetNull(types.StringType),
}
if pool.Projects != nil {
state.Projects, diags = types.SetValue(types.StringType, getProjectsAttrValue(pool.Projects.Project))
if diags.HasError() {
return
}
}
// set state
diags = resp.State.Set(ctx, &state)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
}