Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d6caa7e214 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -4,5 +4,4 @@ url_scrapping/
|
|||||||
terraform-provider-decort*
|
terraform-provider-decort*
|
||||||
.vscode/
|
.vscode/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
vendor/
|
|
||||||
.idea/
|
|
||||||
|
|||||||
16
CHANGELOG.md
16
CHANGELOG.md
@@ -1,19 +1,9 @@
|
|||||||
## Version 4.8.2
|
## Version 4.7.4
|
||||||
|
|
||||||
### Исправлено
|
### Исправлено
|
||||||
|
|
||||||
#### kvmvm
|
#### kvmvm
|
||||||
| Идентификатор<br>задачи | Описание |
|
| Идентификатор<br>задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BATF-854 | Исправлена ошибка, при которой неккоректно закреплялась vm к stack, теперь закрепление происходит к stack_id, указанному при создании resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
|
| BATF-918 | Изменено поведение ВМ при удалении дисков из поля `extra_disks`, теперь ВМ не останавливатся при отключении дисков |
|
||||||
| BATF-853 | Исправлена ошибка удаления виртуальной машины с прикрепленными PCI девайсами в resource `decort_cb_kvmvm` в cloudbroker/kvmvm и resource `decort_kvmvm` в cloudapi/kvmvm |
|
| BATF-927 | Изменен тип поля `vgpus` c []int на []struct в resource `decort_kvmvm`, datasource `decort_kvmvm` в cloudapi/kvmvm и resource `decort_cb_kvmvm`, datasource `decort_cb_kvmvm` в cloudbroker/kvmvm |
|
||||||
| BATF-862 | Исправлена логика смены image_id виртуальной машины в resource `decort_cb_kvmvm` в cloudbroker/kvmvm и resource `decort_kvmvm` в cloudapi/kvmvm |
|
|
||||||
|
|
||||||
|
|
||||||
### Удалено
|
|
||||||
|
|
||||||
#### kvmvm
|
|
||||||
| Идентификатор<br>задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BATF-854 | Опциональное поле `target_stack_id` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
|
|
||||||
| BATF-862 | Опциональные поля `data_sisks, auto_start` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm и resource `decort_kvmvm` в cloudapi/kvmvm |
|
|
||||||
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.8.2
|
VERSION=4.7.4
|
||||||
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\
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ Terraform provider для платформы Digital Energy Cloud Orchestration
|
|||||||
|
|
||||||
| Версия DECORT API | Версия провайдера Terraform |
|
| Версия DECORT API | Версия провайдера Terraform |
|
||||||
| ------ | ------ |
|
| ------ | ------ |
|
||||||
| 4.2.0 | 4.8.x |
|
|
||||||
| 4.1.0 | 4.7.x |
|
| 4.1.0 | 4.7.x |
|
||||||
| 4.0.0 | 4.6.x |
|
| 4.0.0 | 4.6.x |
|
||||||
| 3.8.9 | 4.5.x |
|
| 3.8.9 | 4.5.x |
|
||||||
|
|||||||
@@ -93,7 +93,6 @@ Read-Only:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
- `client_type` (String)
|
- `client_type` (String)
|
||||||
- `desc` (String)
|
- `desc` (String)
|
||||||
- `domain_name` (String)
|
- `domain_name` (String)
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
---
|
|
||||||
# generated by https://github.com/hashicorp/terraform-plugin-docs
|
|
||||||
page_title: "decort_cb_extnet_reserved_ip_list Data Source - terraform-provider-decort"
|
|
||||||
subcategory: ""
|
|
||||||
description: |-
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# decort_cb_extnet_reserved_ip_list (Data Source)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- schema generated by tfplugindocs -->
|
|
||||||
## Schema
|
|
||||||
|
|
||||||
### Required
|
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
|
|
||||||
### Optional
|
|
||||||
|
|
||||||
- `extnet_id` (Number)
|
|
||||||
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
|
|
||||||
|
|
||||||
### Read-Only
|
|
||||||
|
|
||||||
- `id` (String) The ID of this resource.
|
|
||||||
- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
|
|
||||||
|
|
||||||
<a id="nestedblock--timeouts"></a>
|
|
||||||
### Nested Schema for `timeouts`
|
|
||||||
|
|
||||||
Optional:
|
|
||||||
|
|
||||||
- `default` (String)
|
|
||||||
- `read` (String)
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--items"></a>
|
|
||||||
### Nested Schema for `items`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `extnet_id` (Number)
|
|
||||||
- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--items--reservations))
|
|
||||||
|
|
||||||
<a id="nestedobjatt--items--reservations"></a>
|
|
||||||
### Nested Schema for `items.reservations`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
- `client_type` (String)
|
|
||||||
- `domain_name` (String)
|
|
||||||
- `hostname` (String)
|
|
||||||
- `ip` (String)
|
|
||||||
- `mac` (String)
|
|
||||||
- `type` (String)
|
|
||||||
- `vm_id` (Number)
|
|
||||||
@@ -17,7 +17,6 @@ description: |-
|
|||||||
|
|
||||||
### Required
|
### Required
|
||||||
|
|
||||||
- `file_path` (String)
|
|
||||||
- `gid` (Number)
|
- `gid` (Number)
|
||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
@@ -26,6 +25,7 @@ description: |-
|
|||||||
|
|
||||||
### Read-Only
|
### Read-Only
|
||||||
|
|
||||||
|
- `diagnosis` (String)
|
||||||
- `id` (String) The ID of this resource.
|
- `id` (String) The ID of this resource.
|
||||||
|
|
||||||
<a id="nestedblock--timeouts"></a>
|
<a id="nestedblock--timeouts"></a>
|
||||||
|
|||||||
37
docs/data-sources/cb_grid_post_diagnosis.md
Normal file
37
docs/data-sources/cb_grid_post_diagnosis.md
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
# generated by https://github.com/hashicorp/terraform-plugin-docs
|
||||||
|
page_title: "decort_cb_grid_post_diagnosis Data Source - terraform-provider-decort"
|
||||||
|
subcategory: ""
|
||||||
|
description: |-
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# decort_cb_grid_post_diagnosis (Data Source)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<!-- schema generated by tfplugindocs -->
|
||||||
|
## Schema
|
||||||
|
|
||||||
|
### Required
|
||||||
|
|
||||||
|
- `gid` (Number)
|
||||||
|
|
||||||
|
### Optional
|
||||||
|
|
||||||
|
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
|
||||||
|
|
||||||
|
### Read-Only
|
||||||
|
|
||||||
|
- `diagnosis` (String)
|
||||||
|
- `id` (String) The ID of this resource.
|
||||||
|
|
||||||
|
<a id="nestedblock--timeouts"></a>
|
||||||
|
### Nested Schema for `timeouts`
|
||||||
|
|
||||||
|
Optional:
|
||||||
|
|
||||||
|
- `default` (String)
|
||||||
|
- `read` (String)
|
||||||
@@ -59,7 +59,6 @@ description: |-
|
|||||||
- `rescuecd` (Boolean)
|
- `rescuecd` (Boolean)
|
||||||
- `sep_id` (Number) storage endpoint provider ID
|
- `sep_id` (Number) storage endpoint provider ID
|
||||||
- `size` (Number) image size
|
- `size` (Number) image size
|
||||||
- `snapshot_id` (String) snapshot id
|
|
||||||
- `status` (String) status
|
- `status` (String) status
|
||||||
- `tech_status` (String) tech atatus
|
- `tech_status` (String) tech atatus
|
||||||
- `unc_path` (String) unc path
|
- `unc_path` (String) unc path
|
||||||
|
|||||||
@@ -89,7 +89,6 @@ Read-Only:
|
|||||||
- `sep_id` (Number)
|
- `sep_id` (Number)
|
||||||
- `shared_with` (List of Number)
|
- `shared_with` (List of Number)
|
||||||
- `size` (Number)
|
- `size` (Number)
|
||||||
- `snapshot_id` (String)
|
|
||||||
- `status` (String)
|
- `status` (String)
|
||||||
- `tech_status` (String)
|
- `tech_status` (String)
|
||||||
- `unc_path` (String)
|
- `unc_path` (String)
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ description: |-
|
|||||||
- `affinity_weight` (Number)
|
- `affinity_weight` (Number)
|
||||||
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--anti_affinity_rules))
|
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--anti_affinity_rules))
|
||||||
- `arch` (String)
|
- `arch` (String)
|
||||||
- `auto_start_w_node` (Boolean)
|
|
||||||
- `boot_disk_id` (Number)
|
- `boot_disk_id` (Number)
|
||||||
- `boot_disk_size` (Number)
|
- `boot_disk_size` (Number)
|
||||||
- `boot_order` (List of String)
|
- `boot_order` (List of String)
|
||||||
@@ -78,7 +77,6 @@ description: |-
|
|||||||
- `pci_devices` (List of Number)
|
- `pci_devices` (List of Number)
|
||||||
- `pinned` (Boolean)
|
- `pinned` (Boolean)
|
||||||
- `pool` (String)
|
- `pool` (String)
|
||||||
- `preferred_cpu` (List of Number)
|
|
||||||
- `ram` (Number)
|
- `ram` (Number)
|
||||||
- `reference_id` (String)
|
- `reference_id` (String)
|
||||||
- `registered` (Boolean)
|
- `registered` (Boolean)
|
||||||
@@ -99,10 +97,9 @@ description: |-
|
|||||||
- `updated_time` (Number)
|
- `updated_time` (Number)
|
||||||
- `user_data` (String)
|
- `user_data` (String)
|
||||||
- `user_managed` (Boolean)
|
- `user_managed` (Boolean)
|
||||||
- `vgpus` (List of Number)
|
- `vgpus` (List of Object) (see [below for nested schema](#nestedatt--vgpus))
|
||||||
- `virtual_image_id` (Number)
|
- `virtual_image_id` (Number)
|
||||||
- `virtual_image_name` (String)
|
- `virtual_image_name` (String)
|
||||||
- `vnc_password` (String)
|
|
||||||
|
|
||||||
<a id="nestedblock--timeouts"></a>
|
<a id="nestedblock--timeouts"></a>
|
||||||
### Nested Schema for `timeouts`
|
### Nested Schema for `timeouts`
|
||||||
@@ -332,3 +329,29 @@ Read-Only:
|
|||||||
|
|
||||||
- `key` (String)
|
- `key` (String)
|
||||||
- `val` (String)
|
- `val` (String)
|
||||||
|
|
||||||
|
|
||||||
|
<a id="nestedatt--vgpus"></a>
|
||||||
|
### Nested Schema for `vgpus`
|
||||||
|
|
||||||
|
Read-Only:
|
||||||
|
|
||||||
|
- `account_id` (Number)
|
||||||
|
- `bus_number` (Number)
|
||||||
|
- `created_time` (Number)
|
||||||
|
- `deleted_time` (Number)
|
||||||
|
- `gid` (Number)
|
||||||
|
- `guid` (Number)
|
||||||
|
- `id` (Number)
|
||||||
|
- `last_claimed_by` (Number)
|
||||||
|
- `last_update_time` (Number)
|
||||||
|
- `mode` (String)
|
||||||
|
- `pci_slot` (Number)
|
||||||
|
- `pgpuid` (Number)
|
||||||
|
- `profile_id` (Number)
|
||||||
|
- `ram` (Number)
|
||||||
|
- `reference_id` (String)
|
||||||
|
- `rg_id` (Number)
|
||||||
|
- `status` (String)
|
||||||
|
- `type` (String)
|
||||||
|
- `vmid` (Number)
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ description: |-
|
|||||||
|
|
||||||
- `account_id` (Number) Find by AccountID
|
- `account_id` (Number) Find by AccountID
|
||||||
- `by_id` (Number) Find by ID
|
- `by_id` (Number) Find by ID
|
||||||
- `cd_image_id` (Number) Find by CD image ID
|
|
||||||
- `extnet_id` (Number) Find by Extnet ID
|
- `extnet_id` (Number) Find by Extnet ID
|
||||||
- `extnet_name` (String) Find by Extnet name
|
- `extnet_name` (String) Find by Extnet name
|
||||||
- `ignore_k8s` (Boolean) If set to true, ignores any VMs associated with any k8s cluster
|
- `ignore_k8s` (Boolean) If set to true, ignores any VMs associated with any k8s cluster
|
||||||
@@ -65,7 +64,6 @@ Read-Only:
|
|||||||
- `affinity_weight` (Number)
|
- `affinity_weight` (Number)
|
||||||
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
||||||
- `arch` (String)
|
- `arch` (String)
|
||||||
- `auto_start_w_node` (Boolean)
|
|
||||||
- `boot_order` (List of String)
|
- `boot_order` (List of String)
|
||||||
- `bootdisk_size` (Number)
|
- `bootdisk_size` (Number)
|
||||||
- `cd_image_id` (Number)
|
- `cd_image_id` (Number)
|
||||||
@@ -101,7 +99,6 @@ Read-Only:
|
|||||||
- `numa_node_id` (Number)
|
- `numa_node_id` (Number)
|
||||||
- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--items--os_users))
|
- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--items--os_users))
|
||||||
- `pinned` (Boolean)
|
- `pinned` (Boolean)
|
||||||
- `preferred_cpu` (List of Number)
|
|
||||||
- `ram` (Number)
|
- `ram` (Number)
|
||||||
- `reference_id` (String)
|
- `reference_id` (String)
|
||||||
- `registered` (Boolean)
|
- `registered` (Boolean)
|
||||||
@@ -121,7 +118,7 @@ Read-Only:
|
|||||||
- `updated_time` (Number)
|
- `updated_time` (Number)
|
||||||
- `user_data` (String)
|
- `user_data` (String)
|
||||||
- `user_managed` (Boolean)
|
- `user_managed` (Boolean)
|
||||||
- `vgpus` (List of Number)
|
- `vgpus` (List of Object) (see [below for nested schema](#nestedobjatt--items--vgpus))
|
||||||
- `vins_connected` (Number)
|
- `vins_connected` (Number)
|
||||||
- `virtual_image_id` (Number)
|
- `virtual_image_id` (Number)
|
||||||
|
|
||||||
@@ -257,3 +254,29 @@ Read-Only:
|
|||||||
|
|
||||||
- `key` (String)
|
- `key` (String)
|
||||||
- `val` (String)
|
- `val` (String)
|
||||||
|
|
||||||
|
|
||||||
|
<a id="nestedobjatt--items--vgpus"></a>
|
||||||
|
### Nested Schema for `items.vgpus`
|
||||||
|
|
||||||
|
Read-Only:
|
||||||
|
|
||||||
|
- `account_id` (Number)
|
||||||
|
- `bus_number` (Number)
|
||||||
|
- `created_time` (Number)
|
||||||
|
- `deleted_time` (Number)
|
||||||
|
- `gid` (Number)
|
||||||
|
- `guid` (Number)
|
||||||
|
- `id` (Number)
|
||||||
|
- `last_claimed_by` (Number)
|
||||||
|
- `last_update_time` (Number)
|
||||||
|
- `mode` (String)
|
||||||
|
- `pci_slot` (Number)
|
||||||
|
- `pgpuid` (Number)
|
||||||
|
- `profile_id` (Number)
|
||||||
|
- `ram` (Number)
|
||||||
|
- `reference_id` (String)
|
||||||
|
- `rg_id` (Number)
|
||||||
|
- `status` (String)
|
||||||
|
- `type` (String)
|
||||||
|
- `vmid` (Number)
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ Read-Only:
|
|||||||
- `affinity_weight` (Number)
|
- `affinity_weight` (Number)
|
||||||
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
||||||
- `arch` (String)
|
- `arch` (String)
|
||||||
- `auto_start_w_node` (Boolean)
|
|
||||||
- `boot_order` (List of String)
|
- `boot_order` (List of String)
|
||||||
- `bootdisk_size` (Number)
|
- `bootdisk_size` (Number)
|
||||||
- `cd_image_id` (Number)
|
- `cd_image_id` (Number)
|
||||||
@@ -95,7 +94,6 @@ Read-Only:
|
|||||||
- `numa_node_id` (Number)
|
- `numa_node_id` (Number)
|
||||||
- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--items--os_users))
|
- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--items--os_users))
|
||||||
- `pinned` (Boolean)
|
- `pinned` (Boolean)
|
||||||
- `preferred_cpu` (List of Number)
|
|
||||||
- `ram` (Number)
|
- `ram` (Number)
|
||||||
- `reference_id` (String)
|
- `reference_id` (String)
|
||||||
- `registered` (Boolean)
|
- `registered` (Boolean)
|
||||||
|
|||||||
@@ -28,15 +28,12 @@ description: |-
|
|||||||
- `consumption` (List of Object) (see [below for nested schema](#nestedatt--consumption))
|
- `consumption` (List of Object) (see [below for nested schema](#nestedatt--consumption))
|
||||||
- `cpu_allocation_ratio` (Number)
|
- `cpu_allocation_ratio` (Number)
|
||||||
- `cpu_info` (List of Object) (see [below for nested schema](#nestedatt--cpu_info))
|
- `cpu_info` (List of Object) (see [below for nested schema](#nestedatt--cpu_info))
|
||||||
- `dpdk` (List of Object) (see [below for nested schema](#nestedatt--dpdk))
|
|
||||||
- `gid` (Number)
|
- `gid` (Number)
|
||||||
- `id` (String) The ID of this resource.
|
- `id` (String) The ID of this resource.
|
||||||
- `ipaddr` (List of String)
|
- `ipaddr` (List of String)
|
||||||
- `isolated_cpus` (List of String)
|
- `isolated_cpus` (List of String)
|
||||||
- `name` (String)
|
- `name` (String)
|
||||||
- `need_reboot` (Boolean)
|
- `need_reboot` (Boolean)
|
||||||
- `net_addr` (List of Object) (see [below for nested schema](#nestedatt--net_addr))
|
|
||||||
- `network_mode` (String)
|
|
||||||
- `nic_info` (List of Object) (see [below for nested schema](#nestedatt--nic_info))
|
- `nic_info` (List of Object) (see [below for nested schema](#nestedatt--nic_info))
|
||||||
- `numa_topology` (List of Object) (see [below for nested schema](#nestedatt--numa_topology))
|
- `numa_topology` (List of Object) (see [below for nested schema](#nestedatt--numa_topology))
|
||||||
- `reserved_cpus` (List of String)
|
- `reserved_cpus` (List of String)
|
||||||
@@ -44,10 +41,6 @@ description: |-
|
|||||||
- `sriov_enabled` (Boolean)
|
- `sriov_enabled` (Boolean)
|
||||||
- `stack_id` (Number)
|
- `stack_id` (Number)
|
||||||
- `status` (String)
|
- `status` (String)
|
||||||
- `to_active` (List of Object) (see [below for nested schema](#nestedatt--to_active))
|
|
||||||
- `to_installing` (List of Object) (see [below for nested schema](#nestedatt--to_installing))
|
|
||||||
- `to_maintenance` (List of Object) (see [below for nested schema](#nestedatt--to_maintenance))
|
|
||||||
- `to_restricted` (List of Object) (see [below for nested schema](#nestedatt--to_restricted))
|
|
||||||
- `version` (String)
|
- `version` (String)
|
||||||
|
|
||||||
<a id="nestedblock--timeouts"></a>
|
<a id="nestedblock--timeouts"></a>
|
||||||
@@ -116,42 +109,6 @@ Read-Only:
|
|||||||
- `phys_count` (Number)
|
- `phys_count` (Number)
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--dpdk"></a>
|
|
||||||
### Nested Schema for `dpdk`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `bridges` (List of Object) (see [below for nested schema](#nestedobjatt--dpdk--bridges))
|
|
||||||
- `hp_memory` (Map of Number)
|
|
||||||
- `pmd_cpu` (List of Number)
|
|
||||||
|
|
||||||
<a id="nestedobjatt--dpdk--bridges"></a>
|
|
||||||
### Nested Schema for `dpdk.bridges`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `backplane1` (List of Object) (see [below for nested schema](#nestedobjatt--dpdk--bridges--backplane1))
|
|
||||||
|
|
||||||
<a id="nestedobjatt--dpdk--bridges--backplane1"></a>
|
|
||||||
### Nested Schema for `dpdk.bridges.backplane1`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `interfaces` (List of String)
|
|
||||||
- `numa_node` (Number)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--net_addr"></a>
|
|
||||||
### Nested Schema for `net_addr`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `ip` (List of String)
|
|
||||||
- `name` (String)
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--nic_info"></a>
|
<a id="nestedatt--nic_info"></a>
|
||||||
### Nested Schema for `nic_info`
|
### Nested Schema for `nic_info`
|
||||||
|
|
||||||
@@ -199,45 +156,3 @@ Read-Only:
|
|||||||
- `one_g` (Number)
|
- `one_g` (Number)
|
||||||
- `total` (Number)
|
- `total` (Number)
|
||||||
- `two_m` (Number)
|
- `two_m` (Number)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--to_active"></a>
|
|
||||||
### Nested Schema for `to_active`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `actor` (String)
|
|
||||||
- `reason` (String)
|
|
||||||
- `time` (Number)
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--to_installing"></a>
|
|
||||||
### Nested Schema for `to_installing`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `actor` (String)
|
|
||||||
- `reason` (String)
|
|
||||||
- `time` (Number)
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--to_maintenance"></a>
|
|
||||||
### Nested Schema for `to_maintenance`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `actor` (String)
|
|
||||||
- `reason` (String)
|
|
||||||
- `time` (Number)
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--to_restricted"></a>
|
|
||||||
### Nested Schema for `to_restricted`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `actor` (String)
|
|
||||||
- `reason` (String)
|
|
||||||
- `time` (Number)
|
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ Read-Only:
|
|||||||
- `additional_pkgs` (List of String)
|
- `additional_pkgs` (List of String)
|
||||||
- `cpu_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--cpu_info))
|
- `cpu_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--cpu_info))
|
||||||
- `description` (String)
|
- `description` (String)
|
||||||
- `dpdk` (List of Object) (see [below for nested schema](#nestedobjatt--items--dpdk))
|
|
||||||
- `gid` (Number)
|
- `gid` (Number)
|
||||||
- `guid` (String)
|
- `guid` (String)
|
||||||
- `hostkey` (String)
|
- `hostkey` (String)
|
||||||
@@ -87,7 +86,6 @@ Read-Only:
|
|||||||
- `status` (String)
|
- `status` (String)
|
||||||
- `tags` (List of String)
|
- `tags` (List of String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
- `uefi_firmware_file` (String)
|
|
||||||
- `version` (String)
|
- `version` (String)
|
||||||
|
|
||||||
<a id="nestedobjatt--items--cpu_info"></a>
|
<a id="nestedobjatt--items--cpu_info"></a>
|
||||||
@@ -100,33 +98,6 @@ Read-Only:
|
|||||||
- `phys_count` (Number)
|
- `phys_count` (Number)
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedobjatt--items--dpdk"></a>
|
|
||||||
### Nested Schema for `items.dpdk`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `bridges` (List of Object) (see [below for nested schema](#nestedobjatt--items--dpdk--bridges))
|
|
||||||
- `hp_memory` (Map of Number)
|
|
||||||
- `pmd_cpu` (List of Number)
|
|
||||||
|
|
||||||
<a id="nestedobjatt--items--dpdk--bridges"></a>
|
|
||||||
### Nested Schema for `items.dpdk.bridges`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `backplane1` (List of Object) (see [below for nested schema](#nestedobjatt--items--dpdk--bridges--backplane1))
|
|
||||||
|
|
||||||
<a id="nestedobjatt--items--dpdk--bridges--backplane1"></a>
|
|
||||||
### Nested Schema for `items.dpdk.bridges.backplane1`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `interfaces` (List of String)
|
|
||||||
- `numa_node` (Number)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedobjatt--items--net_addr"></a>
|
<a id="nestedobjatt--items--net_addr"></a>
|
||||||
### Nested Schema for `items.net_addr`
|
### Nested Schema for `items.net_addr`
|
||||||
|
|
||||||
|
|||||||
@@ -25,14 +25,15 @@ description: |-
|
|||||||
|
|
||||||
### Read-Only
|
### Read-Only
|
||||||
|
|
||||||
|
- `ckey` (String) ckey
|
||||||
- `config` (String) config
|
- `config` (String) config
|
||||||
- `consumed_by` (Set of Number) consumed by
|
- `consumed_by` (Set of Number) consumed by
|
||||||
- `desc` (String) description
|
- `desc` (String) description
|
||||||
- `gid` (Number) gid
|
- `gid` (Number) gid
|
||||||
- `guid` (Number) guid
|
- `guid` (Number) guid
|
||||||
- `id` (String) The ID of this resource.
|
- `id` (String) The ID of this resource.
|
||||||
|
- `meta` (List of String) meta
|
||||||
- `milestones` (Number) milestones
|
- `milestones` (Number) milestones
|
||||||
- `multipath_num` (Number) multipath_num
|
|
||||||
- `name` (String) name
|
- `name` (String) name
|
||||||
- `obj_status` (String) object status
|
- `obj_status` (String) object status
|
||||||
- `provided_by` (List of Number) provided by
|
- `provided_by` (List of Number) provided by
|
||||||
|
|||||||
@@ -49,13 +49,14 @@ Optional:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
|
- `ckey` (String)
|
||||||
- `config` (String)
|
- `config` (String)
|
||||||
- `consumed_by` (Set of Number)
|
- `consumed_by` (Set of Number)
|
||||||
- `desc` (String)
|
- `desc` (String)
|
||||||
- `gid` (Number)
|
- `gid` (Number)
|
||||||
- `guid` (Number)
|
- `guid` (Number)
|
||||||
|
- `meta` (List of String)
|
||||||
- `milestones` (Number)
|
- `milestones` (Number)
|
||||||
- `multipath_num` (Number)
|
|
||||||
- `name` (String)
|
- `name` (String)
|
||||||
- `obj_status` (String)
|
- `obj_status` (String)
|
||||||
- `provided_by` (List of Number)
|
- `provided_by` (List of Number)
|
||||||
|
|||||||
@@ -101,7 +101,6 @@ Read-Only:
|
|||||||
- `tech_status` (String)
|
- `tech_status` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
- `vins` (List of Number)
|
- `vins` (List of Number)
|
||||||
- `vnc_password` (String)
|
|
||||||
|
|
||||||
<a id="nestedobjatt--vnf_dev--config"></a>
|
<a id="nestedobjatt--vnf_dev--config"></a>
|
||||||
### Nested Schema for `vnf_dev.config`
|
### Nested Schema for `vnf_dev.config`
|
||||||
@@ -241,7 +240,10 @@ Read-Only:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
- `account_id` (Number)
|
- `client_type` (String)
|
||||||
|
- `description` (String)
|
||||||
|
- `domain_name` (String)
|
||||||
|
- `host_name` (String)
|
||||||
- `ip` (String)
|
- `ip` (String)
|
||||||
- `mac` (String)
|
- `mac` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
|
|||||||
@@ -90,7 +90,6 @@ Read-Only:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
- `client_type` (String)
|
- `client_type` (String)
|
||||||
- `desc` (String)
|
- `desc` (String)
|
||||||
- `domainname` (String)
|
- `domainname` (String)
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
---
|
|
||||||
# generated by https://github.com/hashicorp/terraform-plugin-docs
|
|
||||||
page_title: "decort_extnet_reserved_ip_list Data Source - terraform-provider-decort"
|
|
||||||
subcategory: ""
|
|
||||||
description: |-
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# decort_extnet_reserved_ip_list (Data Source)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- schema generated by tfplugindocs -->
|
|
||||||
## Schema
|
|
||||||
|
|
||||||
### Required
|
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
|
|
||||||
### Optional
|
|
||||||
|
|
||||||
- `extnet_id` (Number)
|
|
||||||
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
|
|
||||||
|
|
||||||
### Read-Only
|
|
||||||
|
|
||||||
- `id` (String) The ID of this resource.
|
|
||||||
- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
|
|
||||||
|
|
||||||
<a id="nestedblock--timeouts"></a>
|
|
||||||
### Nested Schema for `timeouts`
|
|
||||||
|
|
||||||
Optional:
|
|
||||||
|
|
||||||
- `default` (String)
|
|
||||||
- `read` (String)
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedatt--items"></a>
|
|
||||||
### Nested Schema for `items`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `extnet_id` (Number)
|
|
||||||
- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--items--reservations))
|
|
||||||
|
|
||||||
<a id="nestedobjatt--items--reservations"></a>
|
|
||||||
### Nested Schema for `items.reservations`
|
|
||||||
|
|
||||||
Read-Only:
|
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
- `client_type` (String)
|
|
||||||
- `domain_name` (String)
|
|
||||||
- `hostname` (String)
|
|
||||||
- `ip` (String)
|
|
||||||
- `mac` (String)
|
|
||||||
- `type` (String)
|
|
||||||
- `vm_id` (Number)
|
|
||||||
@@ -33,7 +33,6 @@ description: |-
|
|||||||
- `affinity_weight` (Number)
|
- `affinity_weight` (Number)
|
||||||
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--anti_affinity_rules))
|
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--anti_affinity_rules))
|
||||||
- `arch` (String)
|
- `arch` (String)
|
||||||
- `auto_start_w_node` (Boolean)
|
|
||||||
- `boot_order` (List of String)
|
- `boot_order` (List of String)
|
||||||
- `bootdisk_size` (Number)
|
- `bootdisk_size` (Number)
|
||||||
- `cd_image_id` (Number)
|
- `cd_image_id` (Number)
|
||||||
@@ -75,7 +74,6 @@ description: |-
|
|||||||
- `os_users` (List of Object) (see [below for nested schema](#nestedatt--os_users))
|
- `os_users` (List of Object) (see [below for nested schema](#nestedatt--os_users))
|
||||||
- `pci_devices` (List of Number)
|
- `pci_devices` (List of Number)
|
||||||
- `pinned` (Boolean)
|
- `pinned` (Boolean)
|
||||||
- `preferred_cpu` (List of Number)
|
|
||||||
- `ram` (Number)
|
- `ram` (Number)
|
||||||
- `reference_id` (String)
|
- `reference_id` (String)
|
||||||
- `registered` (Boolean)
|
- `registered` (Boolean)
|
||||||
@@ -93,10 +91,9 @@ description: |-
|
|||||||
- `updated_time` (Number)
|
- `updated_time` (Number)
|
||||||
- `user_managed` (Boolean)
|
- `user_managed` (Boolean)
|
||||||
- `userdata` (String)
|
- `userdata` (String)
|
||||||
- `vgpus` (List of Number)
|
- `vgpus` (List of Object) (see [below for nested schema](#nestedatt--vgpus))
|
||||||
- `virtual_image_id` (Number)
|
- `virtual_image_id` (Number)
|
||||||
- `virtual_image_name` (String)
|
- `virtual_image_name` (String)
|
||||||
- `vnc_password` (String)
|
|
||||||
|
|
||||||
<a id="nestedblock--timeouts"></a>
|
<a id="nestedblock--timeouts"></a>
|
||||||
### Nested Schema for `timeouts`
|
### Nested Schema for `timeouts`
|
||||||
@@ -352,3 +349,28 @@ Read-Only:
|
|||||||
- `guid` (String)
|
- `guid` (String)
|
||||||
- `label` (String)
|
- `label` (String)
|
||||||
- `timestamp` (Number)
|
- `timestamp` (Number)
|
||||||
|
|
||||||
|
|
||||||
|
<a id="nestedatt--vgpus"></a>
|
||||||
|
### Nested Schema for `vgpus`
|
||||||
|
|
||||||
|
Read-Only:
|
||||||
|
|
||||||
|
- `account_id` (Number)
|
||||||
|
- `created_time` (Number)
|
||||||
|
- `deleted_time` (Number)
|
||||||
|
- `gid` (Number)
|
||||||
|
- `guid` (Number)
|
||||||
|
- `id` (Number)
|
||||||
|
- `last_claimed_by` (Number)
|
||||||
|
- `last_update_time` (Number)
|
||||||
|
- `mode` (String)
|
||||||
|
- `pci_slot` (Number)
|
||||||
|
- `pgpuid` (Number)
|
||||||
|
- `profile_id` (Number)
|
||||||
|
- `ram` (Number)
|
||||||
|
- `reference_id` (String)
|
||||||
|
- `rg_id` (Number)
|
||||||
|
- `status` (String)
|
||||||
|
- `type` (String)
|
||||||
|
- `vmid` (Number)
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ Read-Only:
|
|||||||
- `affinity_weight` (Number)
|
- `affinity_weight` (Number)
|
||||||
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
||||||
- `arch` (String)
|
- `arch` (String)
|
||||||
- `auto_start_w_node` (Boolean)
|
|
||||||
- `boot_order` (List of String)
|
- `boot_order` (List of String)
|
||||||
- `bootdisk_size` (Number)
|
- `bootdisk_size` (Number)
|
||||||
- `cd_image_id` (Number)
|
- `cd_image_id` (Number)
|
||||||
@@ -97,7 +96,6 @@ Read-Only:
|
|||||||
- `numa_affinity` (String)
|
- `numa_affinity` (String)
|
||||||
- `numa_node_id` (Number)
|
- `numa_node_id` (Number)
|
||||||
- `pinned` (Boolean)
|
- `pinned` (Boolean)
|
||||||
- `preferred_cpu` (List of Number)
|
|
||||||
- `ram` (Number)
|
- `ram` (Number)
|
||||||
- `reference_id` (String)
|
- `reference_id` (String)
|
||||||
- `registered` (Boolean)
|
- `registered` (Boolean)
|
||||||
|
|||||||
@@ -60,7 +60,6 @@ Read-Only:
|
|||||||
- `affinity_weight` (Number)
|
- `affinity_weight` (Number)
|
||||||
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
|
||||||
- `arch` (String)
|
- `arch` (String)
|
||||||
- `auto_start_w_node` (Boolean)
|
|
||||||
- `boot_order` (List of String)
|
- `boot_order` (List of String)
|
||||||
- `bootdisk_size` (Number)
|
- `bootdisk_size` (Number)
|
||||||
- `cd_image_id` (Number)
|
- `cd_image_id` (Number)
|
||||||
@@ -95,7 +94,6 @@ Read-Only:
|
|||||||
- `numa_affinity` (String)
|
- `numa_affinity` (String)
|
||||||
- `numa_node_id` (Number)
|
- `numa_node_id` (Number)
|
||||||
- `pinned` (Boolean)
|
- `pinned` (Boolean)
|
||||||
- `preferred_cpu` (List of Number)
|
|
||||||
- `ram` (Number)
|
- `ram` (Number)
|
||||||
- `reference_id` (String)
|
- `reference_id` (String)
|
||||||
- `registered` (Boolean)
|
- `registered` (Boolean)
|
||||||
|
|||||||
@@ -108,7 +108,6 @@ Read-Only:
|
|||||||
- `tech_status` (String)
|
- `tech_status` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
- `vins` (List of Number)
|
- `vins` (List of Number)
|
||||||
- `vnc_password` (String)
|
|
||||||
- `vnf_id` (Number)
|
- `vnf_id` (Number)
|
||||||
- `vnf_name` (String)
|
- `vnf_name` (String)
|
||||||
|
|
||||||
@@ -249,7 +248,10 @@ Read-Only:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
- `account_id` (Number)
|
- `client_type` (String)
|
||||||
|
- `desc` (String)
|
||||||
|
- `domainname` (String)
|
||||||
|
- `hostname` (String)
|
||||||
- `ip` (String)
|
- `ip` (String)
|
||||||
- `mac` (String)
|
- `mac` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ description: |-
|
|||||||
- `res_name` (String)
|
- `res_name` (String)
|
||||||
- `rescuecd` (Boolean)
|
- `rescuecd` (Boolean)
|
||||||
- `size` (Number) image size
|
- `size` (Number) image size
|
||||||
- `snapshot_id` (String) snapshot id
|
|
||||||
- `status` (String) status
|
- `status` (String) status
|
||||||
- `tech_status` (String) tech atatus
|
- `tech_status` (String) tech atatus
|
||||||
- `unc_path` (String) unc path
|
- `unc_path` (String) unc path
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ description: |-
|
|||||||
- `ntp` (List of String) List of NTP addresses
|
- `ntp` (List of String) List of NTP addresses
|
||||||
- `ovs_bridge` (String) OpenvSwith bridge name for ExtNet connection
|
- `ovs_bridge` (String) OpenvSwith bridge name for ExtNet connection
|
||||||
- `pre_reservations_num` (Number) Number of pre created reservations
|
- `pre_reservations_num` (Number) Number of pre created reservations
|
||||||
- `reserved_ip` (Block Set) (see [below for nested schema](#nestedblock--reserved_ip))
|
|
||||||
- `restart` (Boolean) restart extnet vnf device
|
- `restart` (Boolean) restart extnet vnf device
|
||||||
- `set_default` (Boolean) Set current extnet as default (can not be undone)
|
- `set_default` (Boolean) Set current extnet as default (can not be undone)
|
||||||
- `shared_with` (Set of Number)
|
- `shared_with` (Set of Number)
|
||||||
@@ -89,19 +88,6 @@ Required:
|
|||||||
- `ip_start` (String)
|
- `ip_start` (String)
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedblock--reserved_ip"></a>
|
|
||||||
### Nested Schema for `reserved_ip`
|
|
||||||
|
|
||||||
Required:
|
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
|
|
||||||
Optional:
|
|
||||||
|
|
||||||
- `ip_count` (Number)
|
|
||||||
- `ips` (Set of String)
|
|
||||||
|
|
||||||
|
|
||||||
<a id="nestedblock--timeouts"></a>
|
<a id="nestedblock--timeouts"></a>
|
||||||
### Nested Schema for `timeouts`
|
### Nested Schema for `timeouts`
|
||||||
|
|
||||||
@@ -133,7 +119,6 @@ Read-Only:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
- `account_id` (Number)
|
|
||||||
- `client_type` (String)
|
- `client_type` (String)
|
||||||
- `desc` (String)
|
- `desc` (String)
|
||||||
- `domain_name` (String)
|
- `domain_name` (String)
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ description: |-
|
|||||||
- `res_name` (String)
|
- `res_name` (String)
|
||||||
- `rescuecd` (Boolean)
|
- `rescuecd` (Boolean)
|
||||||
- `size` (Number) image size
|
- `size` (Number) image size
|
||||||
- `snapshot_id` (String) snapshot id
|
|
||||||
- `status` (String) status
|
- `status` (String) status
|
||||||
- `tech_status` (String) tech atatus
|
- `tech_status` (String) tech atatus
|
||||||
- `unc_path` (String) unc path
|
- `unc_path` (String) unc path
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ description: |-
|
|||||||
- `res_name` (String)
|
- `res_name` (String)
|
||||||
- `rescuecd` (Boolean)
|
- `rescuecd` (Boolean)
|
||||||
- `size` (Number)
|
- `size` (Number)
|
||||||
- `snapshot_id` (String) snapshot id
|
|
||||||
- `status` (String)
|
- `status` (String)
|
||||||
- `tech_status` (String)
|
- `tech_status` (String)
|
||||||
- `unc_path` (String)
|
- `unc_path` (String)
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ description: |-
|
|||||||
- `res_name` (String)
|
- `res_name` (String)
|
||||||
- `rescuecd` (Boolean)
|
- `rescuecd` (Boolean)
|
||||||
- `size` (Number)
|
- `size` (Number)
|
||||||
- `snapshot_id` (String) snapshot id
|
|
||||||
- `status` (String)
|
- `status` (String)
|
||||||
- `tech_status` (String)
|
- `tech_status` (String)
|
||||||
- `unc_path` (String)
|
- `unc_path` (String)
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ description: |-
|
|||||||
- `alt_boot_id` (Number) ID of CD-ROM live image to boot
|
- `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` (Boolean) Flag for redeploy compute
|
- `auto_start` (Boolean) Flag for redeploy compute
|
||||||
- `auto_start_w_node` (Boolean)
|
|
||||||
- `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.
|
||||||
- `cd` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--cd))
|
- `cd` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--cd))
|
||||||
- `chipset` (String) Type of the emulated system.
|
- `chipset` (String) Type of the emulated system.
|
||||||
@@ -60,7 +59,6 @@ description: |-
|
|||||||
- `pin_to_stack` (Boolean)
|
- `pin_to_stack` (Boolean)
|
||||||
- `pool` (String) Pool to use if sepId is set, can be also empty if needed to be chosen by system.
|
- `pool` (String) Pool to use if sepId is set, can be also empty if needed to be chosen by system.
|
||||||
- `port_forwarding` (Block Set) (see [below for nested schema](#nestedblock--port_forwarding))
|
- `port_forwarding` (Block Set) (see [below for nested schema](#nestedblock--port_forwarding))
|
||||||
- `preferred_cpu` (List of Number) Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
|
|
||||||
- `reset` (Boolean)
|
- `reset` (Boolean)
|
||||||
- `restore` (Boolean)
|
- `restore` (Boolean)
|
||||||
- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
|
- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
|
||||||
@@ -130,7 +128,6 @@ description: |-
|
|||||||
- `vgpus` (List of Number)
|
- `vgpus` (List of Number)
|
||||||
- `virtual_image_id` (Number)
|
- `virtual_image_id` (Number)
|
||||||
- `virtual_image_name` (String)
|
- `virtual_image_name` (String)
|
||||||
- `vnc_password` (String)
|
|
||||||
|
|
||||||
<a id="nestedblock--affinity_rules"></a>
|
<a id="nestedblock--affinity_rules"></a>
|
||||||
### Nested Schema for `affinity_rules`
|
### Nested Schema for `affinity_rules`
|
||||||
|
|||||||
@@ -37,10 +37,11 @@ description: |-
|
|||||||
|
|
||||||
### Read-Only
|
### Read-Only
|
||||||
|
|
||||||
|
- `ckey` (String) ckey
|
||||||
- `guid` (Number) guid
|
- `guid` (Number) guid
|
||||||
- `id` (String) The ID of this resource.
|
- `id` (String) The ID of this resource.
|
||||||
|
- `meta` (List of String) meta
|
||||||
- `milestones` (Number) milestones
|
- `milestones` (Number) milestones
|
||||||
- `multipath_num` (Number) multipath_num
|
|
||||||
- `obj_status` (String) object status
|
- `obj_status` (String) object status
|
||||||
- `tech_status` (String) tech status
|
- `tech_status` (String) tech status
|
||||||
|
|
||||||
|
|||||||
@@ -167,7 +167,6 @@ Read-Only:
|
|||||||
- `tech_status` (String)
|
- `tech_status` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
- `vins` (List of Number)
|
- `vins` (List of Number)
|
||||||
- `vnc_password` (String)
|
|
||||||
|
|
||||||
<a id="nestedobjatt--vnf_dev--config"></a>
|
<a id="nestedobjatt--vnf_dev--config"></a>
|
||||||
### Nested Schema for `vnf_dev.config`
|
### Nested Schema for `vnf_dev.config`
|
||||||
@@ -307,7 +306,10 @@ Read-Only:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
- `account_id` (Number)
|
- `client_type` (String)
|
||||||
|
- `description` (String)
|
||||||
|
- `domain_name` (String)
|
||||||
|
- `host_name` (String)
|
||||||
- `ip` (String)
|
- `ip` (String)
|
||||||
- `mac` (String)
|
- `mac` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ description: |-
|
|||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
|
|
||||||
|
- `compute_ids` (List of Number)
|
||||||
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
|
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
|
||||||
|
|
||||||
### Read-Only
|
### Read-Only
|
||||||
|
|
||||||
- `compute_ids` (List of Number)
|
|
||||||
- `guid` (String)
|
- `guid` (String)
|
||||||
- `id` (String) The ID of this resource.
|
- `id` (String) The ID of this resource.
|
||||||
- `route_id` (Number) Unique ID of the static route
|
- `route_id` (Number) Unique ID of the static route
|
||||||
|
|||||||
@@ -61,7 +61,6 @@ description: |-
|
|||||||
- `rescuecd` (Boolean)
|
- `rescuecd` (Boolean)
|
||||||
- `sep_id` (Number) storage endpoint provider ID
|
- `sep_id` (Number) storage endpoint provider ID
|
||||||
- `size` (Number) image size
|
- `size` (Number) image size
|
||||||
- `snapshot_id` (String) snapshot id
|
|
||||||
- `status` (String) status
|
- `status` (String) status
|
||||||
- `tech_status` (String) tech atatus
|
- `tech_status` (String) tech atatus
|
||||||
- `unc_path` (String) unc path
|
- `unc_path` (String) unc path
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ description: |-
|
|||||||
- `affinity_rules` (Block List) (see [below for nested schema](#nestedblock--affinity_rules))
|
- `affinity_rules` (Block List) (see [below for nested schema](#nestedblock--affinity_rules))
|
||||||
- `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` (Boolean) Flag for redeploy compute
|
- `auto_start` (Boolean) Flag for redeploy compute
|
||||||
- `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.
|
||||||
- `cd` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--cd))
|
- `cd` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--cd))
|
||||||
- `chipset` (String) Type of the emulated system.
|
- `chipset` (String) Type of the emulated system.
|
||||||
@@ -56,7 +55,6 @@ description: |-
|
|||||||
- `pin_to_stack` (Boolean)
|
- `pin_to_stack` (Boolean)
|
||||||
- `pool` (String) Pool to use if sepId is set, can be also empty if needed to be chosen by system.
|
- `pool` (String) Pool to use if sepId is set, can be also empty if needed to be chosen by system.
|
||||||
- `port_forwarding` (Block Set) (see [below for nested schema](#nestedblock--port_forwarding))
|
- `port_forwarding` (Block Set) (see [below for nested schema](#nestedblock--port_forwarding))
|
||||||
- `preferred_cpu` (List of Number) Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
|
|
||||||
- `reset` (Boolean)
|
- `reset` (Boolean)
|
||||||
- `restore` (Boolean)
|
- `restore` (Boolean)
|
||||||
- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
|
- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
|
||||||
@@ -120,10 +118,9 @@ description: |-
|
|||||||
- `updated_by` (String)
|
- `updated_by` (String)
|
||||||
- `updated_time` (Number)
|
- `updated_time` (Number)
|
||||||
- `user_managed` (Boolean)
|
- `user_managed` (Boolean)
|
||||||
- `vgpus` (List of Number)
|
- `vgpus` (List of Object) (see [below for nested schema](#nestedatt--vgpus))
|
||||||
- `virtual_image_id` (Number)
|
- `virtual_image_id` (Number)
|
||||||
- `virtual_image_name` (String)
|
- `virtual_image_name` (String)
|
||||||
- `vnc_password` (String)
|
|
||||||
|
|
||||||
<a id="nestedblock--affinity_rules"></a>
|
<a id="nestedblock--affinity_rules"></a>
|
||||||
### Nested Schema for `affinity_rules`
|
### Nested Schema for `affinity_rules`
|
||||||
@@ -360,3 +357,29 @@ Read-Only:
|
|||||||
- `guid` (String)
|
- `guid` (String)
|
||||||
- `label` (String)
|
- `label` (String)
|
||||||
- `timestamp` (Number)
|
- `timestamp` (Number)
|
||||||
|
|
||||||
|
|
||||||
|
<a id="nestedatt--vgpus"></a>
|
||||||
|
### Nested Schema for `vgpus`
|
||||||
|
|
||||||
|
Read-Only:
|
||||||
|
|
||||||
|
- `account_id` (Number)
|
||||||
|
- `bus_number` (Number)
|
||||||
|
- `created_time` (Number)
|
||||||
|
- `deleted_time` (Number)
|
||||||
|
- `gid` (Number)
|
||||||
|
- `guid` (Number)
|
||||||
|
- `id` (Number)
|
||||||
|
- `last_claimed_by` (Number)
|
||||||
|
- `last_update_time` (Number)
|
||||||
|
- `mode` (String)
|
||||||
|
- `pci_slot` (Number)
|
||||||
|
- `pgpuid` (Number)
|
||||||
|
- `profile_id` (Number)
|
||||||
|
- `ram` (Number)
|
||||||
|
- `reference_id` (String)
|
||||||
|
- `rg_id` (Number)
|
||||||
|
- `status` (String)
|
||||||
|
- `type` (String)
|
||||||
|
- `vmid` (Number)
|
||||||
|
|||||||
@@ -163,7 +163,6 @@ Read-Only:
|
|||||||
- `tech_status` (String)
|
- `tech_status` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
- `vins` (List of Number)
|
- `vins` (List of Number)
|
||||||
- `vnc_password` (String)
|
|
||||||
- `vnf_id` (Number)
|
- `vnf_id` (Number)
|
||||||
- `vnf_name` (String)
|
- `vnf_name` (String)
|
||||||
|
|
||||||
@@ -304,7 +303,10 @@ Read-Only:
|
|||||||
|
|
||||||
Read-Only:
|
Read-Only:
|
||||||
|
|
||||||
- `account_id` (Number)
|
- `client_type` (String)
|
||||||
|
- `desc` (String)
|
||||||
|
- `domainname` (String)
|
||||||
|
- `hostname` (String)
|
||||||
- `ip` (String)
|
- `ip` (String)
|
||||||
- `mac` (String)
|
- `mac` (String)
|
||||||
- `type` (String)
|
- `type` (String)
|
||||||
|
|||||||
@@ -24,12 +24,12 @@ description: |-
|
|||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
|
|
||||||
|
- `compute_ids` (List of Number)
|
||||||
- `route_id` (Number)
|
- `route_id` (Number)
|
||||||
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
|
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
|
||||||
|
|
||||||
### Read-Only
|
### Read-Only
|
||||||
|
|
||||||
- `compute_ids` (List of Number)
|
|
||||||
- `guid` (String)
|
- `guid` (String)
|
||||||
- `id` (String) The ID of this resource.
|
- `id` (String) The ID of this resource.
|
||||||
|
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -8,7 +8,7 @@ require (
|
|||||||
github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0
|
github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0
|
||||||
github.com/sirupsen/logrus v1.9.0
|
github.com/sirupsen/logrus v1.9.0
|
||||||
golang.org/x/net v0.23.0
|
golang.org/x/net v0.23.0
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.10.1
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.9.4
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -273,5 +273,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.10.1 h1:Z6drv1seHY6nkyEdjGp2LoNKbne1ihrNRs32q93UhcM=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.9.4 h1:BQ7Q6whTFTmBiBcvdRI6bXmYLkhekvJDiNpW258+j24=
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.10.1/go.mod h1:OaUynHHuSjWMzpfyoL4au6oLcUogqUkPPBKA15pbHWo=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.9.4/go.mod h1:OaUynHHuSjWMzpfyoL4au6oLcUogqUkPPBKA15pbHWo=
|
||||||
|
|||||||
@@ -137,7 +137,6 @@ func newDataSourcesMap() map[string]*schema.Resource {
|
|||||||
"decort_extnet_computes_list": extnet.DataSourceExtnetComputesList(),
|
"decort_extnet_computes_list": extnet.DataSourceExtnetComputesList(),
|
||||||
"decort_extnet": extnet.DataSourceExtnet(),
|
"decort_extnet": extnet.DataSourceExtnet(),
|
||||||
"decort_extnet_default": extnet.DataSourceExtnetDefault(),
|
"decort_extnet_default": extnet.DataSourceExtnetDefault(),
|
||||||
"decort_extnet_reserved_ip_list": extnet.DataSourceExtnetReservedIp(),
|
|
||||||
"decort_locations_list": locations.DataSourceLocationsList(),
|
"decort_locations_list": locations.DataSourceLocationsList(),
|
||||||
"decort_location_url": locations.DataSourceLocationUrl(),
|
"decort_location_url": locations.DataSourceLocationUrl(),
|
||||||
"decort_image_list": image.DataSourceImageList(),
|
"decort_image_list": image.DataSourceImageList(),
|
||||||
@@ -181,7 +180,6 @@ func newDataSourcesMap() map[string]*schema.Resource {
|
|||||||
"decort_cb_extnet": cb_extnet.DataSourceExtnetCB(),
|
"decort_cb_extnet": cb_extnet.DataSourceExtnetCB(),
|
||||||
"decort_cb_extnet_list": cb_extnet.DataSourceExtnetListCB(),
|
"decort_cb_extnet_list": cb_extnet.DataSourceExtnetListCB(),
|
||||||
"decort_cb_extnet_default": cb_extnet.DataSourceExtnetDefaultCB(),
|
"decort_cb_extnet_default": cb_extnet.DataSourceExtnetDefaultCB(),
|
||||||
"decort_cb_extnet_reserved_ip_list": cb_extnet.DataSourceExtnetReservedIp(),
|
|
||||||
"decort_cb_extnet_static_route_list": cb_extnet.DataSourceStaticRouteList(),
|
"decort_cb_extnet_static_route_list": cb_extnet.DataSourceStaticRouteList(),
|
||||||
"decort_cb_extnet_static_route": cb_extnet.DataSourceStaticRoute(),
|
"decort_cb_extnet_static_route": cb_extnet.DataSourceStaticRoute(),
|
||||||
"decort_cb_image": cb_image.DataSourceImage(),
|
"decort_cb_image": cb_image.DataSourceImage(),
|
||||||
@@ -189,6 +187,7 @@ func newDataSourcesMap() map[string]*schema.Resource {
|
|||||||
"decort_cb_grid_get_status": cb_grid.DataSourceGridGetStatus(),
|
"decort_cb_grid_get_status": cb_grid.DataSourceGridGetStatus(),
|
||||||
"decort_cb_grid_post_status": cb_grid.DataSourceGridPostStatus(),
|
"decort_cb_grid_post_status": cb_grid.DataSourceGridPostStatus(),
|
||||||
"decort_cb_grid_get_diagnosis": cb_grid.DataSourceGridGetDiagnosis(),
|
"decort_cb_grid_get_diagnosis": cb_grid.DataSourceGridGetDiagnosis(),
|
||||||
|
"decort_cb_grid_post_diagnosis": cb_grid.DataSourceGridPostDiagnosis(),
|
||||||
"decort_cb_grid_get_settings": cb_grid.DataSourceGridGetSettings(),
|
"decort_cb_grid_get_settings": cb_grid.DataSourceGridGetSettings(),
|
||||||
"decort_cb_grid_list": cb_grid.DataSourceGridList(),
|
"decort_cb_grid_list": cb_grid.DataSourceGridList(),
|
||||||
"decort_cb_grid_list_emails": cb_grid.DataSourceGridListEmails(),
|
"decort_cb_grid_list_emails": cb_grid.DataSourceGridListEmails(),
|
||||||
|
|||||||
@@ -204,10 +204,6 @@ func dataSourceExtnetSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"client_type": {
|
"client_type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -1,137 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
|
||||||
Authors:
|
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
|
||||||
Tim Tkachev, <tvtkachev@basistech.ru>
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
|
||||||
builds seamlessly.
|
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
|
||||||
*/
|
|
||||||
|
|
||||||
package extnet
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
|
||||||
)
|
|
||||||
|
|
||||||
func dataSourceExtnetReservedIpRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
|
||||||
reservedList, err := utilityExtnetReservedIpCheckPresence(ctx, d, m)
|
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
|
||||||
d.Set("items", flattenExtnetReservedIp(reservedList))
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func dataSourceExtnetReservedIpSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Required: true,
|
|
||||||
},
|
|
||||||
"extnet_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Optional: true,
|
|
||||||
},
|
|
||||||
"items": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"extnet_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"reservations": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"client_type": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"domain_name": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"hostname": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"ip": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"mac": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vm_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
func DataSourceExtnetReservedIp() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
|
||||||
SchemaVersion: 1,
|
|
||||||
|
|
||||||
ReadContext: dataSourceExtnetReservedIpRead,
|
|
||||||
|
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
|
||||||
Default: &constants.Timeout60s,
|
|
||||||
},
|
|
||||||
|
|
||||||
Schema: dataSourceExtnetReservedIpSchemaMake(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -54,7 +54,6 @@ func flattenExtnetReservations(ers extnet.ListReservations) []map[string]interfa
|
|||||||
res := make([]map[string]interface{}, 0, len(ers))
|
res := make([]map[string]interface{}, 0, len(ers))
|
||||||
for _, er := range ers {
|
for _, er := range ers {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": er.AccountID,
|
|
||||||
"client_type": er.ClientType,
|
"client_type": er.ClientType,
|
||||||
"domainname": er.DomainName,
|
"domainname": er.DomainName,
|
||||||
"hostname": er.Hostname,
|
"hostname": er.Hostname,
|
||||||
@@ -136,29 +135,3 @@ func flattenExtnetList(el *extnet.ListExtNets) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetReservedIp(el []extnet.RecordReservedIP) []map[string]interface{} {
|
|
||||||
res := make([]map[string]interface{}, 0, len(el))
|
|
||||||
for _, e := range el {
|
|
||||||
reservations := make([]map[string]interface{}, 0, len(e.Reservations))
|
|
||||||
for _, r := range e.Reservations {
|
|
||||||
temp := map[string]interface{}{
|
|
||||||
"account_id": r.AccountID,
|
|
||||||
"client_type": r.ClientType,
|
|
||||||
"domain_name": r.DomainName,
|
|
||||||
"hostname": r.Hostname,
|
|
||||||
"ip": r.IP,
|
|
||||||
"mac": r.Mac,
|
|
||||||
"type": r.Type,
|
|
||||||
"vm_id": r.VMID,
|
|
||||||
}
|
|
||||||
reservations = append(reservations, temp)
|
|
||||||
}
|
|
||||||
item := map[string]interface{}{
|
|
||||||
"extnet_id": e.ExtnetID,
|
|
||||||
"reservations": reservations,
|
|
||||||
}
|
|
||||||
res = append(res, item)
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
|
||||||
Authors:
|
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
|
||||||
builds seamlessly.
|
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
|
||||||
*/
|
|
||||||
|
|
||||||
package extnet
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
||||||
log "github.com/sirupsen/logrus"
|
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
|
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
|
||||||
)
|
|
||||||
|
|
||||||
func utilityExtnetReservedIpCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) ([]extnet.RecordReservedIP, error) {
|
|
||||||
c := m.(*controller.ControllerCfg)
|
|
||||||
req := extnet.GetReservedIP{
|
|
||||||
AccountID: uint64(d.Get("account_id").(int)),
|
|
||||||
}
|
|
||||||
|
|
||||||
if extNetID, ok := d.GetOk("extnet_id"); ok {
|
|
||||||
req.ExtNetID = uint64(extNetID.(int))
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debugf("utilityExtnetReservedIpCheckPresence")
|
|
||||||
res, err := c.CloudAPI().ExtNet().GetReservedIP(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
@@ -703,10 +703,6 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"auto_start_w_node": {
|
|
||||||
Type: schema.TypeBool,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"chipset": {
|
"chipset": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -885,13 +881,6 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"preferred_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"ram": {
|
"ram": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -961,15 +950,84 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"vnc_password": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vgpus": {
|
"vgpus": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Schema{
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
|
"id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"mode": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"profile_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ram": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_update_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"created_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"deleted_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"vmid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pgpuid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"reference_id": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_claimed_by": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pci_slot": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"guid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"virtual_image_id": {
|
"virtual_image_id": {
|
||||||
|
|||||||
@@ -121,10 +121,6 @@ func itemComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"auto_start_w_node": {
|
|
||||||
Type: schema.TypeBool,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"boot_order": {
|
"boot_order": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -273,13 +269,6 @@ func itemComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"preferred_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"ram": {
|
"ram": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -183,7 +183,6 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
|
|||||||
"affinity_weight": compute.AffinityWeight,
|
"affinity_weight": compute.AffinityWeight,
|
||||||
"anti_affinity_rules": flattenListRules(compute.AntiAffinityRules),
|
"anti_affinity_rules": flattenListRules(compute.AntiAffinityRules),
|
||||||
"arch": compute.Architecture,
|
"arch": compute.Architecture,
|
||||||
"auto_start_w_node": compute.AutoStart,
|
|
||||||
"boot_order": compute.BootOrder,
|
"boot_order": compute.BootOrder,
|
||||||
"bootdisk_size": compute.BootDiskSize,
|
"bootdisk_size": compute.BootDiskSize,
|
||||||
"chipset": compute.Chipset,
|
"chipset": compute.Chipset,
|
||||||
@@ -218,7 +217,6 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
|
|||||||
"numa_affinity": compute.NumaAffinity,
|
"numa_affinity": compute.NumaAffinity,
|
||||||
"numa_node_id": compute.NumaNodeId,
|
"numa_node_id": compute.NumaNodeId,
|
||||||
"pinned": compute.Pinned,
|
"pinned": compute.Pinned,
|
||||||
"preferred_cpu": compute.PreferredCPU,
|
|
||||||
"ram": compute.RAM,
|
"ram": compute.RAM,
|
||||||
"reference_id": compute.ReferenceID,
|
"reference_id": compute.ReferenceID,
|
||||||
"registered": compute.Registered,
|
"registered": compute.Registered,
|
||||||
@@ -364,7 +362,6 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pc
|
|||||||
d.Set("account_name", computeRec.AccountName)
|
d.Set("account_name", computeRec.AccountName)
|
||||||
d.Set("affinity_weight", computeRec.AffinityWeight)
|
d.Set("affinity_weight", computeRec.AffinityWeight)
|
||||||
d.Set("arch", computeRec.Architecture)
|
d.Set("arch", computeRec.Architecture)
|
||||||
d.Set("auto_start_w_node", computeRec.AutoStart)
|
|
||||||
d.Set("boot_order", computeRec.BootOrder)
|
d.Set("boot_order", computeRec.BootOrder)
|
||||||
// we intentionally use the SizeMax field, do not change it until the BootDiskSize field is fixed on the platform
|
// we intentionally use the SizeMax field, do not change it until the BootDiskSize field is fixed on the platform
|
||||||
d.Set("boot_disk_size", bootDisk.SizeMax)
|
d.Set("boot_disk_size", bootDisk.SizeMax)
|
||||||
@@ -416,7 +413,6 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pc
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
d.Set("pinned", computeRec.Pinned)
|
d.Set("pinned", computeRec.Pinned)
|
||||||
d.Set("preferred_cpu", computeRec.PreferredCPU)
|
|
||||||
d.Set("ram", computeRec.RAM)
|
d.Set("ram", computeRec.RAM)
|
||||||
d.Set("reference_id", computeRec.ReferenceID)
|
d.Set("reference_id", computeRec.ReferenceID)
|
||||||
d.Set("registered", computeRec.Registered)
|
d.Set("registered", computeRec.Registered)
|
||||||
@@ -433,8 +429,7 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pc
|
|||||||
d.Set("updated_by", computeRec.UpdatedBy)
|
d.Set("updated_by", computeRec.UpdatedBy)
|
||||||
d.Set("updated_time", computeRec.UpdatedTime)
|
d.Set("updated_time", computeRec.UpdatedTime)
|
||||||
d.Set("user_managed", computeRec.UserManaged)
|
d.Set("user_managed", computeRec.UserManaged)
|
||||||
d.Set("vnc_password", computeRec.VNCPassword)
|
d.Set("vgpus", flattenVGPUs(computeRec.VGPUs))
|
||||||
d.Set("vgpus", computeRec.VGPUs)
|
|
||||||
d.Set("virtual_image_id", computeRec.VirtualImageID)
|
d.Set("virtual_image_id", computeRec.VirtualImageID)
|
||||||
d.Set("virtual_image_name", computeRec.VirtualImageName)
|
d.Set("virtual_image_name", computeRec.VirtualImageName)
|
||||||
|
|
||||||
@@ -618,7 +613,6 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute
|
|||||||
d.Set("affinity_rules", flattenAffinityRules(computeRec.AffinityRules))
|
d.Set("affinity_rules", flattenAffinityRules(computeRec.AffinityRules))
|
||||||
d.Set("affinity_weight", computeRec.AffinityWeight)
|
d.Set("affinity_weight", computeRec.AffinityWeight)
|
||||||
d.Set("anti_affinity_rules", flattenListRules(computeRec.AntiAffinityRules))
|
d.Set("anti_affinity_rules", flattenListRules(computeRec.AntiAffinityRules))
|
||||||
d.Set("auto_start_w_node", computeRec.AutoStart)
|
|
||||||
d.Set("arch", computeRec.Architecture)
|
d.Set("arch", computeRec.Architecture)
|
||||||
d.Set("chipset", computeRec.Chipset)
|
d.Set("chipset", computeRec.Chipset)
|
||||||
d.Set("boot_order", computeRec.BootOrder)
|
d.Set("boot_order", computeRec.BootOrder)
|
||||||
@@ -661,7 +655,6 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute
|
|||||||
d.Set("natable_vins_network_name", computeRec.NatableVINSNetworkName)
|
d.Set("natable_vins_network_name", computeRec.NatableVINSNetworkName)
|
||||||
d.Set("os_users", flattenOsUsers(computeRec.OSUsers))
|
d.Set("os_users", flattenOsUsers(computeRec.OSUsers))
|
||||||
d.Set("pinned", computeRec.Pinned)
|
d.Set("pinned", computeRec.Pinned)
|
||||||
d.Set("preferred_CPU", computeRec.PreferredCPU)
|
|
||||||
d.Set("ram", computeRec.RAM)
|
d.Set("ram", computeRec.RAM)
|
||||||
d.Set("reference_id", computeRec.ReferenceID)
|
d.Set("reference_id", computeRec.ReferenceID)
|
||||||
d.Set("registered", computeRec.Registered)
|
d.Set("registered", computeRec.Registered)
|
||||||
@@ -679,8 +672,7 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute
|
|||||||
d.Set("updated_time", computeRec.UpdatedTime)
|
d.Set("updated_time", computeRec.UpdatedTime)
|
||||||
d.Set("user_managed", computeRec.UserManaged)
|
d.Set("user_managed", computeRec.UserManaged)
|
||||||
d.Set("userdata", string(userdata))
|
d.Set("userdata", string(userdata))
|
||||||
d.Set("vnc_password", computeRec.VNCPassword)
|
d.Set("vgpus", flattenVGPUs(computeRec.VGPUs))
|
||||||
d.Set("vgpus", computeRec.VGPUs)
|
|
||||||
d.Set("virtual_image_id", computeRec.VirtualImageID)
|
d.Set("virtual_image_id", computeRec.VirtualImageID)
|
||||||
d.Set("virtual_image_name", computeRec.VirtualImageName)
|
d.Set("virtual_image_name", computeRec.VirtualImageName)
|
||||||
d.Set("pci_devices", flattenPCI(*pciList))
|
d.Set("pci_devices", flattenPCI(*pciList))
|
||||||
@@ -821,3 +813,33 @@ func flattenPCIDevice(deviceList []compute.ItemPCIDevice) []map[string]interface
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func flattenVGPUs(vgpus []compute.ItemVGPU) []map[string]interface{} {
|
||||||
|
res := make([]map[string]interface{}, len(vgpus))
|
||||||
|
|
||||||
|
for i, vgpu := range vgpus {
|
||||||
|
|
||||||
|
res[i] = map[string]interface{}{
|
||||||
|
"id": int(vgpu.ID),
|
||||||
|
"gid": int(vgpu.GID),
|
||||||
|
"type": vgpu.Type,
|
||||||
|
"mode": vgpu.Mode,
|
||||||
|
"status": vgpu.Status,
|
||||||
|
"profile_id": vgpu.ProfileID,
|
||||||
|
"ram": int(vgpu.RAM),
|
||||||
|
"last_update_time": int(vgpu.LastUpdateTime),
|
||||||
|
"created_time": int(vgpu.CreatedTime),
|
||||||
|
"deleted_time": int(vgpu.DeletedTime),
|
||||||
|
"vmid": int(vgpu.VMID),
|
||||||
|
"pgpuid": int(vgpu.PGPUID),
|
||||||
|
"reference_id": vgpu.ReferenceID,
|
||||||
|
"account_id": int(vgpu.AccountID),
|
||||||
|
"rg_id": int(vgpu.RGID),
|
||||||
|
"last_claimed_by": int(vgpu.LastClaimedBy),
|
||||||
|
"pci_slot": int(vgpu.PCISlot),
|
||||||
|
"guid": int(vgpu.GUID),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|||||||
@@ -248,16 +248,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
createReqX86.HPBacked = d.Get("hp_backed").(bool)
|
createReqX86.HPBacked = d.Get("hp_backed").(bool)
|
||||||
createReqX86.Chipset = d.Get("chipset").(string)
|
createReqX86.Chipset = d.Get("chipset").(string)
|
||||||
|
|
||||||
if preferredCPU, ok := d.GetOk("preferred_cpu"); ok {
|
|
||||||
preferredList := preferredCPU.([]interface{})
|
|
||||||
if len(preferredList) > 0 {
|
|
||||||
for _, v := range preferredList {
|
|
||||||
cpuNum := v.(int)
|
|
||||||
createReqX86.PreferredCPU = append(createReqX86.PreferredCPU, int64(cpuNum))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
apiResp, err := c.CloudAPI().KVMX86().Create(ctx, createReqX86)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -288,25 +278,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
|
|
||||||
log.Debugf("resourceComputeCreate: new simple Compute ID %d, name %s created", computeId, d.Get("name").(string))
|
log.Debugf("resourceComputeCreate: new simple Compute ID %d, name %s created", computeId, d.Get("name").(string))
|
||||||
|
|
||||||
if ars, ok := d.GetOk("pci_devices"); ok {
|
|
||||||
log.Debugf("resourceComputeCreate: add pci devices on ComputeID: %d", computeId)
|
|
||||||
addedPciDevices := ars.(*schema.Set).List()
|
|
||||||
if len(addedPciDevices) > 0 {
|
|
||||||
for _, v := range addedPciDevices {
|
|
||||||
devicesConv := v.(int)
|
|
||||||
req := compute.AttachPCIDeviceRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
DeviceID: uint64(devicesConv),
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudAPI().Compute().AttachPCIDevice(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
warnings.Add(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
argVal, ok = d.GetOk("extra_disks")
|
argVal, ok = d.GetOk("extra_disks")
|
||||||
if ok && argVal.(*schema.Set).Len() > 0 {
|
if ok && argVal.(*schema.Set).Len() > 0 {
|
||||||
log.Debugf("resourceComputeCreate: calling utilityComputeExtraDisksConfigure to attach %d extra disk(s)", argVal.(*schema.Set).Len())
|
log.Debugf("resourceComputeCreate: calling utilityComputeExtraDisksConfigure to attach %d extra disk(s)", argVal.(*schema.Set).Len())
|
||||||
@@ -336,17 +307,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.Get("pin_to_stack").(bool) {
|
|
||||||
req := compute.PinToStackRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
}
|
|
||||||
req.AutoStart = d.Get("auto_start_w_node").(bool)
|
|
||||||
_, err := c.CloudAPI().Compute().PinToStack(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
warnings.Add(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note bene: we created compute in a STOPPED state (this is required to properly attach 1st network interface),
|
// Note bene: we created compute in a STOPPED state (this is required to properly attach 1st network interface),
|
||||||
// now we need to start it before we report the sequence complete
|
// now we need to start it before we report the sequence complete
|
||||||
if start, ok := d.GetOk("started"); ok {
|
if start, ok := d.GetOk("started"); ok {
|
||||||
@@ -527,14 +487,11 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !d.Get("pin_to_stack").(bool) && d.Get("auto_start_w_node").(bool) {
|
if d.Get("pin_to_stack").(bool) {
|
||||||
req := compute.UpdateRequest{
|
req := compute.PinToStackRequest{
|
||||||
ComputeID: computeId,
|
ComputeID: computeId,
|
||||||
AutoStart: d.Get("auto_start_w_node").(bool),
|
|
||||||
CPUPin: d.Get("cpu_pin").(bool),
|
|
||||||
HPBacked: d.Get("hp_backed").(bool),
|
|
||||||
}
|
}
|
||||||
_, err := c.CloudAPI().Compute().Update(ctx, req)
|
_, err := c.CloudAPI().Compute().PinToStack(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
warnings.Add(err)
|
warnings.Add(err)
|
||||||
}
|
}
|
||||||
@@ -550,6 +507,24 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ars, ok := d.GetOk("pci_devices"); ok {
|
||||||
|
log.Debugf("resourceComputeCreate: add pci devices on ComputeID: %d", computeId)
|
||||||
|
addedPciDevices := ars.(*schema.Set).List()
|
||||||
|
if len(addedPciDevices) > 0 {
|
||||||
|
for _, v := range addedPciDevices {
|
||||||
|
devicesConv := v.(int)
|
||||||
|
req := compute.AttachPCIDeviceRequest{
|
||||||
|
ComputeID: computeId,
|
||||||
|
DeviceID: uint64(devicesConv),
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.CloudAPI().Compute().AttachPCIDevice(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
warnings.Add(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
log.Debugf("resourceComputeCreate: new Compute ID %d, name %s creation sequence complete", computeId, d.Get("name").(string))
|
log.Debugf("resourceComputeCreate: new Compute ID %d, name %s creation sequence complete", computeId, d.Get("name").(string))
|
||||||
|
|
||||||
@@ -644,7 +619,7 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !hasRG {
|
if !hasRG {
|
||||||
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 bacause rgID %d not allowed or does not exist", d.Get("rg_id").(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
hasImage, err := existImageId(ctx, d, m)
|
hasImage, err := existImageId(ctx, d, m)
|
||||||
@@ -653,7 +628,7 @@ 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 bacause imageID %d not allowed or does not exist", d.Get("image_id").(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
if disks, ok := d.GetOk("disks"); ok {
|
if disks, ok := d.GetOk("disks"); ok {
|
||||||
@@ -827,22 +802,6 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
resizeReq.CPU = 0
|
resizeReq.CPU = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if resizeReq.CPU != 0 {
|
|
||||||
if preferredCPU, ok := d.GetOk("preferred_cpu"); ok {
|
|
||||||
preferredList := preferredCPU.([]interface{})
|
|
||||||
if len(preferredList) > 0 {
|
|
||||||
for _, v := range preferredList {
|
|
||||||
cpuNum := v.(int)
|
|
||||||
resizeReq.PreferredCPU = append(resizeReq.PreferredCPU, int64(cpuNum))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
oldPCPU, newPCPU := d.GetChange("preferred_cpu")
|
|
||||||
if len(oldPCPU.([]interface{})) != 0 && len(newPCPU.([]interface{})) == 0 {
|
|
||||||
resizeReq.PreferredCPU = []int64{-1}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
oldRam, newRam := d.GetChange("ram")
|
oldRam, newRam := d.GetChange("ram")
|
||||||
if oldRam.(int) != newRam.(int) {
|
if oldRam.(int) != newRam.(int) {
|
||||||
resizeReq.RAM = uint64(newRam.(int))
|
resizeReq.RAM = uint64(newRam.(int))
|
||||||
@@ -896,31 +855,14 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChange("pin_to_stack") {
|
if d.HasChange("network") {
|
||||||
oldPin, newPin := d.GetChange("pin_to_stack")
|
err = utilityComputeNetworksConfigure(ctx, d, m)
|
||||||
if !newPin.(bool) {
|
if err != nil {
|
||||||
req := compute.UnpinFromStackRequest{
|
return diag.FromErr(err)
|
||||||
ComputeID: computeRec.ID,
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudAPI().Compute().UnpinFromStack(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !oldPin.(bool) {
|
|
||||||
req := compute.PinToStackRequest{
|
|
||||||
ComputeID: computeRec.ID,
|
|
||||||
}
|
|
||||||
req.AutoStart = d.Get("auto_start_w_node").(bool)
|
|
||||||
_, err := c.CloudAPI().Compute().PinToStack(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChanges("description", "name", "numa_affinity", "cpu_pin", "hp_backed", "chipset", "auto_start_w_node", "preferred_cpu") {
|
if d.HasChanges("description", "name", "numa_affinity", "cpu_pin", "hp_backed") {
|
||||||
req := compute.UpdateRequest{
|
req := compute.UpdateRequest{
|
||||||
ComputeID: computeRec.ID,
|
ComputeID: computeRec.ID,
|
||||||
}
|
}
|
||||||
@@ -934,32 +876,21 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if d.HasChange("numa_affinity") {
|
if d.HasChange("numa_affinity") {
|
||||||
req.NumaAffinity = d.Get("numa_affinity").(string)
|
req.NumaAffinity = d.Get("numa_affinity").(string)
|
||||||
}
|
}
|
||||||
|
if d.HasChange("cpu_pin") {
|
||||||
|
req.CPUPin = d.Get("cpu_pin").(bool)
|
||||||
|
}
|
||||||
|
if d.HasChange("hp_backed") {
|
||||||
|
req.HPBacked = d.Get("hp_backed").(bool)
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange("chipset") {
|
if d.HasChange("chipset") {
|
||||||
req.Chipset = d.Get("chipset").(string)
|
req.Chipset = d.Get("chipset").(string)
|
||||||
}
|
}
|
||||||
if d.HasChange("preferred_cpu") {
|
|
||||||
if preferredCPU, ok := d.GetOk("preferred_cpu"); ok {
|
|
||||||
preferredList := preferredCPU.([]interface{})
|
|
||||||
if len(preferredList) > 0 {
|
|
||||||
for _, v := range preferredList {
|
|
||||||
cpuNum := v.(int)
|
|
||||||
req.PreferredCPU = append(req.PreferredCPU, int64(cpuNum))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
oldPCPU, newPCPU := d.GetChange("preferred_cpu")
|
|
||||||
if len(oldPCPU.([]interface{})) != 0 && len(newPCPU.([]interface{})) == 0 {
|
|
||||||
req.PreferredCPU = []int64{-1}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
req.CPUPin = d.Get("cpu_pin").(bool)
|
|
||||||
req.HPBacked = d.Get("hp_backed").(bool)
|
|
||||||
req.AutoStart = d.Get("auto_start_w_node").(bool)
|
|
||||||
|
|
||||||
// Note bene: numa_affinity, cpu_pin and hp_backed are not allowed to be changed for compute in STARTED tech status.
|
// Note bene: numa_affinity, cpu_pin and hp_backed are not allowed to be changed for compute in STARTED tech status.
|
||||||
// If STARTED, we need to stop it before update
|
// If STARTED, we need to stop it before update
|
||||||
var isStopRequired bool
|
var isStopRequired bool
|
||||||
if d.HasChanges("numa_affinity", "cpu_pin", "hp_backed", "chipset", "preferred_cpu") && d.Get("started").(bool) {
|
if d.HasChanges("numa_affinity", "cpu_pin", "hp_backed") && d.Get("started").(bool) {
|
||||||
isStopRequired = true
|
isStopRequired = true
|
||||||
}
|
}
|
||||||
if isStopRequired {
|
if isStopRequired {
|
||||||
@@ -981,13 +912,6 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChange("network") {
|
|
||||||
err = utilityComputeNetworksConfigure(ctx, d, m)
|
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if d.HasChange("disks") {
|
if d.HasChange("disks") {
|
||||||
deletedDisks := make([]interface{}, 0)
|
deletedDisks := make([]interface{}, 0)
|
||||||
addedDisks := make([]interface{}, 0)
|
addedDisks := make([]interface{}, 0)
|
||||||
@@ -1541,6 +1465,30 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.HasChange("pin_to_stack") {
|
||||||
|
oldPin, newPin := d.GetChange("pin_to_stack")
|
||||||
|
if !newPin.(bool) {
|
||||||
|
req := compute.UnpinFromStackRequest{
|
||||||
|
ComputeID: computeRec.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.CloudAPI().Compute().UnpinFromStack(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !oldPin.(bool) {
|
||||||
|
req := compute.PinToStackRequest{
|
||||||
|
ComputeID: computeRec.ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.CloudAPI().Compute().PinToStack(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange("pause") {
|
if d.HasChange("pause") {
|
||||||
oldPause, newPause := d.GetChange("pause")
|
oldPause, newPause := d.GetChange("pause")
|
||||||
if !newPause.(bool) {
|
if !newPause.(bool) {
|
||||||
@@ -1583,9 +1531,6 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
ComputeID: computeRec.ID,
|
ComputeID: computeRec.ID,
|
||||||
Force: false,
|
Force: false,
|
||||||
}
|
}
|
||||||
if forceStop, ok := d.GetOk("force_stop"); ok {
|
|
||||||
stopReq.Force = forceStop.(bool)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudAPI().Compute().Stop(ctx, stopReq)
|
_, err := c.CloudAPI().Compute().Stop(ctx, stopReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1596,13 +1541,15 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
req := compute.RedeployRequest{
|
req := compute.RedeployRequest{
|
||||||
ComputeID: computeRec.ID,
|
ComputeID: computeRec.ID,
|
||||||
ImageID: uint64(newImage.(int)),
|
ImageID: uint64(newImage.(int)),
|
||||||
DataDisks: "KEEP",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if diskSize, ok := d.GetOk("boot_disk_size"); ok {
|
if diskSize, ok := d.GetOk("boot_disk_size"); ok {
|
||||||
req.DiskSize = uint64(diskSize.(int))
|
req.DiskSize = uint64(diskSize.(int))
|
||||||
}
|
}
|
||||||
if autoStart, ok := d.GetOk("started"); ok {
|
if dataDisks, ok := d.GetOk("data_disks"); ok {
|
||||||
|
req.DataDisks = dataDisks.(string)
|
||||||
|
}
|
||||||
|
if autoStart, ok := d.GetOk("auto_start"); ok {
|
||||||
req.AutoStart = autoStart.(bool)
|
req.AutoStart = autoStart.(bool)
|
||||||
}
|
}
|
||||||
if forceStop, ok := d.GetOk("force_stop"); ok {
|
if forceStop, ok := d.GetOk("force_stop"); ok {
|
||||||
@@ -1718,16 +1665,6 @@ func resourceComputeDelete(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||||
|
|
||||||
if start, ok := d.GetOk("started"); ok {
|
|
||||||
if start.(bool) {
|
|
||||||
req := compute.StopRequest{ComputeID: computeId}
|
|
||||||
log.Debugf("resourceComputeDelete: stoping Compute ID %d", computeId)
|
|
||||||
if _, err := c.CloudAPI().Compute().Stop(ctx, req); err != nil {
|
|
||||||
diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pciList, ok := d.GetOk("pci_devices")
|
pciList, ok := d.GetOk("pci_devices")
|
||||||
|
|
||||||
if d.Get("permanently").(bool) && ok {
|
if d.Get("permanently").(bool) && ok {
|
||||||
@@ -2186,11 +2123,11 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Default: false,
|
Default: false,
|
||||||
},
|
},
|
||||||
"auto_start_w_node": {
|
"auto_start": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
Default: false,
|
||||||
Description: "Flag for start compute after node exits from MAINTENANCE state",
|
Description: "Flag for redeploy compute",
|
||||||
},
|
},
|
||||||
"force_stop": {
|
"force_stop": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
@@ -2204,6 +2141,13 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Default: false,
|
Default: false,
|
||||||
Description: "Flag for resize compute",
|
Description: "Flag for resize compute",
|
||||||
},
|
},
|
||||||
|
"data_disks": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
ValidateFunc: validation.StringInSlice([]string{"KEEP", "DETACH", "DESTROY"}, false),
|
||||||
|
Default: "DETACH",
|
||||||
|
Description: "Flag for redeploy compute",
|
||||||
|
},
|
||||||
"started": {
|
"started": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -2249,15 +2193,6 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Default: false,
|
Default: false,
|
||||||
Description: "Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.",
|
Description: "Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.",
|
||||||
},
|
},
|
||||||
"preferred_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Optional: true,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
Description: "Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False",
|
|
||||||
},
|
|
||||||
"pci_devices": {
|
"pci_devices": {
|
||||||
Type: schema.TypeSet,
|
Type: schema.TypeSet,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -2476,15 +2411,88 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"vnc_password": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vgpus": {
|
"vgpus": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Schema{
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
|
"id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"mode": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"profile_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ram": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_update_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"created_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"deleted_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"vmid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pgpuid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"reference_id": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_claimed_by": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pci_slot": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"bus_number": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"guid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"virtual_image_id": {
|
"virtual_image_id": {
|
||||||
@@ -2513,14 +2521,11 @@ func ResourceCompute() *schema.Resource {
|
|||||||
},
|
},
|
||||||
|
|
||||||
CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
|
CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
|
||||||
if diff.HasChanges() || diff.HasChanges("chipset", "pin_to_stack", "auto_start_w_node", "network", "affinity_rules", "anti_affinity_rules",
|
if diff.HasChanges() || diff.HasChanges("network", "affinity_rules", "anti_affinity_rules",
|
||||||
"extra_disks", "tags", "port_forwarding", "user_access", "snapshot", "pci_devices", "preferred_cpu") {
|
"disks", "extra_disks", "tags", "port_forwarding", "user_access", "snapshot", "pci_devices") {
|
||||||
diff.SetNewComputed("updated_time")
|
diff.SetNewComputed("updated_time")
|
||||||
diff.SetNewComputed("updated_by")
|
diff.SetNewComputed("updated_by")
|
||||||
}
|
}
|
||||||
if diff.HasChanges("pin_to_stack") {
|
|
||||||
diff.SetNewComputed("pinned")
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -98,14 +98,6 @@ func utilityComputeExtraDisksConfigure(ctx context.Context, d *schema.ResourceDa
|
|||||||
|
|
||||||
if detach_set.Len() > 0 {
|
if detach_set.Len() > 0 {
|
||||||
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||||
stopReq := compute.StopRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
Force: false,
|
|
||||||
}
|
|
||||||
_, err := c.CloudAPI().Compute().Stop(ctx, stopReq)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, diskId := range detach_set.List() {
|
for _, diskId := range detach_set.List() {
|
||||||
req := compute.DiskDetachRequest{
|
req := compute.DiskDetachRequest{
|
||||||
@@ -120,14 +112,6 @@ func utilityComputeExtraDisksConfigure(ctx context.Context, d *schema.ResourceDa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
req := compute.StartRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
AltBootID: 0,
|
|
||||||
}
|
|
||||||
_, err = c.CloudAPI().Compute().Start(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
attach_set := new_set.(*schema.Set).Difference(old_set.(*schema.Set))
|
attach_set := new_set.(*schema.Set).Difference(old_set.(*schema.Set))
|
||||||
|
|||||||
@@ -347,10 +347,6 @@ func vnfDevSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"vnc_password": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vins": {
|
"vins": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -376,8 +372,20 @@ func vinsComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
|
|
||||||
func reservationSchemaMake() map[string]*schema.Schema {
|
func reservationSchemaMake() map[string]*schema.Schema {
|
||||||
return map[string]*schema.Schema{
|
return map[string]*schema.Schema{
|
||||||
"account_id": {
|
"client_type": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"desc": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"domainname": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"hostname": {
|
||||||
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
|
|||||||
@@ -151,7 +151,6 @@ func flattenVNFDev(vnfDev vins.RecordVNFDev) []map[string]interface{} {
|
|||||||
"status": vnfDev.Status,
|
"status": vnfDev.Status,
|
||||||
"tech_status": vnfDev.TechStatus,
|
"tech_status": vnfDev.TechStatus,
|
||||||
"type": vnfDev.Type,
|
"type": vnfDev.Type,
|
||||||
"vnc_password": vnfDev.VNCPassword,
|
|
||||||
"vins": vnfDev.VINS,
|
"vins": vnfDev.VINS,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,11 +176,14 @@ func flattenReservations(reservations vins.ListReservations) []map[string]interf
|
|||||||
res := make([]map[string]interface{}, 0, len(reservations))
|
res := make([]map[string]interface{}, 0, len(reservations))
|
||||||
for _, reservation := range reservations {
|
for _, reservation := range reservations {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": reservation.AccountID,
|
"client_type": reservation.ClientType,
|
||||||
"ip": reservation.IP,
|
"desc": reservation.Description,
|
||||||
"mac": reservation.MAC,
|
"domainname": reservation.DomainName,
|
||||||
"type": reservation.Type,
|
"hostname": reservation.Hostname,
|
||||||
"vm_id": reservation.VMID,
|
"ip": reservation.IP,
|
||||||
|
"mac": reservation.MAC,
|
||||||
|
"type": reservation.Type,
|
||||||
|
"vm_id": reservation.VMID,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,194 +1,277 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package vins
|
package vins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func resourceStaticRouteCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceStaticRouteCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
if _, ok := d.GetOk("vins_id"); ok {
|
if _, ok := d.GetOk("vins_id"); ok {
|
||||||
haveVinsID, err := existVinsID(ctx, d, m)
|
haveVinsID, err := existVinsID(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !haveVinsID {
|
if !haveVinsID {
|
||||||
return diag.Errorf("resourceStaticRouteCreate: can't create Static Route because Vins ID %d is not allowed or does not exist", d.Get("vins_id").(int))
|
return diag.Errorf("resourceStaticRouteCreate: can't create Static Route because Vins ID %d is not allowed or does not exist", d.Get("vins_id").(int))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
req := vins.StaticRouteAddRequest{
|
req := vins.StaticRouteAddRequest{
|
||||||
VINSID: uint64(d.Get("vins_id").(int)),
|
VINSID: uint64(d.Get("vins_id").(int)),
|
||||||
Destination: d.Get("destination").(string),
|
Destination: d.Get("destination").(string),
|
||||||
Netmask: d.Get("netmask").(string),
|
Netmask: d.Get("netmask").(string),
|
||||||
Gateway: d.Get("gateway").(string),
|
Gateway: d.Get("gateway").(string),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := c.CloudAPI().VINS().StaticRouteAdd(ctx, req)
|
if computesIDS, ok := d.GetOk("compute_ids"); ok {
|
||||||
if err != nil {
|
ids := computesIDS.([]interface{})
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
res := make([]uint64, 10)
|
||||||
|
|
||||||
staticRouteData, err := getStaticRouteData(ctx, d, m)
|
for _, id := range ids {
|
||||||
if err != nil {
|
computeId := uint64(id.(int))
|
||||||
d.SetId("")
|
res = append(res, computeId)
|
||||||
return diag.FromErr(err)
|
}
|
||||||
}
|
|
||||||
|
req.ComputeIds = res
|
||||||
d.SetId(fmt.Sprintf("%d#%d", req.VINSID, staticRouteData.ID))
|
}
|
||||||
|
|
||||||
return resourceStaticRouteRead(ctx, d, m)
|
_, err := c.CloudAPI().VINS().StaticRouteAdd(ctx, req)
|
||||||
}
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
func resourceStaticRouteRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
}
|
||||||
warnings := dc.Warnings{}
|
|
||||||
|
staticRouteData, err := getStaticRouteData(ctx, d, m)
|
||||||
staticRouteData, err := utilityDataStaticRouteCheckPresence(ctx, d, m)
|
if err != nil {
|
||||||
if err != nil {
|
d.SetId("")
|
||||||
d.SetId("")
|
return diag.FromErr(err)
|
||||||
return diag.FromErr(err)
|
}
|
||||||
}
|
|
||||||
|
d.SetId(fmt.Sprintf("%d#%d", req.VINSID, staticRouteData.ID))
|
||||||
flattenStaticRouteData(d, staticRouteData)
|
|
||||||
|
return resourceStaticRouteRead(ctx, d, m)
|
||||||
return warnings.Get()
|
}
|
||||||
}
|
|
||||||
|
func resourceStaticRouteRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
func resourceStaticRouteUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
warnings := dc.Warnings{}
|
||||||
return nil
|
|
||||||
}
|
staticRouteData, err := utilityDataStaticRouteCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
func resourceStaticRouteDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
d.SetId("")
|
||||||
c := m.(*controller.ControllerCfg)
|
return diag.FromErr(err)
|
||||||
arr := strings.Split(d.Id(), "#")
|
}
|
||||||
if len(arr) != 2 {
|
|
||||||
return diag.FromErr(fmt.Errorf("broken state id"))
|
flattenStaticRouteData(d, staticRouteData)
|
||||||
}
|
|
||||||
|
return warnings.Get()
|
||||||
vinsId, _ := strconv.ParseUint(arr[0], 10, 64)
|
}
|
||||||
routeId, _ := strconv.ParseUint(arr[1], 10, 64)
|
|
||||||
|
func resourceStaticRouteUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
req := vins.StaticRouteDelRequest{
|
c := m.(*controller.ControllerCfg)
|
||||||
VINSID: vinsId,
|
warnings := dc.Warnings{}
|
||||||
RouteId: routeId,
|
|
||||||
}
|
if _, ok := d.GetOk("vins_id"); ok {
|
||||||
|
haveVinsID, err := existVinsID(ctx, d, m)
|
||||||
_, err := c.CloudAPI().VINS().StaticRouteDel(ctx, req)
|
if err != nil {
|
||||||
if err != nil {
|
return diag.FromErr(err)
|
||||||
return diag.FromErr(err)
|
}
|
||||||
}
|
|
||||||
|
if !haveVinsID {
|
||||||
d.SetId("")
|
return diag.Errorf("resourceVinsUpdate: can't update Static Route because VinsID %d is not allowed or does not exist", d.Get("vins_id").(int))
|
||||||
|
}
|
||||||
return nil
|
}
|
||||||
}
|
|
||||||
|
staticRouteData, err := utilityDataStaticRouteCheckPresence(ctx, d, m)
|
||||||
func resourceStaticRouteSchemaMake() map[string]*schema.Schema {
|
if err != nil {
|
||||||
rets := dataSourceStaticRouteSchemaMake()
|
d.SetId("")
|
||||||
rets["route_id"] = &schema.Schema{
|
return diag.FromErr(err)
|
||||||
Type: schema.TypeInt,
|
}
|
||||||
Computed: true,
|
|
||||||
Optional: true,
|
if d.HasChange("compute_ids") {
|
||||||
}
|
deletedIds := make([]uint64, 0)
|
||||||
rets["compute_ids"] = &schema.Schema{
|
addedIds := make([]uint64, 0)
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
oldComputeIds, newComputeIds := d.GetChange("compute_ids")
|
||||||
Elem: &schema.Schema{
|
oldComputeIdsSlice := oldComputeIds.([]interface{})
|
||||||
Type: schema.TypeInt,
|
newComputeIdsSlice := newComputeIds.([]interface{})
|
||||||
},
|
|
||||||
}
|
for _, el := range oldComputeIdsSlice {
|
||||||
rets["destination"] = &schema.Schema{
|
if !isContainsIds(newComputeIdsSlice, el) {
|
||||||
Type: schema.TypeString,
|
convertedEl := uint64(el.(int))
|
||||||
Required: true,
|
deletedIds = append(deletedIds, convertedEl)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
rets["gateway"] = &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
for _, el := range newComputeIdsSlice {
|
||||||
Required: true,
|
if !isContainsIds(oldComputeIdsSlice, el) {
|
||||||
}
|
convertedEl := uint64(el.(int))
|
||||||
rets["netmask"] = &schema.Schema{
|
addedIds = append(addedIds, convertedEl)
|
||||||
Type: schema.TypeString,
|
}
|
||||||
Required: true,
|
}
|
||||||
}
|
|
||||||
|
if len(deletedIds) > 0 {
|
||||||
return rets
|
req := vins.StaticRouteAccessRevokeRequest{
|
||||||
}
|
VINSID: uint64(d.Get("vins_id").(int)),
|
||||||
|
RouteId: staticRouteData.ID,
|
||||||
func isContainsIds(els []interface{}, el interface{}) bool {
|
ComputeIds: deletedIds,
|
||||||
convEl := el.(int)
|
}
|
||||||
for _, elOld := range els {
|
|
||||||
if convEl == elOld.(int) {
|
_, err := c.CloudAPI().VINS().StaticRouteAccessRevoke(ctx, req)
|
||||||
return true
|
if err != nil {
|
||||||
}
|
warnings.Add(err)
|
||||||
}
|
}
|
||||||
return false
|
}
|
||||||
}
|
|
||||||
|
if len(addedIds) > 0 {
|
||||||
func ResourceStaticRoute() *schema.Resource {
|
req := vins.StaticRouteAccessGrantRequest{
|
||||||
return &schema.Resource{
|
VINSID: uint64(d.Get("vins_id").(int)),
|
||||||
SchemaVersion: 1,
|
RouteId: staticRouteData.ID,
|
||||||
|
ComputeIds: addedIds,
|
||||||
CreateContext: resourceStaticRouteCreate,
|
}
|
||||||
ReadContext: resourceStaticRouteRead,
|
|
||||||
UpdateContext: resourceStaticRouteUpdate,
|
_, err := c.CloudAPI().VINS().StaticRouteAccessGrant(ctx, req)
|
||||||
DeleteContext: resourceStaticRouteDelete,
|
if err != nil {
|
||||||
|
warnings.Add(err)
|
||||||
Importer: &schema.ResourceImporter{
|
}
|
||||||
StateContext: schema.ImportStatePassthroughContext,
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
Timeouts: &schema.ResourceTimeout{
|
return append(warnings.Get(), resourceStaticRouteRead(ctx, d, m)...)
|
||||||
Create: &constants.Timeout20m,
|
}
|
||||||
Read: &constants.Timeout600s,
|
|
||||||
Update: &constants.Timeout20m,
|
func resourceStaticRouteDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
Delete: &constants.Timeout600s,
|
c := m.(*controller.ControllerCfg)
|
||||||
Default: &constants.Timeout600s,
|
arr := strings.Split(d.Id(), "#")
|
||||||
},
|
if len(arr) != 2 {
|
||||||
|
return diag.FromErr(fmt.Errorf("broken state id"))
|
||||||
Schema: resourceStaticRouteSchemaMake(),
|
}
|
||||||
}
|
|
||||||
}
|
vinsId, _ := strconv.ParseUint(arr[0], 10, 64)
|
||||||
|
routeId, _ := strconv.ParseUint(arr[1], 10, 64)
|
||||||
|
|
||||||
|
req := vins.StaticRouteDelRequest{
|
||||||
|
VINSID: vinsId,
|
||||||
|
RouteId: routeId,
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.CloudAPI().VINS().StaticRouteDel(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
d.SetId("")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func resourceStaticRouteSchemaMake() map[string]*schema.Schema {
|
||||||
|
rets := dataSourceStaticRouteSchemaMake()
|
||||||
|
rets["route_id"] = &schema.Schema{
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
Optional: true,
|
||||||
|
}
|
||||||
|
rets["compute_ids"] = &schema.Schema{
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
rets["destination"] = &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Required: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
rets["gateway"] = &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Required: true,
|
||||||
|
}
|
||||||
|
rets["netmask"] = &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Required: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
return rets
|
||||||
|
}
|
||||||
|
|
||||||
|
func isContainsIds(els []interface{}, el interface{}) bool {
|
||||||
|
convEl := el.(int)
|
||||||
|
for _, elOld := range els {
|
||||||
|
if convEl == elOld.(int) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResourceStaticRoute() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
CreateContext: resourceStaticRouteCreate,
|
||||||
|
ReadContext: resourceStaticRouteRead,
|
||||||
|
UpdateContext: resourceStaticRouteUpdate,
|
||||||
|
DeleteContext: resourceStaticRouteDelete,
|
||||||
|
|
||||||
|
Importer: &schema.ResourceImporter{
|
||||||
|
StateContext: schema.ImportStatePassthroughContext,
|
||||||
|
},
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Create: &constants.Timeout20m,
|
||||||
|
Read: &constants.Timeout600s,
|
||||||
|
Update: &constants.Timeout20m,
|
||||||
|
Delete: &constants.Timeout600s,
|
||||||
|
Default: &constants.Timeout600s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: resourceStaticRouteSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
|
||||||
Authors:
|
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
|
||||||
Tim Tkachev, <tvtkachev@basistech.ru>
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
|
||||||
builds seamlessly.
|
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
|
||||||
*/
|
|
||||||
|
|
||||||
package extnet
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
|
||||||
)
|
|
||||||
|
|
||||||
func dataSourceExtnetReservedIpRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
|
||||||
reservedList, err := utilityExtnetReservedIpCheckPresence(ctx, d, m)
|
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
|
||||||
d.Set("items", flattenExtnetReservedIp(reservedList))
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func DataSourceExtnetReservedIp() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
|
||||||
SchemaVersion: 1,
|
|
||||||
|
|
||||||
ReadContext: dataSourceExtnetReservedIpRead,
|
|
||||||
|
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
|
||||||
Default: &constants.Timeout60s,
|
|
||||||
},
|
|
||||||
|
|
||||||
Schema: dataSourceExtnetReservedIpSchemaMake(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -133,6 +133,7 @@ func flattenRecordExtnetResource(d *schema.ResourceData, recNet *extnet.RecordEx
|
|||||||
d.Set("routes", flattenStaticRouteList(staticRouteList))
|
d.Set("routes", flattenStaticRouteList(staticRouteList))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func flattenExtnetExcluded(ers extnet.ListReservations) []map[string]interface{} {
|
func flattenExtnetExcluded(ers extnet.ListReservations) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, er := range ers {
|
for _, er := range ers {
|
||||||
@@ -156,7 +157,6 @@ func flattenExtnetReservations(ers extnet.ListReservations) []map[string]interfa
|
|||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, er := range ers {
|
for _, er := range ers {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": er.AccountID,
|
|
||||||
"client_type": er.ClientType,
|
"client_type": er.ClientType,
|
||||||
"domain_name": er.DomainName,
|
"domain_name": er.DomainName,
|
||||||
"hostname": er.Hostname,
|
"hostname": er.Hostname,
|
||||||
@@ -217,30 +217,4 @@ func flattenStaticRouteData(d *schema.ResourceData, route *extnet.ItemRoutes) {
|
|||||||
d.Set("netmask", route.Netmask)
|
d.Set("netmask", route.Netmask)
|
||||||
d.Set("compute_ids", route.ComputeIds)
|
d.Set("compute_ids", route.ComputeIds)
|
||||||
d.Set("route_id", route.ID)
|
d.Set("route_id", route.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetReservedIp(el []extnet.RecordReservedIP) []map[string]interface{} {
|
|
||||||
res := make([]map[string]interface{}, 0, len(el))
|
|
||||||
for _, e := range el {
|
|
||||||
reservations := make([]map[string]interface{}, 0, len(e.Reservations))
|
|
||||||
for _, r := range e.Reservations {
|
|
||||||
temp := map[string]interface{}{
|
|
||||||
"account_id": r.AccountID,
|
|
||||||
"client_type": r.ClientType,
|
|
||||||
"domain_name": r.DomainName,
|
|
||||||
"hostname": r.Hostname,
|
|
||||||
"ip": r.IP,
|
|
||||||
"mac": r.Mac,
|
|
||||||
"type": r.Type,
|
|
||||||
"vm_id": r.VMID,
|
|
||||||
}
|
|
||||||
reservations = append(reservations, temp)
|
|
||||||
}
|
|
||||||
item := map[string]interface{}{
|
|
||||||
"extnet_id": e.ExtnetID,
|
|
||||||
"reservations": reservations,
|
|
||||||
}
|
|
||||||
res = append(res, item)
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
@@ -54,9 +54,6 @@ func resourceExtnetCreate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
if err := ic.ExistGID(ctx, uint64(d.Get("gid").(int)), c); err != nil {
|
if err := ic.ExistGID(ctx, uint64(d.Get("gid").(int)), c); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
if err := checkReserveIp(ctx, d, c); err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
req := extnet.CreateRequest{
|
req := extnet.CreateRequest{
|
||||||
Name: d.Get("name").(string),
|
Name: d.Get("name").(string),
|
||||||
@@ -194,34 +191,6 @@ func resourceExtnetCreate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for reserve IP extnet must be enabled
|
|
||||||
if d.Get("reserved_ip").(*schema.Set).Len() > 0 {
|
|
||||||
for _, reservedIP := range d.Get("reserved_ip").(*schema.Set).List() {
|
|
||||||
reservedIPMap := reservedIP.(map[string]interface{})
|
|
||||||
req := extnet.AddReserveIPRequest{
|
|
||||||
AccountID: uint64(reservedIPMap["account_id"].(int)),
|
|
||||||
ExtNetID: netID,
|
|
||||||
}
|
|
||||||
if ipCount, ok := reservedIPMap["ip_count"]; ok {
|
|
||||||
req.IPCount = uint64(ipCount.(int))
|
|
||||||
}
|
|
||||||
if reservedIPMap["ips"].(*schema.Set).Len() > 0 {
|
|
||||||
ips := reservedIPMap["ips"].(*schema.Set).List()
|
|
||||||
for i, ip := range ips {
|
|
||||||
if i >= int(req.IPCount) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
req.IPs = append(req.IPs, ip.(string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().ExtNet().AddReserveIP(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
w.Add(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return resourceExtnetRead(ctx, d, m)
|
return resourceExtnetRead(ctx, d, m)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,10 +215,6 @@ func resourceExtnetUpdate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
log.Debugf("cloudbroker: resourceExtnetUpdate called with id %s", d.Id())
|
log.Debugf("cloudbroker: resourceExtnetUpdate called with id %s", d.Id())
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
if err := checkReserveIp(ctx, d, c); err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
recNet, err := utilityExtnetCheckPresence(ctx, d, m)
|
recNet, err := utilityExtnetCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
@@ -302,12 +267,6 @@ func resourceExtnetUpdate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChange("reserved_ip") {
|
|
||||||
if err := reservedIPsUpdate(ctx, d, c, recNet); err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if d.HasChange("shared_with") {
|
if d.HasChange("shared_with") {
|
||||||
if err := handleSharedWithUpdate(ctx, d, c); err != nil {
|
if err := handleSharedWithUpdate(ctx, d, c); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -371,8 +330,6 @@ func ResourceExtnetCB() *schema.Resource {
|
|||||||
Default: &constants.Timeout300s,
|
Default: &constants.Timeout300s,
|
||||||
},
|
},
|
||||||
|
|
||||||
CustomizeDiff: validateReserveIPs,
|
|
||||||
|
|
||||||
Schema: resourceExtnetSchemaMake(),
|
Schema: resourceExtnetSchemaMake(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
package extnet
|
package extnet
|
||||||
|
|
||||||
import (
|
import "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
|
|
||||||
)
|
|
||||||
|
|
||||||
func dataSourceExtnetDefaultSchemaMake() map[string]*schema.Schema {
|
func dataSourceExtnetDefaultSchemaMake() map[string]*schema.Schema {
|
||||||
return map[string]*schema.Schema{
|
return map[string]*schema.Schema{
|
||||||
@@ -477,10 +474,6 @@ func dataSourceExtnetSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"client_type": {
|
"client_type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -735,30 +728,6 @@ func resourceExtnetSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"reserved_ip": {
|
|
||||||
Type: schema.TypeSet,
|
|
||||||
Optional: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Required: true,
|
|
||||||
},
|
|
||||||
"ip_count": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Optional: true,
|
|
||||||
ValidateFunc: validation.IntBetween(1, 255),
|
|
||||||
},
|
|
||||||
"ips": {
|
|
||||||
Type: schema.TypeSet,
|
|
||||||
Optional: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"ckey": {
|
"ckey": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -899,10 +868,6 @@ func resourceExtnetSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"client_type": {
|
"client_type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -940,69 +905,3 @@ func resourceExtnetSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceExtnetReservedIpSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Required: true,
|
|
||||||
},
|
|
||||||
"extnet_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Optional: true,
|
|
||||||
},
|
|
||||||
"items": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"extnet_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"reservations": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"client_type": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"domain_name": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"hostname": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"ip": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"mac": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"type": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vm_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
|
||||||
Authors:
|
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
|
||||||
builds seamlessly.
|
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
|
||||||
*/
|
|
||||||
|
|
||||||
package extnet
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
||||||
log "github.com/sirupsen/logrus"
|
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/extnet"
|
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
|
||||||
)
|
|
||||||
|
|
||||||
func utilityExtnetReservedIpCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) ([]extnet.RecordReservedIP, error) {
|
|
||||||
c := m.(*controller.ControllerCfg)
|
|
||||||
req := extnet.GetReservedIP{
|
|
||||||
AccountID: uint64(d.Get("account_id").(int)),
|
|
||||||
}
|
|
||||||
|
|
||||||
if extNetID, ok := d.GetOk("extnet_id"); ok {
|
|
||||||
req.ExtNetID = uint64(extNetID.(int))
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debugf("utilityExtnetReservedIpCheckPresence")
|
|
||||||
res, err := c.CloudBroker().ExtNet().GetReservedIP(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return res, nil
|
|
||||||
}
|
|
||||||
@@ -35,8 +35,6 @@ package extnet
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
@@ -343,255 +341,3 @@ func handleMigrateUpdate(ctx context.Context, d *schema.ResourceData, c *control
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkReserveIp(ctx context.Context, d *schema.ResourceData, c *controller.ControllerCfg) error {
|
|
||||||
var err error
|
|
||||||
if d.Get("reserved_ip").(*schema.Set).Len() > 0 {
|
|
||||||
reservedIPList := d.Get("reserved_ip").(*schema.Set).List()
|
|
||||||
accountMap := make(map[int]struct{}, len(reservedIPList))
|
|
||||||
for _, reservedIP := range reservedIPList {
|
|
||||||
reservedIPMap := reservedIP.(map[string]interface{})
|
|
||||||
accountId := reservedIPMap["account_id"].(int)
|
|
||||||
if _, ok := accountMap[accountId]; ok {
|
|
||||||
err = errors.Join(err, fmt.Errorf("checkReserveIp: you must have only one block with id %d", accountId))
|
|
||||||
}
|
|
||||||
accountMap[accountId] = struct{}{}
|
|
||||||
_, okCount := reservedIPMap["ip_count"]
|
|
||||||
if !okCount && reservedIPMap["ips"].(*schema.Set).Len() == 0 {
|
|
||||||
err = errors.Join(err, fmt.Errorf("checkReserveIp: either ip_count or set of ips must be specified"))
|
|
||||||
}
|
|
||||||
existErr := ic.ExistAccount(ctx, uint64(accountId), c)
|
|
||||||
if existErr != nil {
|
|
||||||
err = errors.Join(err, existErr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func reservedIPsUpdate(ctx context.Context, d *schema.ResourceData, c *controller.ControllerCfg, recNet *extnet.RecordExtNet) error {
|
|
||||||
|
|
||||||
addSet, delSet, err := differenceIPReserved(ctx, d, c)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(delSet) > 0 {
|
|
||||||
for _, del := range delSet {
|
|
||||||
delMap := del.(map[string]interface{})
|
|
||||||
|
|
||||||
log.Debugf("reservedIPsUpdate: removing reserved IPs for account %d", delMap["account_id"].(int))
|
|
||||||
|
|
||||||
req := extnet.DelReserveIPRequest{
|
|
||||||
AccountID: uint64(delMap["account_id"].(int)),
|
|
||||||
ExtNetID: recNet.ID,
|
|
||||||
}
|
|
||||||
if ipCount, ok := delMap["ip_count"]; ok {
|
|
||||||
req.IPCount = uint64(ipCount.(int))
|
|
||||||
}
|
|
||||||
if delIPs, ok := delMap["ips"]; ok {
|
|
||||||
ips := delIPs.(*schema.Set).List()
|
|
||||||
for _, ip := range ips {
|
|
||||||
req.IPs = append(req.IPs, ip.(string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().ExtNet().DelReserveIP(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(addSet) > 0 {
|
|
||||||
for _, add := range addSet {
|
|
||||||
addMap := add.(map[string]interface{})
|
|
||||||
|
|
||||||
log.Debugf("reservedIPsUpdate: add reserved IPs for account %d", addMap["account_id"].(int))
|
|
||||||
|
|
||||||
req := extnet.AddReserveIPRequest{
|
|
||||||
AccountID: uint64(addMap["account_id"].(int)),
|
|
||||||
ExtNetID: recNet.ID,
|
|
||||||
}
|
|
||||||
if ipCount, ok := addMap["ip_count"]; ok {
|
|
||||||
req.IPCount = uint64(ipCount.(int))
|
|
||||||
}
|
|
||||||
if addIPs, ok := addMap["ips"]; ok {
|
|
||||||
ips := addIPs.(*schema.Set).List()
|
|
||||||
for _, ip := range ips {
|
|
||||||
req.IPs = append(req.IPs, ip.(string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().ExtNet().AddReserveIP(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func differenceIPReserved(ctx context.Context, d *schema.ResourceData, c *controller.ControllerCfg) (addList, delList []interface{}, errs error) {
|
|
||||||
addList = make([]interface{}, 0)
|
|
||||||
delList = make([]interface{}, 0)
|
|
||||||
oldSet, newSet := d.GetChange("reserved_ip")
|
|
||||||
oldList := oldSet.(*schema.Set).List()
|
|
||||||
newList := newSet.(*schema.Set).List()
|
|
||||||
for _, oldReservedIP := range oldList {
|
|
||||||
oldMap := oldReservedIP.(map[string]interface{})
|
|
||||||
found := false
|
|
||||||
for _, newReservedIP := range newList {
|
|
||||||
newMap := newReservedIP.(map[string]interface{})
|
|
||||||
if newMap["account_id"] == oldMap["account_id"] && newMap["ip_count"] == oldMap["ip_count"] && newMap["ips"] == oldMap["ips"] {
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if newMap["account_id"] == oldMap["account_id"] {
|
|
||||||
add := make(map[string]interface{}, 0)
|
|
||||||
del := make(map[string]interface{}, 0)
|
|
||||||
delSet := oldMap["ips"].(*schema.Set).Difference(newMap["ips"].(*schema.Set))
|
|
||||||
addSet := newMap["ips"].(*schema.Set).Difference(oldMap["ips"].(*schema.Set))
|
|
||||||
if delSet.Len() > 0 {
|
|
||||||
del["account_id"] = oldMap["account_id"].(int)
|
|
||||||
del["ips"] = delSet
|
|
||||||
if oldMap["ip_count"].(int)-newMap["ip_count"].(int) >= delSet.Len() {
|
|
||||||
del["ip_count"] = oldMap["ip_count"].(int) - newMap["ip_count"].(int)
|
|
||||||
} else {
|
|
||||||
del["ip_count"] = delSet.Len()
|
|
||||||
newMap["ip_count"] = newMap["ip_count"].(int) + delSet.Len()
|
|
||||||
}
|
|
||||||
} else if newMap["ip_count"].(int) < oldMap["ip_count"].(int) {
|
|
||||||
del["account_id"] = oldMap["account_id"].(int)
|
|
||||||
del["ip_count"] = oldMap["ip_count"].(int) - newMap["ip_count"].(int)
|
|
||||||
}
|
|
||||||
if addSet.Len() > 0 {
|
|
||||||
add["account_id"] = oldMap["account_id"].(int)
|
|
||||||
add["ips"] = addSet
|
|
||||||
add["ip_count"] = newMap["ip_count"].(int) - oldMap["ip_count"].(int)
|
|
||||||
if add["ip_count"].(int) < 0 {
|
|
||||||
add["ip_count"] = 0
|
|
||||||
}
|
|
||||||
if add["ip_count"].(int)-addSet.Len() < 0 {
|
|
||||||
del["account_id"] = oldMap["account_id"].(int)
|
|
||||||
if _, ok := del["ip_count"]; ok {
|
|
||||||
del["ip_count"] = del["ip_count"].(int) + addSet.Len()
|
|
||||||
} else {
|
|
||||||
del["ip_count"] = addSet.Len()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if newMap["ip_count"].(int)-oldMap["ip_count"].(int) > 0 {
|
|
||||||
add["account_id"] = oldMap["account_id"].(int)
|
|
||||||
add["ip_count"] = newMap["ip_count"].(int) - oldMap["ip_count"].(int)
|
|
||||||
}
|
|
||||||
if _, ok := add["account_id"]; ok {
|
|
||||||
addList = append(addList, add)
|
|
||||||
}
|
|
||||||
if _, ok := del["account_id"]; ok {
|
|
||||||
ipsLen := 0
|
|
||||||
if _, ok := del["ips"]; ok {
|
|
||||||
ipsLen = del["ips"].(*schema.Set).Len()
|
|
||||||
}
|
|
||||||
freeCount := del["ip_count"].(int) - ipsLen
|
|
||||||
if freeCount > 0 {
|
|
||||||
req := extnet.GetReservedIP{
|
|
||||||
AccountID: uint64(del["account_id"].(int)),
|
|
||||||
ExtNetID: uint64(d.Get("extnet_id").(int)),
|
|
||||||
}
|
|
||||||
resIpsList, err := c.CloudBroker().ExtNet().GetReservedIP(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
errs = errors.Join(errs, err)
|
|
||||||
}
|
|
||||||
freeIPs := getFreeIps(resIpsList[0].Reservations, newMap["ips"], del["ips"])
|
|
||||||
if _, ok := del["ips"]; !ok {
|
|
||||||
del["ips"] = schema.NewSet(schema.HashString, []interface{}{})
|
|
||||||
}
|
|
||||||
for i := 0; i < freeCount; i++ {
|
|
||||||
del["ips"].(*schema.Set).Add(freeIPs[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
delList = append(delList, del)
|
|
||||||
}
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if found {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
delList = append(delList, oldReservedIP)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, newReservedIP := range newList {
|
|
||||||
newMap := newReservedIP.(map[string]interface{})
|
|
||||||
found := false
|
|
||||||
for _, oldReservedIP := range oldList {
|
|
||||||
oldMap := oldReservedIP.(map[string]interface{})
|
|
||||||
if newMap["account_id"] == oldMap["account_id"] {
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if found {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
addList = append(addList, newReservedIP)
|
|
||||||
}
|
|
||||||
|
|
||||||
if errs != nil {
|
|
||||||
d.Set("reserved_ip", oldSet)
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// getFreeIps returns array IPs which can be deleted
|
|
||||||
func getFreeIps(reserved []extnet.Reservations, newIps, delIps interface{}) []string {
|
|
||||||
newIpsList := make([]interface{}, 0)
|
|
||||||
delIpsList := make([]interface{}, 0)
|
|
||||||
if newIps != nil {
|
|
||||||
newIpsList = newIps.(*schema.Set).List()
|
|
||||||
}
|
|
||||||
if delIps != nil {
|
|
||||||
delIpsList = delIps.(*schema.Set).List()
|
|
||||||
}
|
|
||||||
newIpsMap := make(map[string]struct{}, len(newIpsList))
|
|
||||||
delIpsMap := make(map[string]struct{}, len(delIpsList))
|
|
||||||
freeIPs := make([]string, 0)
|
|
||||||
for _, ip := range newIpsList {
|
|
||||||
newIpsMap[ip.(string)] = struct{}{}
|
|
||||||
}
|
|
||||||
for _, ip := range delIpsList {
|
|
||||||
delIpsMap[ip.(string)] = struct{}{}
|
|
||||||
}
|
|
||||||
for _, item := range reserved {
|
|
||||||
if _, ok := newIpsMap[item.IP]; ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if _, ok := delIpsMap[item.IP]; ok {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
freeIPs = append(freeIPs, item.IP)
|
|
||||||
}
|
|
||||||
return freeIPs
|
|
||||||
}
|
|
||||||
|
|
||||||
func validateReserveIPs(ctx context.Context, d *schema.ResourceDiff, m interface{}) error {
|
|
||||||
list := d.Get("reserved_ip").(*schema.Set).List()
|
|
||||||
var errs error
|
|
||||||
for _, reservedIP := range list {
|
|
||||||
reservedIPMap := reservedIP.(map[string]interface{})
|
|
||||||
var countIP, ipsLen int
|
|
||||||
if _, ok := reservedIPMap["ip_count"]; ok {
|
|
||||||
countIP = reservedIPMap["ip_count"].(int)
|
|
||||||
}
|
|
||||||
if _, ok := reservedIPMap["ips"]; ok {
|
|
||||||
ipsLen = reservedIPMap["ips"].(*schema.Set).Len()
|
|
||||||
}
|
|
||||||
if ipsLen > countIP {
|
|
||||||
errs = errors.Join(errs, fmt.Errorf("for the reserved_ip block with account_id %d the count parameter must be greater than or equal to len the ips array", reservedIPMap["account_id"].(int)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return errs
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -34,45 +34,21 @@ package grid
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"os"
|
"strconv"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
log "github.com/sirupsen/logrus"
|
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceGridGetDiagnosisRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceGridGetDiagnosisRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
filePath := "diagnosis.tar.gz"
|
|
||||||
if userPath, ok := d.GetOk("file_path"); ok {
|
|
||||||
filePath = userPath.(string)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debugf("dataSourceGridGetDiagnosisRead: create file with name: %s", filePath)
|
|
||||||
file, err := os.Create(filePath)
|
|
||||||
defer file.Close()
|
|
||||||
if err != nil {
|
|
||||||
d.SetId("") // ensure ID is empty in this case
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
diagnosis, err := utilityGridGetDiagnosisCheckPresence(ctx, d, m)
|
diagnosis, err := utilityGridGetDiagnosisCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
d.SetId(strconv.Itoa(d.Get("gid").(int)))
|
||||||
log.Debugf("dataSourceGridGetDiagnosisRead: write data to file with name: %s", filePath)
|
d.Set("diagnosis", diagnosis)
|
||||||
_, err = file.WriteString(diagnosis)
|
|
||||||
if err != nil {
|
|
||||||
d.SetId("") // ensure ID is empty in this case
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,3 +66,29 @@ func DataSourceGridGetDiagnosis() *schema.Resource {
|
|||||||
Schema: dataSourceGridGetDiagnosisSchemaMake(),
|
Schema: dataSourceGridGetDiagnosisSchemaMake(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func dataSourceGridPostDiagnosisRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
diagnosis, err := utilityGridPostDiagnosisCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
d.SetId(strconv.Itoa(d.Get("gid").(int)))
|
||||||
|
d.Set("diagnosis", diagnosis)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceGridPostDiagnosis() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceGridPostDiagnosisRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceGridPostDiagnosisSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -586,10 +586,23 @@ func dataSourceGridGetDiagnosisSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
},
|
},
|
||||||
"file_path": {
|
"diagnosis": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceGridPostDiagnosisSchemaMake() map[string]*schema.Schema {
|
||||||
|
return map[string]*schema.Schema{
|
||||||
|
"gid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
},
|
},
|
||||||
|
"diagnosis": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -62,3 +62,23 @@ func utilityGridGetDiagnosisCheckPresence(ctx context.Context, d *schema.Resourc
|
|||||||
|
|
||||||
return gridGetDiagnosis, nil
|
return gridGetDiagnosis, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func utilityGridPostDiagnosisCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (string, error) {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
req := grid.GetDiagnosisRequest{}
|
||||||
|
|
||||||
|
if d.Id() != "" {
|
||||||
|
id, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||||
|
req.GID = id
|
||||||
|
} else {
|
||||||
|
req.GID = uint64(d.Get("gid").(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Debugf("utilityGridPostDiagnosisCheckPresence: load grid post diagnosis")
|
||||||
|
gridPostDiagnosis, err := c.CloudBroker().Grid().GetDiagnosis(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return gridPostDiagnosis, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ func flattenImage(d *schema.ResourceData, img *image.RecordImage) {
|
|||||||
d.Set("sep_id", img.SEPID)
|
d.Set("sep_id", img.SEPID)
|
||||||
d.Set("shared_with", img.SharedWith)
|
d.Set("shared_with", img.SharedWith)
|
||||||
d.Set("size", img.Size)
|
d.Set("size", img.Size)
|
||||||
d.Set("snapshot_id", img.SnapshotID)
|
|
||||||
d.Set("status", img.Status)
|
d.Set("status", img.Status)
|
||||||
d.Set("tech_status", img.TechStatus)
|
d.Set("tech_status", img.TechStatus)
|
||||||
d.Set("image_type", img.Type)
|
d.Set("image_type", img.Type)
|
||||||
@@ -93,48 +92,47 @@ func flattenImageList(il *image.ListImages) []map[string]interface{} {
|
|||||||
cdPresentedTo, _ := json.Marshal(item.CdPresentedTo)
|
cdPresentedTo, _ := json.Marshal(item.CdPresentedTo)
|
||||||
|
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"image_id": item.ID,
|
"image_id": item.ID,
|
||||||
"unc_path": item.UNCPath,
|
"unc_path": item.UNCPath,
|
||||||
"account_id": item.AccountID,
|
"account_id": item.AccountID,
|
||||||
"acl": flattenAcl(item.ACL),
|
"acl": flattenAcl(item.ACL),
|
||||||
"architecture": item.Architecture,
|
"architecture": item.Architecture,
|
||||||
"boot_type": item.BootType,
|
"boot_type": item.BootType,
|
||||||
"bootable": item.Bootable,
|
"bootable": item.Bootable,
|
||||||
"computeci_id": item.ComputeCIID,
|
"computeci_id": item.ComputeCIID,
|
||||||
"cd_presented_to": string(cdPresentedTo),
|
"cd_presented_to": string(cdPresentedTo),
|
||||||
"deleted_time": item.DeletedTime,
|
"deleted_time": item.DeletedTime,
|
||||||
"desc": item.Description,
|
"desc": item.Description,
|
||||||
"drivers": item.Drivers,
|
"drivers": item.Drivers,
|
||||||
"enabled": item.Enabled,
|
"enabled": item.Enabled,
|
||||||
"gid": item.GID,
|
"gid": item.GID,
|
||||||
"guid": item.GUID,
|
"guid": item.GUID,
|
||||||
"history": flattenHistory(item.History),
|
"history": flattenHistory(item.History),
|
||||||
"hot_resize": item.HotResize,
|
"hot_resize": item.HotResize,
|
||||||
"last_modified": item.LastModified,
|
"last_modified": item.LastModified,
|
||||||
"link_to": item.LinkTo,
|
"link_to": item.LinkTo,
|
||||||
"milestones": item.Milestones,
|
"milestones": item.Milestones,
|
||||||
"name": item.Name,
|
"name": item.Name,
|
||||||
"network_interface_naming": item.NetworkInterfaceNaming,
|
"network_interface_naming": item.NetworkInterfaceNaming,
|
||||||
"password": item.Password,
|
"password": item.Password,
|
||||||
"pool_name": item.Pool,
|
"pool_name": item.Pool,
|
||||||
"present_to": item.PresentTo,
|
"present_to": item.PresentTo,
|
||||||
"provider_name": item.ProviderName,
|
"provider_name": item.ProviderName,
|
||||||
"purge_attempts": item.PurgeAttempts,
|
"purge_attempts": item.PurgeAttempts,
|
||||||
"reference_id": item.ReferenceID,
|
"reference_id": item.ReferenceID,
|
||||||
"res_id": item.ResID,
|
"res_id": item.ResID,
|
||||||
"res_name": item.ResName,
|
"res_name": item.ResName,
|
||||||
"rescuecd": item.RescueCD,
|
"rescuecd": item.RescueCD,
|
||||||
"sep_id": item.SEPID,
|
"sep_id": item.SEPID,
|
||||||
"shared_with": item.SharedWith,
|
"shared_with": item.SharedWith,
|
||||||
"size": item.Size,
|
"size": item.Size,
|
||||||
"snapshot_id": item.SnapshotID,
|
"status": item.Status,
|
||||||
"status": item.Status,
|
"tech_status": item.TechStatus,
|
||||||
"tech_status": item.TechStatus,
|
"image_type": item.Type,
|
||||||
"image_type": item.Type,
|
"url": item.URL,
|
||||||
"url": item.URL,
|
"username": item.Username,
|
||||||
"username": item.Username,
|
"version": item.Version,
|
||||||
"version": item.Version,
|
"virtual": item.Virtual,
|
||||||
"virtual": item.Virtual,
|
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -622,11 +622,6 @@ func dataSourceImageListSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "image size",
|
Description: "image size",
|
||||||
},
|
},
|
||||||
"snapshot_id": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
Description: "snapshot id",
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -880,11 +875,6 @@ func dataSourceImageSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "image size",
|
Description: "image size",
|
||||||
},
|
},
|
||||||
"snapshot_id": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
Description: "snapshot id",
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -1134,11 +1124,6 @@ func resourceCDROMImageSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"snapshot_id": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
Description: "snapshot id",
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -1430,11 +1415,6 @@ func resourceImageSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"snapshot_id": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
Description: "snapshot id",
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -1709,11 +1689,6 @@ func resourceVirtualImageSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "image size",
|
Description: "image size",
|
||||||
},
|
},
|
||||||
"snapshot_id": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
Description: "snapshot id",
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -1992,11 +1967,6 @@ func resourceImageFromBlankComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"snapshot_id": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
Description: "snapshot id",
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -2271,11 +2241,6 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"snapshot_id": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
Description: "snapshot id",
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, p
|
|||||||
d.Set("affinity_rules", flattenAffinityRules(computeRec.AffinityRules))
|
d.Set("affinity_rules", flattenAffinityRules(computeRec.AffinityRules))
|
||||||
d.Set("anti_affinity_rules", flattenAffinityRules(computeRec.AntiAffinityRules))
|
d.Set("anti_affinity_rules", flattenAffinityRules(computeRec.AntiAffinityRules))
|
||||||
d.Set("arch", computeRec.Arch)
|
d.Set("arch", computeRec.Arch)
|
||||||
d.Set("auto_start_w_node", computeRec.AutoStart)
|
|
||||||
d.Set("boot_order", computeRec.BootOrder)
|
d.Set("boot_order", computeRec.BootOrder)
|
||||||
d.Set("boot_disk_id", bootDisk.ID)
|
d.Set("boot_disk_id", bootDisk.ID)
|
||||||
// we intentionally use the SizeMax field, do not change it until the BootDiskSize field is fixed on the platform
|
// we intentionally use the SizeMax field, do not change it until the BootDiskSize field is fixed on the platform
|
||||||
@@ -76,7 +75,6 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, p
|
|||||||
d.Set("numa_node_id", computeRec.NumaNodeId)
|
d.Set("numa_node_id", computeRec.NumaNodeId)
|
||||||
d.Set("os_users", flattenOSUsers(computeRec.OSUsers))
|
d.Set("os_users", flattenOSUsers(computeRec.OSUsers))
|
||||||
d.Set("pinned", computeRec.Pinned)
|
d.Set("pinned", computeRec.Pinned)
|
||||||
d.Set("preferred_cpu", computeRec.PreferredCPU)
|
|
||||||
d.Set("reference_id", computeRec.ReferenceID)
|
d.Set("reference_id", computeRec.ReferenceID)
|
||||||
d.Set("registered", computeRec.Registered)
|
d.Set("registered", computeRec.Registered)
|
||||||
d.Set("res_name", computeRec.ResName)
|
d.Set("res_name", computeRec.ResName)
|
||||||
@@ -94,8 +92,7 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, p
|
|||||||
d.Set("updated_time", computeRec.UpdatedTime)
|
d.Set("updated_time", computeRec.UpdatedTime)
|
||||||
d.Set("user_data", string(userData))
|
d.Set("user_data", string(userData))
|
||||||
d.Set("user_managed", computeRec.UserManaged)
|
d.Set("user_managed", computeRec.UserManaged)
|
||||||
d.Set("vnc_password", computeRec.VNCPassword)
|
d.Set("vgpus", flattenVGPUs(computeRec.VGPUs))
|
||||||
d.Set("vgpus", computeRec.VGPUs)
|
|
||||||
d.Set("virtual_image_id", computeRec.VirtualImageID)
|
d.Set("virtual_image_id", computeRec.VirtualImageID)
|
||||||
d.Set("virtual_image_name", computeRec.VirtualImageName)
|
d.Set("virtual_image_name", computeRec.VirtualImageName)
|
||||||
d.Set("pci_devices", flattenPCI(*pciList))
|
d.Set("pci_devices", flattenPCI(*pciList))
|
||||||
@@ -297,7 +294,6 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
|
|||||||
"affinity_weight": computeItem.AffinityWeight,
|
"affinity_weight": computeItem.AffinityWeight,
|
||||||
"anti_affinity_rules": flattenListRules(computeItem.AntiAffinityRules),
|
"anti_affinity_rules": flattenListRules(computeItem.AntiAffinityRules),
|
||||||
"arch": computeItem.Arch,
|
"arch": computeItem.Arch,
|
||||||
"auto_start_w_node": computeItem.AutoStart,
|
|
||||||
"chipset": computeItem.Chipset,
|
"chipset": computeItem.Chipset,
|
||||||
"cd_image_id": computeItem.CdImageId,
|
"cd_image_id": computeItem.CdImageId,
|
||||||
"boot_order": computeItem.BootOrder,
|
"boot_order": computeItem.BootOrder,
|
||||||
@@ -333,7 +329,6 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
|
|||||||
"numa_node_id": computeItem.NumaNodeId,
|
"numa_node_id": computeItem.NumaNodeId,
|
||||||
"os_users": flattenOSUsers(computeItem.OSUsers),
|
"os_users": flattenOSUsers(computeItem.OSUsers),
|
||||||
"pinned": computeItem.Pinned,
|
"pinned": computeItem.Pinned,
|
||||||
"preferred_cpu": computeItem.PreferredCPU,
|
|
||||||
"ram": computeItem.RAM,
|
"ram": computeItem.RAM,
|
||||||
"reference_id": computeItem.ReferenceID,
|
"reference_id": computeItem.ReferenceID,
|
||||||
"registered": computeItem.Registered,
|
"registered": computeItem.Registered,
|
||||||
@@ -618,7 +613,6 @@ func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute
|
|||||||
d.Set("affinity_weight", compFacts.AffinityWeight)
|
d.Set("affinity_weight", compFacts.AffinityWeight)
|
||||||
d.Set("anti_affinity_rules", flattenAffinityRules(compFacts.AntiAffinityRules))
|
d.Set("anti_affinity_rules", flattenAffinityRules(compFacts.AntiAffinityRules))
|
||||||
d.Set("arch", compFacts.Arch)
|
d.Set("arch", compFacts.Arch)
|
||||||
d.Set("auto_start_w_node", compFacts.AutoStart)
|
|
||||||
d.Set("boot_order", compFacts.BootOrder)
|
d.Set("boot_order", compFacts.BootOrder)
|
||||||
d.Set("chipset", compFacts.Chipset)
|
d.Set("chipset", compFacts.Chipset)
|
||||||
d.Set("cd_image_id", compFacts.CdImageId)
|
d.Set("cd_image_id", compFacts.CdImageId)
|
||||||
@@ -658,7 +652,6 @@ func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute
|
|||||||
d.Set("numa_node_id", compFacts.NumaNodeId)
|
d.Set("numa_node_id", compFacts.NumaNodeId)
|
||||||
d.Set("os_users", flattenOSUsers(compFacts.OSUsers))
|
d.Set("os_users", flattenOSUsers(compFacts.OSUsers))
|
||||||
d.Set("pinned", compFacts.Pinned)
|
d.Set("pinned", compFacts.Pinned)
|
||||||
d.Set("preferred_cpu", compFacts.PreferredCPU)
|
|
||||||
d.Set("ram", compFacts.RAM)
|
d.Set("ram", compFacts.RAM)
|
||||||
d.Set("reference_id", compFacts.ReferenceID)
|
d.Set("reference_id", compFacts.ReferenceID)
|
||||||
d.Set("registered", compFacts.Registered)
|
d.Set("registered", compFacts.Registered)
|
||||||
@@ -678,8 +671,7 @@ func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute
|
|||||||
d.Set("updated_time", compFacts.UpdatedTime)
|
d.Set("updated_time", compFacts.UpdatedTime)
|
||||||
d.Set("user_data", string(userData))
|
d.Set("user_data", string(userData))
|
||||||
d.Set("user_managed", compFacts.UserManaged)
|
d.Set("user_managed", compFacts.UserManaged)
|
||||||
d.Set("vnc_password", compFacts.VNCPassword)
|
d.Set("vgpus", flattenVGPUs(compFacts.VGPUs))
|
||||||
d.Set("vgpus", compFacts.VGPUs)
|
|
||||||
d.Set("virtual_image_id", compFacts.VirtualImageID)
|
d.Set("virtual_image_id", compFacts.VirtualImageID)
|
||||||
d.Set("virtual_image_name", compFacts.VirtualImageName)
|
d.Set("virtual_image_name", compFacts.VirtualImageName)
|
||||||
d.Set("pci_devices", flattenPCI(*pciList))
|
d.Set("pci_devices", flattenPCI(*pciList))
|
||||||
@@ -837,3 +829,33 @@ func flattendDiskSnapshotList(sl compute.ListDetailedSnapshots) []interface{} {
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func flattenVGPUs(vgpus []compute.ItemVGPU) []map[string]interface{} {
|
||||||
|
res := make([]map[string]interface{}, len(vgpus))
|
||||||
|
|
||||||
|
for i, vgpu := range vgpus {
|
||||||
|
|
||||||
|
res[i] = map[string]interface{}{
|
||||||
|
"id": int(vgpu.ID),
|
||||||
|
"gid": int(vgpu.GID),
|
||||||
|
"type": vgpu.Type,
|
||||||
|
"mode": vgpu.Mode,
|
||||||
|
"status": vgpu.Status,
|
||||||
|
"profile_id": vgpu.ProfileID,
|
||||||
|
"ram": int(vgpu.RAM),
|
||||||
|
"last_update_time": int(vgpu.LastUpdateTime),
|
||||||
|
"created_time": int(vgpu.CreatedTime),
|
||||||
|
"deleted_time": int(vgpu.DeletedTime),
|
||||||
|
"vmid": int(vgpu.VMID),
|
||||||
|
"pgpuid": int(vgpu.PGPUID),
|
||||||
|
"reference_id": vgpu.ReferenceID,
|
||||||
|
"account_id": int(vgpu.AccountID),
|
||||||
|
"rg_id": int(vgpu.RGID),
|
||||||
|
"last_claimed_by": int(vgpu.LastClaimedBy),
|
||||||
|
"pci_slot": int(vgpu.PCISlot),
|
||||||
|
"guid": int(vgpu.GUID),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|||||||
@@ -197,16 +197,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
createReqX86.HPBacked = d.Get("hp_backed").(bool)
|
createReqX86.HPBacked = d.Get("hp_backed").(bool)
|
||||||
createReqX86.Chipset = d.Get("chipset").(string)
|
createReqX86.Chipset = d.Get("chipset").(string)
|
||||||
|
|
||||||
if preferredCPU, ok := d.GetOk("preferred_cpu"); ok {
|
|
||||||
preferredList := preferredCPU.([]interface{})
|
|
||||||
if len(preferredList) > 0 {
|
|
||||||
for _, v := range preferredList {
|
|
||||||
cpuNum := v.(int)
|
|
||||||
createReqX86.PreferredCPU = append(createReqX86.PreferredCPU, int64(cpuNum))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
apiResp, err := c.CloudBroker().KVMX86().Create(ctx, createReqX86)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -242,25 +232,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
|
|
||||||
log.Debugf("resourceComputeCreate: new simple Compute ID %d, name %s created", computeId, d.Get("name").(string))
|
log.Debugf("resourceComputeCreate: new simple Compute ID %d, name %s created", computeId, d.Get("name").(string))
|
||||||
|
|
||||||
if ars, ok := d.GetOk("pci_devices"); ok {
|
|
||||||
log.Debugf("resourceComputeCreate: add pci devices on ComputeID: %d", computeId)
|
|
||||||
addedPciDevices := ars.(*schema.Set).List()
|
|
||||||
if len(addedPciDevices) > 0 {
|
|
||||||
for _, v := range addedPciDevices {
|
|
||||||
devicesConv := v.(int)
|
|
||||||
req := compute.AttachPCIDeviceRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
DeviceID: uint64(devicesConv),
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().Compute().AttachPCIDevice(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
warnings.Add(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
extraDisks, ok := d.GetOk("extra_disks")
|
extraDisks, ok := d.GetOk("extra_disks")
|
||||||
if ok && extraDisks.(*schema.Set).Len() > 0 {
|
if ok && extraDisks.(*schema.Set).Len() > 0 {
|
||||||
log.Debugf("resourceComputeCreate: calling utilityComputeExtraDisksConfigure to attach %d extra disk(s)", extraDisks.(*schema.Set).Len())
|
log.Debugf("resourceComputeCreate: calling utilityComputeExtraDisksConfigure to attach %d extra disk(s)", extraDisks.(*schema.Set).Len())
|
||||||
@@ -289,26 +260,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if pin, ok := d.GetOk("pin_to_stack"); ok && pin.(bool) {
|
|
||||||
req := compute.PinToStackRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
TargetStackID: uint64(d.Get("stack_id").(int)),
|
|
||||||
}
|
|
||||||
|
|
||||||
if force, ok := d.Get("force_pin").(bool); ok {
|
|
||||||
req.Force = force
|
|
||||||
}
|
|
||||||
|
|
||||||
if autoStart, ok := d.Get("auto_start_w_node").(bool); ok {
|
|
||||||
req.AutoStart = autoStart
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().Compute().PinToStack(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
warnings.Add(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if libvirtSettings, ok := d.GetOk("libvirt_settings"); ok {
|
if libvirtSettings, ok := d.GetOk("libvirt_settings"); ok {
|
||||||
if libvirtSettings.(*schema.Set).Len() > 0 {
|
if libvirtSettings.(*schema.Set).Len() > 0 {
|
||||||
lvs := libvirtSettings.(*schema.Set).List()
|
lvs := libvirtSettings.(*schema.Set).List()
|
||||||
@@ -523,14 +474,17 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !d.Get("pin_to_stack").(bool) && d.Get("auto_start_w_node").(bool) {
|
if pin, ok := d.GetOk("pin_to_stack"); ok && pin.(bool) {
|
||||||
req := compute.UpdateRequest{
|
req := compute.PinToStackRequest{
|
||||||
ComputeID: computeId,
|
ComputeID: computeId,
|
||||||
AutoStart: d.Get("auto_start_w_node").(bool),
|
TargetStackID: uint64(d.Get("target_stack_id").(int)),
|
||||||
CPUPin: d.Get("cpu_pin").(bool),
|
|
||||||
HPBacked: d.Get("hp_backed").(bool),
|
|
||||||
}
|
}
|
||||||
_, err := c.CloudBroker().Compute().Update(ctx, req)
|
|
||||||
|
if force, ok := d.Get("force_pin").(bool); ok {
|
||||||
|
req.Force = force
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.CloudBroker().Compute().PinToStack(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
warnings.Add(err)
|
warnings.Add(err)
|
||||||
}
|
}
|
||||||
@@ -553,6 +507,24 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ars, ok := d.GetOk("pci_devices"); ok {
|
||||||
|
log.Debugf("resourceComputeCreate: add pci devices on ComputeID: %d", computeId)
|
||||||
|
addedPciDevices := ars.(*schema.Set).List()
|
||||||
|
if len(addedPciDevices) > 0 {
|
||||||
|
for _, v := range addedPciDevices {
|
||||||
|
devicesConv := v.(int)
|
||||||
|
req := compute.AttachPCIDeviceRequest{
|
||||||
|
ComputeID: computeId,
|
||||||
|
DeviceID: uint64(devicesConv),
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := c.CloudBroker().Compute().AttachPCIDevice(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
warnings.Add(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("resourceComputeCreate: new Compute ID %d, name %s creation sequence complete", computeId, d.Get("name").(string))
|
log.Debugf("resourceComputeCreate: new Compute ID %d, name %s creation sequence complete", computeId, d.Get("name").(string))
|
||||||
@@ -707,18 +679,6 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if d.HasChange("pin_to_stack") {
|
|
||||||
if err := utilityComputePinToStack(ctx, d, m); err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if d.HasChanges("description", "name", "numa_affinity", "cpu_pin", "hp_backed", "chipset", "auto_start_w_node", "preferred_cpu") {
|
|
||||||
if err := utilityComputeUpdate(ctx, d, m); err != nil {
|
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if d.HasChanges("network", "libvirt_settings") {
|
if d.HasChanges("network", "libvirt_settings") {
|
||||||
err = utilityComputeNetworksConfigure(ctx, d, m) // pass do_delta = true to apply changes, if any
|
err = utilityComputeNetworksConfigure(ctx, d, m) // pass do_delta = true to apply changes, if any
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -726,6 +686,12 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.HasChanges("description", "name", "numa_affinity", "cpu_pin", "hp_backed") {
|
||||||
|
if err := utilityComputeUpdate(ctx, d, m); err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange("disks") {
|
if d.HasChange("disks") {
|
||||||
if err := utilityComputeUpdateDisks(ctx, d, m); err != nil {
|
if err := utilityComputeUpdateDisks(ctx, d, m); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -786,6 +752,12 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if d.HasChange("pin_to_stack") {
|
||||||
|
if err := utilityComputePinToStack(ctx, d, m); err != nil {
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange("pause") {
|
if d.HasChange("pause") {
|
||||||
if err := utilityComputePause(ctx, d, m); err != nil {
|
if err := utilityComputePause(ctx, d, m); err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
@@ -830,16 +802,6 @@ func resourceComputeDelete(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||||
|
|
||||||
if start, ok := d.GetOk("started"); ok {
|
|
||||||
if start.(bool) {
|
|
||||||
req := compute.StopRequest{ComputeID: computeId}
|
|
||||||
log.Debugf("resourceComputeDelete: stoping Compute ID %d", computeId)
|
|
||||||
if _, err := c.CloudBroker().Compute().Stop(ctx, req); err != nil {
|
|
||||||
diag.FromErr(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pciList, ok := d.GetOk("pci_devices")
|
pciList, ok := d.GetOk("pci_devices")
|
||||||
|
|
||||||
if d.Get("permanently").(bool) && ok {
|
if d.Get("permanently").(bool) && ok {
|
||||||
@@ -877,16 +839,8 @@ func ResourceCompute() *schema.Resource {
|
|||||||
SchemaVersion: 1,
|
SchemaVersion: 1,
|
||||||
|
|
||||||
CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
|
CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
|
||||||
if diff.HasChanges() || diff.HasChanges("chipset", "pin_to_stack", "auto_start_w_node", "libvirt_settings", "network", "affinity_rules", "anti_affinity_rules",
|
if diff.HasChanges() || diff.HasChanges("libvirt_settings", "network", "affinity_rules", "anti_affinity_rules",
|
||||||
"extra_disks", "tags", "port_forwarding", "user_access", "snapshot", "pci_devices", "preferred_cpu") {
|
"disks", "extra_disks", "tags", "port_forwarding", "user_access", "snapshot", "pci_devices") {
|
||||||
diff.SetNewComputed("updated_time")
|
|
||||||
diff.SetNewComputed("updated_by")
|
|
||||||
}
|
|
||||||
if diff.HasChanges("pin_to_stack") {
|
|
||||||
diff.SetNewComputed("pinned")
|
|
||||||
}
|
|
||||||
if diff.HasChanges("started") {
|
|
||||||
diff.SetNewComputed("tech_status")
|
|
||||||
diff.SetNewComputed("updated_time")
|
diff.SetNewComputed("updated_time")
|
||||||
diff.SetNewComputed("updated_by")
|
diff.SetNewComputed("updated_by")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -134,10 +134,6 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"auto_start_w_node": {
|
|
||||||
Type: schema.TypeBool,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"boot_order": {
|
"boot_order": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -792,13 +788,6 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"preferred_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"ram": {
|
"ram": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -913,15 +902,88 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"vnc_password": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vgpus": {
|
"vgpus": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Schema{
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
|
"id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"mode": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"profile_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ram": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_update_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"created_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"deleted_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"vmid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pgpuid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"reference_id": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_claimed_by": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pci_slot": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"bus_number": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"guid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"virtual_image_id": {
|
"virtual_image_id": {
|
||||||
@@ -1005,11 +1067,6 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Description: "Find by image ID",
|
Description: "Find by image ID",
|
||||||
},
|
},
|
||||||
"cd_image_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Optional: true,
|
|
||||||
Description: "Find by CD image ID",
|
|
||||||
},
|
|
||||||
"extnet_name": {
|
"extnet_name": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -1165,10 +1222,6 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"auto_start_w_node": {
|
|
||||||
Type: schema.TypeBool,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"boot_order": {
|
"boot_order": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -1498,13 +1551,6 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"preferred_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"ram": {
|
"ram": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -1622,8 +1668,85 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
|
|||||||
"vgpus": {
|
"vgpus": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Schema{
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
|
"id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"mode": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"profile_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ram": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_update_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"created_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"deleted_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"vmid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pgpuid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"reference_id": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"last_claimed_by": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"pci_slot": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"bus_number": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"guid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"vins_connected": {
|
"vins_connected": {
|
||||||
@@ -1833,10 +1956,6 @@ func dataSourceComputeListDeletedSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"auto_start_w_node": {
|
|
||||||
Type: schema.TypeBool,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"boot_order": {
|
"boot_order": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -2118,13 +2237,6 @@ func dataSourceComputeListDeletedSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"preferred_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"reference_id": {
|
"reference_id": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -3417,10 +3529,9 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Default: false,
|
Default: false,
|
||||||
},
|
},
|
||||||
"auto_start_w_node": {
|
"target_stack_id": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Computed: true,
|
|
||||||
},
|
},
|
||||||
"force_pin": {
|
"force_pin": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
@@ -3448,6 +3559,12 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Default: false,
|
Default: false,
|
||||||
},
|
},
|
||||||
|
"auto_start": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
Description: "Flag for redeploy compute",
|
||||||
|
},
|
||||||
"force_stop": {
|
"force_stop": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -3460,6 +3577,13 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Default: false,
|
Default: false,
|
||||||
Description: "Flag for resize compute",
|
Description: "Flag for resize compute",
|
||||||
},
|
},
|
||||||
|
"data_disks": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
ValidateFunc: validation.StringInSlice([]string{"KEEP", "DETACH", "DESTROY"}, false),
|
||||||
|
Default: "DETACH",
|
||||||
|
Description: "Flag for redeploy compute",
|
||||||
|
},
|
||||||
"detach_disks": {
|
"detach_disks": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -3489,15 +3613,6 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Default: false,
|
Default: false,
|
||||||
Description: "Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.",
|
Description: "Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.",
|
||||||
},
|
},
|
||||||
"preferred_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Optional: true,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
Description: "Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False",
|
|
||||||
},
|
|
||||||
"pci_devices": {
|
"pci_devices": {
|
||||||
Type: schema.TypeSet,
|
Type: schema.TypeSet,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -3945,10 +4060,6 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"vnc_password": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vgpus": {
|
"vgpus": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -135,22 +135,6 @@ func utilityComputeResize(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
resizeReq.CPU = 0
|
resizeReq.CPU = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if resizeReq.CPU != 0 {
|
|
||||||
if preferredCPU, ok := d.GetOk("preferred_cpu"); ok {
|
|
||||||
preferredList := preferredCPU.([]interface{})
|
|
||||||
if len(preferredList) > 0 {
|
|
||||||
for _, v := range preferredList {
|
|
||||||
cpuNum := v.(int)
|
|
||||||
resizeReq.PreferredCPU = append(resizeReq.PreferredCPU, int64(cpuNum))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
oldPCPU, newPCPU := d.GetChange("preferred_cpu")
|
|
||||||
if len(oldPCPU.([]interface{})) != 0 && len(newPCPU.([]interface{})) == 0 {
|
|
||||||
resizeReq.PreferredCPU = []int64{-1}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
oldRam, newRam := d.GetChange("ram")
|
oldRam, newRam := d.GetChange("ram")
|
||||||
if oldRam.(int) != newRam.(int) {
|
if oldRam.(int) != newRam.(int) {
|
||||||
resizeReq.RAM = uint64(newRam.(int))
|
resizeReq.RAM = uint64(newRam.(int))
|
||||||
@@ -474,19 +458,6 @@ func utilityComputeExtraDisksConfigure(ctx context.Context, d *schema.ResourceDa
|
|||||||
|
|
||||||
if detach_set.Len() > 0 {
|
if detach_set.Len() > 0 {
|
||||||
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
|
||||||
stopReq := compute.StopRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
Force: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
if depresent, ok := d.Get("depresent").(bool); ok {
|
|
||||||
stopReq.Depresent = depresent
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().Compute().Stop(ctx, stopReq)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, diskId := range detach_set.List() {
|
for _, diskId := range detach_set.List() {
|
||||||
req := compute.DiskDetachRequest{
|
req := compute.DiskDetachRequest{
|
||||||
@@ -501,14 +472,6 @@ func utilityComputeExtraDisksConfigure(ctx context.Context, d *schema.ResourceDa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
req := compute.StartRequest{
|
|
||||||
ComputeID: computeId,
|
|
||||||
AltBootID: 0,
|
|
||||||
}
|
|
||||||
_, err = c.CloudBroker().Compute().Start(ctx, req)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
attach_set := new_set.(*schema.Set).Difference(old_set.(*schema.Set))
|
attach_set := new_set.(*schema.Set).Difference(old_set.(*schema.Set))
|
||||||
@@ -868,33 +831,21 @@ func utilityComputeUpdate(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
if d.HasChange("numa_affinity") {
|
if d.HasChange("numa_affinity") {
|
||||||
req.NumaAffinity = d.Get("numa_affinity").(string)
|
req.NumaAffinity = d.Get("numa_affinity").(string)
|
||||||
}
|
}
|
||||||
|
if d.HasChange("cpu_pin") {
|
||||||
|
req.CPUPin = d.Get("cpu_pin").(bool)
|
||||||
|
}
|
||||||
|
if d.HasChange("hp_backed") {
|
||||||
|
req.HPBacked = d.Get("hp_backed").(bool)
|
||||||
|
}
|
||||||
|
|
||||||
if d.HasChange("chipset") {
|
if d.HasChange("chipset") {
|
||||||
req.Chipset = d.Get("chipset").(string)
|
req.Chipset = d.Get("chipset").(string)
|
||||||
}
|
}
|
||||||
req.CPUPin = d.Get("cpu_pin").(bool)
|
|
||||||
req.HPBacked = d.Get("hp_backed").(bool)
|
|
||||||
req.AutoStart = d.Get("auto_start_w_node").(bool)
|
|
||||||
|
|
||||||
if d.HasChange("preferred_cpu") {
|
|
||||||
if preferredCPU, ok := d.GetOk("preferred_cpu"); ok {
|
|
||||||
preferredList := preferredCPU.([]interface{})
|
|
||||||
if len(preferredList) > 0 {
|
|
||||||
for _, v := range preferredList {
|
|
||||||
cpuNum := v.(int)
|
|
||||||
req.PreferredCPU = append(req.PreferredCPU, int64(cpuNum))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
oldPCPU, newPCPU := d.GetChange("preferred_cpu")
|
|
||||||
if len(oldPCPU.([]interface{})) != 0 && len(newPCPU.([]interface{})) == 0 {
|
|
||||||
req.PreferredCPU = []int64{-1}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Note bene: numa_affinity, cpu_pin and hp_backed are not allowed to be changed for compute in STARTED tech status.
|
// Note bene: numa_affinity, cpu_pin and hp_backed are not allowed to be changed for compute in STARTED tech status.
|
||||||
// If STARTED, we need to stop it before update
|
// If STARTED, we need to stop it before update
|
||||||
var isStopRequired bool
|
var isStopRequired bool
|
||||||
if d.HasChanges("numa_affinity", "cpu_pin", "hp_backed", "chipset", "preferred_cpu") && d.Get("started").(bool) {
|
if d.HasChanges("numa_affinity", "cpu_pin", "hp_backed") && d.Get("started").(bool) {
|
||||||
isStopRequired = true
|
isStopRequired = true
|
||||||
}
|
}
|
||||||
if isStopRequired {
|
if isStopRequired {
|
||||||
@@ -1456,17 +1407,12 @@ func utilityComputePinToStack(ctx context.Context, d *schema.ResourceData, m int
|
|||||||
if !oldPin.(bool) && newPin.(bool) {
|
if !oldPin.(bool) && newPin.(bool) {
|
||||||
req := compute.PinToStackRequest{
|
req := compute.PinToStackRequest{
|
||||||
ComputeID: computeId,
|
ComputeID: computeId,
|
||||||
TargetStackID: uint64(d.Get("stack_id").(int)),
|
TargetStackID: uint64(d.Get("target_stack_id").(int)),
|
||||||
}
|
}
|
||||||
|
|
||||||
if force, ok := d.Get("force_pin").(bool); ok {
|
if force, ok := d.Get("force_pin").(bool); ok {
|
||||||
req.Force = force
|
req.Force = force
|
||||||
}
|
}
|
||||||
|
|
||||||
if autoStart, ok := d.Get("auto_start_w_node").(bool); ok {
|
|
||||||
req.AutoStart = autoStart
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().Compute().PinToStack(ctx, req)
|
_, err := c.CloudBroker().Compute().PinToStack(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -1534,9 +1480,6 @@ func utilityComputeUpdateImage(ctx context.Context, d *schema.ResourceData, m in
|
|||||||
if depresent, ok := d.Get("depresent").(bool); ok {
|
if depresent, ok := d.Get("depresent").(bool); ok {
|
||||||
stopReq.Depresent = depresent
|
stopReq.Depresent = depresent
|
||||||
}
|
}
|
||||||
if forceStop, ok := d.GetOk("force_stop"); ok {
|
|
||||||
stopReq.Force = forceStop.(bool)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err := c.CloudBroker().Compute().Stop(ctx, stopReq)
|
_, err := c.CloudBroker().Compute().Stop(ctx, stopReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1547,13 +1490,15 @@ func utilityComputeUpdateImage(ctx context.Context, d *schema.ResourceData, m in
|
|||||||
req := compute.RedeployRequest{
|
req := compute.RedeployRequest{
|
||||||
ComputeID: computeId,
|
ComputeID: computeId,
|
||||||
ImageID: uint64(newImage.(int)),
|
ImageID: uint64(newImage.(int)),
|
||||||
DataDisks: "KEEP",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if diskSize, ok := d.GetOk("boot_disk_size"); ok {
|
if diskSize, ok := d.GetOk("boot_disk_size"); ok {
|
||||||
req.DiskSize = uint64(diskSize.(int))
|
req.DiskSize = uint64(diskSize.(int))
|
||||||
}
|
}
|
||||||
if autoStart, ok := d.GetOk("started"); ok {
|
if dataDisks, ok := d.GetOk("data_disks"); ok {
|
||||||
|
req.DataDisks = dataDisks.(string)
|
||||||
|
}
|
||||||
|
if autoStart, ok := d.GetOk("auto_start"); ok {
|
||||||
req.AutoStart = autoStart.(bool)
|
req.AutoStart = autoStart.(bool)
|
||||||
}
|
}
|
||||||
if forceStop, ok := d.GetOk("force_stop"); ok {
|
if forceStop, ok := d.GetOk("force_stop"); ok {
|
||||||
|
|||||||
@@ -75,9 +75,6 @@ func utilityDataComputeListCheckPresence(ctx context.Context, d *schema.Resource
|
|||||||
if imageID, ok := d.GetOk("image_id"); ok {
|
if imageID, ok := d.GetOk("image_id"); ok {
|
||||||
req.ImageID = imageID.(uint64)
|
req.ImageID = imageID.(uint64)
|
||||||
}
|
}
|
||||||
if cdImageID, ok := d.GetOk("cd_image_id"); ok {
|
|
||||||
req.CDImageID = cdImageID.(uint64)
|
|
||||||
}
|
|
||||||
if extNetName, ok := d.GetOk("extnet_name"); ok {
|
if extNetName, ok := d.GetOk("extnet_name"); ok {
|
||||||
req.ExtNetName = extNetName.(string)
|
req.ExtNetName = extNetName.(string)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,14 +46,11 @@ func flattenNode(d *schema.ResourceData, item *node.RecordNode) {
|
|||||||
d.Set("consumption", flattenConsumption(item.Consumption))
|
d.Set("consumption", flattenConsumption(item.Consumption))
|
||||||
d.Set("cpu_info", flattenCpuInfo(item.CpuInfo))
|
d.Set("cpu_info", flattenCpuInfo(item.CpuInfo))
|
||||||
d.Set("cpu_allocation_ratio", item.CPUAllocationRatio)
|
d.Set("cpu_allocation_ratio", item.CPUAllocationRatio)
|
||||||
d.Set("dpdk", flattenDPDKItem(item.DPDK))
|
|
||||||
d.Set("gid", item.GID)
|
d.Set("gid", item.GID)
|
||||||
d.Set("ipaddr", item.IPAddr)
|
d.Set("ipaddr", item.IPAddr)
|
||||||
d.Set("isolated_cpus", flattenNodeItem(item.IsolatedCpus))
|
d.Set("isolated_cpus", flattenNodeItem(item.IsolatedCpus))
|
||||||
d.Set("name", item.Name)
|
d.Set("name", item.Name)
|
||||||
d.Set("need_reboot", item.NeedReboot)
|
d.Set("need_reboot", item.NeedReboot)
|
||||||
d.Set("net_addr", flattenGetNetAddr(item.NetAddr))
|
|
||||||
d.Set("network_mode", item.NetworkMode)
|
|
||||||
d.Set("nic_info", flattenNicInfo(item.NicInfo))
|
d.Set("nic_info", flattenNicInfo(item.NicInfo))
|
||||||
d.Set("numa_topology", flattenNumaTopology(item.NumaTopology))
|
d.Set("numa_topology", flattenNumaTopology(item.NumaTopology))
|
||||||
d.Set("reserved_cpus", flattenNodeItem(item.ReservedCPUs))
|
d.Set("reserved_cpus", flattenNodeItem(item.ReservedCPUs))
|
||||||
@@ -61,10 +58,6 @@ func flattenNode(d *schema.ResourceData, item *node.RecordNode) {
|
|||||||
d.Set("sriov_enabled", item.SriovEnabled)
|
d.Set("sriov_enabled", item.SriovEnabled)
|
||||||
d.Set("stack_id", item.StackID)
|
d.Set("stack_id", item.StackID)
|
||||||
d.Set("status", item.Status)
|
d.Set("status", item.Status)
|
||||||
d.Set("to_active", flattenRole(item.ToActive))
|
|
||||||
d.Set("to_installing", flattenRole(item.ToInstalling))
|
|
||||||
d.Set("to_maintenance", flattenRole(item.ToMaintenance))
|
|
||||||
d.Set("to_restricted", flattenRole(item.ToRestricted))
|
|
||||||
d.Set("version", item.Version)
|
d.Set("version", item.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,46 +106,44 @@ func flattenNodeList(nodes *node.ListNodes) []map[string]interface{} {
|
|||||||
res := make([]map[string]interface{}, 0, len(nodes.Data))
|
res := make([]map[string]interface{}, 0, len(nodes.Data))
|
||||||
for _, item := range nodes.Data {
|
for _, item := range nodes.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"additional_pkgs": flattenNodeItem(item.AdditionalPkgs),
|
"additional_pkgs": flattenNodeItem(item.AdditionalPkgs),
|
||||||
"cpu_info": flattenCpuInfo(item.CpuInfo),
|
"cpu_info": flattenCpuInfo(item.CpuInfo),
|
||||||
"description": item.Description,
|
"description": item.Description,
|
||||||
"dpdk": flattenDPDKItem(item.DPDK),
|
"gid": item.GID,
|
||||||
"gid": item.GID,
|
"guid": item.GUID,
|
||||||
"guid": item.GUID,
|
"hostkey": item.HostKey,
|
||||||
"hostkey": item.HostKey,
|
"node_id": item.ID,
|
||||||
"node_id": item.ID,
|
"ipaddr": item.IPAddr,
|
||||||
"ipaddr": item.IPAddr,
|
"isolated_cpus": flattenNodeItem(item.IsolatedCpus),
|
||||||
"isolated_cpus": flattenNodeItem(item.IsolatedCpus),
|
"lastcheck": item.LastCheck,
|
||||||
"lastcheck": item.LastCheck,
|
"machine_guid": item.MachineGUID,
|
||||||
"machine_guid": item.MachineGUID,
|
"mainboard_sn": item.MainboardSN,
|
||||||
"mainboard_sn": item.MainboardSN,
|
"memory": item.Memory,
|
||||||
"memory": item.Memory,
|
"milestones": item.Milestones,
|
||||||
"milestones": item.Milestones,
|
"model": item.Model,
|
||||||
"model": item.Model,
|
"name": item.Name,
|
||||||
"name": item.Name,
|
"need_reboot": item.NeedReboot,
|
||||||
"need_reboot": item.NeedReboot,
|
"net_addr": flattenNetAddr(item.NetAddr),
|
||||||
"net_addr": flattenNetAddr(item.NetAddr),
|
"network_mode": item.NetworkMode,
|
||||||
"network_mode": item.NetworkMode,
|
"nic_info": flattenNicInfo(item.NicInfo),
|
||||||
"nic_info": flattenNicInfo(item.NicInfo),
|
"node_uuid": item.NodeUUID,
|
||||||
"node_uuid": item.NodeUUID,
|
"numa_topology": flattenNumaTopology(item.NumaTopology),
|
||||||
"numa_topology": flattenNumaTopology(item.NumaTopology),
|
"peer_backup": item.PeerBackup,
|
||||||
"peer_backup": item.PeerBackup,
|
"peer_log": item.PeerLog,
|
||||||
"peer_log": item.PeerLog,
|
"peer_stats": item.PeerStats,
|
||||||
"peer_stats": item.PeerStats,
|
"pgpus": item.Pgpus,
|
||||||
"pgpus": item.Pgpus,
|
"public_keys": item.PublicKeys,
|
||||||
"public_keys": item.PublicKeys,
|
"release": item.Release,
|
||||||
"release": item.Release,
|
"reserved_cpus": flattenNodeItem(item.ReservedCPUs),
|
||||||
"reserved_cpus": flattenNodeItem(item.ReservedCPUs),
|
"roles": item.Roles,
|
||||||
"roles": item.Roles,
|
"seps": item.Seps,
|
||||||
"seps": item.Seps,
|
"serial_num": item.SerialNum,
|
||||||
"serial_num": item.SerialNum,
|
"sriov_enabled": item.SriovEnabled,
|
||||||
"sriov_enabled": item.SriovEnabled,
|
"stack_id": item.StackID,
|
||||||
"stack_id": item.StackID,
|
"status": item.Status,
|
||||||
"status": item.Status,
|
"tags": item.Tags,
|
||||||
"tags": item.Tags,
|
"type": item.Type,
|
||||||
"type": item.Type,
|
"version": item.Version,
|
||||||
"uefi_firmware_file": item.UEFIFirmwareFile,
|
|
||||||
"version": item.Version,
|
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
@@ -214,9 +205,9 @@ func flattenVFList(vfList []interface{}) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenNetAddr(addresses node.ListNetAddr) []map[string]interface{} {
|
func flattenNetAddr(adresses node.ListNetAddr) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0, len(addresses))
|
res := make([]map[string]interface{}, 0, len(adresses))
|
||||||
for _, item := range addresses {
|
for _, item := range adresses {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cidr": item.CIDR,
|
"cidr": item.CIDR,
|
||||||
"index": item.Index,
|
"index": item.Index,
|
||||||
@@ -230,16 +221,6 @@ func flattenNetAddr(addresses node.ListNetAddr) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenGetNetAddr(address node.NetAddr) []map[string]interface{} {
|
|
||||||
res := make([]map[string]interface{}, 1)
|
|
||||||
temp := map[string]interface{}{
|
|
||||||
"ip": address.IP,
|
|
||||||
"name": address.Name,
|
|
||||||
}
|
|
||||||
res[0] = temp
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
func flattenCpuInfo(info node.CpuInfo) []map[string]interface{} {
|
func flattenCpuInfo(info node.CpuInfo) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 1)
|
res := make([]map[string]interface{}, 1)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
@@ -269,36 +250,3 @@ func flattenNodeItem(m []interface{}) []string {
|
|||||||
}
|
}
|
||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenDPDKItem(dpdk node.DPDK) []map[string]interface{} {
|
|
||||||
res := make([]map[string]interface{}, 1)
|
|
||||||
bridges := make([]map[string]interface{}, 1)
|
|
||||||
backplane := make([]map[string]interface{}, 1)
|
|
||||||
backplane[0] = map[string]interface{}{
|
|
||||||
"interfaces": dpdk.Bridges.Backplane1.Interfaces,
|
|
||||||
"numa_node": dpdk.Bridges.Backplane1.NumaNode,
|
|
||||||
}
|
|
||||||
|
|
||||||
bridges[0] = map[string]interface{}{
|
|
||||||
"backplane1": backplane,
|
|
||||||
}
|
|
||||||
|
|
||||||
res[0] = map[string]interface{}{
|
|
||||||
"bridges": bridges,
|
|
||||||
"hp_memory": dpdk.HPMemory,
|
|
||||||
"pmd_cpu": dpdk.PMDCPU,
|
|
||||||
}
|
|
||||||
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|
||||||
func flattenRole(role node.Role) []map[string]interface{} {
|
|
||||||
res := make([]map[string]interface{}, 1)
|
|
||||||
temp := map[string]interface{}{
|
|
||||||
"actor": role.Actor,
|
|
||||||
"reason": role.Reason,
|
|
||||||
"time": role.Time,
|
|
||||||
}
|
|
||||||
res[0] = temp
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -105,55 +105,6 @@ func dataSourceNodeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"dpdk": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"bridges": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"backplane1": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"interfaces": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"numa_node": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"hp_memory": {
|
|
||||||
Type: schema.TypeMap,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"pmd_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"gid": {
|
"gid": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -180,29 +131,6 @@ func dataSourceNodeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"net_addr": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"ip": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"name": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"network_mode": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"nic_info": {
|
"nic_info": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -325,86 +253,6 @@ func dataSourceNodeSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"to_active": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"actor": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"reason": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"time": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"to_installing": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"actor": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"reason": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"time": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"to_maintenance": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"actor": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"reason": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"time": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"to_restricted": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"actor": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"reason": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"time": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"version": {
|
"version": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -501,55 +349,6 @@ func dataSourceNodeListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"dpdk": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"bridges": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"backplane1": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Resource{
|
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"interfaces": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"numa_node": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"hp_memory": {
|
|
||||||
Type: schema.TypeMap,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"pmd_cpu": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"gid": {
|
"gid": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -832,10 +631,6 @@ func dataSourceNodeListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"uefi_firmware_file": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"version": {
|
"version": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -37,16 +37,18 @@ import (
|
|||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/flattens"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenSep(d *schema.ResourceData, desSep *sep.RecordSEP) {
|
func flattenSep(d *schema.ResourceData, desSep *sep.RecordSEP) {
|
||||||
|
d.Set("ckey", desSep.CKey)
|
||||||
|
d.Set("meta", flattens.FlattenMeta(desSep.Meta))
|
||||||
d.Set("consumed_by", desSep.ConsumedBy)
|
d.Set("consumed_by", desSep.ConsumedBy)
|
||||||
d.Set("desc", desSep.Description)
|
d.Set("desc", desSep.Description)
|
||||||
d.Set("gid", desSep.GID)
|
d.Set("gid", desSep.GID)
|
||||||
d.Set("guid", desSep.GUID)
|
d.Set("guid", desSep.GUID)
|
||||||
d.Set("sep_id", desSep.ID)
|
d.Set("sep_id", desSep.ID)
|
||||||
d.Set("milestones", desSep.Milestones)
|
d.Set("milestones", desSep.Milestones)
|
||||||
d.Set("multipath_num", desSep.MultipathNum)
|
|
||||||
d.Set("name", desSep.Name)
|
d.Set("name", desSep.Name)
|
||||||
d.Set("obj_status", desSep.ObjStatus)
|
d.Set("obj_status", desSep.ObjStatus)
|
||||||
d.Set("provided_by", desSep.ProvidedBy)
|
d.Set("provided_by", desSep.ProvidedBy)
|
||||||
@@ -62,20 +64,21 @@ func flattenSepListItems(sl *sep.ListSEP) []map[string]interface{} {
|
|||||||
for _, item := range sl.Data {
|
for _, item := range sl.Data {
|
||||||
data, _ := json.Marshal(item.Config)
|
data, _ := json.Marshal(item.Config)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"consumed_by": item.ConsumedBy,
|
"ckey": item.CKey,
|
||||||
"desc": item.Description,
|
"meta": flattens.FlattenMeta(item.Meta),
|
||||||
"gid": item.GID,
|
"consumed_by": item.ConsumedBy,
|
||||||
"guid": item.GUID,
|
"desc": item.Description,
|
||||||
"sep_id": item.ID,
|
"gid": item.GID,
|
||||||
"milestones": item.Milestones,
|
"guid": item.GUID,
|
||||||
"name": item.Name,
|
"sep_id": item.ID,
|
||||||
"multipath_num": item.MultipathNum,
|
"milestones": item.Milestones,
|
||||||
"obj_status": item.ObjStatus,
|
"name": item.Name,
|
||||||
"provided_by": item.ProvidedBy,
|
"obj_status": item.ObjStatus,
|
||||||
"shared_with": item.SharedWith,
|
"provided_by": item.ProvidedBy,
|
||||||
"tech_status": item.TechStatus,
|
"shared_with": item.SharedWith,
|
||||||
"type": item.Type,
|
"tech_status": item.TechStatus,
|
||||||
"config": string(data),
|
"type": item.Type,
|
||||||
|
"config": string(data),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,19 @@ func dataSourceSepCSchemaMake() map[string]*schema.Schema {
|
|||||||
Required: true,
|
Required: true,
|
||||||
Description: "sep type des id",
|
Description: "sep type des id",
|
||||||
},
|
},
|
||||||
|
"ckey": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "ckey",
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Description: "meta",
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
},
|
||||||
|
},
|
||||||
"config": {
|
"config": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -37,11 +50,6 @@ func dataSourceSepCSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "guid",
|
Description: "guid",
|
||||||
},
|
},
|
||||||
"multipath_num": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
Description: "multipath_num",
|
|
||||||
},
|
|
||||||
"milestones": {
|
"milestones": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -287,6 +295,19 @@ func dataSourceSepListSchemaMake() map[string]*schema.Schema {
|
|||||||
Description: "sep list",
|
Description: "sep list",
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
|
"ckey": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "ckey",
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Description: "meta",
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
},
|
||||||
|
},
|
||||||
"config": {
|
"config": {
|
||||||
Description: "config",
|
Description: "config",
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
@@ -325,11 +346,6 @@ func dataSourceSepListSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "milestones",
|
Description: "milestones",
|
||||||
},
|
},
|
||||||
"multipath_num": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
Description: "multipath_num",
|
|
||||||
},
|
|
||||||
"name": {
|
"name": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -591,6 +607,19 @@ func resourceSepSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"ckey": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "ckey",
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Description: "meta",
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
},
|
||||||
|
},
|
||||||
"config": {
|
"config": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
@@ -622,11 +651,6 @@ func resourceSepSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "milestones",
|
Description: "milestones",
|
||||||
},
|
},
|
||||||
"multipath_num": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
Description: "multipath_num",
|
|
||||||
},
|
|
||||||
"obj_status": {
|
"obj_status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -150,7 +150,6 @@ func flattenVinsVNFDev(vd vins.VNFDev) []map[string]interface{} {
|
|||||||
"status": vd.Status,
|
"status": vd.Status,
|
||||||
"tech_status": vd.TechStatus,
|
"tech_status": vd.TechStatus,
|
||||||
"type": vd.Type,
|
"type": vd.Type,
|
||||||
"vnc_password": vd.VNCPassword,
|
|
||||||
"vins": vd.VINS,
|
"vins": vd.VINS,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
@@ -372,11 +371,14 @@ func flattenVinsListReservations(li vins.ListReservations) []map[string]interfac
|
|||||||
res := make([]map[string]interface{}, 0, len(li))
|
res := make([]map[string]interface{}, 0, len(li))
|
||||||
for _, v := range li {
|
for _, v := range li {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": v.AccountID,
|
"client_type": v.ClientType,
|
||||||
"ip": v.IP,
|
"description": v.Description,
|
||||||
"mac": v.MAC,
|
"domain_name": v.DomainName,
|
||||||
"type": v.Type,
|
"host_name": v.Hostname,
|
||||||
"vm_id": v.VMID,
|
"ip": v.IP,
|
||||||
|
"mac": v.MAC,
|
||||||
|
"type": v.Type,
|
||||||
|
"vm_id": v.VMID,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,12 +38,14 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vins"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vins"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func resourceStaticRouteCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceStaticRouteCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
@@ -62,6 +64,19 @@ func resourceStaticRouteCreate(ctx context.Context, d *schema.ResourceData, m in
|
|||||||
Gateway: d.Get("gateway").(string),
|
Gateway: d.Get("gateway").(string),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if computesIDS, ok := d.GetOk("compute_ids"); ok {
|
||||||
|
ids := computesIDS.([]interface{})
|
||||||
|
|
||||||
|
res := make([]uint64, 10)
|
||||||
|
|
||||||
|
for _, id := range ids {
|
||||||
|
computeId := uint64(id.(int))
|
||||||
|
res = append(res, computeId)
|
||||||
|
}
|
||||||
|
|
||||||
|
req.ComputeIds = res
|
||||||
|
}
|
||||||
|
|
||||||
_, err := c.CloudBroker().VINS().StaticRouteAdd(ctx, req)
|
_, err := c.CloudBroker().VINS().StaticRouteAdd(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
@@ -93,7 +108,30 @@ func resourceStaticRouteRead(ctx context.Context, d *schema.ResourceData, m inte
|
|||||||
}
|
}
|
||||||
|
|
||||||
func resourceStaticRouteUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceStaticRouteUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
return nil
|
log.Debugf("resourceStaticRouteUpdate: called for static route id %s", d.Id())
|
||||||
|
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
|
if diags := checkParamsExistenceStaticRoute(ctx, d, c); diags != nil {
|
||||||
|
return diags
|
||||||
|
}
|
||||||
|
|
||||||
|
staticRouteData, err := utilityDataStaticRouteCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
warnings := dc.Warnings{}
|
||||||
|
if d.HasChange("compute_ids") {
|
||||||
|
if errs := resourceStaticRouteChangeComputeIds(ctx, d, m, staticRouteData); len(errs) != 0 {
|
||||||
|
for _, err := range errs {
|
||||||
|
warnings.Add(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return append(warnings.Get(), resourceStaticRouteRead(ctx, d, m)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceStaticRouteDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceStaticRouteDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
@@ -120,6 +158,61 @@ func resourceStaticRouteDelete(ctx context.Context, d *schema.ResourceData, m in
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resourceStaticRouteChangeComputeIds(ctx context.Context, d *schema.ResourceData, m interface{}, staticRouteData *vins.ItemRoutes) []error {
|
||||||
|
c := m.(*controller.ControllerCfg)
|
||||||
|
|
||||||
|
var errs []error
|
||||||
|
|
||||||
|
vinsId := uint64(d.Get("vins_id").(int))
|
||||||
|
|
||||||
|
deletedIds := make([]uint64, 0)
|
||||||
|
addedIds := make([]uint64, 0)
|
||||||
|
|
||||||
|
oldComputeIds, newComputeIds := d.GetChange("compute_ids")
|
||||||
|
oldComputeIdsSlice := oldComputeIds.([]interface{})
|
||||||
|
newComputeIdsSlice := newComputeIds.([]interface{})
|
||||||
|
|
||||||
|
for _, el := range oldComputeIdsSlice {
|
||||||
|
if !isContainsIds(newComputeIdsSlice, el) {
|
||||||
|
convertedEl := uint64(el.(int))
|
||||||
|
deletedIds = append(deletedIds, convertedEl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, el := range newComputeIdsSlice {
|
||||||
|
if !isContainsIds(oldComputeIdsSlice, el) {
|
||||||
|
convertedEl := uint64(el.(int))
|
||||||
|
addedIds = append(addedIds, convertedEl)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(deletedIds) > 0 {
|
||||||
|
req := vins.StaticRouteAccessRevokeRequest{
|
||||||
|
VINSID: vinsId,
|
||||||
|
RouteId: staticRouteData.ID,
|
||||||
|
ComputeIds: deletedIds,
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := c.CloudBroker().VINS().StaticRouteAccessRevoke(ctx, req); err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(addedIds) > 0 {
|
||||||
|
req := vins.StaticRouteAccessGrantRequest{
|
||||||
|
VINSID: vinsId,
|
||||||
|
RouteId: staticRouteData.ID,
|
||||||
|
ComputeIds: addedIds,
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := c.CloudBroker().VINS().StaticRouteAccessGrant(ctx, req); err != nil {
|
||||||
|
errs = append(errs, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return errs
|
||||||
|
}
|
||||||
|
|
||||||
func isContainsIds(els []interface{}, el interface{}) bool {
|
func isContainsIds(els []interface{}, el interface{}) bool {
|
||||||
convEl := el.(int)
|
convEl := el.(int)
|
||||||
for _, elOld := range els {
|
for _, elOld := range els {
|
||||||
|
|||||||
@@ -341,10 +341,6 @@ func dataSourceVinsSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "type",
|
Description: "type",
|
||||||
},
|
},
|
||||||
"vnc_password": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vins": {
|
"vins": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -590,11 +586,26 @@ func dataSourceVinsSchemaMake() map[string]*schema.Schema {
|
|||||||
Description: "reservations",
|
Description: "reservations",
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"account_id": {
|
"client_type": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "client type",
|
Description: "client type",
|
||||||
},
|
},
|
||||||
|
"description": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "description",
|
||||||
|
},
|
||||||
|
"domain_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "domain name",
|
||||||
|
},
|
||||||
|
"host_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "host name",
|
||||||
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -2498,10 +2509,6 @@ func resourceVinsSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "type",
|
Description: "type",
|
||||||
},
|
},
|
||||||
"vnc_password": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"vins": {
|
"vins": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -2692,11 +2699,26 @@ func resourceVinsSchemaMake() map[string]*schema.Schema {
|
|||||||
Description: "reservations",
|
Description: "reservations",
|
||||||
Elem: &schema.Resource{
|
Elem: &schema.Resource{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"account_id": {
|
"client_type": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "client type",
|
Description: "client type",
|
||||||
},
|
},
|
||||||
|
"description": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "description",
|
||||||
|
},
|
||||||
|
"domain_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "domain name",
|
||||||
|
},
|
||||||
|
"host_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "host name",
|
||||||
|
},
|
||||||
"ip": {
|
"ip": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -2723,6 +2745,7 @@ func resourceVinsSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
"created_time": {
|
"created_time": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -3366,6 +3389,7 @@ func resourceStaticRouteSchemaMake() map[string]*schema.Schema {
|
|||||||
"compute_ids": {
|
"compute_ids": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
Optional: true,
|
||||||
Elem: &schema.Schema{
|
Elem: &schema.Schema{
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -43,7 +43,6 @@
|
|||||||
- extnet_computes_list
|
- extnet_computes_list
|
||||||
- extnet_default
|
- extnet_default
|
||||||
- extnet_list
|
- extnet_list
|
||||||
- extnet_reserved_ip_list
|
|
||||||
- flipgroup
|
- flipgroup
|
||||||
- flipgroup_list
|
- flipgroup_list
|
||||||
- image
|
- image
|
||||||
@@ -158,7 +157,6 @@
|
|||||||
- cb_extnet
|
- cb_extnet
|
||||||
- cb_extnet_default
|
- cb_extnet_default
|
||||||
- cb_extnet_list
|
- cb_extnet_list
|
||||||
- cb_extnet_reserved_ip_list
|
|
||||||
- cb_extnet_static_route
|
- cb_extnet_static_route
|
||||||
- cb_extnet_static_route_list
|
- cb_extnet_static_route_list
|
||||||
- cb_flipgroup
|
- cb_flipgroup
|
||||||
@@ -171,6 +169,7 @@
|
|||||||
- cb_grid_list
|
- cb_grid_list
|
||||||
- cb_grid_list_consumption
|
- cb_grid_list_consumption
|
||||||
- cb_grid_list_emails
|
- cb_grid_list_emails
|
||||||
|
- cb_grid_post_diagnosis
|
||||||
- cb_grid_post_status
|
- cb_grid_post_status
|
||||||
- cb_image
|
- cb_image
|
||||||
- cb_image_list
|
- cb_image_list
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ resource "decort_kvmvm" "comp" {
|
|||||||
#тип сети
|
#тип сети
|
||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - строка
|
#тип - строка
|
||||||
#возможные значения - "VINS", "EXTNET", "VFNIC", "DPDK" (при выборе типа DPDK, необходимо указать hp_backed = true)
|
#возможные значения - "VINS", "EXTNET", "VFNIC", "DPDK"
|
||||||
net_type = "VINS"
|
net_type = "VINS"
|
||||||
|
|
||||||
#id сети
|
#id сети
|
||||||
@@ -396,17 +396,6 @@ resource "decort_kvmvm" "comp" {
|
|||||||
#тип - булев
|
#тип - булев
|
||||||
pin_to_stack = true
|
pin_to_stack = true
|
||||||
|
|
||||||
#список ядер для использования в механизме vcpupinning. Количество указанных ядер должно быть равно количеству виртуальных процессоров ВМ
|
|
||||||
#игнорируется если cpu_pin=false или pin_to_stack=false
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - массив целых чисел
|
|
||||||
preferred_cpu = [1234, 456]
|
|
||||||
|
|
||||||
#флаг для старта компьюта при рестарте ноды
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - булев
|
|
||||||
auto_start_w_node = true
|
|
||||||
|
|
||||||
#флаг доступности компьюта для проведения с ним операций
|
#флаг доступности компьюта для проведения с ним операций
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - булев
|
#тип - булев
|
||||||
|
|||||||
@@ -52,6 +52,12 @@ resource "decort_vins_static_route" "sr" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - строка
|
#тип - строка
|
||||||
gateway = "192.168.201.40"
|
gateway = "192.168.201.40"
|
||||||
|
|
||||||
|
#список виртуальных машин, которым будет предоставлен доступ к роуту
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - массив целых чисел
|
||||||
|
compute_ids = [111, 222]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
output "sr" {
|
output "sr" {
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
/*
|
|
||||||
Пример использования
|
|
||||||
Получение информации о зарезервированных IP адресах или пуле адресов
|
|
||||||
*/
|
|
||||||
|
|
||||||
#Расскомментируйте этот код,
|
|
||||||
#и внесите необходимые правки в версию и путь,
|
|
||||||
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
|
|
||||||
/*
|
|
||||||
terraform {
|
|
||||||
required_providers {
|
|
||||||
decort = {
|
|
||||||
source = "basis/decort/decort"
|
|
||||||
version = "<VERSION>"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
provider "decort" {
|
|
||||||
authenticator = "decs3o"
|
|
||||||
#controller_url = <DECORT_CONTROLLER_URL>
|
|
||||||
controller_url = "https://ds1.digitalenergy.online"
|
|
||||||
#oauth2_url = <DECORT_SSO_URL>
|
|
||||||
oauth2_url = "https://sso.digitalenergy.online"
|
|
||||||
allow_unverified_ssl = true
|
|
||||||
}
|
|
||||||
|
|
||||||
data "decort_cb_extnet_reserved_ip_list" "ex_reserved_ip" {
|
|
||||||
#идентификатор аккаунта, для которого зарезервированны ресурсы
|
|
||||||
#обязательный параметр
|
|
||||||
#тип - целое число
|
|
||||||
account_id = 1111
|
|
||||||
|
|
||||||
#идентификатор сети
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - целое число
|
|
||||||
#extnet_id = 1111
|
|
||||||
}
|
|
||||||
|
|
||||||
output "test" {
|
|
||||||
value = data.decort_cb_extnet_reserved_ip_list.ex_reserved_ip
|
|
||||||
}
|
|
||||||
@@ -168,26 +168,6 @@ resource "decort_cb_extnet" "new_extnet" {
|
|||||||
#e_rate = 0
|
#e_rate = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
#список зарезервированных IP или пула адресов
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - блок
|
|
||||||
reserved_ip {
|
|
||||||
#идентификатор аккаунта, для которого резервируются ресурсы
|
|
||||||
#обязательный параметр
|
|
||||||
#тип - целое число
|
|
||||||
account_id = 11111
|
|
||||||
|
|
||||||
#количество резервируемых IP
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - целое число
|
|
||||||
ip_count = 15
|
|
||||||
|
|
||||||
#список резервируемых IP
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - массив строк
|
|
||||||
ips = ["192.168.10.10", "192.168.10.20"]
|
|
||||||
}
|
|
||||||
|
|
||||||
#ID stack на который происходит миграция
|
#ID stack на который происходит миграция
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - целое число
|
#тип - целое число
|
||||||
|
|||||||
@@ -32,10 +32,6 @@ data "decort_cb_grid_get_diagnosis" "grid" {
|
|||||||
#тип - целое число
|
#тип - целое число
|
||||||
gid = 215
|
gid = 215
|
||||||
|
|
||||||
#путь, где будет создан архив, если не указан, создается в директории с main.tf с именем "diagnosis.tar.gz"
|
|
||||||
#обязательный параметр
|
|
||||||
#тип - строка
|
|
||||||
file_path = "abcdefg.tar.gz"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Пример использования
|
Пример использования
|
||||||
Получение информации о зарезервированных IP адресах или пуле адресов
|
Получение снимка платформы с дополнительной диагностической информацией, такой как журналы и т.д.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#Расскомментируйте этот код,
|
#Расскомментируйте этот код,
|
||||||
@@ -26,18 +26,14 @@ provider "decort" {
|
|||||||
allow_unverified_ssl = true
|
allow_unverified_ssl = true
|
||||||
}
|
}
|
||||||
|
|
||||||
data "decort_extnet_reserved_ip_list" "ex_reserved_ip" {
|
data "decort_cb_grid_post_diagnosis" "grid" {
|
||||||
#идентификатор аккаунта, для которого зарезервированны ресурсы
|
#id grid для получения информации
|
||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - целое число
|
#тип - целое число
|
||||||
account_id = 1111
|
gid = 215
|
||||||
|
|
||||||
#идентификатор сети
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - целое число
|
|
||||||
#extnet_id = 1111
|
|
||||||
}
|
}
|
||||||
|
|
||||||
output "test" {
|
output "test" {
|
||||||
value = data.decort_extnet_reserved_ip_list.ex_reserved_ip
|
value = data.decort_cb_grid_post_diagnosis.grid
|
||||||
}
|
}
|
||||||
@@ -66,21 +66,6 @@ data "decort_cb_kvmvm_list" "compute_list" {
|
|||||||
#тип - строка
|
#тип - строка
|
||||||
#ip_address = "test"
|
#ip_address = "test"
|
||||||
|
|
||||||
#фильтр по stack id
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - целое число
|
|
||||||
#stack_id = 123
|
|
||||||
|
|
||||||
#фильтр по image id
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - целое число
|
|
||||||
#image_id = 123
|
|
||||||
|
|
||||||
#фильтр по cd image id
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - целое число
|
|
||||||
#cd_image_id = 123
|
|
||||||
|
|
||||||
#фильтр по имени extnet
|
#фильтр по имени extnet
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - строка
|
#тип - строка
|
||||||
|
|||||||
@@ -281,7 +281,7 @@ resource "decort_cb_kvmvm" "comp" {
|
|||||||
#network {
|
#network {
|
||||||
#тип сети
|
#тип сети
|
||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#возможные значения - "VINS", "EXTNET", "VFNIC", "DPDK" (при выборе типа DPDK, необходимо указать hp_backed = true)
|
#возможные значения - "VINS", "EXTNET", "VFNIC", "DPDK"
|
||||||
#тип - строка
|
#тип - строка
|
||||||
#net_type = "VINS"
|
#net_type = "VINS"
|
||||||
|
|
||||||
@@ -409,17 +409,6 @@ resource "decort_cb_kvmvm" "comp" {
|
|||||||
#тип - булев
|
#тип - булев
|
||||||
#pin_to_stack = true
|
#pin_to_stack = true
|
||||||
|
|
||||||
#список ядер для использования в механизме vcpupinning. Количество указанных ядер должно быть равно количеству виртуальных процессоров ВМ
|
|
||||||
#игнорируется если cpu_pin=false или pin_to_stack=false
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - массив целых чисел
|
|
||||||
#preferred_cpu = [1234, 456]
|
|
||||||
|
|
||||||
#флаг для старта компьюта при рестарте ноды
|
|
||||||
#опциональный параметр
|
|
||||||
#тип - булев
|
|
||||||
#auto_start_w_node = true
|
|
||||||
|
|
||||||
#id stack для добавления компьюта на этот стэк
|
#id stack для добавления компьюта на этот стэк
|
||||||
#опциональный параметр
|
#опциональный параметр
|
||||||
#тип - целое число
|
#тип - целое число
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ resource "decort_cb_sep" "s" {
|
|||||||
|
|
||||||
#тип sep
|
#тип sep
|
||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#возможные значения - des, dorado, tatlin, hitachi, ovs, local, shared
|
#возможные значения - des, dorado, tatlin, hitachi
|
||||||
#тип - строка
|
#тип - строка
|
||||||
type = "des"
|
type = "des"
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,12 @@ resource "decort_cb_vins_static_route" "sr" {
|
|||||||
#обязательный параметр
|
#обязательный параметр
|
||||||
#тип - строка
|
#тип - строка
|
||||||
gateway = "192.168.201.40"
|
gateway = "192.168.201.40"
|
||||||
|
|
||||||
|
#список виртуальных машин, которым будет предоставлен доступ к роуту
|
||||||
|
#опциональный параметр
|
||||||
|
#тип - массив целых чисел
|
||||||
|
#compute_ids = [111,222]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
output "sr" {
|
output "sr" {
|
||||||
|
|||||||
1
wiki/.gitignore
vendored
1
wiki/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
.idea/
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
DECORT Terraform Provider версии 4.8.x позволяет управлять облачными ресурсами на платформе Digital Energy Cloud Orchestration Technology (DECORT) версии 4.2.x и выше посредством Terraform.
|
DECORT Terraform Provider версии 4.7.x позволяет управлять облачными ресурсами на платформе Digital Energy Cloud Orchestration Technology (DECORT) версии 4.1.x и выше посредством Terraform.
|
||||||
|
|
||||||
С помощью данного провайдера можно организовать программное управление вычислительными ресурсами (_compute_), ресурсными группами, сетевыми и дисковыми ресурсами, образами дисков, кластером, а также другими параметрами облачной платформы DECORT.
|
С помощью данного провайдера можно организовать программное управление вычислительными ресурсами (_compute_), ресурсными группами, сетевыми и дисковыми ресурсами, образами дисков, кластером, а также другими параметрами облачной платформы DECORT.
|
||||||
|
|
||||||
Если вы хорошо знакомы с инструментом Terraform и хотите максимально быстро начать использовать платформу DECORT в своих Terraform-проектах, то можете сразу перейти к разделу [Пример работы](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.2/02.-Пример-работы.md), где приведён подробно откомментированный пример работы с основными видами ресурсов платформы. Если у вас всё же возникнут вопросы по облачной платформе DECORT и порядку авторизации в ней, то обратитесь к главе [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.2/03.-Обзор-облачной-платформы-DECORT.md). Также может оказаться полезной глава [«Инициализация Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.2/04.02-Инициализация-Terraform-провайдера-DECORT.md).
|
Если вы хорошо знакомы с инструментом Terraform и хотите максимально быстро начать использовать платформу DECORT в своих Terraform-проектах, то можете сразу перейти к разделу [Пример работы](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/02.-Пример-работы.md), где приведён подробно откомментированный пример работы с основными видами ресурсов платформы. Если у вас всё же возникнут вопросы по облачной платформе DECORT и порядку авторизации в ней, то обратитесь к главе [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/03.-Обзор-облачной-платформы-DECORT.md). Также может оказаться полезной глава [«Инициализация Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/04.02-Инициализация-Terraform-провайдера-DECORT.md).
|
||||||
|
|
||||||
Если вы только начинаете использовать инструмент Terraform и облачную платформу DECORT, то рекомендуем вам начать с главы [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.2/03.-Обзор-облачной-платформы-DECORT.md), после чего изучить главы [«_Data source_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.2/06.-Data-source-функции-Terraform-провайдера-DECORT.md) и [«_Resource_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.2/07.-Resource-функции-Terraform-провайдера-DECORT.md). Примеры, приведенные в этих разделах, помогут вам быстро освоить базовые приёмы работы с инструментом Terraform и провайдером DECORT.
|
Если вы только начинаете использовать инструмент Terraform и облачную платформу DECORT, то рекомендуем вам начать с главы [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/03.-Обзор-облачной-платформы-DECORT.md), после чего изучить главы [«_Data source_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/06.-Data-source-функции-Terraform-провайдера-DECORT.md) и [«_Resource_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/07.-Resource-функции-Terraform-провайдера-DECORT.md). Примеры, приведенные в этих разделах, помогут вам быстро освоить базовые приёмы работы с инструментом Terraform и провайдером DECORT.
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
Виртуальный сервер - в данном примере на базе системы виртуализации KVM x86 - создаётся посредством _resource_ функции `decort_kvmvm`.
|
Виртуальный сервер - в данном примере на базе системы виртуализации KVM x86 - создаётся посредством _resource_ функции `decort_kvmvm`.
|
||||||
|
|
||||||
Только авторизованные в контроллере облачной платформы пользователи могут управлять облачными ресурсами. Подробнее о способах авторизации см. [Обзор облачной платформы DECORT](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.0/03.-Обзор-облачной-платформы-DECORT.md).
|
Только авторизованные в контроллере облачной платформы пользователи могут управлять облачными ресурсами. Подробнее о способах авторизации см. [Обзор облачной платформы DECORT](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/03.-Обзор-облачной-платформы-DECORT.md).
|
||||||
|
|
||||||
```terraform
|
```terraform
|
||||||
# 1. Initialize DECORT plugin and connection to DECORT cloud controller
|
# 1. Initialize DECORT plugin and connection to DECORT cloud controller
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Для запуска провайдера вам потребуется машина, на которой установлен Terraform.
|
Для запуска провайдера вам потребуется машина, на которой установлен Terraform.
|
||||||
|
|
||||||
Кроме того, в связи с тем, что начиная с версии 0.12 Terraform изменил алгоритм поиска и инициализации локальных провайдеров, настройка данного провайдера для работы с Terraform 0.12 или более новыми версиями потребует выполнения ряда дополнительных действий. Подробнее см. [8.3 Настройка локального провайдера для работы с новыми версиями Terraform](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.0/08.-Полезные-советы.md#8-3-настройка-локального-провайдера-для-работы-с-новыми-версиями-terraform).
|
Кроме того, в связи с тем, что начиная с версии 0.12 Terraform изменил алгоритм поиска и инициализации локальных провайдеров, настройка данного провайдера для работы с Terraform 0.12 или более новыми версиями потребует выполнения ряда дополнительных действий. Подробнее см. [8.3 Настройка локального провайдера для работы с новыми версиями Terraform](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/08.-Полезные-советы#user-content-8-3-настройка-локального-провайдера-для-работы-с-новыми-версиями-terraform.md).
|
||||||
|
|
||||||
## Установка
|
## Установка
|
||||||
Начиная с версии провайдера `4.3.0` в релизном архиве находятся скрипты-инсталляторы.
|
Начиная с версии провайдера `4.3.0` в релизном архиве находятся скрипты-инсталляторы.
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
## Список аргументов для инициализации
|
## Список аргументов для инициализации
|
||||||
Перед началом использования любой Terraform провайдер должен быть инициализирован.
|
Перед началом использования любой Terraform провайдер должен быть инициализирован.
|
||||||
|
|
||||||
В процессе инициализации Terraform провайдера DECORT проверяется корректность переданных аргументов и выполняется авторизация в указанном контроллере облачной инфраструктуры. Подробнее о способах авторизации в платформе DECORT смотри соответствующий [раздел](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.8.0/03.-Обзор-облачной-платформы-DECORT.md#способы-авторизации).
|
В процессе инициализации Terraform провайдера DECORT проверяется корректность переданных аргументов и выполняется авторизация в указанном контроллере облачной инфраструктуры. Подробнее о способах авторизации в платформе DECORT смотри соответствующий [раздел](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.4/03.-Обзор-облачной-платформы-DECORT#user-content-способы-авторизации.md).
|
||||||
|
|
||||||
При инициализации Terraform провайдера DECORT используются следующие аргументы:
|
При инициализации Terraform провайдера DECORT используются следующие аргументы:
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user