1.0.0
This commit is contained in:
83
internal/service/cloudapi/kvmvm/input_check.go
Normal file
83
internal/service/cloudapi/kvmvm/input_check.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package kvmvm
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-framework/diag"
|
||||
"github.com/hashicorp/terraform-plugin-framework/types"
|
||||
"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/ic"
|
||||
"repository.basistech.ru/BASIS/terraform-provider-dynamix/internal/service/cloudapi/kvmvm/models"
|
||||
)
|
||||
|
||||
// resourceComputeInputChecks checks if rg_id and image_id are valid.
|
||||
func resourceComputeInputChecks(ctx context.Context, plan *models.ResourceComputeModel, c *decort.DecortClient) diag.Diagnostics {
|
||||
diags := diag.Diagnostics{}
|
||||
|
||||
rgID := uint64(plan.RGID.ValueInt64())
|
||||
tflog.Info(ctx, "resourceComputeInputChecks: exist resource rg", map[string]any{"rg_id": rgID})
|
||||
err := ic.ExistRG(ctx, rgID, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot get info about rg with ID %v", rgID), err.Error())
|
||||
}
|
||||
|
||||
var imageID uint64
|
||||
|
||||
if plan.WithoutBootDisk.IsNull() || !plan.WithoutBootDisk.ValueBool() {
|
||||
if plan.ImageID.IsNull() {
|
||||
diags.AddError(fmt.Sprintf("imageId must be specified if the compute with boot disk is to be created"), "")
|
||||
} else {
|
||||
imageID = uint64(plan.ImageID.ValueInt64())
|
||||
}
|
||||
tflog.Info(ctx, "resourceComputeInputChecks: exist image", map[string]any{"image_id": imageID})
|
||||
err = ic.ExistImage(ctx, imageID, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot get info about image with ID %v", imageID), err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
if !plan.Network.IsNull() {
|
||||
networkList := plan.Network.Elements()
|
||||
for _, elem := range networkList {
|
||||
objVal := elem.(types.Object)
|
||||
elemMap := objVal.Attributes()
|
||||
netType := strings.ToUpper(elemMap["net_type"].(types.String).ValueString())
|
||||
switch netType {
|
||||
case "VINS":
|
||||
vinsId := uint64(elemMap["net_id"].(types.Int64).ValueInt64())
|
||||
err = ic.ExistVins(ctx, vinsId, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot create compute because vins ID %d is not allowed or does not exist", vinsId), err.Error())
|
||||
}
|
||||
case "EXTNET":
|
||||
extNetId := uint64(elemMap["net_id"].(types.Int64).ValueInt64())
|
||||
err = ic.ExistExtNet(ctx, extNetId, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot create compute because extnet ID %d is not allowed or does not exist", extNetId), err.Error())
|
||||
}
|
||||
case "VFNIC":
|
||||
if strings.EqualFold(plan.Driver.ValueString(), "KVM_PPC") {
|
||||
diags.AddError("can't create compute because 'VFNIC' net_type is not allowed for driver 'KVM_PPC'", "")
|
||||
}
|
||||
vfpoolId := uint64(elemMap["net_id"].(types.Int64).ValueInt64())
|
||||
err = ic.ExistVFPool(ctx, vfpoolId, c)
|
||||
if err != nil {
|
||||
diags.AddError(fmt.Sprintf("Cannot create compute because vfpool ID %d is not allowed or does not exist", vfpoolId), err.Error())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if !plan.Pool.IsUnknown() && plan.SepId.IsUnknown() {
|
||||
diags.AddError("sep_id required if pool name enable", "")
|
||||
}
|
||||
|
||||
if plan.WithoutBootDisk.ValueBool() && (!plan.BootDiskSize.IsUnknown() || !plan.Pool.IsUnknown() || !plan.SepId.IsUnknown()) {
|
||||
diags.AddError("pool, boot_disk_size and sep_id should be empty if without_boot_disk is true", "")
|
||||
}
|
||||
|
||||
return diags
|
||||
}
|
||||
Reference in New Issue
Block a user