internal/elasticsearch/security/api_key/read.go (56 lines of code) (raw):
package api_key
import (
"context"
"github.com/elastic/terraform-provider-elasticstack/internal/clients"
"github.com/elastic/terraform-provider-elasticstack/internal/clients/elasticsearch"
"github.com/elastic/terraform-provider-elasticstack/internal/utils"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/resource"
)
func (r *Resource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
var stateModel tfModel
resp.Diagnostics.Append(req.State.Get(ctx, &stateModel)...)
if resp.Diagnostics.HasError() {
return
}
client, diags := clients.MaybeNewApiClientFromFrameworkResource(ctx, stateModel.ElasticsearchConnection, r.client)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
finalModel, diags := r.read(ctx, client, stateModel)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
if finalModel == nil {
resp.State.RemoveResource(ctx)
return
}
resp.Diagnostics.Append(resp.State.Set(ctx, *finalModel)...)
if resp.Diagnostics.HasError() {
return
}
resp.Diagnostics.Append(r.saveClusterVersion(ctx, client, resp.Private)...)
}
func (r *Resource) read(ctx context.Context, client *clients.ApiClient, model tfModel) (*tfModel, diag.Diagnostics) {
var diags diag.Diagnostics
compId, diags := model.GetID()
if diags.HasError() {
return nil, diags
}
apiKey, diags := elasticsearch.GetApiKey(client, compId.ResourceId)
if diags.HasError() {
return nil, diags
}
if apiKey == nil {
return nil, nil
}
version, sdkDiags := client.ServerVersion(ctx)
diags = utils.FrameworkDiagsFromSDK(sdkDiags)
if diags.HasError() {
return nil, diags
}
diags.Append(model.populateFromAPI(*apiKey, version)...)
return &model, diags
}