internal/retry/schema.go (73 lines of code) (raw):
package retry
import (
"context"
"github.com/Azure/terraform-provider-azapi/internal/services/myvalidator"
"github.com/hashicorp/terraform-plugin-framework-validators/int64validator"
"github.com/hashicorp/terraform-plugin-framework-validators/listvalidator"
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/float64default"
"github.com/hashicorp/terraform-plugin-framework/resource/schema/int64default"
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
"github.com/hashicorp/terraform-plugin-framework/types"
)
func RetrySchema(ctx context.Context) schema.Attribute {
return schema.SingleNestedAttribute{
Attributes: map[string]schema.Attribute{
"error_message_regex": schema.ListAttribute{
ElementType: types.StringType,
Required: true,
Description: "A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.",
MarkdownDescription: "A list of regular expressions to match against error messages. If any of the regular expressions match, the request will be retried.",
Validators: []validator.List{
listvalidator.ValueStringsAre(myvalidator.StringIsValidRegex()),
listvalidator.UniqueValues(),
listvalidator.SizeAtLeast(1),
},
},
"interval_seconds": schema.Int64Attribute{
Optional: true,
Computed: true,
Description: "The base number of seconds to wait between retries. Default is `10`.",
MarkdownDescription: "The base number of seconds to wait between retries. Default is `10`.",
Validators: []validator.Int64{
int64validator.AtLeast(1),
int64validator.AtMost(120),
},
Default: int64default.StaticInt64(DefaultIntervalSeconds),
},
"max_interval_seconds": schema.Int64Attribute{
Optional: true,
Computed: true,
Description: "The maximum number of seconds to wait between retries. Default is `180`.",
MarkdownDescription: "The maximum number of seconds to wait between retries. Default is `180`.",
Validators: []validator.Int64{
int64validator.AtLeast(1),
int64validator.AtMost(300),
},
Default: int64default.StaticInt64(DefaultMaxIntervalSeconds),
},
"multiplier": schema.Float64Attribute{
Optional: true,
Computed: true,
Description: "The multiplier to apply to the interval between retries. Default is `1.5`.",
MarkdownDescription: "The multiplier to apply to the interval between retries. Default is `1.5`.",
Default: float64default.StaticFloat64(DefaultMultiplier),
},
"randomization_factor": schema.Float64Attribute{
Optional: true,
Computed: true,
Description: "The randomization factor to apply to the interval between retries. The formula for the randomized interval is: `RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])`. Therefore set to zero `0.0` for no randomization. Default is `0.5`.",
MarkdownDescription: "The randomization factor to apply to the interval between retries. The formula for the randomized interval is: `RetryInterval * (random value in range [1 - RandomizationFactor, 1 + RandomizationFactor])`. Therefore set to zero `0.0` for no randomization. Default is `0.5`.",
Default: float64default.StaticFloat64(DefaultRandomizationFactor),
},
},
CustomType: RetryType{
ObjectType: types.ObjectType{
AttrTypes: RetryValue{}.AttributeTypes(ctx),
},
},
Optional: true,
Description: "The retry object supports the following attributes:",
MarkdownDescription: "The retry object supports the following attributes:",
}
}