1.0.0
This commit is contained in:
99
internal/service/cloudapi/disks/input_checks.go
Normal file
99
internal/service/cloudapi/disks/input_checks.go
Normal file
@@ -0,0 +1,99 @@
|
||||
package disks
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-framework/diag"
|
||||
"github.com/hashicorp/terraform-plugin-log/tflog"
|
||||
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/disks/models"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/ic"
|
||||
)
|
||||
|
||||
// resourceDiskCreateInputChecks checks if user provided account_id and gid exist on the platform during disk creation.
|
||||
func resourceDiskCreateInputChecks(ctx context.Context, plan *models.ResourceDiskModel, c *decort.DecortClient) diag.Diagnostics {
|
||||
diags := diag.Diagnostics{}
|
||||
|
||||
accountId := uint64(plan.AccountID.ValueInt64())
|
||||
tflog.Info(ctx, "resourceDiskCreateInputChecks: exist account check", map[string]any{"account_id": accountId})
|
||||
err := ic.ExistAccount(ctx, accountId, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot get info about account with ID %v", accountId), err.Error())
|
||||
}
|
||||
|
||||
gid := uint64(plan.GID.ValueInt64())
|
||||
tflog.Info(ctx, "resourceDiskCreateInputChecks: exist gid check", map[string]any{"gid": gid})
|
||||
err = ic.ExistGID(ctx, gid, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot get info about GID %v", gid), err.Error())
|
||||
}
|
||||
return diags
|
||||
}
|
||||
|
||||
// resourceDiskReplicationInputChecks checks if user provided disk_id exist on the platform during disk replication.
|
||||
func resourceDiskReplicationInputChecks(ctx context.Context, plan *models.ResourceRecordDiskReplicationModel, c *decort.DecortClient) diag.Diagnostics {
|
||||
diags := diag.Diagnostics{}
|
||||
|
||||
diskId := uint64(plan.DiskId.ValueInt64())
|
||||
tflog.Info(ctx, "resourceDiskCreateInputChecks: exist disk check", map[string]any{"disk_id": diskId})
|
||||
err := ic.ExistDiskID(ctx, diskId, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot get info about disk with ID %v", diskId), err.Error())
|
||||
}
|
||||
|
||||
return diags
|
||||
|
||||
}
|
||||
|
||||
// resourceDiskUpdateInputChecks checks if user provided:
|
||||
// account_id and gid exist on the platform during disk creation,
|
||||
// description, pool, sep_id, type are not attempted to be changed.
|
||||
func resourceDiskUpdateInputChecks(ctx context.Context, plan, state *models.ResourceDiskModel, c *decort.DecortClient) diag.Diagnostics {
|
||||
diags := diag.Diagnostics{}
|
||||
|
||||
// check accountId and gid
|
||||
diags.Append(resourceDiskCreateInputChecks(ctx, plan, c)...)
|
||||
|
||||
// check description
|
||||
if !plan.Description.Equal(state.Description) && !plan.Description.IsUnknown() {
|
||||
diags.AddError(
|
||||
"resourceDiskUpdateInputChecks: description change is not allowed",
|
||||
fmt.Sprintf("cannot change description from %s to %s for disk id %s",
|
||||
state.Description.ValueString(),
|
||||
plan.Description.ValueString(),
|
||||
plan.Id.ValueString()))
|
||||
}
|
||||
|
||||
// check pool
|
||||
if !plan.Pool.Equal(state.Pool) && !plan.Pool.IsUnknown() {
|
||||
diags.AddError(
|
||||
"resourceDiskUpdateInputChecks: pool change is not allowed",
|
||||
fmt.Sprintf("cannot change pool from %s to %s for disk id %s",
|
||||
state.Pool.ValueString(),
|
||||
plan.Pool.ValueString(),
|
||||
plan.Id.ValueString()))
|
||||
}
|
||||
|
||||
// check sep_id
|
||||
if !plan.SEPID.Equal(state.SEPID) && !plan.SEPID.IsUnknown() {
|
||||
diags.AddError(
|
||||
"resourceDiskUpdateInputChecks: sep_id change is not allowed",
|
||||
fmt.Sprintf("cannot change sep_id from %d to %d for disk id %s",
|
||||
state.SEPID.ValueInt64(),
|
||||
plan.SEPID.ValueInt64(),
|
||||
plan.Id.ValueString()))
|
||||
}
|
||||
|
||||
// check type
|
||||
if !plan.Type.Equal(state.Type) && !plan.Type.IsUnknown() {
|
||||
diags.AddError(
|
||||
"resourceDiskUpdateInputChecks: type change is not allowed",
|
||||
fmt.Sprintf("cannot change type from %s to %s for disk id %s",
|
||||
state.Type.ValueString(),
|
||||
plan.Type.ValueString(),
|
||||
plan.Id.ValueString()))
|
||||
}
|
||||
|
||||
return diags
|
||||
}
|
||||
Reference in New Issue
Block a user