internal/services/azapi_client_config_data_source.go (84 lines of code) (raw):

package services import ( "context" "fmt" "time" "github.com/Azure/terraform-provider-azapi/internal/clients" "github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts" "github.com/hashicorp/terraform-plugin-framework/datasource" "github.com/hashicorp/terraform-plugin-framework/datasource/schema" "github.com/hashicorp/terraform-plugin-framework/types" ) type ClientConfigDataSourceModel struct { ID types.String `tfsdk:"id"` TenantID types.String `tfsdk:"tenant_id"` SubscriptionID types.String `tfsdk:"subscription_id"` SubscriptionResourceID types.String `tfsdk:"subscription_resource_id"` ObjectID types.String `tfsdk:"object_id"` Timeouts timeouts.Value `tfsdk:"timeouts"` } type ClientConfigDataSource struct { ProviderData *clients.Client } var _ datasource.DataSource = &ClientConfigDataSource{} var _ datasource.DataSourceWithConfigure = &ClientConfigDataSource{} func (r *ClientConfigDataSource) Configure(ctx context.Context, request datasource.ConfigureRequest, response *datasource.ConfigureResponse) { if v, ok := request.ProviderData.(*clients.Client); ok { r.ProviderData = v } } func (r *ClientConfigDataSource) Metadata(ctx context.Context, request datasource.MetadataRequest, response *datasource.MetadataResponse) { response.TypeName = request.ProviderTypeName + "_client_config" } func (r *ClientConfigDataSource) Schema(ctx context.Context, request datasource.SchemaRequest, response *datasource.SchemaResponse) { response.Schema = schema.Schema{ Attributes: map[string]schema.Attribute{ "id": schema.StringAttribute{ Computed: true, }, "tenant_id": schema.StringAttribute{ Computed: true, MarkdownDescription: "The tenant ID. E.g. `00000000-0000-0000-0000-000000000000`", }, "subscription_id": schema.StringAttribute{ Computed: true, MarkdownDescription: "The subscription ID. E.g. `00000000-0000-0000-0000-000000000000`", }, "subscription_resource_id": schema.StringAttribute{ Computed: true, MarkdownDescription: "The resource ID of the subscription. E.g. `/subscriptions/00000000-0000-0000-0000-000000000000`", }, "object_id": schema.StringAttribute{ Computed: true, MarkdownDescription: "The object ID of the identity. E.g. `00000000-0000-0000-0000-000000000000`", }, }, Blocks: map[string]schema.Block{ "timeouts": timeouts.Block(ctx, timeouts.Opts{ Read: true, }), }, } } func (r *ClientConfigDataSource) Read(ctx context.Context, request datasource.ReadRequest, response *datasource.ReadResponse) { var model ClientConfigDataSourceModel if response.Diagnostics.Append(request.Config.Get(ctx, &model)...); response.Diagnostics.HasError() { return } readTimeout, diags := model.Timeouts.Read(ctx, 5*time.Minute) response.Diagnostics.Append(diags...) if response.Diagnostics.HasError() { return } ctx, cancel := context.WithTimeout(ctx, readTimeout) defer cancel() subscriptionId := r.ProviderData.Account.GetSubscriptionId() tenantId := r.ProviderData.Account.GetTenantId() objectId := r.ProviderData.Account.GetObjectId(ctx) model.ID = types.StringValue(fmt.Sprintf("clientConfigs/subscriptionId=%s;tenantId=%s", subscriptionId, tenantId)) model.SubscriptionID = types.StringValue(subscriptionId) model.SubscriptionResourceID = types.StringValue(fmt.Sprintf("/subscriptions/%s", subscriptionId)) model.TenantID = types.StringValue(tenantId) model.ObjectID = types.StringValue(objectId) response.Diagnostics.Append(response.State.Set(ctx, &model)...) }