Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| db8d13d403 |
34
CHANGELOG.md
34
CHANGELOG.md
@@ -1,8 +1,38 @@
|
|||||||
## Version 4.11.2
|
## Version 4.11.3
|
||||||
|
|
||||||
### Добавлено
|
### Добавлено
|
||||||
|
|
||||||
#### kvmvm
|
#### kvmvm
|
||||||
| Идентификатор<br>задачи | Описание |
|
| Идентификатор<br>задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BATF-1270 | Опциональное поле `iotune` в блоке `disks` в resource `decort_kvmvm` в cloudapi/kvmvm и в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
|
| BATF-1276 | Добавлено опциональное поле `create_blank` в resource `decort_kvmvm` в cloudapi/kvmvm и в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
|
||||||
|
| BATF-1276 | Опциональное поле `alt_boot_id` в resource `decort_kvmvm` в cloudapi/kvmvm |
|
||||||
|
|
||||||
|
### Изменено
|
||||||
|
#### kvmvm
|
||||||
|
| Идентификатор<br>задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BATF-1276 | Тип поля `disk_type` с опционального на вычисляемый в resource `decort_kvmvm` в cloudapi/kvmvm и в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
|
||||||
|
|
||||||
|
### Исправлено
|
||||||
|
|
||||||
|
#### flipgroup
|
||||||
|
| Идентификатор<br>задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BATF-1283 | Установка поля `desc` с платформы в ресурсе `decort_cb_flipgroup` в cloudbroker/flipgroup |
|
||||||
|
|
||||||
|
#### kvmvm
|
||||||
|
| Идентификатор<br>задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BATF-1276 | Ошибка при старте ВМ с указанием поля `alt_boot_id` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
|
||||||
|
|
||||||
|
#### trunk
|
||||||
|
| Идентификатор<br>задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BATF-1285 | Установка полей `account_ids`, `ovs_bridge`, `native_vlan_id`, `trunk_tags` с платформы в ресурсе `decort_cb_trunk ` в cloudbroker/trunk |
|
||||||
|
|
||||||
|
#### vfpool
|
||||||
|
| Идентификатор<br>задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BATF-1289 | Разрешено создавать пул виртуальных функций с блоком `config` при значении поля `enable` равным `false` в resource `decort_cb_vfpool` в cloudbroker/vfpool |
|
||||||
|
| BATF-1289 | Разрешено обновлять поля `name`, `description`, `account_access` и `rg_access` без блока `config` в resource `decort_cb_vfpool` в cloudbroker/vfpool |
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -7,7 +7,7 @@ ZIPDIR = ./zip
|
|||||||
BINARY=${NAME}
|
BINARY=${NAME}
|
||||||
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
|
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
|
||||||
MAINPATH = ./cmd/decort/
|
MAINPATH = ./cmd/decort/
|
||||||
VERSION=4.11.2
|
VERSION=4.11.3
|
||||||
OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
|
OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
|
||||||
|
|
||||||
FILES = ${BINARY}_${VERSION}_darwin_amd64\
|
FILES = ${BINARY}_${VERSION}_darwin_amd64\
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ description: |-
|
|||||||
- `chipset` (String) Type of the emulated system.
|
- `chipset` (String) Type of the emulated system.
|
||||||
- `cloud_init` (String) Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.
|
- `cloud_init` (String) Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.
|
||||||
- `cpu_pin` (Boolean) Run VM on dedicated CPUs. To use this feature, the system must be pre-configured by allocating CPUs on the physical node.
|
- `cpu_pin` (Boolean) Run VM on dedicated CPUs. To use this feature, the system must be pre-configured by allocating CPUs on the physical node.
|
||||||
|
- `create_blank` (Boolean) If True, the compute is created via kvmx86/createBlank endpoint (without OS image). The image_id field is not required in this case.
|
||||||
- `custom_fields` (String)
|
- `custom_fields` (String)
|
||||||
- `description` (String) Optional text description of this compute instance.
|
- `description` (String) Optional text description of this compute instance.
|
||||||
- `detach_disks` (Boolean)
|
- `detach_disks` (Boolean)
|
||||||
@@ -186,7 +187,6 @@ Optional:
|
|||||||
- `blk_discard` (Boolean)
|
- `blk_discard` (Boolean)
|
||||||
- `cache` (String) Setting the disk caching mode
|
- `cache` (String) Setting the disk caching mode
|
||||||
- `desc` (String) Optional description
|
- `desc` (String) Optional description
|
||||||
- `disk_type` (String) The type of disk in terms of its role in compute: 'B=Boot, D=Data'
|
|
||||||
- `image_id` (Number) Specify image id for create disk from template
|
- `image_id` (Number) Specify image id for create disk from template
|
||||||
- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--disks--iotune))
|
- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--disks--iotune))
|
||||||
- `node_ids` (Set of Number)
|
- `node_ids` (Set of Number)
|
||||||
@@ -202,6 +202,7 @@ Read-Only:
|
|||||||
- `delete_time` (Number)
|
- `delete_time` (Number)
|
||||||
- `devicename` (String)
|
- `devicename` (String)
|
||||||
- `disk_id` (Number) Disk ID
|
- `disk_id` (Number) Disk ID
|
||||||
|
- `disk_type` (String) The type of disk in terms of its role in compute: 'B=Boot, D=Data'
|
||||||
- `present_to` (Map of Number)
|
- `present_to` (Map of Number)
|
||||||
- `shareable` (Boolean)
|
- `shareable` (Boolean)
|
||||||
- `size_max` (Number)
|
- `size_max` (Number)
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ description: |-
|
|||||||
|
|
||||||
- `affinity_label` (String) Set affinity label for compute
|
- `affinity_label` (String) Set affinity label for compute
|
||||||
- `affinity_rules` (Block List) (see [below for nested schema](#nestedblock--affinity_rules))
|
- `affinity_rules` (Block List) (see [below for nested schema](#nestedblock--affinity_rules))
|
||||||
|
- `alt_boot_id` (Number) ID of CD-ROM live image to boot
|
||||||
- `anti_affinity_rules` (Block List) (see [below for nested schema](#nestedblock--anti_affinity_rules))
|
- `anti_affinity_rules` (Block List) (see [below for nested schema](#nestedblock--anti_affinity_rules))
|
||||||
- `auto_start_w_node` (Boolean) Flag for start compute after node exits from MAINTENANCE state
|
- `auto_start_w_node` (Boolean) Flag for start compute after node exits from MAINTENANCE state
|
||||||
- `boot_disk_size` (Number) This compute instance boot disk size in GB. Make sure it is large enough to accomodate selected OS image.
|
- `boot_disk_size` (Number) This compute instance boot disk size in GB. Make sure it is large enough to accomodate selected OS image.
|
||||||
@@ -35,6 +36,7 @@ description: |-
|
|||||||
- `chipset` (String) Type of the emulated system.
|
- `chipset` (String) Type of the emulated system.
|
||||||
- `cloud_init` (String) Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.
|
- `cloud_init` (String) Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.
|
||||||
- `cpu_pin` (Boolean) Run VM on dedicated CPUs. To use this feature, the system must be pre-configured by allocating CPUs on the physical node.
|
- `cpu_pin` (Boolean) Run VM on dedicated CPUs. To use this feature, the system must be pre-configured by allocating CPUs on the physical node.
|
||||||
|
- `create_blank` (Boolean) If True, the compute is created via kvmx86/createBlank endpoint (without OS image). The image_id field is not required in this case.
|
||||||
- `custom_fields` (String)
|
- `custom_fields` (String)
|
||||||
- `description` (String) Optional text description of this compute instance.
|
- `description` (String) Optional text description of this compute instance.
|
||||||
- `detach_disks` (Boolean)
|
- `detach_disks` (Boolean)
|
||||||
@@ -177,7 +179,6 @@ Required:
|
|||||||
Optional:
|
Optional:
|
||||||
|
|
||||||
- `desc` (String) Optional description
|
- `desc` (String) Optional description
|
||||||
- `disk_type` (String) The type of disk in terms of its role in compute: 'B=Boot, D=Data'
|
|
||||||
- `image_id` (Number) Specify image id for create disk from template
|
- `image_id` (Number) Specify image id for create disk from template
|
||||||
- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--disks--iotune))
|
- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--disks--iotune))
|
||||||
- `permanently` (Boolean) Disk deletion status
|
- `permanently` (Boolean) Disk deletion status
|
||||||
@@ -194,6 +195,7 @@ Read-Only:
|
|||||||
- `deleted_time` (Number)
|
- `deleted_time` (Number)
|
||||||
- `devicename` (String)
|
- `devicename` (String)
|
||||||
- `disk_id` (Number) Disk ID
|
- `disk_id` (Number) Disk ID
|
||||||
|
- `disk_type` (String) The type of disk in terms of its role in compute: 'B=Boot, D=Data'
|
||||||
- `present_to` (Map of Number)
|
- `present_to` (Map of Number)
|
||||||
- `shareable` (Boolean)
|
- `shareable` (Boolean)
|
||||||
- `size_max` (Number)
|
- `size_max` (Number)
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -9,7 +9,7 @@ require (
|
|||||||
github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1
|
github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1
|
||||||
github.com/sirupsen/logrus v1.9.0
|
github.com/sirupsen/logrus v1.9.0
|
||||||
golang.org/x/net v0.44.0
|
golang.org/x/net v0.44.0
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.13.9
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.13.10
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -318,5 +318,5 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.13.9 h1:jrfwiJBuHbt3JlVwD6DWF3E/H9pyDOJOvb8F5sQ/mhM=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.13.10 h1:aRKyTH3/NSrpCLyLuTwCMtzOBoQ+hQ5EC4emQSnya5k=
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.13.9/go.mod h1:S/f7GxwWcE88eFpORV+I9xqEf8zDW5srQHpG2XQCLZM=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.13.10/go.mod h1:S/f7GxwWcE88eFpORV+I9xqEf8zDW5srQHpG2XQCLZM=
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
return diag.Errorf("resourceComputeCreate: can't create Compute because rgID %d is not allowed or does not exist", d.Get("rg_id").(int))
|
return diag.Errorf("resourceComputeCreate: can't create Compute because rgID %d is not allowed or does not exist", d.Get("rg_id").(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !d.Get("create_blank").(bool) {
|
||||||
hasImage, err := existImageId(ctx, d, m)
|
hasImage, err := existImageId(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -79,6 +80,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if !hasImage {
|
if !hasImage {
|
||||||
return diag.Errorf("resourceComputeCreate: can't create Compute because imageID %d is not allowed or does not exist", d.Get("image_id").(int))
|
return diag.Errorf("resourceComputeCreate: can't create Compute because imageID %d is not allowed or does not exist", d.Get("image_id").(int))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if zoneID, ok := d.GetOk("zone_id"); ok {
|
if zoneID, ok := d.GetOk("zone_id"); ok {
|
||||||
createReqX86.ZoneID = uint64(zoneID.(int))
|
createReqX86.ZoneID = uint64(zoneID.(int))
|
||||||
@@ -294,7 +296,32 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
|
log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
|
||||||
apiResp, err := c.CloudAPI().KVMX86().Create(ctx, createReqX86)
|
var apiResp uint64
|
||||||
|
if d.Get("create_blank").(bool) {
|
||||||
|
log.Debugf("resourceComputeCreate: using createBlank endpoint")
|
||||||
|
createBlankReq := kvmx86.CreateBlankRequest{
|
||||||
|
RGID: createReqX86.RGID,
|
||||||
|
Name: createReqX86.Name,
|
||||||
|
CPU: createReqX86.CPU,
|
||||||
|
RAM: createReqX86.RAM,
|
||||||
|
StoragePolicyID: createReqX86.StoragePolicyID,
|
||||||
|
WithoutBootDisk: createReqX86.WithoutBootDisk,
|
||||||
|
BootDisk: createReqX86.BootDisk,
|
||||||
|
SEPID: createReqX86.SepID,
|
||||||
|
Pool: createReqX86.Pool,
|
||||||
|
DataDisks: createReqX86.DataDisks,
|
||||||
|
Interfaces: createReqX86.Interfaces,
|
||||||
|
Description: createReqX86.Description,
|
||||||
|
Chipset: createReqX86.Chipset,
|
||||||
|
PreferredCPU: createReqX86.PreferredCPU,
|
||||||
|
ZoneID: createReqX86.ZoneID,
|
||||||
|
OSVersion: createReqX86.OSVersion,
|
||||||
|
}
|
||||||
|
apiResp, err = c.CloudAPI().KVMX86().CreateBlank(ctx, createBlankReq)
|
||||||
|
} else {
|
||||||
|
apiResp, err = c.CloudAPI().KVMX86().Create(ctx, createReqX86)
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
@@ -458,6 +485,9 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if start, ok := d.GetOk("started"); ok {
|
if start, ok := d.GetOk("started"); ok {
|
||||||
if start.(bool) {
|
if start.(bool) {
|
||||||
req := compute.StartRequest{ComputeID: computeId}
|
req := compute.StartRequest{ComputeID: computeId}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
req.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
log.Debugf("resourceComputeCreate: starting Compute ID %d after completing its resource configuration", computeId)
|
log.Debugf("resourceComputeCreate: starting Compute ID %d after completing its resource configuration", computeId)
|
||||||
if _, err := c.CloudAPI().Compute().Start(ctx, req); err != nil {
|
if _, err := c.CloudAPI().Compute().Start(ctx, req); err != nil {
|
||||||
warnings.Add(err)
|
warnings.Add(err)
|
||||||
@@ -769,6 +799,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
return diag.Errorf("resourceComputeUpdate: can't update Compute because rgID %d not allowed or does not exist", d.Get("rg_id").(int))
|
return diag.Errorf("resourceComputeUpdate: can't update Compute because rgID %d not allowed or does not exist", d.Get("rg_id").(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !d.Get("create_blank").(bool) {
|
||||||
hasImage, err := existImageId(ctx, d, m)
|
hasImage, err := existImageId(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -777,6 +808,11 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if !hasImage {
|
if !hasImage {
|
||||||
return diag.Errorf("resourceComputeUpdate: can't update Compute because imageID %d not allowed or does not exist", d.Get("image_id").(int))
|
return diag.Errorf("resourceComputeUpdate: can't update Compute because imageID %d not allowed or does not exist", d.Get("image_id").(int))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange("zone_id") {
|
if d.HasChange("zone_id") {
|
||||||
if err := utilityComputeUpdateZoneID(ctx, d, m); err != nil {
|
if err := utilityComputeUpdateZoneID(ctx, d, m); err != nil {
|
||||||
@@ -863,6 +899,9 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if start, ok := d.GetOk("started"); ok {
|
if start, ok := d.GetOk("started"); ok {
|
||||||
if start.(bool) {
|
if start.(bool) {
|
||||||
req := compute.StartRequest{ComputeID: computeRec.ID}
|
req := compute.StartRequest{ComputeID: computeRec.ID}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
req.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
|
|
||||||
if _, err := c.CloudAPI().Compute().Start(ctx, req); err != nil {
|
if _, err := c.CloudAPI().Compute().Start(ctx, req); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -1105,7 +1144,11 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
|
|
||||||
// If used to be STARTED, we need to start it after update
|
// If used to be STARTED, we need to start it after update
|
||||||
if isStopRequired {
|
if isStopRequired {
|
||||||
if _, err := c.CloudAPI().Compute().Start(ctx, compute.StartRequest{ComputeID: computeRec.ID}); err != nil {
|
req := compute.StartRequest{ComputeID: computeRec.ID}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
req.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
|
if _, err := c.CloudAPI().Compute().Start(ctx, req); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1214,9 +1257,6 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if diskConv["sep_id"].(int) != 0 {
|
if diskConv["sep_id"].(int) != 0 {
|
||||||
req.SepID = uint64(diskConv["sep_id"].(int))
|
req.SepID = uint64(diskConv["sep_id"].(int))
|
||||||
}
|
}
|
||||||
if diskConv["disk_type"].(string) != "" {
|
|
||||||
req.DiskType = diskConv["disk_type"].(string)
|
|
||||||
}
|
|
||||||
if diskConv["pool"].(string) != "" {
|
if diskConv["pool"].(string) != "" {
|
||||||
req.Pool = diskConv["pool"].(string)
|
req.Pool = diskConv["pool"].(string)
|
||||||
}
|
}
|
||||||
@@ -1847,6 +1887,9 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
req := compute.StartRequest{
|
req := compute.StartRequest{
|
||||||
ComputeID: computeRec.ID,
|
ComputeID: computeRec.ID,
|
||||||
}
|
}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
req.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
if !isStopRequired {
|
if !isStopRequired {
|
||||||
if _, err := c.CloudAPI().Compute().Start(ctx, req); err != nil {
|
if _, err := c.CloudAPI().Compute().Start(ctx, req); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -2045,8 +2088,6 @@ func disksSubresourceSchemaMake() map[string]*schema.Schema {
|
|||||||
"disk_type": {
|
"disk_type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Optional: true,
|
|
||||||
ValidateFunc: validation.StringInSlice([]string{"B", "D"}, false),
|
|
||||||
Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data'",
|
Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data'",
|
||||||
},
|
},
|
||||||
"pool": {
|
"pool": {
|
||||||
@@ -2353,6 +2394,12 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Default: false,
|
Default: false,
|
||||||
Description: "If True, the imageId, bootDisk, sepId, pool parameters are ignored and the compute is created without a boot disk in the stopped state.",
|
Description: "If True, the imageId, bootDisk, sepId, pool parameters are ignored and the compute is created without a boot disk in the stopped state.",
|
||||||
},
|
},
|
||||||
|
"create_blank": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
Description: "If True, the compute is created via kvmx86/createBlank endpoint (without OS image). The image_id field is not required in this case.",
|
||||||
|
},
|
||||||
"boot_disk_size": {
|
"boot_disk_size": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -2607,6 +2654,11 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Default: false,
|
Default: false,
|
||||||
Description: "Flag for resize compute",
|
Description: "Flag for resize compute",
|
||||||
},
|
},
|
||||||
|
"alt_boot_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "ID of CD-ROM live image to boot",
|
||||||
|
},
|
||||||
"started": {
|
"started": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
|
|||||||
@@ -299,7 +299,13 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
|
|||||||
|
|
||||||
if needStart {
|
if needStart {
|
||||||
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||||
if numErr, err := utilityComputeStart(ctx, computeId, m); err != nil {
|
var altBootID uint64
|
||||||
|
if altBootIDRaw, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
altBootID = uint64(altBootIDRaw)
|
||||||
|
} else {
|
||||||
|
altBootID = 0
|
||||||
|
}
|
||||||
|
if numErr, err := utilityComputeStart(ctx, computeId, altBootID, m); err != nil {
|
||||||
apiErrCount += numErr
|
apiErrCount += numErr
|
||||||
lastSavedError = err
|
lastSavedError = err
|
||||||
}
|
}
|
||||||
@@ -462,9 +468,12 @@ func utilityComputeStop(ctx context.Context, computeID uint64, m interface{}) er
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func utilityComputeStart(ctx context.Context, computeID uint64, m interface{}) (int, error) {
|
func utilityComputeStart(ctx context.Context, computeID uint64, altBootID uint64, m interface{}) (int, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
startReq := compute.StartRequest{ComputeID: computeID}
|
startReq := compute.StartRequest{ComputeID: computeID}
|
||||||
|
if altBootID > 0 {
|
||||||
|
startReq.AltBootID = altBootID
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityComputeNetworksConfigure: starting compute %d", computeID)
|
log.Debugf("utilityComputeNetworksConfigure: starting compute %d", computeID)
|
||||||
_, err := c.CloudAPI().Compute().Start(ctx, startReq)
|
_, err := c.CloudAPI().Compute().Start(ctx, startReq)
|
||||||
|
|||||||
@@ -68,6 +68,34 @@ func flattenFlipgroup(d *schema.ResourceData, flip *flipgroup.RecordFLIPGroup) {
|
|||||||
d.Set("updated_time", flip.UpdatedTime)
|
d.Set("updated_time", flip.UpdatedTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func flattenFlipgroupResource(d *schema.ResourceData, flip *flipgroup.RecordFLIPGroup) {
|
||||||
|
d.Set("flipgroup_id", flip.ID)
|
||||||
|
d.Set("account_id", flip.AccountID)
|
||||||
|
d.Set("account_name", flip.AccountName)
|
||||||
|
d.Set("client_ids", flip.ClientIDs)
|
||||||
|
d.Set("client_names", flip.ClientNames)
|
||||||
|
d.Set("client_type", flip.ClientType)
|
||||||
|
d.Set("conn_id", flip.ConnID)
|
||||||
|
d.Set("conn_type", flip.ConnType)
|
||||||
|
d.Set("created_by", flip.CreatedBy)
|
||||||
|
d.Set("created_time", flip.CreatedTime)
|
||||||
|
d.Set("default_gw", flip.DefaultGW)
|
||||||
|
d.Set("deleted_by", flip.DeletedBy)
|
||||||
|
d.Set("deleted_time", flip.DeletedTime)
|
||||||
|
d.Set("desc", flip.Description)
|
||||||
|
d.Set("gid", flip.GID)
|
||||||
|
d.Set("guid", flip.GUID)
|
||||||
|
d.Set("ip", flip.IP)
|
||||||
|
d.Set("milestones", flip.Milestones)
|
||||||
|
d.Set("name", flip.Name)
|
||||||
|
d.Set("net_id", flip.NetID)
|
||||||
|
d.Set("net_type", flip.NetType)
|
||||||
|
d.Set("network", flip.Network)
|
||||||
|
d.Set("status", flip.Status)
|
||||||
|
d.Set("updated_by", flip.UpdatedBy)
|
||||||
|
d.Set("updated_time", flip.UpdatedTime)
|
||||||
|
}
|
||||||
|
|
||||||
func flattenFlipgroupsList(fg *flipgroup.ListFLIPGroups) []map[string]interface{} {
|
func flattenFlipgroupsList(fg *flipgroup.ListFLIPGroups) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0, len(fg.Data))
|
res := make([]map[string]interface{}, 0, len(fg.Data))
|
||||||
for _, flip := range fg.Data {
|
for _, flip := range fg.Data {
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ func resourceFlipgroupRead(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
return diag.Errorf("The flipgroup status is destroyed and cannot be read.")
|
return diag.Errorf("The flipgroup status is destroyed and cannot be read.")
|
||||||
}
|
}
|
||||||
|
|
||||||
flattenFlipgroup(d, fg)
|
flattenFlipgroupResource(d, fg)
|
||||||
|
|
||||||
log.Debugf("resourceFlipgroupRead: after flattenFlipgroup: flipgroup_id %s, name %s",
|
log.Debugf("resourceFlipgroupRead: after flattenFlipgroup: flipgroup_id %s, name %s",
|
||||||
d.Id(), d.Get("name").(string))
|
d.Id(), d.Get("name").(string))
|
||||||
|
|||||||
@@ -17,9 +17,11 @@ func checkParamsExistence(ctx context.Context, d *schema.ResourceData, c *contro
|
|||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !d.Get("create_blank").(bool) {
|
||||||
if err := ic.ExistImage(ctx, uint64(d.Get("image_id").(int)), c); err != nil {
|
if err := ic.ExistImage(ctx, uint64(d.Get("image_id").(int)), c); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if netErrs := existNetworks(ctx, d, c); errs != nil {
|
if netErrs := existNetworks(ctx, d, c); errs != nil {
|
||||||
errs = append(errs, netErrs...)
|
errs = append(errs, netErrs...)
|
||||||
|
|||||||
@@ -251,7 +251,32 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
|
log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
|
||||||
apiResp, err := c.CloudBroker().KVMX86().Create(ctx, createReqX86)
|
var apiResp uint64
|
||||||
|
var err error
|
||||||
|
if d.Get("create_blank").(bool) {
|
||||||
|
log.Debugf("resourceComputeCreate: using createBlank endpoint")
|
||||||
|
createBlankReq := kvmx86.CreateBlankRequest{
|
||||||
|
RGID: createReqX86.RGID,
|
||||||
|
Name: createReqX86.Name,
|
||||||
|
CPU: createReqX86.CPU,
|
||||||
|
RAM: createReqX86.RAM,
|
||||||
|
StoragePolicyID: createReqX86.StoragePolicyID,
|
||||||
|
WithoutBootDisk: createReqX86.WithoutBootDisk,
|
||||||
|
BootDisk: createReqX86.BootDisk,
|
||||||
|
SEPID: createReqX86.SEPID,
|
||||||
|
Pool: createReqX86.Pool,
|
||||||
|
DataDisks: createReqX86.DataDisks,
|
||||||
|
Interfaces: createReqX86.Interfaces,
|
||||||
|
Description: createReqX86.Description,
|
||||||
|
Chipset: createReqX86.Chipset,
|
||||||
|
PreferredCPU: createReqX86.PreferredCPU,
|
||||||
|
ZoneID: createReqX86.ZoneID,
|
||||||
|
OSVersion: createReqX86.OSVersion,
|
||||||
|
}
|
||||||
|
apiResp, err = c.CloudBroker().KVMX86().CreateBlank(ctx, createBlankReq)
|
||||||
|
} else {
|
||||||
|
apiResp, err = c.CloudBroker().KVMX86().Create(ctx, createReqX86)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
@@ -448,6 +473,9 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if nodeID, ok := d.GetOk("node_id"); ok {
|
if nodeID, ok := d.GetOk("node_id"); ok {
|
||||||
req.NodeID = uint64(nodeID.(int))
|
req.NodeID = uint64(nodeID.(int))
|
||||||
}
|
}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
req.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
log.Debugf("resourceComputeCreate: starting Compute ID %d after completing its resource configuration", computeId)
|
log.Debugf("resourceComputeCreate: starting Compute ID %d after completing its resource configuration", computeId)
|
||||||
if _, err := c.CloudBroker().Compute().Start(ctx, req); err != nil {
|
if _, err := c.CloudBroker().Compute().Start(ctx, req); err != nil {
|
||||||
warnings.Add(err)
|
warnings.Add(err)
|
||||||
|
|||||||
@@ -3409,6 +3409,12 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Default: false,
|
Default: false,
|
||||||
},
|
},
|
||||||
|
"create_blank": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
Description: "If True, the compute is created via kvmx86/createBlank endpoint (without OS image). The image_id field is not required in this case.",
|
||||||
|
},
|
||||||
"boot_disk_size": {
|
"boot_disk_size": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -3759,8 +3765,6 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
"disk_type": {
|
"disk_type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Optional: true,
|
|
||||||
ValidateFunc: validation.StringInSlice([]string{"B", "D"}, false),
|
|
||||||
Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data'",
|
Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data'",
|
||||||
},
|
},
|
||||||
"pool": {
|
"pool": {
|
||||||
|
|||||||
@@ -209,7 +209,11 @@ func utilityComputeResize(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
if isStopRequired {
|
if isStopRequired {
|
||||||
if _, err := c.CloudBroker().Compute().Start(ctx, compute.StartRequest{ComputeID: computeId}); err != nil {
|
req := compute.StartRequest{ComputeID: computeId}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
req.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
|
if _, err := c.CloudBroker().Compute().Start(ctx, req); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -362,9 +366,6 @@ func utilityComputeUpdateDisks(ctx context.Context, d *schema.ResourceData, m in
|
|||||||
if diskConv["sep_id"].(int) != 0 {
|
if diskConv["sep_id"].(int) != 0 {
|
||||||
req.SepID = uint64(diskConv["sep_id"].(int))
|
req.SepID = uint64(diskConv["sep_id"].(int))
|
||||||
}
|
}
|
||||||
if diskConv["disk_type"].(string) != "" {
|
|
||||||
req.DiskType = diskConv["disk_type"].(string)
|
|
||||||
}
|
|
||||||
if diskConv["pool"].(string) != "" {
|
if diskConv["pool"].(string) != "" {
|
||||||
req.Pool = diskConv["pool"].(string)
|
req.Pool = diskConv["pool"].(string)
|
||||||
}
|
}
|
||||||
@@ -981,7 +982,13 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
|
|||||||
|
|
||||||
if needStart {
|
if needStart {
|
||||||
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||||
if numErr, err := utilityComputeStart(ctx, computeId, m); err != nil {
|
var altBootID uint64
|
||||||
|
if altBootIDRaw, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
altBootID = uint64(altBootIDRaw)
|
||||||
|
} else {
|
||||||
|
altBootID = 0
|
||||||
|
}
|
||||||
|
if numErr, err := utilityComputeStart(ctx, altBootID, computeId, m); err != nil {
|
||||||
apiErrCount += numErr
|
apiErrCount += numErr
|
||||||
lastSavedError = err
|
lastSavedError = err
|
||||||
}
|
}
|
||||||
@@ -1308,7 +1315,11 @@ func utilityComputeUpdate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
|
|
||||||
// If used to be STARTED, we need to start it after update
|
// If used to be STARTED, we need to start it after update
|
||||||
if isStopRequired {
|
if isStopRequired {
|
||||||
if _, err := c.CloudBroker().Compute().Start(ctx, compute.StartRequest{ComputeID: computeId}); err != nil {
|
req := compute.StartRequest{ComputeID: computeId}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
req.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
|
if _, err := c.CloudBroker().Compute().Start(ctx, req); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1779,6 +1790,9 @@ func utilityComputeRollback(ctx context.Context, d *schema.ResourceData, m inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
startReq := compute.StartRequest{ComputeID: computeId}
|
startReq := compute.StartRequest{ComputeID: computeId}
|
||||||
|
if altBootID, ok := d.Get("alt_boot_id").(int); ok {
|
||||||
|
startReq.AltBootID = uint64(altBootID)
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityComputeRollback: starting compute %d", computeId)
|
log.Debugf("utilityComputeRollback: starting compute %d", computeId)
|
||||||
|
|
||||||
@@ -2036,10 +2050,14 @@ func utilityComputeStop(ctx context.Context, d *schema.ResourceData, m interface
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func utilityComputeStart(ctx context.Context, computeID uint64, m interface{}) (int, error) {
|
func utilityComputeStart(ctx context.Context, computeID uint64, altBootID uint64, m interface{}) (int, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
startReq := compute.StartRequest{ComputeID: computeID}
|
startReq := compute.StartRequest{ComputeID: computeID}
|
||||||
|
|
||||||
|
if altBootID > 0 {
|
||||||
|
startReq.AltBootID = altBootID
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityComputeStart: starting compute %d", computeID)
|
log.Debugf("utilityComputeStart: starting compute %d", computeID)
|
||||||
_, err := c.CloudBroker().Compute().Start(ctx, startReq)
|
_, err := c.CloudBroker().Compute().Start(ctx, startReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ func flattenTrunkResource(d *schema.ResourceData, details *trunk.ItemTrunk) {
|
|||||||
d.Set("name", details.Name)
|
d.Set("name", details.Name)
|
||||||
d.Set("mac", details.MAC)
|
d.Set("mac", details.MAC)
|
||||||
d.Set("description", details.Description)
|
d.Set("description", details.Description)
|
||||||
d.Set("accountIds", details.AccountIDs)
|
d.Set("account_ids", details.AccountIDs)
|
||||||
d.Set("ovsBridge", details.OVSBridge)
|
d.Set("ovs_bridge", details.OVSBridge)
|
||||||
d.Set("nativeVlanId", details.NativeVLANID)
|
d.Set("native_vlan_id", details.NativeVLANID)
|
||||||
d.Set("status", details.Status)
|
d.Set("status", details.Status)
|
||||||
d.Set("trunkTags", details.TrunkTags)
|
d.Set("trunk_tags", details.TrunkTags)
|
||||||
d.Set("created_at", details.CreatedAt)
|
d.Set("created_at", details.CreatedAt)
|
||||||
d.Set("created_by", details.CreatedBy)
|
d.Set("created_by", details.CreatedBy)
|
||||||
d.Set("updated_at", details.UpdatedAt)
|
d.Set("updated_at", details.UpdatedAt)
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ package vfpool
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
@@ -85,6 +86,12 @@ func resourceVFPoolCreate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
config, configOk := d.GetOk("config")
|
config, configOk := d.GetOk("config")
|
||||||
|
|
||||||
|
enableVal := d.Get("enable").(bool)
|
||||||
|
if enableVal && !configOk {
|
||||||
|
return diag.FromErr(fmt.Errorf("enable requires config to be set"))
|
||||||
|
}
|
||||||
|
|
||||||
if configOk {
|
if configOk {
|
||||||
configArray := config.(*schema.Set).List()
|
configArray := config.(*schema.Set).List()
|
||||||
req.Config = make([]vfpool.Config, 0, len(configArray))
|
req.Config = make([]vfpool.Config, 0, len(configArray))
|
||||||
@@ -117,11 +124,9 @@ func resourceVFPoolCreate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
|
|
||||||
warnings := dc.Warnings{}
|
warnings := dc.Warnings{}
|
||||||
|
|
||||||
if enable, ok := d.GetOk("enable"); ok {
|
if err := utilityVFPoolEnabled(ctx, m, enableVal, vfPoolID); err != nil {
|
||||||
if err := utilityVFPoolEnabled(ctx, m, enable.(bool), vfPoolID, configOk); err != nil {
|
|
||||||
warnings.Add(err)
|
warnings.Add(err)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
log.Debugf("resourceVFPoolCreate: create VFPool with ID: %d, complete", vfPoolID)
|
log.Debugf("resourceVFPoolCreate: create VFPool with ID: %d, complete", vfPoolID)
|
||||||
return append(resourceVFPoolRead(ctx, d, m), warnings.Get()...)
|
return append(resourceVFPoolRead(ctx, d, m), warnings.Get()...)
|
||||||
@@ -147,20 +152,12 @@ func resourceVFPoolUpdate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
|
|
||||||
log.Debugf("resourceVFPoolUpdate: called VFPool with id %d", vfPoolID)
|
log.Debugf("resourceVFPoolUpdate: called VFPool with id %d", vfPoolID)
|
||||||
|
|
||||||
_, ok := d.GetOk("config")
|
if d.HasChanges("name", "description", "account_access", "rg_access", "config", "enable") {
|
||||||
|
|
||||||
if d.HasChanges("name,", "description", "account_access", "rg_access,", "config") {
|
|
||||||
if err := utilityVFPoolUpdate(ctx, d, m, vfPoolID); err != nil {
|
if err := utilityVFPoolUpdate(ctx, d, m, vfPoolID); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChange("enable") {
|
|
||||||
if err := utilityVFPoolEnabled(ctx, m, d.Get("enable").(bool), vfPoolID, ok); err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debugf("resourceVFPoolUpdate: update VFPool with id %d, complete", vfPoolID)
|
log.Debugf("resourceVFPoolUpdate: update VFPool with id %d, complete", vfPoolID)
|
||||||
|
|
||||||
return resourceVFPoolRead(ctx, d, m)
|
return resourceVFPoolRead(ctx, d, m)
|
||||||
|
|||||||
@@ -64,37 +64,26 @@ func utilityVFpoolCheckPresence(ctx context.Context, d *schema.ResourceData, m i
|
|||||||
return vfpoolData, nil
|
return vfpoolData, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func utilityVFPoolEnabled(ctx context.Context, m interface{}, enable bool, vfPoolID uint64, configOk bool) error {
|
func utilityVFPoolEnabled(ctx context.Context, m interface{}, enable bool, vfPoolID uint64) error {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
if enable && configOk {
|
var err error
|
||||||
req := vfpool.EnableRequest{
|
|
||||||
VFPoolID: vfPoolID,
|
if enable {
|
||||||
}
|
_, err = c.CloudBroker().VFPool().Enable(ctx, vfpool.EnableRequest{VFPoolID: vfPoolID})
|
||||||
_, err := c.CloudBroker().VFPool().Enable(ctx, req)
|
} else {
|
||||||
if err != nil {
|
_, err = c.CloudBroker().VFPool().Disable(ctx, vfpool.DisableRequest{VFPoolID: vfPoolID})
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if enable && !configOk {
|
|
||||||
return fmt.Errorf("you must provide configuration for this resource, after enabling it")
|
|
||||||
}
|
|
||||||
if !enable {
|
|
||||||
req := vfpool.DisableRequest{
|
|
||||||
VFPoolID: vfPoolID,
|
|
||||||
}
|
|
||||||
_, err := c.CloudBroker().VFPool().Disable(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("utilityVFPoolEnabled: enable=%v vfPool ID %d after completing its resource configuration", enable, vfPoolID)
|
return err
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func utilityVFPoolUpdate(ctx context.Context, d *schema.ResourceData, m interface{}, vfPoolID uint64) error {
|
func utilityVFPoolUpdate(ctx context.Context, d *schema.ResourceData, m interface{}, vfPoolID uint64) error {
|
||||||
|
hasConfig := len(d.Get("config").(*schema.Set).List()) > 0
|
||||||
|
if d.Get("enable").(bool) && !hasConfig {
|
||||||
|
return fmt.Errorf("enable requires config to be set")
|
||||||
|
}
|
||||||
|
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
vfPool, err := utilityVFpoolCheckPresence(ctx, d, m)
|
vfPool, err := utilityVFpoolCheckPresence(ctx, d, m)
|
||||||
@@ -190,7 +179,7 @@ func utilityVFPoolUpdate(ctx context.Context, d *schema.ResourceData, m interfac
|
|||||||
}
|
}
|
||||||
log.Debugf("utilityVFPoolUpdate: update vfPool with ID: %d, complete with params=%v", vfPoolID, req)
|
log.Debugf("utilityVFPoolUpdate: update vfPool with ID: %d, complete with params=%v", vfPoolID, req)
|
||||||
|
|
||||||
if len(d.Get("config").(*schema.Set).List()) > 0 && d.Get("enable").(bool) {
|
if hasConfig && d.Get("enable").(bool) {
|
||||||
reqEnable := vfpool.EnableRequest{
|
reqEnable := vfpool.EnableRequest{
|
||||||
VFPoolID: vfPoolID,
|
VFPoolID: vfPoolID,
|
||||||
}
|
}
|
||||||
@@ -201,8 +190,6 @@ func utilityVFPoolUpdate(ctx context.Context, d *schema.ResourceData, m interfac
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Debugf("utilityVFPoolUpdate: enable vfPool with ID: %d, complete", vfPoolID)
|
log.Debugf("utilityVFPoolUpdate: enable vfPool with ID: %d, complete", vfPoolID)
|
||||||
} else {
|
|
||||||
return (fmt.Errorf("the vfPool is not enabled after update, you must provide configuration for this resource, after enabling it"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -37,3 +37,4 @@ func DataSourceAccessGroupList() *schema.Resource {
|
|||||||
Schema: dataSourceAccessGroupListSchemaMake(),
|
Schema: dataSourceAccessGroupListSchemaMake(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,3 +49,4 @@ func utilityAccessGroupListCheckPresence(ctx context.Context, d *schema.Resource
|
|||||||
|
|
||||||
return accessGroupList, nil
|
return accessGroupList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,3 +37,4 @@ func DataSourceDefaultSecurityPolicyList() *schema.Resource {
|
|||||||
Schema: dataSourceDefaultSecurityPolicyListSchemaMake(),
|
Schema: dataSourceDefaultSecurityPolicyListSchemaMake(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -366,3 +366,4 @@ func dataSourceDefaultSecurityPolicyListSchemaMake() map[string]*schema.Schema {
|
|||||||
|
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,3 +37,4 @@ func utilityDefaultSecurityPolicyListCheckPresence(ctx context.Context, d *schem
|
|||||||
|
|
||||||
return defaultSecurityPolicyList, nil
|
return defaultSecurityPolicyList, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,12 @@ resource "decort_kvmvm" "comp" {
|
|||||||
#используется при создании и обновлении
|
#используется при создании и обновлении
|
||||||
#image_id = 111
|
#image_id = 111
|
||||||
|
|
||||||
|
#создание без образа ОС
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булев
|
||||||
|
#используется при создании
|
||||||
|
#create_blank = false
|
||||||
|
|
||||||
#создание без загрузочного диска в остановленном состоянии
|
#создание без загрузочного диска в остановленном состоянии
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#если значение равно True, параметры image_id, boot_disk_size, sep_id, pool игнорируются
|
#если значение равно True, параметры image_id, boot_disk_size, sep_id, pool игнорируются
|
||||||
@@ -120,6 +126,12 @@ resource "decort_kvmvm" "comp" {
|
|||||||
#используется при создании и обновлении
|
#используется при создании и обновлении
|
||||||
#numa_affinity = "loose"
|
#numa_affinity = "loose"
|
||||||
|
|
||||||
|
#id образа CD-ROM для загрузки
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - целое число
|
||||||
|
#используется при создании и обновлении
|
||||||
|
#alt_boot_id = 1
|
||||||
|
|
||||||
#необходимость запускать ВМ на выделенных CPU ядрах
|
#необходимость запускать ВМ на выделенных CPU ядрах
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#по умолчанию - false
|
#по умолчанию - false
|
||||||
|
|||||||
@@ -83,6 +83,12 @@ resource "decort_cb_kvmvm" "comp" {
|
|||||||
#используется при создании
|
#используется при создании
|
||||||
#without_boot_disk = true
|
#without_boot_disk = true
|
||||||
|
|
||||||
|
#создание без образа ОС
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - булев
|
||||||
|
#используется при создании
|
||||||
|
#create_blank = false
|
||||||
|
|
||||||
#размер загрузочного диска
|
#размер загрузочного диска
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - целое число
|
#тип - целое число
|
||||||
@@ -130,7 +136,7 @@ resource "decort_cb_kvmvm" "comp" {
|
|||||||
#id образа CD-ROM для загрузки
|
#id образа CD-ROM для загрузки
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - целое число
|
#тип - целое число
|
||||||
#используется при обновлении, при повторном старте вм
|
#используется при создании и обновлении
|
||||||
#alt_boot_id = 1
|
#alt_boot_id = 1
|
||||||
|
|
||||||
#необходимость выравнивать ВМ по NUMA
|
#необходимость выравнивать ВМ по NUMA
|
||||||
|
|||||||
Reference in New Issue
Block a user