in internal/services/azapi_resource_id_data_source.go [141:204]
func (r *ResourceIdDataSource) Read(ctx context.Context, request datasource.ReadRequest, response *datasource.ReadResponse) {
var model ResourceIdDataSourceModel
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()
var id parse.ResourceId
if name := model.Name.ValueString(); len(name) != 0 {
buildId, err := parse.NewResourceID(model.Name.ValueString(), model.ParentID.ValueString(), model.Type.ValueString())
if err != nil {
response.Diagnostics.AddError("Invalid configuration", err.Error())
return
}
id = buildId
} else {
buildId, err := parse.ResourceIDWithResourceType(model.ResourceID.ValueString(), model.Type.ValueString())
if err != nil {
response.Diagnostics.AddError("Invalid configuration", err.Error())
return
}
id = buildId
}
model.ID = basetypes.NewStringValue(id.ID())
model.Name = basetypes.NewStringValue(id.Name)
model.ParentID = basetypes.NewStringValue(id.ParentId)
model.ResourceID = basetypes.NewStringValue(id.AzureResourceId)
armId, err := arm.ParseResourceID(id.AzureResourceId)
if id.AzureResourceId == "/" {
armId, err = &arm.ResourceID{
ResourceType: arm.TenantResourceType,
}, nil
}
if err != nil {
response.Diagnostics.AddError("Invalid configuration", err.Error())
return
}
model.ResourceGroupName = basetypes.NewStringValue(armId.ResourceGroupName)
model.SubscriptionID = basetypes.NewStringValue(armId.SubscriptionID)
model.ProviderNamespace = basetypes.NewStringValue(armId.ResourceType.Namespace)
path := id.AzureResourceId
path = strings.TrimPrefix(path, "/")
path = strings.TrimSuffix(path, "/")
components := strings.Split(path, "/")
parts := make(map[string]attr.Value)
for i := 0; i < len(components)-1; i += 2 {
parts[components[i]] = basetypes.NewStringValue(components[i+1])
}
model.Parts = basetypes.NewMapValueMust(types.StringType, parts)
response.Diagnostics.Append(response.State.Set(ctx, &model)...)
}