diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1aa26cd..5e99581a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,223 +1,30 @@
-## Version 4.10.1
+## Version 4.10.2
### Добавлено
-#### access group
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1109 | Resource `decort_sdn_access_group` и datasources `decort_sdn_access_group`, `decort_sdn_access_group_list`, `decort_sdn_access_group_user_list` в sdn/access_group |
-
-#### account
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1061 | Опциональный блок `storage_policy` в блок `resource_limits` в resource `decort_cb_account` в cloudbroker/account |
-| BATF-1061 | Вычисляемое поля `storage_policy` в блок `resource_limits` resource `decort_account` и datasources `decort_account`, `decort_account_resource_consumption_get` в cloudapi/account и resource `decort_cb_account` и datasources `decort_cb_account`, `decort_cb_account_list,` `decort_cb_account_list_deleted` в cloudbroker/account |
-| BATF-1075 | Опциональное поле `zone_id` в datasource `decort_account_list` в cloudapi/account и в datasource `decort_cb_account_list` в cloudbroker/account |
-| BATF-1087 | Вычислямый блок `policies` в блоки `consumed` и `reserved` в datasources `decort_account_resource_consumption_get`, `decort_account_resource_consumption_list` в cloudapi/account и в `decort_cb_account_resource_consumption_get`, `decort_cb_account_resource_consumption_list` в cloudbroker/account |
-| BATF-1085| Вычисляемое поле `zone_ids` в datasources `decort_account_list` и `decort_account_deleted_list` в cloudapi/account |
-
-#### audit
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1080 | Вычисляемое поле `correlation_id` в datasources `decort_audit` в cloudapi/audit и в`decort_cb_audit_list`, `decort_cb_audit` в cloudbroker/audit |
-| BATF-1095 | Опциональные поля `resgroup_id`, `compute_id`, `account_id`, `vins_id`, `service_id`, `k8s_id`, `flipgroup_id`, `lb_id`, `sep_id`, `node_id` и `exclude_audit_lines` в datasource `decort_cb_audit_list` в cloudbroker/audit |
-| BATF-1095 | Datasource `decort_audit_list` в cloudapi/audit |
-
-#### bservice
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1065 | Обязательное поле `storage_policy` в resource `decort_bservice_group` в cloudapi/bservice |
-| BATF-1075 | Опциональное поле `zone_id` в datasource `decort_bservice_list` в cloudapi/bservice |
-
-#### default security policy
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1111 | Datasource `decort_sdn_default_security_policy_list` в sdn/default_security_policy |
-
-#### disks
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1063 | Обязательное поле `storage_policy_id` в resources `decort_disk` в cloudapi/disk и `decort_cb_disk` в cloudbroker/disk |
-| BATF-1063 | Вычисляемое поле `storage_policy_id` в data_sources `decort_disk`, `decort_disk_list` и `decort_disk_deleted` в cloudapi/disk и `decort_cb_disk`, `decort_cb_disk_list`, `decort_cb_disk_list_deleted` в cloudbroker/disk |
-| BATF-1079 | Вычисляемое поле `to_clean` в data_sources `decort_disk`, `decort_disk_list` и `decort_disk_deleted` в cloudapi/disk и `decort_cb_disk`, `decort_cb_disk_list`, `decort_cb_disk_list_deleted` в cloudbroker/disk |
-| BATF-1079 | Вычисляемое поле `to_clean` в resources `decort_disk` в cloudapi/disk и `decort_cb_disk` в cloudbroker/disk |
-
-#### extnet
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1074 | Опциональное поле `enable_secgroups` в resource `decort_cb_extnet` в cloudbroker/extnet |
-| BATF-1075 | Опциональное поле `zone_id` в datasource `decort_extnet_list` в cloudapi/extnet и в datasource `decort_cb_extnet_list` в cloudbroker/extnet |
-
-#### dpdk
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1074 | Опциональное поле `enable_secgroups` в resource `decort_cb_dpdknet` в cloudbroker/dpdk |
-
-#### image
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1005 | Опциональный поле `account_id` в resource `decort_image_virtual` в cloudapi/image |
-| BATF-1093 | Опциональное поле `storage_policy_id` в datasource `decort_image_list` в cloudapi/image и в datasource `decort_cb_image_list` в cloudbroker/image |
-| BATF-1067 | Обязательное поле `storage_policy_id` в resources `decort_image` в cloudapi/image и `decort_cb_image` и `decort_cb_image_cdrom` в cloudbroker/image |
-| BATF-1067 | Вычисляемое поле `storage_policy_id` в datasources `decort_image` и `decort_image_list` в cloudapi/image и datasources `decort_cb_image` и `decort_cb_image_list` в cloudbroker/image |
-| BATF-1127 | Вычисляемое поле `to_clean` в datasources `decort_image` в cloudapi/image и datasources `decort_cb_image` и `decort_cb_image_list` в cloudbroker/image |
-| BATF-1127 | Вычисляемое поле `to_clean` в resources `decort_image`, `decort_image_from_blank_compute`, `decort_image_from_platform_disk`, `decort_image_virtual` в cloudapi/image и resources `decort_cb_image`, `decort_cb_cdrom_image`, `decort_cb_image_from_blank_compute`, `decort_cb_image_from_platform_disk`, `decort_cb_image_virtual` в cloudbroker/image |
-
-#### k8s
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1066 | Обязательное поле `storage_policy_id`, в resources `decort_k8s`, `decort_k8s_cp`, `decort_k8s_wg` в cloudapi/kvmvm и `decort_cb_k8s_cp`, `decort_cb_k8s_wg`, в cloudbroker/k8s |
-| BATF-1075 | Опциональное поле `zone_id` в datasource `decort_kvmvm_list` в cloudapi/kvmvm и в datasource `decort_cb_kvmvm_list` в cloudbroker/kvmvm |
-
-#### kvmvm
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1057 | Опциональные поля `timestamp_at`, `timestamp_to`, `user`, `call`, `sort_by`, `page`, `size`, `min_status_code`, `max_status_code` в datasources `decort_kvmvm_audits` в cloudapi/kvmvm и `decort_cb_kvmvm_audits` в cloudbroker/kvmvm |
-| BATF-1064 | Обязательное поле `storage_policy_id` в resources `decort_kvmvmv` в cloudapi/kvmvm и `decort_cb_kvmvm` в cloudbroker/kvmvm |
-| BATF-1064 | Вычисляемое поле `storage_policy_id` в data_sources `decort_kvmvmv` в cloudapi/kvmvm и `decort_cb_kvmvm` в cloudbroker/kvmvm |
-| BATF-1073 | Вычисляемые поля `security_groups` и `enable_secgroups` в блоке `interfaces` в data_sources `decort_kvmvmv`, `decort_kvmvmv_list` и `decort_kvmvmv_list_deleted` и resource `decort_kvmvmv` в cloudapi/kvmvm |
-| BATF-1073 | Вычисляемые поля `security_groups` и `enable_secgroups` в блоке `interfaces` data_sources `decort_cb_kvmvmv`, `decort_cb_kvmvmv_list` и `decort_cb_kvmvmv_list_deleted` и resource `decort_cb_kvmvmv` в cloudbroker/kvmvm |
-| BATF-1073 | Опциональный блок `security_groups` в resource `decort_kvmvmv` в cloudapi/kvmvm и resource `decort_cb_kvmvmv` в cloudbroker/kvmvm |
-| BATF-1078 | Опциональное поле `enabled` в блоке `network` в resources `decort_kvmvm` в cloudapi/kvmvm и `decort_cb_kvmvm` в cloudbroker/kvmvm |
-| BATF-1079 | Вычисляемое поле `to_clean` в resources `decort_kvmvm` в cloudapi/kvmvm и `decort_cb_kvmvm` в cloudbroker/kvmvm |
-| BATF-1083 | Опциональное поле `os_version` в resources `decort_kvmvm` в cloudapi/kvmvm и `decort_cb_kvmvm` в cloudbroker/kvmvm |
-| BATF-1083 | Вычисляемое поле `os_version` в datasources `decort_kvmvmv`, `decort_kvmvm_list`, `decort_kvmvm_list_deleted` в cloudapi/kvmvm и `decort_cb_kvmvm`, `decort_cb_kvmvm_list`, `decort_cb_kvmvm_list_deleted` в cloudbroker/kvmvm |
-| BATF-1098 | Вычисляемое поле `boot_image_id` в resources `decort_kvmvm` в cloudapi/kvmvm и `decort_cb_kvmvm` в cloudbroker/kvmvm |
-| BATF-1098 | Вычисляемое поле `boot_image_id` в datasources `decort_kvmvmv`, `decort_kvmvm_list`, `decort_kvmvm_list_deleted` в cloudapi/kvmvm и `decort_cb_kvmvm`, `decort_cb_kvmvm_list`, `decort_cb_kvmvm_list_deleted` в cloudbroker/kvmvm |
-| BATF-1088 | Вызов метода `Start` перед методом `pinToStack` в cloudapi/kvmvm |
-| BATF-1128 | Перезагрузка виртуальной машины при изменении полей "hot_resize", "cpu" в resources `decort_kvmvm` и `decort_cb_kvmvm` в cloudapi/kvmvm и в cloudbroker/kvmvm |
-
-#### lb
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1075 | Опциональное поле `zone_id` в datasource `decort_lb_list` в cloudapi/lb и в datasource `decort_cb_lb_list` в cloudbroker/lb |
-
-#### logical ports
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1114 | Datasources `decort_sdn_logical_port`, `decort_sdn_logical_port_get_by_unique_identifier` и `decort_sdn_logical_port_list` и resource `decort_sdn_logical_port` в sdn/logicalports |
-
-#### node
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1081 | Вычисляемое поле `vcpu` в блоке `free` в datasource `decort_cb_node` в cloudbroker/node |
-
-#### rg
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1062 | Опциональное поле `storage_policy` в resources `decort_resgroup` в cloudapi/rg и в `decort_cb_rg` в cloudbroker/rg |
-| BATF-1062 | Вычисляемое поле `storage_policy_ids` в resources `decort_resgroup` в cloudapi/rg и в `decort_cb_rg` в cloudbroker/rg|
-| BATF-1062 | Вычисляемое поле `storage_policy_ids` datasources в cloudapi/rg и в cloudbroker/rg |
-
-#### security group
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1071 | Datasources `decort_security_group` и `decort_security_group_list` в cloudapi/secgroup и datasources `decort_cb_security_group` и `decort_cb_security_group_list` в cloudbroker/secgroup |
-| BATF-1072 | Resources `decort_security_group` в cloudapi/secgroup и `decort_cb_security_group` в cloudbroker/secgroup |
-
-#### sdn segment
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1120 | Resource `decort_sdn_segment` и datasources `decort_sdn_segment`, `decort_sdn_segment_get_status` и `decort_sdn_segment_list` в sdn/segments |
-
#### storage policy
| Идентификатор
задачи | Описание |
| --- | --- |
-| BATF-1058 | Datasources `decort_storage_policy` и `decort_storage_policy_list` в cloudapi/storage_policy и datasources `decort_cb_storage_policy` и `decort_cb_storage_policy_list` в cloudbroker/storage_policy |
-| BATF-1059 | Resource `decort_cb_storage_policy` в cloudbroker/storage_policy |
-
-#### vins
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1048 | Вычисляемое поле `routes` в блоках `NAT` и `GW` в datasource `decort_vins`, resource `decort_vins` в cloudapi/vins, datasource `decort_cb_vins`, resource `decort_cb_vins` в cloudbroker/vins |
-| BATF-1074 | Опциональное поле `enable_secgroups` в resource `decort_cb_vins` в cloudbroker/vins |
-| BATF-1094 | Вычисляемое поле `zone_id` в блоках `DHCP`, `GW`, `NAT` и `VNFDev` и вычисляемые поля `security_groups` и `enable_secgroups` в блоке `VNFInterface` в datasource `decort_vins` и в resource `decort_vins` в cloudapi/vins и в datasource `decort_cb_vins` и в resource `decort_cb_vins` в cloudbroker/vins |
-| BATF-1075 | Опциональное поле `zone_id` в datasource `decort_vins_list` в cloudapi/vins и в datasource `decort_cb_vins_list` в cloudbroker/vins |
-| BATF-1104 | Вычисляемое поле `live_migration_job_id` в блоке `VNFDev` в datasource `decort_vins` и в resource `decort_vins` в cloudapi/vins и в datasource `decort_cb_vins` и в resource `decort_cb_vins` в cloudbroker/vins |
-
-#### zone
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BGOS-1076 | Вычисляемые поля `account_ids`, `compute_ids`, `extnet_ids`, `vins_ids`, `lb_ids`, `bservice_ids` и `k8s_ids` в datasource `decort_zone` в cloudapi/zone и в datasource `decort_cb_zone` в cloudbroker/zone |
+| BATF-1090 | Отображение вычисляемых полей `sep_name` в блоке `access_seps_pools` datasource `decort_storage_policy_list` в cloudapi/stpolicy и в datasource `decort_cb_storage_policy_list` в cloudbroker/stpolicy |
### Исправлено
-#### общие изменения
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1116 | Исправлены уязвимости, обновлена версия go до v1.24.0 |
-
#### account
| Идентификатор
задачи | Описание |
| --- | --- |
-| BATF-894 | Исправлено отображение вычисляемого поля `zone_ids` в resource `decort_account` в cloudapi/account |
-| BATF-894 | Исправлено некорректное поведение метода `resourceAccountUpdate` resource `decort_cb_account` в cloudbroker/account |
-
-#### bservice
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1060 | Изменен тип поля `driver` с required на optional в resource `decort_bservice_group` в cloudapi/bservice |
-
-#### extnet
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-893 | Исправлено отображение вычисляемого поля `network_ids` в datasource `decort_cb_extnet_list` в cloudbroker/extnet |
-| BATF-972 | Возможность изменения поля `mtu` в resource `decort_cb_extnet` в cloudbroker/extnet |
-
-#### image
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1005 | Опциональный `account_id` теперь может быть использован при создании resource `decort_cb_virtual_image` в cloudbroker/image |
-| BATF-1007 | Изменен тип поля `drivers` с required на computed в resources `decort_image`, `decort_image_from_platform_disk` в cloudapi/image и в `decort_cb_image`, `decort_cb_image_from_platform_disk`, `decort_cb_cdrom_image` в cloudbroker/image |
+| BATF-1061 | Исправлен sample resource `decort_cb_account` в cloudbroker/account |
+| BATF-1061 | Вывод значения поле `storage_policy_ids` в data_sourse`decort_cb_account` в cloudbroker/account |
#### kvmvm
| Идентификатор
задачи | Описание |
| --- | --- |
-| BATF-1049 | Перезагрузка виртуальной машины при изменении полей `ram` и `cpu` в resources `decort_kvmvm` и `decort_cb_kvmvm` в cloudapi/kvmvm и в cloudbroker/kvmvm |
-| BATF-1122 | Перезагрузка виртуальной машины при изменении поля "disks" в resources `decort_kvmvm` и `decort_cb_kvmvm` в cloudapi/kvmvm и в cloudbroker/kvmvm |
-| BATF-888 | Исправлено получение вычисляемого поля `zone_ids` в datasources `decort_kvmvm_list` и `decort_kvmvm_list_deleted` в cloudapi/kvmvm |
+| BATF-1079 | Отображение поля `disks` в resource `decort_kvmvm` в cloudapi/kvmvm и в resource `decort_cb_kvmvm` в cloudbroker/kvmvm при импорте |
+| BATF-1083 | Отображение поля `boot_disk` в resource `decort_kvmvm` в cloudapi/kvmvm при обновлении поля `image_id` |
+| BATF-1088 | Исправлена логика работы поля `pin_to_stack` в resources `decort_kvmvm` в cloudapi/kvmvm и `decort_cb_kvmvm` в cloudbroker/kvmvm |
+| BATF-1092 | Отображение вычисляемых полей `devicename`,`created_by`, `deleted_by`, `updated_time` в блоке `disks` и блока `loader_meta_iso` в resource `decort_kvmvm`, datasource `decort_kvmvm` в cloudapi/kvmvm и в resource `decort_cb_kvmvm`, datasource `decort_cb_kvmvm` в cloudbroker/kvmvm |
+| BATF-1144 | Остановка виртуальной машины перед удалением в resources `decort_kvmvm` и `decort_cb_kvmvm` в cloudapi/kvmvm и в cloudbroker/kvmvm |
-#### trunk
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1012 | Изменен тип поля `status` с computed на optional в datasource `decort_trunk_list` в cloudapi/trunk и в datasource `decort_cb_trunk_list` в cloudbroker/trunk |
-
-#### zone
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-887 | Исправлена ошибка при изменении поля `name` в resource `decort_cb_zone` в cloudbroker/zone |
-
-
-### Удалено
-
-#### account
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1086 | Вычисляемые поля `ckey`, `meta` и `service_account` в datasource `decort_account` в cloudapi/account и в datasources `decort_cb_account`, `decort_cb_account_list` и `decort_cb_account_list_deleted` в cloudbroker/account |
-| BATF-1086 | Вычисляемые поля `ckey`, `meta` и `service_account` в resource `decort_account` в cloudapi/account и в resource `decort_cb_account` в cloudbroker/account |
-
-#### audit
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1095 | Поле `tags` в datasource `decort_cb_audit_list` в cloudbroker/audit |
-
-#### disks
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1096 | Опциональное поле `iops` в resource `decort_cb_disk` в cloudbroker/disks |
-| BATF-1089 | Опциональное поле `storage_policy_id` в datasources `decort_disk_list`, `decort_disk_list_unattached` в cloudapi/disks и `decort_cb_disk_list`, `decort_cb_disk_list_unattached` в cloudbroker/disks |
-
-#### image
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1084 | Поле `enabled_stacks` в resources `decort_cb_cdrom_image`, `decort_cb_image_from_blank_compute`, `decort_cb_image_from_platform_disk`, `decort_cb_image` в cloudbroker/image |
-
-#### k8ci
-| Идентификатор
задачи | Описание |
-| --- | --- |
-| BATF-1007 | Поля `worker_driver`, `master_driver` в resource `decort_cb_k8ci` и datasources `decort_cb_k8ci_list`, `decort_cb_k8ci_list_deleted` в cloudbroker/k8ci |
-
-#### kvmvm
+#### rg
| Идентификатор
задачи | Описание |
| --- | --- |
-| BATF-1091 | Опциональное поле `image_id` в datasources `decort_cb_kvmvm_list` в cloudbroker/kvmvm |
+| BATF-1062 | Отображение datasourses `decort_rg_list_deleted` в cloudapi/rg и `decort_cb_rg_list_deleted` в cloudbroker/rg |
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 6524b482..8a1e27d3 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ ZIPDIR = ./zip
BINARY=${NAME}
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
MAINPATH = ./cmd/decort/
-VERSION=4.10.1
+VERSION=4.10.2
OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
FILES = ${BINARY}_${VERSION}_darwin_amd64\
diff --git a/docs/data-sources/cb_kvmvm.md b/docs/data-sources/cb_kvmvm.md
index ad94a8a7..4d5252ef 100644
--- a/docs/data-sources/cb_kvmvm.md
+++ b/docs/data-sources/cb_kvmvm.md
@@ -64,6 +64,7 @@ description: |-
- `image_name` (String)
- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
- `live_migration_job_id` (Number)
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
- `loader_type` (String)
- `lock_status` (String)
- `manager_id` (Number)
@@ -170,10 +171,13 @@ Read-Only:
- `boot_partition` (Number)
- `bus_number` (Number)
- `ckey` (String)
+- `created_by` (String)
- `created_time` (Number)
+- `deleted_by` (String)
- `deleted_time` (Number)
- `desc` (String)
- `destruction_time` (Number)
+- `devicename` (String)
- `disk_id` (Number)
- `disk_path` (String)
- `gid` (Number)
@@ -211,6 +215,7 @@ Read-Only:
- `tech_status` (String)
- `to_clean` (Boolean)
- `type` (String)
+- `updated_time` (Number)
### Nested Schema for `disks.iotune`
@@ -317,6 +322,15 @@ Read-Only:
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
### Nested Schema for `os_users`
diff --git a/docs/data-sources/cb_rg_list_deleted.md b/docs/data-sources/cb_rg_list_deleted.md
index 4b27644e..4ae6ddfb 100644
--- a/docs/data-sources/cb_rg_list_deleted.md
+++ b/docs/data-sources/cb_rg_list_deleted.md
@@ -71,6 +71,7 @@ Read-Only:
- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
- `resource_types` (List of String)
- `rg_id` (Number)
+- `sdn_access_group_id` (String)
- `secret` (String)
- `status` (String)
- `storage_policy_ids` (List of Number)
diff --git a/docs/data-sources/cb_storage_policy_list.md b/docs/data-sources/cb_storage_policy_list.md
index 8607b2ed..3e6e5d61 100644
--- a/docs/data-sources/cb_storage_policy_list.md
+++ b/docs/data-sources/cb_storage_policy_list.md
@@ -67,6 +67,7 @@ Read-Only:
- `pool_names` (List of String)
- `sep_id` (Number)
+- `sep_name` (String)
diff --git a/docs/data-sources/kvmvm.md b/docs/data-sources/kvmvm.md
index ed5f2416..30004933 100644
--- a/docs/data-sources/kvmvm.md
+++ b/docs/data-sources/kvmvm.md
@@ -62,6 +62,7 @@ description: |-
- `image_id` (Number)
- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
- `live_migration_job_id` (Number)
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
- `loader_type` (String)
- `lock_status` (String)
- `manager_id` (Number)
@@ -201,10 +202,13 @@ Read-Only:
- `acl` (String)
- `boot_partition` (Number)
- `bus_number` (Number)
+- `created_by` (String)
- `created_time` (Number)
+- `deleted_by` (String)
- `deleted_time` (Number)
- `description` (String)
- `destruction_time` (Number)
+- `devicename` (String)
- `disk_id` (Number)
- `disk_path` (String)
- `gid` (Number)
@@ -239,6 +243,7 @@ Read-Only:
- `tech_status` (String)
- `to_clean` (Boolean)
- `type` (String)
+- `updated_time` (Number)
### Nested Schema for `disks.iotune`
@@ -346,6 +351,15 @@ Read-Only:
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
### Nested Schema for `os_users`
diff --git a/docs/data-sources/rg_list_deleted.md b/docs/data-sources/rg_list_deleted.md
index d6e062e5..9a50fd25 100644
--- a/docs/data-sources/rg_list_deleted.md
+++ b/docs/data-sources/rg_list_deleted.md
@@ -71,6 +71,7 @@ Read-Only:
- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
- `resource_types` (List of String)
- `rg_id` (Number)
+- `sdn_access_group_id` (String)
- `secret` (String)
- `status` (String)
- `storage_policy_ids` (List of Number)
diff --git a/docs/data-sources/storage_policy_list.md b/docs/data-sources/storage_policy_list.md
index dd232580..ccb43319 100644
--- a/docs/data-sources/storage_policy_list.md
+++ b/docs/data-sources/storage_policy_list.md
@@ -67,6 +67,7 @@ Read-Only:
- `pool_names` (List of String)
- `sep_id` (Number)
+- `sep_name` (String)
diff --git a/docs/resources/cb_kvmvm.md b/docs/resources/cb_kvmvm.md
index 1ef2494d..a44dfae4 100644
--- a/docs/resources/cb_kvmvm.md
+++ b/docs/resources/cb_kvmvm.md
@@ -104,6 +104,7 @@ description: |-
- `id` (String) The ID of this resource.
- `image_name` (String)
- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
- `lock_status` (String)
- `manager_id` (Number)
- `manager_type` (String)
@@ -196,12 +197,18 @@ Optional:
Read-Only:
+- `create_by` (String)
+- `create_time` (Number)
+- `delete_by` (String)
+- `delete_time` (Number)
+- `devicename` (String)
- `disk_id` (Number) Disk ID
- `present_to` (Map of Number)
- `shareable` (Boolean)
- `size_max` (Number)
- `size_used` (Number)
- `to_clean` (Boolean)
+- `update_time` (Number)
@@ -389,6 +396,15 @@ Read-Only:
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
### Nested Schema for `os_users`
diff --git a/docs/resources/kvmvm.md b/docs/resources/kvmvm.md
index 4a23588d..59d9ad2e 100644
--- a/docs/resources/kvmvm.md
+++ b/docs/resources/kvmvm.md
@@ -99,6 +99,7 @@ description: |-
- `guid` (Number)
- `id` (String) The ID of this resource.
- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
- `lock_status` (String)
- `manager_id` (Number)
- `manager_type` (String)
@@ -189,12 +190,18 @@ Optional:
Read-Only:
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `devicename` (String)
- `disk_id` (Number) Disk ID
- `present_to` (Map of Number)
- `shareable` (Boolean)
- `size_max` (Number)
- `size_used` (Number)
- `to_clean` (Boolean)
+- `updated_time` (Number)
@@ -294,7 +301,12 @@ Required:
Read-Only:
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
- `desc` (String)
+- `devicename` (String)
- `disk_id` (Number)
- `disk_name` (String)
- `disk_type` (String)
@@ -309,6 +321,7 @@ Read-Only:
- `size_used` (Number)
- `storage_policy_id` (Number)
- `to_clean` (Boolean)
+- `updated_time` (Number)
@@ -369,6 +382,15 @@ Read-Only:
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
### Nested Schema for `os_users`
diff --git a/internal/service/cloudapi/kvmvm/data_source_compute.go b/internal/service/cloudapi/kvmvm/data_source_compute.go
index ceb7ddd7..941c0584 100644
--- a/internal/service/cloudapi/kvmvm/data_source_compute.go
+++ b/internal/service/cloudapi/kvmvm/data_source_compute.go
@@ -457,6 +457,22 @@ func computeListDisksSchemaMake() map[string]*schema.Schema {
Type: schema.TypeBool,
Computed: true,
},
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
}
}
@@ -1148,6 +1164,22 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "loader_meta_iso": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "device_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "path": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
"os_version": {
Type: schema.TypeString,
Computed: true,
diff --git a/internal/service/cloudapi/kvmvm/flattens.go b/internal/service/cloudapi/kvmvm/flattens.go
index ce3efd36..615c6f48 100644
--- a/internal/service/cloudapi/kvmvm/flattens.go
+++ b/internal/service/cloudapi/kvmvm/flattens.go
@@ -225,28 +225,28 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
"numa_affinity": compute.NumaAffinity,
"numa_node_id": compute.NumaNodeId,
"os_version": compute.OSVersion,
- // "pinned": compute.Pinned,
- "preferred_cpu": compute.PreferredCPU,
- "qemu_guest": flattenQemuQuest(compute.QemuQuest),
- "ram": compute.RAM,
- "reference_id": compute.ReferenceID,
- "registered": compute.Registered,
- "res_name": compute.ResName,
- "reserved_node_cpus": compute.ReservedNodeCpus,
- "rg_id": compute.RGID,
- "rg_name": compute.RGName,
- "snap_sets": flattenSnapSets(compute.SnapSets),
- "stateless_sep_id": compute.StatelessSepID,
- "stateless_sep_type": compute.StatelessSepType,
- "status": compute.Status,
- "tags": flattenTags(compute.Tags),
- "tech_status": compute.TechStatus,
- "total_disk_size": compute.TotalDiskSize,
- "updated_by": compute.UpdatedBy,
- "updated_time": compute.UpdatedTime,
- "user_managed": compute.UserManaged,
- "vgpus": compute.VGPUs,
- "vins_connected": compute.VINSConnected,
+ "pinned": compute.PinnedToStack,
+ "preferred_cpu": compute.PreferredCPU,
+ "qemu_guest": flattenQemuQuest(compute.QemuQuest),
+ "ram": compute.RAM,
+ "reference_id": compute.ReferenceID,
+ "registered": compute.Registered,
+ "res_name": compute.ResName,
+ "reserved_node_cpus": compute.ReservedNodeCpus,
+ "rg_id": compute.RGID,
+ "rg_name": compute.RGName,
+ "snap_sets": flattenSnapSets(compute.SnapSets),
+ "stateless_sep_id": compute.StatelessSepID,
+ "stateless_sep_type": compute.StatelessSepType,
+ "status": compute.Status,
+ "tags": flattenTags(compute.Tags),
+ "tech_status": compute.TechStatus,
+ "total_disk_size": compute.TotalDiskSize,
+ "updated_by": compute.UpdatedBy,
+ "updated_time": compute.UpdatedTime,
+ "user_managed": compute.UserManaged,
+ "vgpus": compute.VGPUs,
+ "vins_connected": compute.VINSConnected,
//TODO
// "virtual_image_id": compute.VirtualImageID,
"loader_type": compute.LoaderType,
@@ -289,10 +289,6 @@ func flattenBootDisk(bootDisk *compute.ItemComputeDisk) []map[string]interface{}
func flattenComputeDisksDemo(disksList compute.ListComputeDisks, disksBlocks, extraDisks []interface{}, bootDiskId uint64) []map[string]interface{} {
res := make([]map[string]interface{}, 0, len(disksList))
- if len(disksBlocks) == 0 {
- return res
- }
-
sort.Slice(disksList, func(i, j int) bool {
return disksList[i].ID < disksList[j].ID
})
@@ -304,9 +300,19 @@ func flattenComputeDisksDemo(disksList compute.ListComputeDisks, disksBlocks, ex
continue
}
- pernamentlyValue := disksBlocks[indexDataDisks].(map[string]interface{})["permanently"].(bool)
+ var pernamentlyValue bool
+ if indexDataDisks < len(disksBlocks) {
+ if diskBlock, ok := disksBlocks[indexDataDisks].(map[string]interface{}); ok {
+ if perm, exists := diskBlock["permanently"]; exists {
+ if permBool, ok := perm.(bool); ok {
+ pernamentlyValue = permBool
+ }
+ }
+ }
+ }
temp := map[string]interface{}{
+ "devicename": disk.DeviceName,
"disk_name": disk.Name,
"disk_id": disk.ID,
"disk_type": disk.Type,
@@ -318,9 +324,15 @@ func flattenComputeDisksDemo(disksList compute.ListComputeDisks, disksBlocks, ex
"desc": disk.Description,
"image_id": disk.ImageID,
"size": disk.SizeMax,
- "permanently": pernamentlyValue,
"present_to": disk.PresentTo,
"storage_policy_id": disk.StoragePolicyID,
+ "to_clean": disk.ToClean,
+ "created_by": disk.CreatedBy,
+ "created_time": disk.CreatedTime,
+ "deleted_by": disk.DeletedBy,
+ "deleted_time": disk.DeletedTime,
+ "updated_time": disk.UpdatedTime,
+ "permanently": pernamentlyValue,
}
res = append(res, temp)
indexDataDisks++
@@ -439,7 +451,7 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pc
if err := d.Set("os_users", parseOsUsers(computeRec.OSUsers)); err != nil {
return err
}
- // d.Set("pinned", computeRec.Pinned)
+ d.Set("pinned", computeRec.PinnedToStack)
d.Set("preferred_cpu", computeRec.PreferredCPU)
d.Set("ram", computeRec.RAM)
d.Set("reference_id", computeRec.ReferenceID)
@@ -467,6 +479,7 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pc
d.Set("hot_resize", computeRec.HotResize)
d.Set("network_interface_naming", computeRec.NetworkInterfaceNaming)
d.Set("zone_id", computeRec.ZoneID)
+ d.Set("loader_meta_iso", flattenLoaderMetaIso(computeRec.LoaderMetaIso))
d.Set("enabled", false)
if computeRec.Status == status.Enabled {
@@ -486,6 +499,16 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pc
return nil
}
+func flattenLoaderMetaIso(loaderMetaIso compute.LoaderMetaIso) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "device_name": loaderMetaIso.DeviceName,
+ "path": loaderMetaIso.Path,
+ }
+ res = append(res, temp)
+ return res
+}
+
func flattenACL(acl compute.RecordACL) []map[string]interface{} {
res := make([]map[string]interface{}, 0)
temp := map[string]interface{}{
@@ -565,7 +588,10 @@ func flattenListComputeDisks(disks compute.ListComputeDisks) []map[string]interf
"boot_partition": disk.BootPartition,
"bus_number": disk.BusNumber,
"created_time": disk.CreatedTime,
+ "created_by": disk.CreatedBy,
"deleted_time": disk.DeletedTime,
+ "deleted_by": disk.DeletedBy,
+ "devicename": disk.DeviceName,
"description": disk.Description,
"destruction_time": disk.DestructionTime,
"disk_path": disk.DiskPath,
@@ -601,6 +627,7 @@ func flattenListComputeDisks(disks compute.ListComputeDisks) []map[string]interf
"tech_status": disk.TechStatus,
"type": disk.Type,
"to_clean": disk.ToClean,
+ "updated_time": disk.UpdatedTime,
}
res = append(res, temp)
}
@@ -726,6 +753,7 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute
d.Set("hot_resize", computeRec.HotResize)
d.Set("network_interface_naming", computeRec.NetworkInterfaceNaming)
d.Set("zone_id", computeRec.ZoneID)
+ d.Set("loader_meta_iso", flattenLoaderMetaIso(computeRec.LoaderMetaIso))
d.Set("os_version", computeRec.OSVersion)
}
diff --git a/internal/service/cloudapi/kvmvm/resource_compute.go b/internal/service/cloudapi/kvmvm/resource_compute.go
index bf6fb420..46ea0f8d 100644
--- a/internal/service/cloudapi/kvmvm/resource_compute.go
+++ b/internal/service/cloudapi/kvmvm/resource_compute.go
@@ -944,41 +944,6 @@ 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) {
- if !d.Get("started").(bool) {
- return diag.Errorf("Cannot pin to stack a VM, that is not started")
- }
- reqToStart := compute.StartRequest{
- ComputeID: computeRec.ID,
- }
- _, err := c.CloudAPI().Compute().Start(ctx, reqToStart)
- if err != nil {
- return diag.FromErr(err)
- }
-
- 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)
- }
- }
- }
-
// Note bene: numa_affinity, cpu_pin and hp_backed are not allowed to be changed for compute in STARTED tech status.
var isStopRequired bool
if d.HasChanges("numa_affinity", "cpu_pin", "hp_backed", "chipset", "preferred_cpu", "hot_resize") && d.Get("started").(bool) {
@@ -1810,7 +1775,6 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
return diag.FromErr(err)
}
}
-
} else {
req := compute.StopRequest{
ComputeID: computeRec.ID,
@@ -1821,6 +1785,34 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
}
}
+ if d.HasChange("pin_to_stack") || d.HasChange("started") {
+ newPin := d.Get("pin_to_stack")
+ if !newPin.(bool) && d.HasChange("pin_to_stack") {
+ req := compute.UnpinFromStackRequest{
+ ComputeID: computeRec.ID,
+ }
+
+ _, err := c.CloudAPI().Compute().UnpinFromStack(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ if newPin.(bool) {
+ if !d.Get("started").(bool) {
+ return diag.Errorf("Cannot pin to stack a VM, that is not started")
+ }
+
+ 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)
+ }
+ }
+ }
+
// we may reuse dataSourceComputeRead here as we maintain similarity
// between Compute resource and Compute data source schemas
@@ -1900,32 +1892,6 @@ func resourceComputeDelete(ctx context.Context, d *schema.ResourceData, m interf
c := m.(*controller.ControllerCfg)
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")
-
- if d.Get("permanently").(bool) && ok {
- pciDevices := pciList.(*schema.Set).List()
- for _, v := range pciDevices {
- pciID := v.(int)
- req := compute.DetachPCIDeviceRequest{
- ComputeID: computeId,
- DeviceID: uint64(pciID),
- }
- _, err := c.CloudAPI().Compute().DetachPCIDevice(ctx, req)
- if err != nil {
- return diag.FromErr(err)
- }
- }
- }
req := compute.DeleteRequest{
ComputeID: computeId,
Permanently: d.Get("permanently").(bool),
@@ -2022,6 +1988,30 @@ func disksSubresourceSchemaMake() map[string]*schema.Schema {
Type: schema.TypeBool,
Computed: true,
},
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
}
return rets
}
@@ -2154,6 +2144,7 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
Optional: true,
Computed: true,
},
+
"chipset": {
Type: schema.TypeString,
Optional: true,
@@ -2841,6 +2832,22 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "loader_meta_iso": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "device_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "path": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
}
return rets
}
@@ -2867,6 +2874,10 @@ func ResourceCompute() *schema.Resource {
if diff.HasChanges("pin_to_stack") {
diff.SetNewComputed("pinned")
}
+ if diff.HasChanges("image_id") {
+ diff.SetNewComputed("boot_disk")
+ diff.SetNewComputed("boot_image_id")
+ }
return nil
},
diff --git a/internal/service/cloudapi/rg/data_source_rg_list_deleted.go b/internal/service/cloudapi/rg/data_source_rg_list_deleted.go
index 46fe82b4..e93578a1 100644
--- a/internal/service/cloudapi/rg/data_source_rg_list_deleted.go
+++ b/internal/service/cloudapi/rg/data_source_rg_list_deleted.go
@@ -135,14 +135,6 @@ func dataSourceRgListDeletedSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
},
},
- "cpu_allocation_parameter": {
- Type: schema.TypeString,
- Computed: true,
- },
- "cpu_allocation_ratio": {
- Type: schema.TypeFloat,
- Computed: true,
- },
"created_by": {
Type: schema.TypeString,
Computed: true,
@@ -243,6 +235,14 @@ func dataSourceRgListDeletedSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
},
},
+ "cpu_allocation_parameter": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "cpu_allocation_ratio": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
"uniq_pools": {
Type: schema.TypeList,
Computed: true,
@@ -250,6 +250,10 @@ func dataSourceRgListDeletedSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
},
},
+ "sdn_access_group_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
"storage_policy_ids": {
Type: schema.TypeList,
Computed: true,
diff --git a/internal/service/cloudapi/stpolicy/flattens.go b/internal/service/cloudapi/stpolicy/flattens.go
index 403acdc1..2ab72c00 100644
--- a/internal/service/cloudapi/stpolicy/flattens.go
+++ b/internal/service/cloudapi/stpolicy/flattens.go
@@ -20,9 +20,8 @@ func flattenAccessSEPPools(accessSEPPools stpolicy.ListAccessSEPPools) []map[str
res := make([]map[string]interface{}, 0, len(accessSEPPools))
for _, asp := range accessSEPPools {
temp := map[string]interface{}{
- "sep_id": asp.SEPID,
- //TODO
- //"name": asp.Name,
+ "sep_id": asp.SEPID,
+ "sep_name": asp.Name,
"pool_names": asp.PoolNames,
}
diff --git a/internal/service/cloudapi/stpolicy/schema.go b/internal/service/cloudapi/stpolicy/schema.go
index 0c6c8817..44df4c1e 100644
--- a/internal/service/cloudapi/stpolicy/schema.go
+++ b/internal/service/cloudapi/stpolicy/schema.go
@@ -170,6 +170,10 @@ func dataSourceStoragePolicyListSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "sep_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
},
},
},
diff --git a/internal/service/cloudbroker/account/flattens.go b/internal/service/cloudbroker/account/flattens.go
index 55eab85c..190bd725 100644
--- a/internal/service/cloudbroker/account/flattens.go
+++ b/internal/service/cloudbroker/account/flattens.go
@@ -58,6 +58,7 @@ func flattenDataAccount(d *schema.ResourceData, acc *account.RecordAccount) {
d.Set("resource_types", acc.ResTypes)
d.Set("send_access_emails", acc.SendAccessEmails)
d.Set("status", acc.Status)
+ d.Set("storage_policy_ids", acc.StoragePolicyIDs)
d.Set("uniq_pools", acc.UniqPools)
d.Set("zone_ids", flattenZones(acc.ZoneIDs))
d.Set("updated_time", acc.UpdatedTime)
diff --git a/internal/service/cloudbroker/kvmvm/flattens.go b/internal/service/cloudbroker/kvmvm/flattens.go
index d2f95068..55eb827d 100644
--- a/internal/service/cloudbroker/kvmvm/flattens.go
+++ b/internal/service/cloudbroker/kvmvm/flattens.go
@@ -45,6 +45,7 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, p
d.Set("clone_reference", computeRec.CloneReference)
d.Set("clones", computeRec.Clones)
d.Set("computeci_id", computeRec.ComputeCIID)
+ d.Set("cpu", computeRec.CPUs)
d.Set("created_by", computeRec.CreatedBy)
d.Set("created_time", computeRec.CreatedTime)
d.Set("custom_fields", string(customFields))
@@ -64,6 +65,7 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, p
d.Set("image_name", computeRec.ImageName)
d.Set("interfaces", flattenInterfaces(computeRec.Interfaces))
d.Set("lock_status", computeRec.LockStatus)
+ d.Set("loader_meta_iso", flattenLoaderMetaIso(computeRec.LoaderMetaIso))
d.Set("manager_id", computeRec.ManagerID)
d.Set("manager_type", computeRec.ManagerType)
d.Set("migrationjob", computeRec.MigrationJob)
@@ -78,14 +80,17 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, p
d.Set("os_users", flattenOSUsers(computeRec.OSUsers))
d.Set("pinned", computeRec.PinnedToStack)
d.Set("preferred_cpu", computeRec.PreferredCPU)
+ d.Set("ram", computeRec.RAM)
d.Set("reference_id", computeRec.ReferenceID)
d.Set("registered", computeRec.Registered)
d.Set("res_name", computeRec.ResName)
d.Set("reserved_node_cpus", computeRec.ReservedNodeCpus)
d.Set("rg_name", computeRec.RGName)
+ d.Set("rg_id", computeRec.RGID)
d.Set("snap_sets", flattenSnapSets(computeRec.SnapSets))
d.Set("stack_id", computeRec.StackID)
d.Set("stack_name", computeRec.StackName)
+ d.Set("started", computeRec.TechStatus == "STARTED")
d.Set("stateless_sep_id", computeRec.StatelessSEPID)
d.Set("stateless_sep_type", computeRec.StatelessSEPType)
d.Set("status", computeRec.Status)
@@ -227,10 +232,6 @@ func flattenQOS(qos compute.QOS) []map[string]interface{} {
func flattenComputeDisks(disksList compute.ListDisks, disksBlocks, extraDisks []interface{}, bootDiskId uint64) []map[string]interface{} {
res := make([]map[string]interface{}, 0, len(disksList))
- if len(disksBlocks) == 0 {
- return res
- }
-
sort.Slice(disksList, func(i, j int) bool {
return disksList[i].ID < disksList[j].ID
})
@@ -242,8 +243,25 @@ func flattenComputeDisks(disksList compute.ListDisks, disksBlocks, extraDisks []
continue
}
- pernamentlyValue := disksBlocks[indexDataDisks].(map[string]interface{})["permanently"].(bool)
- nodeIds := disksBlocks[indexDataDisks].(map[string]interface{})["node_ids"].(*schema.Set)
+ var pernamentlyValue bool
+ if indexDataDisks < len(disksBlocks) {
+ if diskBlock, ok := disksBlocks[indexDataDisks].(map[string]interface{}); ok {
+ if perm, exists := diskBlock["permanently"]; exists {
+ if permBool, ok := perm.(bool); ok {
+ pernamentlyValue = permBool
+ }
+ }
+ }
+ }
+
+ var nodeIds *schema.Set
+ if indexDataDisks < len(disksBlocks) {
+ if diskBlock, ok := disksBlocks[indexDataDisks].(map[string]interface{}); ok {
+ if nodeIds, exists := diskBlock["node_ids"]; exists {
+ nodeIds = nodeIds.(*schema.Set)
+ }
+ }
+ }
temp := map[string]interface{}{
"disk_name": disk.Name,
@@ -258,10 +276,16 @@ func flattenComputeDisks(disksList compute.ListDisks, disksBlocks, extraDisks []
"shareable": disk.Shareable,
"size_used": disk.SizeUsed,
"size_max": disk.SizeMax,
- "permanently": pernamentlyValue,
"present_to": disk.PresentTo,
"storage_policy_id": disk.StoragePolicyID,
"to_clean": disk.ToClean,
+ "permanently": pernamentlyValue,
+ "devicename": disk.DeviceName,
+ "create_by": disk.CreatedBy,
+ "create_time": disk.CreatedTime,
+ "delete_by": disk.DeletedBy,
+ "delete_time": disk.DeletedTime,
+ "update_time": disk.UpdatedTime,
}
res = append(res, temp)
indexDataDisks++
@@ -556,6 +580,16 @@ func flattenDisks(disks []compute.InfoDisk) []map[string]interface{} {
return res
}
+func flattenLoaderMetaIso(loaderMetaIso compute.LoaderMetaIso) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "device_name": loaderMetaIso.DeviceName,
+ "path": loaderMetaIso.Path,
+ }
+ res = append(res, temp)
+ return res
+}
+
func flattenComputeAudits(computeAudits compute.ListDetailedAudits) []map[string]interface{} {
res := make([]map[string]interface{}, 0, len(computeAudits.Data))
for _, computeAudit := range computeAudits.Data {
@@ -808,6 +842,7 @@ func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute
d.Set("hot_resize", compFacts.HotResize)
d.Set("network_interface_naming", compFacts.NetworkInterfaceNaming)
d.Set("zone_id", compFacts.ZoneID)
+ d.Set("loader_meta_iso", flattenLoaderMetaIso(compFacts.LoaderMetaIso))
d.Set("os_version", compFacts.OSVersion)
//extra fields setting
bootDisk := findBootDisk(compFacts.Disks)
@@ -868,7 +903,10 @@ func flattenDisk(diskList compute.ListDisks) []map[string]interface{} {
"boot_partition": disk.BootPartition,
"bus_number": disk.BusNumber,
"created_time": disk.CreatedTime,
+ "created_by": disk.CreatedBy,
"deleted_time": disk.DeletedTime,
+ "deleted_by": disk.DeletedBy,
+ "devicename": disk.DeviceName,
"desc": disk.Description,
"destruction_time": disk.DestructionTime,
"disk_path": disk.DiskPath,
@@ -907,6 +945,7 @@ func flattenDisk(diskList compute.ListDisks) []map[string]interface{} {
"tech_status": disk.TechStatus,
"type": disk.Type,
"to_clean": disk.ToClean,
+ "updated_time": disk.UpdatedTime,
}
res = append(res, temp)
}
diff --git a/internal/service/cloudbroker/kvmvm/resource_compute.go b/internal/service/cloudbroker/kvmvm/resource_compute.go
index cce221b6..80f5c14a 100644
--- a/internal/service/cloudbroker/kvmvm/resource_compute.go
+++ b/internal/service/cloudbroker/kvmvm/resource_compute.go
@@ -344,26 +344,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.(*schema.Set).Len() > 0 {
lvs := libvirtSettings.(*schema.Set).List()
@@ -456,6 +436,36 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
}
+ if pin, ok := d.GetOk("pin_to_stack"); ok && pin.(bool) {
+ start, _ := d.GetOk("started")
+ _, stackOk := d.GetOk("stack_id")
+
+ if !start.(bool) && !stackOk {
+ warnings.Add(errors.New("cannot pin to stack a VM, that is not started and stack_id is not set"))
+ } else {
+ req := compute.PinToStackRequest{
+ ComputeID: computeId,
+ }
+
+ if stackID, ok := d.Get("stack_id").(int); ok {
+ req.TargetStackID = uint64(stackID)
+ }
+
+ 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 affinityLabel, ok := d.GetOk("affinity_label"); ok {
req := compute.AffinityLabelSetRequest{
ComputeIDs: []uint64{
@@ -950,33 +960,6 @@ func resourceComputeDelete(ctx context.Context, d *schema.ResourceData, m interf
c := m.(*controller.ControllerCfg)
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")
-
- if d.Get("permanently").(bool) && ok {
- pciDevices := pciList.(*schema.Set).List()
- for _, v := range pciDevices {
- pciID := v.(int)
- req := compute.DetachPCIDeviceRequest{
- ComputeID: computeId,
- DeviceID: uint64(pciID),
- }
- _, err := c.CloudBroker().Compute().DetachPciDevice(ctx, req)
- if err != nil {
- return diag.FromErr(err)
- }
- }
- }
-
req := compute.DeleteRequest{
ComputeID: computeId,
Permanently: d.Get("permanently").(bool),
diff --git a/internal/service/cloudbroker/kvmvm/schema.go b/internal/service/cloudbroker/kvmvm/schema.go
index 0a0abbf9..487846cb 100644
--- a/internal/service/cloudbroker/kvmvm/schema.go
+++ b/internal/service/cloudbroker/kvmvm/schema.go
@@ -530,6 +530,22 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeBool,
Computed: true,
},
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
},
},
},
@@ -971,6 +987,22 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "loader_meta_iso": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "device_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "path": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
"user_data": {
Type: schema.TypeString,
Computed: true,
@@ -3760,6 +3792,30 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeBool,
Computed: true,
},
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "create_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "create_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "delete_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "delete_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "update_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
},
},
},
@@ -4561,5 +4617,21 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "loader_meta_iso": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "device_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "path": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
}
}
diff --git a/internal/service/cloudbroker/kvmvm/utility_compute.go b/internal/service/cloudbroker/kvmvm/utility_compute.go
index e0aba1a5..d4c99998 100644
--- a/internal/service/cloudbroker/kvmvm/utility_compute.go
+++ b/internal/service/cloudbroker/kvmvm/utility_compute.go
@@ -1618,6 +1618,13 @@ func utilityComputePinToStack(ctx context.Context, d *schema.ResourceData, m int
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
+ start, _ := d.GetOk("started")
+ _, stackOk := d.GetOk("stack_id")
+
+ if !start.(bool) && !stackOk {
+ errors.New("cannot pin to stack a VM, that is not started and stack_id is not set")
+ }
+
oldPin, newPin := d.GetChange("pin_to_stack")
if oldPin.(bool) && !newPin.(bool) {
req := compute.UnpinFromStackRequest{
diff --git a/internal/service/cloudbroker/rg/schema.go b/internal/service/cloudbroker/rg/schema.go
index 73d2d674..4d4943e9 100644
--- a/internal/service/cloudbroker/rg/schema.go
+++ b/internal/service/cloudbroker/rg/schema.go
@@ -1741,6 +1741,10 @@ func dataSourceRgListDeletedSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
},
},
+ "sdn_access_group_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
"storage_policy_ids": {
Type: schema.TypeList,
Computed: true,
diff --git a/internal/service/cloudbroker/stpolicy/flattens.go b/internal/service/cloudbroker/stpolicy/flattens.go
index 6fb02e4c..4308484a 100644
--- a/internal/service/cloudbroker/stpolicy/flattens.go
+++ b/internal/service/cloudbroker/stpolicy/flattens.go
@@ -20,9 +20,8 @@ func flattenAccessSEPPools(accessSEPPools stpolicy.ListAccessSEPPools) []map[str
res := make([]map[string]interface{}, 0, len(accessSEPPools))
for _, asp := range accessSEPPools {
temp := map[string]interface{}{
- "sep_id": asp.SEPID,
- //TODO
- //"name": asp.Name,
+ "sep_id": asp.SEPID,
+ "sep_name": asp.Name,
"pool_names": asp.PoolNames,
}
diff --git a/internal/service/cloudbroker/stpolicy/schema.go b/internal/service/cloudbroker/stpolicy/schema.go
index 08e69b24..f7c018b9 100644
--- a/internal/service/cloudbroker/stpolicy/schema.go
+++ b/internal/service/cloudbroker/stpolicy/schema.go
@@ -244,6 +244,10 @@ func dataSourceStoragePolicyListSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "sep_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
},
},
},
diff --git a/samples/cloudapi/bservice/resource_bservice_group/main.tf b/samples/cloudapi/bservice/resource_bservice_group/main.tf
index bc6a966c..8487bf6d 100644
--- a/samples/cloudapi/bservice/resource_bservice_group/main.tf
+++ b/samples/cloudapi/bservice/resource_bservice_group/main.tf
@@ -65,7 +65,7 @@ resource "decort_bservice_group" "bsg" {
#обязательный параметр
#тип - целое число
#используется при создании и обновлении
- ram = 256
+ ram = 512
#размер диска для выч. ресурса, в ГБ
#обязательный параметр
diff --git a/samples/cloudapi/kvmvm/resource_kvmvm/main.tf b/samples/cloudapi/kvmvm/resource_kvmvm/main.tf
index 398198a4..454ac4b0 100644
--- a/samples/cloudapi/kvmvm/resource_kvmvm/main.tf
+++ b/samples/cloudapi/kvmvm/resource_kvmvm/main.tf
@@ -347,7 +347,7 @@ resource "decort_kvmvm" "comp" {
#опциональный параметр
#тип - блок
#используется при создании и обновлении
- #security groups {
+ #security_groups {
#тип сети
#обязательный параметр
#тип - строка
diff --git a/samples/cloudbroker/account/resource_account/main.tf b/samples/cloudbroker/account/resource_account/main.tf
index b99da82a..dfe0d706 100644
--- a/samples/cloudbroker/account/resource_account/main.tf
+++ b/samples/cloudbroker/account/resource_account/main.tf
@@ -125,7 +125,7 @@ resource "decort_cb_account" "acc" {
#id политики хранения
#обязательный параметр
#тип - целое число
- #storage_policy_id = 111
+ #id = 111
#лимит ресурсов хранения в ГБ
#опциональный параметр
diff --git a/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf b/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf
index dd6c13fa..59c3b3fb 100644
--- a/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf
+++ b/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf
@@ -361,7 +361,7 @@ resource "decort_cb_kvmvm" "comp" {
#опциональный параметр
#тип - блок
#используется при создании и обновлении
- #security groups {
+ #security_groups {
#тип сети
#обязательный параметр
#тип - строка