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 { #тип сети #обязательный параметр #тип - строка