terraform-provider: validate image and microservice version (#2766)

This commit is contained in:
Adrian Stobbe 2023-12-22 10:24:13 +01:00 committed by GitHub
parent 519efe637d
commit 436e7c6d3b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 128 additions and 13 deletions

View file

@ -722,20 +722,11 @@ func (r *ClusterResource) apply(ctx context.Context, data *ClusterResourceModel,
}
// parse OS image version
var image imageAttribute
convertDiags = data.Image.As(ctx, &image, basetypes.ObjectAsOptions{})
image, imageSemver, convertDiags := r.getImageVersion(ctx, data)
diags.Append(convertDiags...)
if diags.HasError() {
return diags
}
imageSemver, err := semver.New(image.Version)
if err != nil {
diags.AddAttributeError(
path.Root("image").AtName("version"),
"Invalid image version",
fmt.Sprintf("Parsing image version (%s): %s", image.Version, err))
return diags
}
// parse license ID
licenseID := data.LicenseID.ValueString()
@ -948,6 +939,29 @@ func (r *ClusterResource) apply(ctx context.Context, data *ClusterResourceModel,
return diags
}
func (r *ClusterResource) getImageVersion(ctx context.Context, data *ClusterResourceModel) (imageAttribute, semver.Semver, diag.Diagnostics) {
var image imageAttribute
diags := data.Image.As(ctx, &image, basetypes.ObjectAsOptions{})
if diags.HasError() {
return imageAttribute{}, semver.Semver{}, diags
}
imageSemver, err := semver.New(image.Version)
if err != nil {
diags.AddAttributeError(
path.Root("image").AtName("version"),
"Invalid image version",
fmt.Sprintf("Parsing image version (%s): %s", image.Version, err))
return imageAttribute{}, semver.Semver{}, diags
}
if err := compatibility.BinaryWith(r.providerData.Version.String(), imageSemver.String()); err != nil {
diags.AddAttributeError(
path.Root("image").AtName("version"),
"Invalid image version",
fmt.Sprintf("Image version (%s) incompatible with provider version (%s): %s", image.Version, r.providerData.Version.String(), err))
}
return image, imageSemver, diags
}
// initRPCPayload groups the data required to run the init RPC.
type initRPCPayload struct {
csp cloudprovider.Provider // cloud service provider the cluster runs on.
@ -1178,6 +1192,12 @@ func (r *ClusterResource) getMicroserviceVersion(ctx context.Context, data *Clus
tflog.Info(ctx, fmt.Sprintf("No Microservice version specified. Using default version %s.", r.providerData.Version))
ver = r.providerData.Version
}
if err := config.ValidateMicroserviceVersion(r.providerData.Version, ver); err != nil {
diags.AddAttributeError(
path.Root("constellation_microservice_version"),
"Invalid microservice version",
fmt.Sprintf("Microservice version (%s) incompatible with provider version (%s): %s", ver, r.providerData.Version, err))
}
return ver, diags
}