internal/alzvalidators/armResourceId.go (32 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. package alzvalidators import ( "context" "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" "github.com/hashicorp/terraform-plugin-framework-validators/helpers/validatordiag" "github.com/hashicorp/terraform-plugin-framework/schema/validator" ) var _ validator.String = armResourceIdValidator{} // armResourceIdValidator validates that a string Attribute's value matches the specified regular expression. type armResourceIdValidator struct{} // Description describes the validation in plain text formatting. func (validator armResourceIdValidator) Description(_ context.Context) string { return "Value must be an ARM resource id" } // MarkdownDescription describes the validation in Markdown formatting. func (validator armResourceIdValidator) MarkdownDescription(ctx context.Context) string { return validator.Description(ctx) } // Validate performs the validation. func (v armResourceIdValidator) ValidateString(ctx context.Context, request validator.StringRequest, response *validator.StringResponse) { if request.ConfigValue.IsNull() || request.ConfigValue.IsUnknown() { return } value := request.ConfigValue.ValueString() _, err := arm.ParseResourceID(value) if err != nil { response.Diagnostics.Append(validatordiag.InvalidAttributeValueMatchDiagnostic( request.Path, v.Description(ctx), value, )) } } // ArmResourceId returns an AttributeValidator which ensures that any configured // attribute value: // // - Is a valid ARM resource id // // Null (unconfigured) and unknown (known after apply) values are skipped. func ArmResourceId() validator.String { return armResourceIdValidator{} }