From 6eb65467228e4b5ff5a691b0fdbc4edb414a19fc Mon Sep 17 00:00:00 2001 From: Alexey Fetisov Date: Wed, 25 Sep 2024 13:43:26 +0300 Subject: [PATCH] 4.6.2 --- CHANGELOG.md | 17 +- Makefile | 2 +- docs/data-sources/cb_kvmvm.md | 1 + docs/data-sources/kvmvm.md | 1 + docs/resources/cb_kvmvm.md | 1 + docs/resources/kvmvm.md | 1 + .../cloudapi/kvmvm/data_source_compute.go | 14 +- internal/service/cloudapi/kvmvm/flattens.go | 16 +- .../cloudapi/kvmvm/resource_compute.go | 63 +- .../service/cloudapi/kvmvm/utility_compute.go | 47 +- .../kvmvm/utility_data_source_compute.go | 28 +- .../cloudbroker/kvmvm/data_source_compute.go | 7 +- .../service/cloudbroker/kvmvm/flattens.go | 16 +- .../cloudbroker/kvmvm/resource_compute.go | 55 +- internal/service/cloudbroker/kvmvm/schema.go | 16 + .../cloudbroker/kvmvm/utility_compute.go | 57 ++ samples/cloudapi/kvmvm/resource_kvmvm/main.tf | 5 + .../cloudbroker/kvmvm/resource_kvmvm/main.tf | 91 +- wiki/4.6.2/01.-Введение.md | 7 + wiki/4.6.2/02.-Пример-работы.md | 92 ++ ...лачной-платформы-DECORT.md | 31 + ...terraform-провайдером-DECORT.md | 6 + ...-Terraform-провайдера-DECORT.md | 150 ++++ ...-Terraform-провайдера-DECORT.md | 64 ++ ...ние-между-группами-API.md | 38 + ...4-Получение-gid-или-grid_id.md | 31 + ...form-провайдера-в-образ.md | 43 + wiki/4.6.2/05.-Работа-с-terraform.md | 4 + ...ортирование-ресурсов.md | 75 ++ ...02-Работа-с-таймаутами.md | 100 +++ ...становление-ресурсов.md | 29 + ...урсов.-Мета-аргументы.md | 452 ++++++++++ ...05.05-Удаление-ресурсов.md | 262 ++++++ .../05.06-Установка-Terraform.md | 46 + ...астеров-на-версию-4.2.0.md | 179 ++++ ...-Terraform-провайдера-DECORT.md | 4 + ...овательская-группа-API.md | 1 + wiki/4.6.2/06.01.01-Data_decort_kvmvm.md | 270 ++++++ wiki/4.6.2/06.01.02-Data_decort_resgroup.md | 134 +++ wiki/4.6.2/06.01.03-Data_decort_disk.md | 115 +++ wiki/4.6.2/06.01.04-Data_decort_vins.md | 279 ++++++ wiki/4.6.2/06.01.05-Data_decort_account.md | 115 +++ wiki/4.6.2/06.01.06-Data_decort_image_list.md | 160 ++++ wiki/4.6.2/06.01.07-Data_decort_image.md | 87 ++ .../06.01.08-Data_decort_locations_list.md | 78 ++ .../06.01.09-Data_decort_location_url.md | 25 + .../06.01.11-Data_decort_snapshot_list.md | 36 + wiki/4.6.2/06.01.12-Data_decort_rg_list.md | 124 +++ wiki/4.6.2/06.01.13-Data_decort_disk_list.md | 188 ++++ wiki/4.6.2/06.01.14-Data_decort_vins_list.md | 104 +++ .../4.6.2/06.01.15-Data_decort_extnet_list.md | 90 ++ .../06.01.16-Data_decort_extnet_default.md | 26 + ....01.17-Data_decort_extnet_computes_list.md | 78 ++ wiki/4.6.2/06.01.18-Data_decort_extnet.md | 55 ++ ...6.01.19-Data_decort_account_audits_list.md | 38 + ...01.20-Data_decort_account_computes_list.md | 120 +++ ...1.21-Data_decort_account_consumed_units.md | 40 + ...a_decort_account_consumed_units_by_type.md | 46 + ...06.01.23-Data_decort_account_disks_list.md | 84 ++ ....24-Data_decort_account_flipgroups_list.md | 99 ++ ...1.25-Data_decort_account_reserved_units.md | 40 + .../06.01.26-Data_decort_account_rg_list.md | 95 ++ ...1.27-Data_decort_account_templates_list.md | 86 ++ .../06.01.28-Data_decort_account_vins_list.md | 96 ++ .../06.01.29-Data_decort_account_list.md | 78 ++ ....01.30-Data_decort_account_deleted_list.md | 72 ++ .../06.01.31-Data_decort_bservice_list.md | 118 +++ ...01.32-Data_decort_bservice_deleted_list.md | 83 ++ ...1.33-Data_decort_bservice_snapshot_list.md | 35 + wiki/4.6.2/06.01.34-Data_decort_bservice.md | 94 ++ .../06.01.35-Data_decort_bservice_group.md | 70 ++ wiki/4.6.2/06.01.36-Data_decort_lb.md | 111 +++ wiki/4.6.2/06.01.37-Data_decort_lb_list.md | 183 ++++ .../06.01.38-Data_decort_lb_list_deleted.md | 169 ++++ .../06.01.39-Data_decort_disk_list_types.md | 47 + ...40-Data_decort_disk_list_types_detailed.md | 54 ++ .../06.01.41-Data_decort_disk_list_deleted.md | 131 +++ ....01.42-Data_decort_disk_list_unattached.md | 162 ++++ ...06.01.43-Data_decort_disk_snapshot_list.md | 34 + .../06.01.44-Data_decort_disk_snapshot.md | 40 + wiki/4.6.2/06.01.45-Data_decort_k8s.md | 123 +++ wiki/4.6.2/06.01.46-Data_decort_k8s_list.md | 173 ++++ .../06.01.47-Data_decort_k8s_list_deleted.md | 158 ++++ wiki/4.6.2/06.01.48-Data_decort_k8s_wg.md | 68 ++ .../4.6.2/06.01.49-Data_decort_k8s_wg_list.md | 63 ++ .../4.6.2/06.01.50-Data_decort_vins_audits.md | 39 + .../06.01.51-Data_decort_vins_ext_net_list.md | 39 + .../06.01.52-Data_decort_vins_ip_list.md | 40 + .../06.01.53-Data_decort_vins_list_deleted.md | 98 ++ ...06.01.54-Data_decort_vins_nat_rule_list.md | 40 + .../06.01.55-Data_decort_kvmvm_audits.md | 35 + .../06.01.56-Data_decort_kvmvm_get_audits.md | 32 + ...01.57-Data_decort_kvmvm_get_console_url.md | 30 + .../06.01.58-Data_decort_kvmvm_get_log.md | 36 + wiki/4.6.2/06.01.59-Data_decort_kvmvm_list.md | 244 +++++ .../06.01.60-Data_decort_kvmvm_pfw_list.md | 37 + .../06.01.61-Data_decort_kvmvm_user_list.md | 43 + wiki/4.6.2/06.01.62-Data_decort_rg_list.md | 155 ++++ ...-Data_decort_rg_affinity_group_computes.md | 50 ++ ....64-Data_decort_rg_affinity_groups_list.md | 54 ++ ...1.65-Data_decort_rg_affinity_groups_get.md | 44 + wiki/4.6.2/06.01.66-Data_decort_rg_audits.md | 42 + .../06.01.67-Data_decort_rg_list_computes.md | 139 +++ .../06.01.68-Data_decort_rg_list_deleted.md | 143 +++ wiki/4.6.2/06.01.69-Data_decort_rg_list_lb.md | 194 ++++ .../4.6.2/06.01.70-Data_decort_rg_list_pfw.md | 45 + .../06.01.71-Data_decort_rg_list_vins.md | 100 +++ wiki/4.6.2/06.01.72-Data_decort_rg_usage.md | 57 ++ ....01.73-Data_decort_kvmvm_snapshot_usage.md | 45 + .../06.01.74-Data _decort_k8s_computes.md | 47 + wiki/4.6.2/06.01.75-Data_decort_flipgroup.md | 49 + .../06.01.75-Data_decort_flipgroup_list.md | 125 +++ wiki/4.6.2/06.01.76-Data_decort_k8ci_list.md | 88 ++ .../06.01.77-Data_decort_vins_static_route.md | 41 + ...1.78-Data_decort_vins_static_route_list.md | 36 + ...decort_account_resource_consumption_get.md | 70 ++ ...ecort_account_resource_consumption_list.md | 51 ++ .../06.01.81-Data_decort_k8s_wg_cloud_init.md | 41 + ...06.01.82-Data_decort_kvmvm_list_deleted.md | 230 +++++ ...01.83-Data_decort_kvmvm_pci_device_list.md | 86 ++ .../06.01.84-Data_decort_kvmvm_vgpu_list.md | 94 ++ ...Data_decort_rg_resource_consumption_get.md | 70 ++ ...ata_decort_rg_resource_consumption_list.md | 63 ++ .../06.01.87-Data_decort_disk_replication.md | 120 +++ wiki/4.6.2/06.01.87-Data_decort_vfpool.md | 65 ++ .../4.6.2/06.01.88-Data_decort_vfpool_list.md | 124 +++ wiki/4.6.2/06.01.89-Data_decort_stack.md | 44 + wiki/4.6.2/06.01.90-Data_decort_stack_list.md | 78 ++ ...истративная-группа-API.md | 1 + wiki/4.6.2/06.02.01-Data_decort_cb_kvmvm.md | 274 ++++++ wiki/4.6.2/06.02.02-Data_decort_cb_rg.md | 93 ++ wiki/4.6.2/06.02.03-Data_decort_cb_disk.md | 122 +++ wiki/4.6.2/06.02.04-Data_decort_cb_vins.md | 300 +++++++ wiki/4.6.2/06.02.05-Data_decort_cb_account.md | 78 ++ .../06.02.06-Data_decort_cb_image_list.md | 179 ++++ wiki/4.6.2/06.02.07-Data_decort_cb_image.md | 94 ++ ....02.08-Data_decort_cb_image_list_stacks.md | 146 +++ .../06.02.09-Data_decort_cb_grid_list.md | 108 +++ wiki/4.6.2/06.02.10-Data_decort_cb_grid.md | 40 + ...ort_cb_account_resource_consumption_get.md | 70 ++ ...rt_cb_account_resource_consumption_list.md | 51 ++ ...ort_cb_account_available_templates_list.md | 36 + wiki/4.6.2/06.02.103-Data_decort_cb_user.md | 58 ++ .../06.02.104-Data_decort_cb_user_list.md | 87 ++ ...06.02.105-Data_decort_cb_user_get_audit.md | 75 ++ wiki/4.6.2/06.02.106-Data_decort_cb_node.md | 106 +++ .../06.02.107-Data_decort_cb_node_list.md | 170 ++++ ....02.108-Data_decort_cb_disk_replication.md | 128 +++ wiki/4.6.2/06.02.108-Data_decort_cb_vfpool.md | 65 ++ .../06.02.109-Data_decort_cb_vfpool_list.md | 124 +++ .../06.02.11-Data_decort_cb_pcidevice_list.md | 82 ++ ...2.110-Data-decort_cb_grid_get_diagnosis.md | 34 + ....110-Data-decort_cb_grid_post_diagnosis.md | 34 + .../06.02.12-Data_decort_cb_pcidevice.md | 46 + wiki/4.6.2/06.02.13-Data_decort_vgpu.md | 42 + wiki/4.6.2/06.02.14-Data_decort_cb_rg_list.md | 145 +++ .../06.02.15-Data_decort_cb_disk_list.md | 197 ++++ .../06.02.16-Data_decort_cb_vins_list.md | 142 +++ ...2.17-Data_decort_cb_account_audits_list.md | 41 + ...18-Data_decort_cb_account_computes_list.md | 124 +++ ...02.19-Data_decort_cb_account_disks_list.md | 86 ++ ...-Data_decort_cb_account_flipgroups_list.md | 111 +++ ...06.02.21-Data_decort_cb_account_rg_list.md | 150 ++++ ....02.22-Data_decort_cb_account_vins_list.md | 99 ++ .../06.02.23-Data_decort_cb_account_list.md | 121 +++ ....24-Data_decort_cb_account_list_deleted.md | 115 +++ .../06.02.25-Data_decort_cb_sep_config.md | 73 ++ ...06.02.26-Data_decort_cb_sep_consumption.md | 47 + .../06.02.27-Data_decort_cb_sep_disk_list.md | 53 ++ .../4.6.2/06.02.28-Data_decort_cb_sep_list.md | 112 +++ .../4.6.2/06.02.29-Data_decort_cb_sep_pool.md | 72 ++ wiki/4.6.2/06.02.30-Data_decort_cb_sep.md | 85 ++ wiki/4.6.2/06.02.31-Data_decort_cb_extnet.md | 98 ++ .../06.02.32-Data_decort_cb_extnet_list.md | 123 +++ wiki/4.6.2/06.02.33-Data_decort_cb_stack.md | 114 +++ .../06.02.34-Data_decort_cb_stack_list.md | 148 +++ .../06.02.35-Data_decort_cb_flipgroup.md | 62 ++ .../06.02.36-Data_decort_cb_flipgroup_list.md | 135 +++ wiki/4.6.2/06.02.37-Data_decort_cb_lb.md | 139 +++ wiki/4.6.2/06.02.38-Data_decort_cb_lb_list.md | 214 +++++ ...06.02.39-Data_decort_cb_lb_list_deleted.md | 201 +++++ ...6.02.40-Data_decort_cb_grid_list_emails.md | 44 + ...41-Data_decort_cb_grid_list_consumption.md | 63 ++ ....42-Data_decort_cb_grid_get_consumption.md | 70 ++ ...06.02.43-Data_decort_cb_grid_get_status.md | 33 + ....02.44-Data_decort_cb_vins_list_deleted.md | 124 +++ ...02.45-Data_decort_cb_vins_nat_rule_list.md | 45 + ....02.46-Data_decort_cb_vins_ext_net_list.md | 37 + .../06.02.47-Data_decort_cb_vins_ip_list.md | 38 + ...8-Data_decort_cb_vins_static_route_list.md | 37 + ....02.49-Data_decort_cb_vins_static_route.md | 44 + .../06.02.50-Data_decort_cb_vins_audits.md | 36 + ...ta_decort_cb_rg_affinity_group_computes.md | 55 ++ ...2-Data_decort_cb_rg_affinity_groups_get.md | 49 + ...-Data_decort_cb_rg_affinity_groups_list.md | 57 ++ .../06.02.54-Data_decort_cb_rg_audits.md | 45 + ...a_decort_cb_rg_resource_consumption_get.md | 70 ++ ..._decort_cb_rg_resource_consumption_list.md | 63 ++ .../4.6.2/06.02.57-Data_decort_cb_rg_usage.md | 63 ++ ...6.02.58-Data_decort_cb_rg_list_computes.md | 143 +++ ...06.02.59-Data_decort_cb_rg_list_deleted.md | 146 +++ .../06.02.60-Data_decort_cb_rg_list_lb.md | 205 +++++ .../06.02.61-Data_decort_cb_rg_list_pfw.md | 46 + .../06.02.62-Data_decort_cb_rg_list_vins.md | 102 +++ ....02.63-Data_decort_cb_disk_list_deleted.md | 179 ++++ ...06.02.64-Data_decort_cb_disk_list_types.md | 46 + ...Data_decort_cb_disk_list_types_detailed.md | 55 ++ ....66-Data_decort_cb_disk_list_unattached.md | 164 ++++ .../06.02.67-Data_decort_cb_disk_snapshot.md | 43 + ...02.68-Data_decort_cb_disk_snapshot_list.md | 36 + wiki/4.6.2/06.02.69-Data_decort_cb_audit.md | 47 + .../06.02.70-Data_decort_cb_audit_list.md | 87 ++ ....02.71-Data_decort_cb_audit_linked_jobs.md | 40 + wiki/4.6.2/06.02.72-Data_decort_cb_k8s.md | 143 +++ .../06.02.73-Data_decort_cb_k8s_computes.md | 49 + .../4.6.2/06.02.74-Data_decort_cb_k8s_list.md | 150 ++++ ...6.02.75-Data_decort_cb_k8s_list_deleted.md | 161 ++++ wiki/4.6.2/06.02.76-Data_decort_cb_k8s_wg.md | 70 ++ ....02.77-Data_decort_cb_k8s_wg_cloud_init.md | 41 + .../06.02.78-Data_decort_cb_k8s_wg_list.md | 63 ++ .../06.02.79-Data_decort_cb_k8ci_list.md | 98 ++ ....02.80-Data_decort_cb_k8ci_list_deleted.md | 86 ++ wiki/4.6.2/06.02.81-Data_decort_cb_k8ci.md | 44 + ...Data_decort_cb_kvmvm_affinity_relations.md | 43 + .../06.02.83-Data_decort_cb_kvmvm_audits.md | 36 + ....84-Data_decort_cb_kvmvm_boot_order_get.md | 32 + ...6.02.85-Data_decort_cb_kvmvm_get_audits.md | 39 + ...86-Data_decort_cb_kvmvm_get_console_url.md | 32 + .../06.02.87-Data_decort_cb_kvmvm_get_log.md | 38 + .../06.02.88-Data_decort_cb_kvmvm_list.md | 257 ++++++ ...02.89-Data_decort_cb_kvmvm_list_deleted.md | 243 +++++ ...ta_decort_cb_kvmvm_migrate_storage_info.md | 32 + ...91-Data_decort_cb_kvmvm_pci_device_list.md | 88 ++ .../06.02.92-Data_decort_cb_kvmvm_pfw_list.md | 44 + ....93-Data_decort_cb_kvmvm_snapshot_usage.md | 48 + ...2.94-Data_decort_cb_kvmvm_snapshot_list.md | 40 + ...06.02.95-Data_decort_cb_kvmvm_user_list.md | 44 + ...06.02.96-Data_decort_cb_kvmvm_vgpu_list.md | 94 ++ .../06.02.97-Data_decort_cb_extnet_default.md | 25 + ...Data_decort_cb_extnet_static_route_list.md | 37 + ...2.99-Data_decort_cb_extnet_static_route.md | 44 + ...-Terraform-провайдера-DECORT.md | 2 + ...овательская-группа-API.md | 1 + wiki/4.6.2/07.01.01-Resource_decort_kvmvm.md | 850 ++++++++++++++++++ .../07.01.02-Resource_decort_resgroup.md | 310 +++++++ wiki/4.6.2/07.01.03-Resource_decort_disk.md | 183 ++++ wiki/4.6.2/07.01.04-Resource_decort_vins.md | 471 ++++++++++ .../07.01.05-Resource_decort_snapshot.md | 50 ++ wiki/4.6.2/07.01.06-Resource_decort_k8s.md | 603 +++++++++++++ wiki/4.6.2/07.01.07-Resource_decort_k8s_wg.md | 177 ++++ .../07.01.08-Resource_decort_image_virtual.md | 89 ++ wiki/4.6.2/07.01.09-Resource_decort_image.md | 170 ++++ wiki/4.6.2/07.01.10-Resource_decort_pfw.md | 59 ++ .../4.6.2/07.01.11-Resource_decort_account.md | 228 +++++ .../07.01.12-Resource_decort_bservice.md | 156 ++++ ...07.01.13-Resource_decort_bservice_group.md | 254 ++++++ wiki/4.6.2/07.01.14-Resource_decort_lb.md | 205 +++++ .../07.01.15-Resource_decort_lb_frontend.md | 75 ++ ....01.16-Resource_decort_lb_frontend_bind.md | 73 ++ .../07.01.17-Resource_decort_lb_backend.md | 153 ++++ ...01.18-Resource_decort_lb_backend_server.md | 156 ++++ .../07.01.19-Resource_decort_disk_snapshot.md | 53 ++ .../07.01.20-Resource_decort_flipgroup.md | 98 ++ wiki/4.6.2/07.01.21-Resource_decort_k8s_cp.md | 367 ++++++++ ...01.22-Resource_decort_vins_static_route.md | 62 ++ ...esource_decort_image_from_blank_compute.md | 147 +++ ...esource_decort_image_from_platform_disk.md | 170 ++++ ....01.25-Resource_decort_disk_replication.md | 169 ++++ ...истративная-группа-API.md | 1 + .../07.02.01-Resource_decort_cb_pcidevice.md | 104 +++ .../07.02.02-Resource_decort_cb_sep_config.md | 404 +++++++++ wiki/4.6.2/07.02.03-Resource_decort_cb_sep.md | 548 +++++++++++ ...07.02.04-Resource_decort_cb_cdrom_image.md | 187 ++++ .../07.02.06-Resource_decort_cb_account.md | 245 +++++ ....02.07-Resource_decort_cb_virtual_image.md | 168 ++++ .../07.02.08-Resource_decort_cb_image.md | 242 +++++ .../07.02.09-Resource_decort_cb_k8s_wg.md | 145 +++ .../07.02.10-Resource_decort_cb_k8s_cp.md | 265 ++++++ .../07.02.11-Resource_decort_cb_kvmvm.md | 781 ++++++++++++++++ .../4.6.2/07.02.12-Resource_decort_cb_vins.md | 516 +++++++++++ .../4.6.2/07.02.13-Resource_decort_cb_disk.md | 236 +++++ wiki/4.6.2/07.02.14-Resource_decort_cb_rg.md | 286 ++++++ .../07.02.15-Resource_decort_cb_extnet.md | 273 ++++++ .../07.02.16-Resource_decort_cb_flipgroup.md | 104 +++ wiki/4.6.2/07.02.17-Resource_decort_cb_lb.md | 214 +++++ .../07.02.18-Resource_decort_cb_lb_backend.md | 156 ++++ ...19-Resource_decort_cb_lb_backend_server.md | 153 ++++ ...07.02.20-Resource_decort_cb_lb_frontend.md | 69 ++ ....21-Resource_decort_cb_lb_frontend_bind.md | 74 ++ ...22-Resource_decort_cb_vins_static_route.md | 63 ++ ....02.23-Resource_decort_cb_disk_snapshot.md | 61 ++ .../4.6.2/07.02.24-Resource_decort_cb_k8ci.md | 127 +++ ...-Resource_decort_cb_extnet_static_route.md | 63 ++ ...urce_decort_cb_image_from_blank_compute.md | 215 +++++ ...urce_decort_cb_image_from_platform_disk.md | 230 +++++ .../4.6.2/07.02.28-Resource_decort_cb_user.md | 81 ++ ....29-Resource_decort_cb_disk_replication.md | 176 ++++ .../07.02.29-Resource_decort_cb_vfpool.md | 120 +++ .../08.-Полезные-советы.md | 55 ++ wiki/4.6.2/Home.md | 299 ++++++ wiki/Home.md | 3 +- 301 files changed, 32134 insertions(+), 73 deletions(-) create mode 100644 wiki/4.6.2/01.-Введение.md create mode 100644 wiki/4.6.2/02.-Пример-работы.md create mode 100644 wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT.md create mode 100644 wiki/4.6.2/04.-Начало-работы-с-terraform-провайдером-DECORT.md create mode 100644 wiki/4.6.2/04.01-Установка-Terraform-провайдера-DECORT.md create mode 100644 wiki/4.6.2/04.02-Инициализация-Terraform-провайдера-DECORT.md create mode 100644 wiki/4.6.2/04.03-Переключение-между-группами-API.md create mode 100644 wiki/4.6.2/04.04-Получение-gid-или-grid_id.md create mode 100644 wiki/4.6.2/04.05-Сборка-terraform-провайдера-в-образ.md create mode 100644 wiki/4.6.2/05.-Работа-с-terraform.md create mode 100644 wiki/4.6.2/05.01-Импортирование-ресурсов.md create mode 100644 wiki/4.6.2/05.02-Работа-с-таймаутами.md create mode 100644 wiki/4.6.2/05.03-Восстановление-ресурсов.md create mode 100644 wiki/4.6.2/05.04-Массовое-создание-ресурсов.-Мета-аргументы.md create mode 100644 wiki/4.6.2/05.05-Удаление-ресурсов.md create mode 100644 wiki/4.6.2/05.06-Установка-Terraform.md create mode 100644 wiki/4.6.2/05.07-Миграция-k8s-кластеров-на-версию-4.2.0.md create mode 100644 wiki/4.6.2/06.-Data-source-функции-Terraform-провайдера-DECORT.md create mode 100644 wiki/4.6.2/06.01-Пользовательская-группа-API.md create mode 100644 wiki/4.6.2/06.01.01-Data_decort_kvmvm.md create mode 100644 wiki/4.6.2/06.01.02-Data_decort_resgroup.md create mode 100644 wiki/4.6.2/06.01.03-Data_decort_disk.md create mode 100644 wiki/4.6.2/06.01.04-Data_decort_vins.md create mode 100644 wiki/4.6.2/06.01.05-Data_decort_account.md create mode 100644 wiki/4.6.2/06.01.06-Data_decort_image_list.md create mode 100644 wiki/4.6.2/06.01.07-Data_decort_image.md create mode 100644 wiki/4.6.2/06.01.08-Data_decort_locations_list.md create mode 100644 wiki/4.6.2/06.01.09-Data_decort_location_url.md create mode 100644 wiki/4.6.2/06.01.11-Data_decort_snapshot_list.md create mode 100644 wiki/4.6.2/06.01.12-Data_decort_rg_list.md create mode 100644 wiki/4.6.2/06.01.13-Data_decort_disk_list.md create mode 100644 wiki/4.6.2/06.01.14-Data_decort_vins_list.md create mode 100644 wiki/4.6.2/06.01.15-Data_decort_extnet_list.md create mode 100644 wiki/4.6.2/06.01.16-Data_decort_extnet_default.md create mode 100644 wiki/4.6.2/06.01.17-Data_decort_extnet_computes_list.md create mode 100644 wiki/4.6.2/06.01.18-Data_decort_extnet.md create mode 100644 wiki/4.6.2/06.01.19-Data_decort_account_audits_list.md create mode 100644 wiki/4.6.2/06.01.20-Data_decort_account_computes_list.md create mode 100644 wiki/4.6.2/06.01.21-Data_decort_account_consumed_units.md create mode 100644 wiki/4.6.2/06.01.22-Data_decort_account_consumed_units_by_type.md create mode 100644 wiki/4.6.2/06.01.23-Data_decort_account_disks_list.md create mode 100644 wiki/4.6.2/06.01.24-Data_decort_account_flipgroups_list.md create mode 100644 wiki/4.6.2/06.01.25-Data_decort_account_reserved_units.md create mode 100644 wiki/4.6.2/06.01.26-Data_decort_account_rg_list.md create mode 100644 wiki/4.6.2/06.01.27-Data_decort_account_templates_list.md create mode 100644 wiki/4.6.2/06.01.28-Data_decort_account_vins_list.md create mode 100644 wiki/4.6.2/06.01.29-Data_decort_account_list.md create mode 100644 wiki/4.6.2/06.01.30-Data_decort_account_deleted_list.md create mode 100644 wiki/4.6.2/06.01.31-Data_decort_bservice_list.md create mode 100644 wiki/4.6.2/06.01.32-Data_decort_bservice_deleted_list.md create mode 100644 wiki/4.6.2/06.01.33-Data_decort_bservice_snapshot_list.md create mode 100644 wiki/4.6.2/06.01.34-Data_decort_bservice.md create mode 100644 wiki/4.6.2/06.01.35-Data_decort_bservice_group.md create mode 100644 wiki/4.6.2/06.01.36-Data_decort_lb.md create mode 100644 wiki/4.6.2/06.01.37-Data_decort_lb_list.md create mode 100644 wiki/4.6.2/06.01.38-Data_decort_lb_list_deleted.md create mode 100644 wiki/4.6.2/06.01.39-Data_decort_disk_list_types.md create mode 100644 wiki/4.6.2/06.01.40-Data_decort_disk_list_types_detailed.md create mode 100644 wiki/4.6.2/06.01.41-Data_decort_disk_list_deleted.md create mode 100644 wiki/4.6.2/06.01.42-Data_decort_disk_list_unattached.md create mode 100644 wiki/4.6.2/06.01.43-Data_decort_disk_snapshot_list.md create mode 100644 wiki/4.6.2/06.01.44-Data_decort_disk_snapshot.md create mode 100644 wiki/4.6.2/06.01.45-Data_decort_k8s.md create mode 100644 wiki/4.6.2/06.01.46-Data_decort_k8s_list.md create mode 100644 wiki/4.6.2/06.01.47-Data_decort_k8s_list_deleted.md create mode 100644 wiki/4.6.2/06.01.48-Data_decort_k8s_wg.md create mode 100644 wiki/4.6.2/06.01.49-Data_decort_k8s_wg_list.md create mode 100644 wiki/4.6.2/06.01.50-Data_decort_vins_audits.md create mode 100644 wiki/4.6.2/06.01.51-Data_decort_vins_ext_net_list.md create mode 100644 wiki/4.6.2/06.01.52-Data_decort_vins_ip_list.md create mode 100644 wiki/4.6.2/06.01.53-Data_decort_vins_list_deleted.md create mode 100644 wiki/4.6.2/06.01.54-Data_decort_vins_nat_rule_list.md create mode 100644 wiki/4.6.2/06.01.55-Data_decort_kvmvm_audits.md create mode 100644 wiki/4.6.2/06.01.56-Data_decort_kvmvm_get_audits.md create mode 100644 wiki/4.6.2/06.01.57-Data_decort_kvmvm_get_console_url.md create mode 100644 wiki/4.6.2/06.01.58-Data_decort_kvmvm_get_log.md create mode 100644 wiki/4.6.2/06.01.59-Data_decort_kvmvm_list.md create mode 100644 wiki/4.6.2/06.01.60-Data_decort_kvmvm_pfw_list.md create mode 100644 wiki/4.6.2/06.01.61-Data_decort_kvmvm_user_list.md create mode 100644 wiki/4.6.2/06.01.62-Data_decort_rg_list.md create mode 100644 wiki/4.6.2/06.01.63-Data_decort_rg_affinity_group_computes.md create mode 100644 wiki/4.6.2/06.01.64-Data_decort_rg_affinity_groups_list.md create mode 100644 wiki/4.6.2/06.01.65-Data_decort_rg_affinity_groups_get.md create mode 100644 wiki/4.6.2/06.01.66-Data_decort_rg_audits.md create mode 100644 wiki/4.6.2/06.01.67-Data_decort_rg_list_computes.md create mode 100644 wiki/4.6.2/06.01.68-Data_decort_rg_list_deleted.md create mode 100644 wiki/4.6.2/06.01.69-Data_decort_rg_list_lb.md create mode 100644 wiki/4.6.2/06.01.70-Data_decort_rg_list_pfw.md create mode 100644 wiki/4.6.2/06.01.71-Data_decort_rg_list_vins.md create mode 100644 wiki/4.6.2/06.01.72-Data_decort_rg_usage.md create mode 100644 wiki/4.6.2/06.01.73-Data_decort_kvmvm_snapshot_usage.md create mode 100644 wiki/4.6.2/06.01.74-Data _decort_k8s_computes.md create mode 100644 wiki/4.6.2/06.01.75-Data_decort_flipgroup.md create mode 100644 wiki/4.6.2/06.01.75-Data_decort_flipgroup_list.md create mode 100644 wiki/4.6.2/06.01.76-Data_decort_k8ci_list.md create mode 100644 wiki/4.6.2/06.01.77-Data_decort_vins_static_route.md create mode 100644 wiki/4.6.2/06.01.78-Data_decort_vins_static_route_list.md create mode 100644 wiki/4.6.2/06.01.79-Data_decort_account_resource_consumption_get.md create mode 100644 wiki/4.6.2/06.01.80-Data_decort_account_resource_consumption_list.md create mode 100644 wiki/4.6.2/06.01.81-Data_decort_k8s_wg_cloud_init.md create mode 100644 wiki/4.6.2/06.01.82-Data_decort_kvmvm_list_deleted.md create mode 100644 wiki/4.6.2/06.01.83-Data_decort_kvmvm_pci_device_list.md create mode 100644 wiki/4.6.2/06.01.84-Data_decort_kvmvm_vgpu_list.md create mode 100644 wiki/4.6.2/06.01.85-Data_decort_rg_resource_consumption_get.md create mode 100644 wiki/4.6.2/06.01.86-Data_decort_rg_resource_consumption_list.md create mode 100644 wiki/4.6.2/06.01.87-Data_decort_disk_replication.md create mode 100644 wiki/4.6.2/06.01.87-Data_decort_vfpool.md create mode 100644 wiki/4.6.2/06.01.88-Data_decort_vfpool_list.md create mode 100644 wiki/4.6.2/06.01.89-Data_decort_stack.md create mode 100644 wiki/4.6.2/06.01.90-Data_decort_stack_list.md create mode 100644 wiki/4.6.2/06.02-Административная-группа-API.md create mode 100644 wiki/4.6.2/06.02.01-Data_decort_cb_kvmvm.md create mode 100644 wiki/4.6.2/06.02.02-Data_decort_cb_rg.md create mode 100644 wiki/4.6.2/06.02.03-Data_decort_cb_disk.md create mode 100644 wiki/4.6.2/06.02.04-Data_decort_cb_vins.md create mode 100644 wiki/4.6.2/06.02.05-Data_decort_cb_account.md create mode 100644 wiki/4.6.2/06.02.06-Data_decort_cb_image_list.md create mode 100644 wiki/4.6.2/06.02.07-Data_decort_cb_image.md create mode 100644 wiki/4.6.2/06.02.08-Data_decort_cb_image_list_stacks.md create mode 100644 wiki/4.6.2/06.02.09-Data_decort_cb_grid_list.md create mode 100644 wiki/4.6.2/06.02.10-Data_decort_cb_grid.md create mode 100644 wiki/4.6.2/06.02.100-Data_decort_cb_account_resource_consumption_get.md create mode 100644 wiki/4.6.2/06.02.101-Data_decort_cb_account_resource_consumption_list.md create mode 100644 wiki/4.6.2/06.02.102-Data_decort_cb_account_available_templates_list.md create mode 100644 wiki/4.6.2/06.02.103-Data_decort_cb_user.md create mode 100644 wiki/4.6.2/06.02.104-Data_decort_cb_user_list.md create mode 100644 wiki/4.6.2/06.02.105-Data_decort_cb_user_get_audit.md create mode 100644 wiki/4.6.2/06.02.106-Data_decort_cb_node.md create mode 100644 wiki/4.6.2/06.02.107-Data_decort_cb_node_list.md create mode 100644 wiki/4.6.2/06.02.108-Data_decort_cb_disk_replication.md create mode 100644 wiki/4.6.2/06.02.108-Data_decort_cb_vfpool.md create mode 100644 wiki/4.6.2/06.02.109-Data_decort_cb_vfpool_list.md create mode 100644 wiki/4.6.2/06.02.11-Data_decort_cb_pcidevice_list.md create mode 100644 wiki/4.6.2/06.02.110-Data-decort_cb_grid_get_diagnosis.md create mode 100644 wiki/4.6.2/06.02.110-Data-decort_cb_grid_post_diagnosis.md create mode 100644 wiki/4.6.2/06.02.12-Data_decort_cb_pcidevice.md create mode 100644 wiki/4.6.2/06.02.13-Data_decort_vgpu.md create mode 100644 wiki/4.6.2/06.02.14-Data_decort_cb_rg_list.md create mode 100644 wiki/4.6.2/06.02.15-Data_decort_cb_disk_list.md create mode 100644 wiki/4.6.2/06.02.16-Data_decort_cb_vins_list.md create mode 100644 wiki/4.6.2/06.02.17-Data_decort_cb_account_audits_list.md create mode 100644 wiki/4.6.2/06.02.18-Data_decort_cb_account_computes_list.md create mode 100644 wiki/4.6.2/06.02.19-Data_decort_cb_account_disks_list.md create mode 100644 wiki/4.6.2/06.02.20-Data_decort_cb_account_flipgroups_list.md create mode 100644 wiki/4.6.2/06.02.21-Data_decort_cb_account_rg_list.md create mode 100644 wiki/4.6.2/06.02.22-Data_decort_cb_account_vins_list.md create mode 100644 wiki/4.6.2/06.02.23-Data_decort_cb_account_list.md create mode 100644 wiki/4.6.2/06.02.24-Data_decort_cb_account_list_deleted.md create mode 100644 wiki/4.6.2/06.02.25-Data_decort_cb_sep_config.md create mode 100644 wiki/4.6.2/06.02.26-Data_decort_cb_sep_consumption.md create mode 100644 wiki/4.6.2/06.02.27-Data_decort_cb_sep_disk_list.md create mode 100644 wiki/4.6.2/06.02.28-Data_decort_cb_sep_list.md create mode 100644 wiki/4.6.2/06.02.29-Data_decort_cb_sep_pool.md create mode 100644 wiki/4.6.2/06.02.30-Data_decort_cb_sep.md create mode 100644 wiki/4.6.2/06.02.31-Data_decort_cb_extnet.md create mode 100644 wiki/4.6.2/06.02.32-Data_decort_cb_extnet_list.md create mode 100644 wiki/4.6.2/06.02.33-Data_decort_cb_stack.md create mode 100644 wiki/4.6.2/06.02.34-Data_decort_cb_stack_list.md create mode 100644 wiki/4.6.2/06.02.35-Data_decort_cb_flipgroup.md create mode 100644 wiki/4.6.2/06.02.36-Data_decort_cb_flipgroup_list.md create mode 100644 wiki/4.6.2/06.02.37-Data_decort_cb_lb.md create mode 100644 wiki/4.6.2/06.02.38-Data_decort_cb_lb_list.md create mode 100644 wiki/4.6.2/06.02.39-Data_decort_cb_lb_list_deleted.md create mode 100644 wiki/4.6.2/06.02.40-Data_decort_cb_grid_list_emails.md create mode 100644 wiki/4.6.2/06.02.41-Data_decort_cb_grid_list_consumption.md create mode 100644 wiki/4.6.2/06.02.42-Data_decort_cb_grid_get_consumption.md create mode 100644 wiki/4.6.2/06.02.43-Data_decort_cb_grid_get_status.md create mode 100644 wiki/4.6.2/06.02.44-Data_decort_cb_vins_list_deleted.md create mode 100644 wiki/4.6.2/06.02.45-Data_decort_cb_vins_nat_rule_list.md create mode 100644 wiki/4.6.2/06.02.46-Data_decort_cb_vins_ext_net_list.md create mode 100644 wiki/4.6.2/06.02.47-Data_decort_cb_vins_ip_list.md create mode 100644 wiki/4.6.2/06.02.48-Data_decort_cb_vins_static_route_list.md create mode 100644 wiki/4.6.2/06.02.49-Data_decort_cb_vins_static_route.md create mode 100644 wiki/4.6.2/06.02.50-Data_decort_cb_vins_audits.md create mode 100644 wiki/4.6.2/06.02.51-Data_decort_cb_rg_affinity_group_computes.md create mode 100644 wiki/4.6.2/06.02.52-Data_decort_cb_rg_affinity_groups_get.md create mode 100644 wiki/4.6.2/06.02.53-Data_decort_cb_rg_affinity_groups_list.md create mode 100644 wiki/4.6.2/06.02.54-Data_decort_cb_rg_audits.md create mode 100644 wiki/4.6.2/06.02.55-Data_decort_cb_rg_resource_consumption_get.md create mode 100644 wiki/4.6.2/06.02.56-Data_decort_cb_rg_resource_consumption_list.md create mode 100644 wiki/4.6.2/06.02.57-Data_decort_cb_rg_usage.md create mode 100644 wiki/4.6.2/06.02.58-Data_decort_cb_rg_list_computes.md create mode 100644 wiki/4.6.2/06.02.59-Data_decort_cb_rg_list_deleted.md create mode 100644 wiki/4.6.2/06.02.60-Data_decort_cb_rg_list_lb.md create mode 100644 wiki/4.6.2/06.02.61-Data_decort_cb_rg_list_pfw.md create mode 100644 wiki/4.6.2/06.02.62-Data_decort_cb_rg_list_vins.md create mode 100644 wiki/4.6.2/06.02.63-Data_decort_cb_disk_list_deleted.md create mode 100644 wiki/4.6.2/06.02.64-Data_decort_cb_disk_list_types.md create mode 100644 wiki/4.6.2/06.02.65-Data_decort_cb_disk_list_types_detailed.md create mode 100644 wiki/4.6.2/06.02.66-Data_decort_cb_disk_list_unattached.md create mode 100644 wiki/4.6.2/06.02.67-Data_decort_cb_disk_snapshot.md create mode 100644 wiki/4.6.2/06.02.68-Data_decort_cb_disk_snapshot_list.md create mode 100644 wiki/4.6.2/06.02.69-Data_decort_cb_audit.md create mode 100644 wiki/4.6.2/06.02.70-Data_decort_cb_audit_list.md create mode 100644 wiki/4.6.2/06.02.71-Data_decort_cb_audit_linked_jobs.md create mode 100644 wiki/4.6.2/06.02.72-Data_decort_cb_k8s.md create mode 100644 wiki/4.6.2/06.02.73-Data_decort_cb_k8s_computes.md create mode 100644 wiki/4.6.2/06.02.74-Data_decort_cb_k8s_list.md create mode 100644 wiki/4.6.2/06.02.75-Data_decort_cb_k8s_list_deleted.md create mode 100644 wiki/4.6.2/06.02.76-Data_decort_cb_k8s_wg.md create mode 100644 wiki/4.6.2/06.02.77-Data_decort_cb_k8s_wg_cloud_init.md create mode 100644 wiki/4.6.2/06.02.78-Data_decort_cb_k8s_wg_list.md create mode 100644 wiki/4.6.2/06.02.79-Data_decort_cb_k8ci_list.md create mode 100644 wiki/4.6.2/06.02.80-Data_decort_cb_k8ci_list_deleted.md create mode 100644 wiki/4.6.2/06.02.81-Data_decort_cb_k8ci.md create mode 100644 wiki/4.6.2/06.02.82-Data_decort_cb_kvmvm_affinity_relations.md create mode 100644 wiki/4.6.2/06.02.83-Data_decort_cb_kvmvm_audits.md create mode 100644 wiki/4.6.2/06.02.84-Data_decort_cb_kvmvm_boot_order_get.md create mode 100644 wiki/4.6.2/06.02.85-Data_decort_cb_kvmvm_get_audits.md create mode 100644 wiki/4.6.2/06.02.86-Data_decort_cb_kvmvm_get_console_url.md create mode 100644 wiki/4.6.2/06.02.87-Data_decort_cb_kvmvm_get_log.md create mode 100644 wiki/4.6.2/06.02.88-Data_decort_cb_kvmvm_list.md create mode 100644 wiki/4.6.2/06.02.89-Data_decort_cb_kvmvm_list_deleted.md create mode 100644 wiki/4.6.2/06.02.90-Data_decort_cb_kvmvm_migrate_storage_info.md create mode 100644 wiki/4.6.2/06.02.91-Data_decort_cb_kvmvm_pci_device_list.md create mode 100644 wiki/4.6.2/06.02.92-Data_decort_cb_kvmvm_pfw_list.md create mode 100644 wiki/4.6.2/06.02.93-Data_decort_cb_kvmvm_snapshot_usage.md create mode 100644 wiki/4.6.2/06.02.94-Data_decort_cb_kvmvm_snapshot_list.md create mode 100644 wiki/4.6.2/06.02.95-Data_decort_cb_kvmvm_user_list.md create mode 100644 wiki/4.6.2/06.02.96-Data_decort_cb_kvmvm_vgpu_list.md create mode 100644 wiki/4.6.2/06.02.97-Data_decort_cb_extnet_default.md create mode 100644 wiki/4.6.2/06.02.98-Data_decort_cb_extnet_static_route_list.md create mode 100644 wiki/4.6.2/06.02.99-Data_decort_cb_extnet_static_route.md create mode 100644 wiki/4.6.2/07.-Resource-функции-Terraform-провайдера-DECORT.md create mode 100644 wiki/4.6.2/07.01-Пользовательская-группа-API.md create mode 100644 wiki/4.6.2/07.01.01-Resource_decort_kvmvm.md create mode 100644 wiki/4.6.2/07.01.02-Resource_decort_resgroup.md create mode 100644 wiki/4.6.2/07.01.03-Resource_decort_disk.md create mode 100644 wiki/4.6.2/07.01.04-Resource_decort_vins.md create mode 100644 wiki/4.6.2/07.01.05-Resource_decort_snapshot.md create mode 100644 wiki/4.6.2/07.01.06-Resource_decort_k8s.md create mode 100644 wiki/4.6.2/07.01.07-Resource_decort_k8s_wg.md create mode 100644 wiki/4.6.2/07.01.08-Resource_decort_image_virtual.md create mode 100644 wiki/4.6.2/07.01.09-Resource_decort_image.md create mode 100644 wiki/4.6.2/07.01.10-Resource_decort_pfw.md create mode 100644 wiki/4.6.2/07.01.11-Resource_decort_account.md create mode 100644 wiki/4.6.2/07.01.12-Resource_decort_bservice.md create mode 100644 wiki/4.6.2/07.01.13-Resource_decort_bservice_group.md create mode 100644 wiki/4.6.2/07.01.14-Resource_decort_lb.md create mode 100644 wiki/4.6.2/07.01.15-Resource_decort_lb_frontend.md create mode 100644 wiki/4.6.2/07.01.16-Resource_decort_lb_frontend_bind.md create mode 100644 wiki/4.6.2/07.01.17-Resource_decort_lb_backend.md create mode 100644 wiki/4.6.2/07.01.18-Resource_decort_lb_backend_server.md create mode 100644 wiki/4.6.2/07.01.19-Resource_decort_disk_snapshot.md create mode 100644 wiki/4.6.2/07.01.20-Resource_decort_flipgroup.md create mode 100644 wiki/4.6.2/07.01.21-Resource_decort_k8s_cp.md create mode 100644 wiki/4.6.2/07.01.22-Resource_decort_vins_static_route.md create mode 100644 wiki/4.6.2/07.01.23-Resource_decort_image_from_blank_compute.md create mode 100644 wiki/4.6.2/07.01.24-Resource_decort_image_from_platform_disk.md create mode 100644 wiki/4.6.2/07.01.25-Resource_decort_disk_replication.md create mode 100644 wiki/4.6.2/07.02-Административная-группа-API.md create mode 100644 wiki/4.6.2/07.02.01-Resource_decort_cb_pcidevice.md create mode 100644 wiki/4.6.2/07.02.02-Resource_decort_cb_sep_config.md create mode 100644 wiki/4.6.2/07.02.03-Resource_decort_cb_sep.md create mode 100644 wiki/4.6.2/07.02.04-Resource_decort_cb_cdrom_image.md create mode 100644 wiki/4.6.2/07.02.06-Resource_decort_cb_account.md create mode 100644 wiki/4.6.2/07.02.07-Resource_decort_cb_virtual_image.md create mode 100644 wiki/4.6.2/07.02.08-Resource_decort_cb_image.md create mode 100644 wiki/4.6.2/07.02.09-Resource_decort_cb_k8s_wg.md create mode 100644 wiki/4.6.2/07.02.10-Resource_decort_cb_k8s_cp.md create mode 100644 wiki/4.6.2/07.02.11-Resource_decort_cb_kvmvm.md create mode 100644 wiki/4.6.2/07.02.12-Resource_decort_cb_vins.md create mode 100644 wiki/4.6.2/07.02.13-Resource_decort_cb_disk.md create mode 100644 wiki/4.6.2/07.02.14-Resource_decort_cb_rg.md create mode 100644 wiki/4.6.2/07.02.15-Resource_decort_cb_extnet.md create mode 100644 wiki/4.6.2/07.02.16-Resource_decort_cb_flipgroup.md create mode 100644 wiki/4.6.2/07.02.17-Resource_decort_cb_lb.md create mode 100644 wiki/4.6.2/07.02.18-Resource_decort_cb_lb_backend.md create mode 100644 wiki/4.6.2/07.02.19-Resource_decort_cb_lb_backend_server.md create mode 100644 wiki/4.6.2/07.02.20-Resource_decort_cb_lb_frontend.md create mode 100644 wiki/4.6.2/07.02.21-Resource_decort_cb_lb_frontend_bind.md create mode 100644 wiki/4.6.2/07.02.22-Resource_decort_cb_vins_static_route.md create mode 100644 wiki/4.6.2/07.02.23-Resource_decort_cb_disk_snapshot.md create mode 100644 wiki/4.6.2/07.02.24-Resource_decort_cb_k8ci.md create mode 100644 wiki/4.6.2/07.02.25-Resource_decort_cb_extnet_static_route.md create mode 100644 wiki/4.6.2/07.02.26-Resource_decort_cb_image_from_blank_compute.md create mode 100644 wiki/4.6.2/07.02.27-Resource_decort_cb_image_from_platform_disk.md create mode 100644 wiki/4.6.2/07.02.28-Resource_decort_cb_user.md create mode 100644 wiki/4.6.2/07.02.29-Resource_decort_cb_disk_replication.md create mode 100644 wiki/4.6.2/07.02.29-Resource_decort_cb_vfpool.md create mode 100644 wiki/4.6.2/08.-Полезные-советы.md create mode 100644 wiki/4.6.2/Home.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f3e248..8dbd743 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,16 +1,5 @@ -## Version 4.6.1 +## Version 4.6.2 -### Bugfix -- Fixed decort_cb_user_list data source in cloudbroker/user for correct data output -- Fixed decort_cb_sep resource in cloudbroker/sep for correct create resource and avoiding panic -- Fixed decort_kvmvm data source in cloudapi/kvmvm for correct receive response when compute is not found -- Fixed decort_cb_kvmvm resource in cloudbroker/kvmvm for the optional field 'depresent' to work correctly -- Fixed decort_cb_lb_backend decort_cb_lb_backend_server in cloudbroker/lb and decort_lb_backend decort_lb_backend_server in cloudapi/lb resources for correct update -- Fixed decort_cb_node, decort_cb_node_list data source in cloudbroker/node for correct data output -- Fixed decort_lb in cloudapi/lb and decort_cb_lb in cloudbroker/lb for the optional field 'sysctl_params' to work correctly -- Fixed decort_k8s_cp, decort_k8s in cloudapi/k8s and decort_cb_k8s_cp in cloudbroker/k8s for the optional field 'lb_sysctl_params' to work correctly - -### Removed -- The ability to update the 'decort_cb_sep' resource has been removed -- The fields 'decommission', 'clear_physically', 'field_edit' have been deleted in 'decort_cb_sep' +### Features +- Added the pci_devices field in resources cloudbroker/kvmvm, cloudapi/kvmvm, datasources cloudbroker/kvmvm, cloudapi/kvmvm diff --git a/Makefile b/Makefile index 2efeeeb..84f3c20 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.6.1 +VERSION=4.6.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 f40362a..67d5e8b 100644 --- a/docs/data-sources/cb_kvmvm.md +++ b/docs/data-sources/cb_kvmvm.md @@ -74,6 +74,7 @@ description: |- - `numa_affinity` (String) - `numa_node_id` (Number) - `os_users` (List of Object) (see [below for nested schema](#nestedatt--os_users)) +- `pci_devices` (List of Number) - `pinned` (Boolean) - `pool` (String) - `ram` (Number) diff --git a/docs/data-sources/kvmvm.md b/docs/data-sources/kvmvm.md index 77912da..73091af 100644 --- a/docs/data-sources/kvmvm.md +++ b/docs/data-sources/kvmvm.md @@ -71,6 +71,7 @@ description: |- - `numa_affinity` (String) - `numa_node_id` (Number) - `os_users` (List of Object) (see [below for nested schema](#nestedatt--os_users)) +- `pci_devices` (List of Number) - `pinned` (Boolean) - `ram` (Number) - `reference_id` (String) diff --git a/docs/resources/cb_kvmvm.md b/docs/resources/cb_kvmvm.md index 2a8b804..fb632e8 100644 --- a/docs/resources/cb_kvmvm.md +++ b/docs/resources/cb_kvmvm.md @@ -52,6 +52,7 @@ description: |- - `network` (Block Set, Max: 8) Optional network connection(s) for this compute. You may specify several network blocks, one for each connection. (see [below for nested schema](#nestedblock--network)) - `numa_affinity` (String) Rule for VM placement with NUMA affinity. - `pause` (Boolean) +- `pci_devices` (Set of Number) ID of the connected pci devices - `permanently` (Boolean) - `pin_to_stack` (Boolean) - `pool` (String) Pool to use if sepId is set, can be also empty if needed to be chosen by system. diff --git a/docs/resources/kvmvm.md b/docs/resources/kvmvm.md index f14251e..a680a7d 100644 --- a/docs/resources/kvmvm.md +++ b/docs/resources/kvmvm.md @@ -49,6 +49,7 @@ description: |- - `network` (Block Set, Max: 8) Optional network connection(s) for this compute. You may specify several network blocks, one for each connection. (see [below for nested schema](#nestedblock--network)) - `numa_affinity` (String) Rule for VM placement with NUMA affinity. - `pause` (Boolean) +- `pci_devices` (Set of Number) ID of the connected pci devices - `permanently` (Boolean) - `pin_to_stack` (Boolean) - `pool` (String) Pool to use if sepId is set, can be also empty if needed to be chosen by system. diff --git a/internal/service/cloudapi/kvmvm/data_source_compute.go b/internal/service/cloudapi/kvmvm/data_source_compute.go index b2b5025..fcf5065 100644 --- a/internal/service/cloudapi/kvmvm/data_source_compute.go +++ b/internal/service/cloudapi/kvmvm/data_source_compute.go @@ -59,7 +59,12 @@ func dataSourceComputeRead(ctx context.Context, d *schema.ResourceData, m interf } d.SetId(strconv.Itoa(int(compute.ID))) - flattenDataCompute(d, compute) + pciList, err := utilityComputePCIDevicesList(ctx, d, m) + if err != nil { + return diag.FromErr(err) + } + + flattenDataCompute(d, compute, pciList) return nil } @@ -664,6 +669,13 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema { Type: schema.TypeInt, Computed: true, }, + "pci_devices": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, "clones": { Type: schema.TypeList, Computed: true, diff --git a/internal/service/cloudapi/kvmvm/flattens.go b/internal/service/cloudapi/kvmvm/flattens.go index 77e46dc..1af0307 100644 --- a/internal/service/cloudapi/kvmvm/flattens.go +++ b/internal/service/cloudapi/kvmvm/flattens.go @@ -310,7 +310,7 @@ func findBootDisk(disks compute.ListComputeDisks) *compute.ItemComputeDisk { return &compute.ItemComputeDisk{} } -func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute) error { +func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pciList *compute.ListPCIDevices) error { // This function expects that compFacts string contains response from API compute/get, // i.e. detailed information about compute instance. // @@ -409,6 +409,7 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute) er } d.Set("network", flattenNetwork(computeRec.Interfaces)) + d.Set("pci_devices", flattenPCI(*pciList)) return nil } @@ -566,7 +567,7 @@ func flattenOsUsers(osUsers compute.ListOSUser) []map[string]interface{} { return res } -func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute) { +func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pciList *compute.ListPCIDevices) { devices, _ := json.Marshal(computeRec.Devices) userdata, _ := json.Marshal(computeRec.Userdata) d.Set("acl", flattenACL(computeRec.ACL)) @@ -637,6 +638,17 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute d.Set("vgpus", computeRec.VGPUs) d.Set("virtual_image_id", computeRec.VirtualImageID) d.Set("virtual_image_name", computeRec.VirtualImageName) + d.Set("pci_devices", flattenPCI(*pciList)) +} + +func flattenPCI(pciList compute.ListPCIDevices) []uint64 { + res := make([]uint64, 0, len(pciList.Data)) + + for _, v := range pciList.Data { + res = append(res, v.ID) + } + + return res } func flattenComputeAudits(computeAudits compute.ListAudits) []map[string]interface{} { diff --git a/internal/service/cloudapi/kvmvm/resource_compute.go b/internal/service/cloudapi/kvmvm/resource_compute.go index 87ffe72..cf2b69a 100644 --- a/internal/service/cloudapi/kvmvm/resource_compute.go +++ b/internal/service/cloudapi/kvmvm/resource_compute.go @@ -562,6 +562,25 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf warnings.Add(err) } } + + if ars, ok := d.GetOk("pci_devices"); ok { + log.Debugf("resourceComputeCreate: add pci devices on ComputeID: %d", computeId) + addedPciDevices := ars.(*schema.Set).List() + if len(addedPciDevices) > 0 { + for _, v := range addedPciDevices { + devicesConv := v.(int) + req := compute.AttachPCIDeviceRequest{ + ComputeID: computeId, + DeviceID: uint64(devicesConv), + } + + _, err := c.CloudAPI().Compute().AttachPCIDevice(ctx, req) + if err != nil { + warnings.Add(err) + } + } + } + } } log.Debugf("resourceComputeCreate: new Compute ID %d, name %s creation sequence complete", computeId, d.Get("name").(string)) @@ -584,6 +603,11 @@ func resourceComputeRead(ctx context.Context, d *schema.ResourceData, m interfac return diag.FromErr(err) } + pciList, err := utilityComputePCIDevicesList(ctx, d, m) + if err != nil { + return diag.FromErr(err) + } + hasChanged := false switch computeRec.Status { @@ -622,9 +646,14 @@ func resourceComputeRead(ctx context.Context, d *schema.ResourceData, m interfac d.SetId("") return diag.FromErr(err) } + + pciList, err = utilityComputePCIDevicesList(ctx, d, m) + if err != nil { + return diag.FromErr(err) + } } - if err = flattenCompute(d, computeRec); err != nil { + if err = flattenCompute(d, computeRec, pciList); err != nil { return diag.FromErr(err) } @@ -1605,6 +1634,12 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf } } + if d.HasChange("pci_devices") { + if err := utilityComputeUpdatePciDevices(ctx, d, m); err != nil { + return diag.FromErr(err) + } + } + // we may reuse dataSourceComputeRead here as we maintain similarity // between Compute resource and Compute data source schemas @@ -1671,6 +1706,23 @@ func resourceComputeDelete(ctx context.Context, d *schema.ResourceData, m interf c := m.(*controller.ControllerCfg) computeId, _ := strconv.ParseUint(d.Id(), 10, 64) + + 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), @@ -2172,6 +2224,15 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema { Default: false, Description: "Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.", }, + "pci_devices": { + Type: schema.TypeSet, + Optional: true, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + Description: "ID of the connected pci devices", + }, // The rest are Compute properties, which are "computed" once it is created "account_id": { diff --git a/internal/service/cloudapi/kvmvm/utility_compute.go b/internal/service/cloudapi/kvmvm/utility_compute.go index 2b996c2..ec25e89 100644 --- a/internal/service/cloudapi/kvmvm/utility_compute.go +++ b/internal/service/cloudapi/kvmvm/utility_compute.go @@ -34,11 +34,12 @@ package kvmvm import ( "context" - log "github.com/sirupsen/logrus" "regexp" + "strconv" + + log "github.com/sirupsen/logrus" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute" "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller" - "strconv" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) @@ -234,7 +235,7 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData } } - needStart:= false + needStart := false if d.Get("network").(*schema.Set).Len() == 1 || old_set.(*schema.Set).Len() < 1 { computeId, _ := strconv.ParseUint(d.Id(), 10, 64) @@ -272,7 +273,7 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData if needStart { computeId, _ := strconv.ParseUint(d.Id(), 10, 64) if numErr, err := utilityComputeStart(ctx, computeId, m); err != nil { - apiErrCount+= numErr + apiErrCount += numErr lastSavedError = err } } @@ -327,3 +328,41 @@ func utilityComputeStart(ctx context.Context, computeID uint64, m interface{}) ( } return 0, nil } + +func utilityComputeUpdatePciDevices(ctx context.Context, d *schema.ResourceData, m interface{}) error { + c := m.(*controller.ControllerCfg) + computeId, _ := strconv.ParseUint(d.Id(), 10, 64) + oldSet, newSet := d.GetChange("pci_devices") + deletedDevices := (oldSet.(*schema.Set).Difference(newSet.(*schema.Set))).List() + if len(deletedDevices) > 0 { + for _, ar := range deletedDevices { + arConv := ar.(int) + req := compute.DetachPCIDeviceRequest{ + ComputeID: computeId, + DeviceID: uint64(arConv), + } + _, err := c.CloudAPI().Compute().DetachPCIDevice(ctx, req) + if err != nil { + return err + } + } + } + + added := (newSet.(*schema.Set).Difference(oldSet.(*schema.Set))).List() + if len(added) > 0 { + for _, ar := range added { + arConv := ar.(int) + req := compute.AttachPCIDeviceRequest{ + ComputeID: computeId, + DeviceID: uint64(arConv), + } + + _, err := c.CloudAPI().Compute().AttachPCIDevice(ctx, req) + if err != nil { + return err + } + } + } + + return nil +} diff --git a/internal/service/cloudapi/kvmvm/utility_data_source_compute.go b/internal/service/cloudapi/kvmvm/utility_data_source_compute.go index 502b2de..8620940 100644 --- a/internal/service/cloudapi/kvmvm/utility_data_source_compute.go +++ b/internal/service/cloudapi/kvmvm/utility_data_source_compute.go @@ -34,6 +34,7 @@ package kvmvm import ( "context" + "strconv" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute" @@ -42,8 +43,12 @@ import ( func utilityDataComputeCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (compute.RecordCompute, error) { c := m.(*controller.ControllerCfg) - req := compute.GetRequest{ - ComputeID: uint64(d.Get("compute_id").(int)), + req := compute.GetRequest{} + if d.Id() != "" { + computeId, _ := strconv.ParseUint(d.Id(), 10, 64) + req.ComputeID = computeId + } else { + req.ComputeID = uint64(d.Get("compute_id").(int)) } computeRecord, err := c.CloudAPI().Compute().Get(ctx, req) @@ -53,3 +58,22 @@ func utilityDataComputeCheckPresence(ctx context.Context, d *schema.ResourceData return *computeRecord, nil } + +func utilityComputePCIDevicesList(ctx context.Context, d *schema.ResourceData, m interface{}) (*compute.ListPCIDevices, error) { + c := m.(*controller.ControllerCfg) + req := compute.ListPCIDeviceRequest{} + + if d.Id() != "" { + computeId, _ := strconv.ParseUint(d.Id(), 10, 64) + req.ComputeID = computeId + } else { + req.ComputeID = uint64(d.Get("compute_id").(int)) + } + + res, err := c.CloudAPI().Compute().ListPCIDevice(ctx, req) + if err != nil { + return nil, err + } + + return res, nil +} diff --git a/internal/service/cloudbroker/kvmvm/data_source_compute.go b/internal/service/cloudbroker/kvmvm/data_source_compute.go index 8f5eb41..05cb415 100644 --- a/internal/service/cloudbroker/kvmvm/data_source_compute.go +++ b/internal/service/cloudbroker/kvmvm/data_source_compute.go @@ -49,7 +49,12 @@ func dataSourceComputeRead(ctx context.Context, d *schema.ResourceData, m interf return diag.FromErr(err) } - if err = flattenDataCompute(d, compFacts); err != nil { + pciList, err := utilityComputePCIDevicesList(ctx, d, m) + if err != nil { + return diag.FromErr(err) + } + + if err = flattenDataCompute(d, compFacts, pciList); err != nil { return diag.FromErr(err) } diff --git a/internal/service/cloudbroker/kvmvm/flattens.go b/internal/service/cloudbroker/kvmvm/flattens.go index abf5a3a..6e34072 100644 --- a/internal/service/cloudbroker/kvmvm/flattens.go +++ b/internal/service/cloudbroker/kvmvm/flattens.go @@ -12,7 +12,7 @@ import ( "repository.basistech.ru/BASIS/terraform-provider-decort/internal/flattens" ) -func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute) error { +func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, pciList *compute.ListPCIDevices) error { log.Debugf("flattenCompute: ID %d, RG ID %d", computeRec.ID, computeRec.RGID) customFields, _ := json.Marshal(computeRec.CustomFields) @@ -94,9 +94,20 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute) e d.Set("vgpus", computeRec.VGPUs) d.Set("virtual_image_id", computeRec.VirtualImageID) d.Set("virtual_image_name", computeRec.VirtualImageName) + d.Set("pci_devices", flattenPCI(*pciList)) return nil } +func flattenPCI(pciList compute.ListPCIDevices) []uint64 { + res := make([]uint64, 0, len(pciList.Data)) + + for _, v := range pciList.Data { + res = append(res, v.ID) + } + + return res +} + func flattenTags(tags map[string]interface{}) []map[string]interface{} { res := make([]map[string]interface{}, 0, len(tags)) @@ -559,7 +570,7 @@ func flattenNodes(m []interface{}) []string { return output } -func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute) error { +func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute, pciList *compute.ListPCIDevices) error { // This function expects that compFacts string contains response from API compute/get, // i.e. detailed information about compute instance. // @@ -641,6 +652,7 @@ func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute d.Set("vgpus", compFacts.VGPUs) d.Set("virtual_image_id", compFacts.VirtualImageID) d.Set("virtual_image_name", compFacts.VirtualImageName) + d.Set("pci_devices", flattenPCI(*pciList)) //extra fields setting bootDisk := findBootDisk(compFacts.Disks) if bootDisk != nil { diff --git a/internal/service/cloudbroker/kvmvm/resource_compute.go b/internal/service/cloudbroker/kvmvm/resource_compute.go index 27cbc10..174380b 100644 --- a/internal/service/cloudbroker/kvmvm/resource_compute.go +++ b/internal/service/cloudbroker/kvmvm/resource_compute.go @@ -528,6 +528,25 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf warnings.Add(err) } } + + if ars, ok := d.GetOk("pci_devices"); ok { + log.Debugf("resourceComputeCreate: add pci devices on ComputeID: %d", computeId) + addedPciDevices := ars.(*schema.Set).List() + if len(addedPciDevices) > 0 { + for _, v := range addedPciDevices { + devicesConv := v.(int) + req := compute.AttachPCIDeviceRequest{ + ComputeID: computeId, + DeviceID: uint64(devicesConv), + } + + _, err := c.CloudBroker().Compute().AttachPCIDevice(ctx, req) + if err != nil { + warnings.Add(err) + } + } + } + } } log.Debugf("resourceComputeCreate: new Compute ID %d, name %s creation sequence complete", computeId, d.Get("name").(string)) @@ -552,6 +571,11 @@ func resourceComputeRead(ctx context.Context, d *schema.ResourceData, m interfac return diag.FromErr(err) } + pciList, err := utilityComputePCIDevicesList(ctx, d, m) + if err != nil { + return diag.FromErr(err) + } + hasChanged := false switch computeRec.Status { @@ -590,11 +614,16 @@ func resourceComputeRead(ctx context.Context, d *schema.ResourceData, m interfac d.SetId("") return diag.FromErr(err) } + + pciList, err = utilityComputePCIDevicesList(ctx, d, m) + if err != nil { + return diag.FromErr(err) + } } d.SetId(strconv.FormatUint(computeRec.ID, 10)) - if err = flattenCompute(d, computeRec); err != nil { + if err = flattenCompute(d, computeRec, pciList); err != nil { return diag.FromErr(err) } @@ -775,6 +804,12 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf } } + if d.HasChange("pci_devices") { + if err := utilityComputeUpdatePciDevices(ctx, d, m); err != nil { + return diag.FromErr(err) + } + } + return append(resourceComputeRead(ctx, d, m), warnings.Get()...) } @@ -788,6 +823,24 @@ func resourceComputeDelete(ctx context.Context, d *schema.ResourceData, m interf c := m.(*controller.ControllerCfg) computeId, _ := strconv.ParseUint(d.Id(), 10, 64) + + 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 f239408..eb915c3 100644 --- a/internal/service/cloudbroker/kvmvm/schema.go +++ b/internal/service/cloudbroker/kvmvm/schema.go @@ -542,6 +542,13 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema { Type: schema.TypeString, Computed: true, }, + "pci_devices": { + Type: schema.TypeList, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + }, "interfaces": { Type: schema.TypeList, Computed: true, @@ -3294,6 +3301,15 @@ func resourceComputeSchemaMake() map[string]*schema.Schema { Default: false, Description: "Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.", }, + "pci_devices": { + Type: schema.TypeSet, + Optional: true, + Computed: true, + Elem: &schema.Schema{ + Type: schema.TypeInt, + }, + Description: "ID of the connected pci devices", + }, // Computed properties "account_id": { Type: schema.TypeInt, diff --git a/internal/service/cloudbroker/kvmvm/utility_compute.go b/internal/service/cloudbroker/kvmvm/utility_compute.go index 5c639cb..661a71e 100644 --- a/internal/service/cloudbroker/kvmvm/utility_compute.go +++ b/internal/service/cloudbroker/kvmvm/utility_compute.go @@ -544,6 +544,25 @@ func utilityComputeCheckPresence(ctx context.Context, d *schema.ResourceData, m return res, nil } +func utilityComputePCIDevicesList(ctx context.Context, d *schema.ResourceData, m interface{}) (*compute.ListPCIDevices, error) { + c := m.(*controller.ControllerCfg) + req := compute.ListPCIDeviceRequest{} + + if d.Id() != "" { + computeId, _ := strconv.ParseUint(d.Id(), 10, 64) + req.ComputeID = computeId + } else { + req.ComputeID = uint64(d.Get("compute_id").(int)) + } + + res, err := c.CloudBroker().Compute().ListPCIDevice(ctx, req) + if err != nil { + return nil, err + } + + return res, nil +} + func findBootDisk(disks compute.ListDisks) *compute.ItemDisk { for _, disk := range disks { if disk.Type == "B" { @@ -914,6 +933,44 @@ func utilityComputeUpdateAntiAffinityRules(ctx context.Context, d *schema.Resour return nil } +func utilityComputeUpdatePciDevices(ctx context.Context, d *schema.ResourceData, m interface{}) error { + c := m.(*controller.ControllerCfg) + computeId, _ := strconv.ParseUint(d.Id(), 10, 64) + oldSet, newSet := d.GetChange("pci_devices") + deletedDevices := (oldSet.(*schema.Set).Difference(newSet.(*schema.Set))).List() + if len(deletedDevices) > 0 { + for _, ar := range deletedDevices { + arConv := ar.(int) + req := compute.DetachPCIDeviceRequest{ + ComputeID: computeId, + DeviceID: uint64(arConv), + } + _, err := c.CloudBroker().Compute().DetachPciDevice(ctx, req) + if err != nil { + return err + } + } + } + + added := (newSet.(*schema.Set).Difference(oldSet.(*schema.Set))).List() + if len(added) > 0 { + for _, ar := range added { + arConv := ar.(int) + req := compute.AttachPCIDeviceRequest{ + ComputeID: computeId, + DeviceID: uint64(arConv), + } + + _, err := c.CloudBroker().Compute().AttachPCIDevice(ctx, req) + if err != nil { + return err + } + } + } + + return nil +} + func utilityComputeUpdateTags(ctx context.Context, d *schema.ResourceData, m interface{}) error { c := m.(*controller.ControllerCfg) diff --git a/samples/cloudapi/kvmvm/resource_kvmvm/main.tf b/samples/cloudapi/kvmvm/resource_kvmvm/main.tf index acc2d44..e60a247 100644 --- a/samples/cloudapi/kvmvm/resource_kvmvm/main.tf +++ b/samples/cloudapi/kvmvm/resource_kvmvm/main.tf @@ -112,6 +112,11 @@ resource "decort_kvmvm" "comp" { #тип - булев hp_backed = true + #список PCI девайсов + #опциональный параметр + #тип - массив целых чисел + pci_devices = [1,2] + #создание и добавление диска дял compute #опциональный параметр #тип - список дисков diff --git a/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf b/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf index a3c228c..175f5d0 100644 --- a/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf +++ b/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf @@ -62,7 +62,7 @@ resource "decort_cb_kvmvm" "comp" { #тип - целое число #image_id = 111 - #Если значение равно True, параметры image_id, boot_disk_size, sep_id, pool игнорируются, и компьютер создается без загрузочного диска в остановленном состоянии + #если значение равно True, параметры image_id, boot_disk_size, sep_id, pool игнорируются, и компьютер создается без загрузочного диска в остановленном состоянии #опциональный параметр #тип - булев #without_boot_disk = true @@ -77,7 +77,7 @@ resource "decort_cb_kvmvm" "comp" { #тип - целое число #sep_id = 1 - #Название пула + #название пула #опциональный параметр #тип - строка #pool = "data02" @@ -122,21 +122,21 @@ resource "decort_cb_kvmvm" "comp" { #значение по умолчанию - false #hp_backed = true - #Создание и добавление диска дял compute + #создание и добавление диска дял compute #опциональный параметр #тип - список дисков #disks { - #Имя диска + #имя диска #Обязательный для диска параметр - #Тип - строка + #тип - строка #disk_name = "disk_name" - #Размер диска - #Обязательный для диска параметр + #размер диска + #обязательный для диска параметр #тип - целое число #size = 5 - #Тип диска + #тип диска #опциональный параметр #тип - строка #disk_type = "D" @@ -145,7 +145,7 @@ resource "decort_cb_kvmvm" "comp" { #тип - целое число #sep_id = 1 - #Название пула + #название пула #опциональный параметр #тип - строка #pool = "data01" @@ -155,16 +155,16 @@ resource "decort_cb_kvmvm" "comp" { #тип - массив целых чисел #node_ids = [10,11] - #Описание диска + #описание диска #опциональный параметр #тип - строка #desc = "" - #Айди образа + #ID образа #опциональный параметр #image_id = 378 - #Флаг для удаления диска + #флаг для удаления диска #опциональный параметр #тип - булев #permanently = false @@ -258,32 +258,32 @@ resource "decort_cb_kvmvm" "comp" { #тип - строка #ipa_type = "" - #Id экстра дисков + #ID экстра дисков #опциональный параметр #тип - список чисел #extra_disks = [1234, 4322, 1344] - #Управление XML виртуальной машины + #управление XML виртуальной машины #опциональный параметр #тип - строка (json-encoded) #custom_fields = "{`key`:`value`}" - #Описание необходимости выполнения действия + #описание необходимости выполнения действия #опциональный параметр #тип - строка #reason = "need" - #Присоеденения сетей и удаление сетей в компьюте + #присоеденения сетей и удаление сетей в компьюте #опциональный параметр #тип - блок #network { - #Тип сети VINS/EXTNET (для любого драйвера) и VFNIC (для KVM_X86) - #Обязательный параметр + #тип сети VINS/EXTNET (для любого драйвера) и VFNIC (для KVM_X86) + #обязательный параметр #тип - строка #net_type = "VINS" #ID сети - #Обязательный параметр + #обязательный параметр #тип - целое число #net_id = 1234 @@ -297,13 +297,13 @@ resource "decort_cb_kvmvm" "comp" { #опциональный параметр #тип - блок #tags { - #Ключ для тэга - #Обязательный параметр + #ключ для тэга + #обязательный параметр #тип - строка #key = "key" - #Значения тэга - #Обязательный параметр + #значения тэга + #обязательный параметр #тип - строка #value = "value" #} @@ -313,7 +313,7 @@ resource "decort_cb_kvmvm" "comp" { #тип - блок #port_forwarding { #номер внешнего начального порта для правила - #Обязательный параметр + #обязательный параметр #тип - целое число #public_port_start = 2023 @@ -324,12 +324,12 @@ resource "decort_cb_kvmvm" "comp" { #public_port_end = 2023 #номер внутреннего базового порта - #Обязательный параметр + #обязательный параметр #тип - целое число #local_port = 80 #сетевой протокол - #Обязательный параметр + #обязательный параметр #тип - строка #proto = "tcp" #} @@ -338,50 +338,50 @@ resource "decort_cb_kvmvm" "comp" { #опциональный параметр #тип - блок #user_access { - #Имя юзера, которому предоставляем доступ - #Обязательный параметр + #имя юзера, которому предоставляем доступ + #обязательный параметр #тип - строка #username = "some@decs3o" - #Права: 'R' - только на чтение, 'RCX' - чтение/запись, 'ARCXDU' - админ - #Обязательный параметр + #права: 'R' - только на чтение, 'RCX' - чтение/запись, 'ARCXDU' - админ + #обязательный параметр #тип - строка #access_type = "ARCXDU" #} - #Создать/удалить снапшот компьюта + #создать/удалить снапшот компьюта #опциональный параметр #тип - блок #snapshot { - #Лейбл снапшота - #Обязательный параметр + #лейбл снапшота + #обязательный параметр #тип - строка #label = "label1" #} #Rollback на нужный снапшот #опциональный параметр - #Не имеет смысла при отсутсвии снапшотов + #не имеет смысла при отсутсвии снапшотов #тип - блок #rollback { - #Лейбл снапшота - #Обязательный параметр + #лейбл снапшота + #обязательный параметр #тип - строка #label = "label1" #} - #Вставить/удалить СD rom + #вставить/удалить СD rom #опциональный параметр - #Максимальное кол-во - 1 + #максимальное кол-во - 1 #тип - блок #cd { #ID образа диска CD rom - #Обязательный параметр + #обязательный параметр #тип - целое число #cdrom_id = 344 #} - #Добавить компьют на стэк + #добавить компьют на стэк #опциональный параметр #тип - булев #pin_to_stack = true @@ -391,12 +391,17 @@ resource "decort_cb_kvmvm" "comp" { #тип - целое число #target_stack_id = 1 - #Флаг для принужительного добавления компьюта на стэк + #флаг для принужительного добавления компьюта на стэк #опциональный параметр #тип - булев #force_pin = true - #Флаг доступности компьюта для проведения с ним операций + #список PCI девайсов + #опциональный параметр + #тип - массив целых чисел + #pci_devices = [1,2] + + #флаг доступности компьюта для проведения с ним операций #опциональный параметр #тип - булев #enabled = true @@ -452,7 +457,7 @@ resource "decort_cb_kvmvm" "comp" { #тип - булев #detach_disks = true - #Флаг для удаления компьюта + #Ффлаг для удаления компьюта #опциональный параметр #тип - булев #permanently = false diff --git a/wiki/4.6.2/01.-Введение.md b/wiki/4.6.2/01.-Введение.md new file mode 100644 index 0000000..5ea5a7e --- /dev/null +++ b/wiki/4.6.2/01.-Введение.md @@ -0,0 +1,7 @@ +DECORT Terraform Provider версии 4.6.x позволяет управлять облачными ресурсами на платформе Digital Energy Cloud Orchestration Technology (DECORT) версии 4.0.x и выше посредством Terraform. + +С помощью данного провайдера можно организовать программное управление вычислительными ресурсами (_compute_), ресурсными группами, сетевыми и дисковыми ресурсами, образами дисков, кластером, а также другими параметрами облачной платформы DECORT. + +Если вы хорошо знакомы с инструментом Terraform и хотите максимально быстро начать использовать платформу DECORT в своих Terraform-проектах, то можете сразу перейти к разделу [Пример работы](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/02.-Пример-работы.md), где приведён подробно откомментированный пример работы с основными видами ресурсов платформы. Если у вас всё же возникнут вопросы по облачной платформе DECORT и порядку авторизации в ней, то обратитесь к главе [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT.md). Также может оказаться полезной глава [«Инициализация Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/04.02-Инициализация-Terraform-провайдера-DECORT.md). + +Если вы только начинаете использовать инструмент Terraform и облачную платформу DECORT, то рекомендуем вам начать с главы [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT.md), после чего изучить главы [«_Data source_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/06.-Data-source-функции-Terraform-провайдера-DECORT.md) и [«_Resource_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/07.-Resource-функции-Terraform-провайдера-DECORT.md). Примеры, приведенные в этих разделах, помогут вам быстро освоить базовые приёмы работы с инструментом Terraform и провайдером DECORT. diff --git a/wiki/4.6.2/02.-Пример-работы.md b/wiki/4.6.2/02.-Пример-работы.md new file mode 100644 index 0000000..79c62d2 --- /dev/null +++ b/wiki/4.6.2/02.-Пример-работы.md @@ -0,0 +1,92 @@ +Данный раздел предназначен для тех, кто хорошо знаком с инструментом Terraform, а также имеет представление об основных понятиях и способах авторизации в облачной платформе DECORT. + +Ниже приведён подробно откомментированный пример, показывающий, как создать виртуальный сервер (aka _compute_ на базе системы виртуализации KVM x86) в облачной платформе DECORT с помощью соответствующего Terraform провайдера. Сервер будет создан в новой ресурсной группе, к нему будет подключён один предварительно созданный диск, у сервера будет прямое сетевое подключение во внешнюю сеть. + +Идентификатор образа операционной системы, на базе которого должен быть создан виртуальный сервер, считывается из облачной платформы с помощью _data source_ функции `decort_image`. + +Далее мы с помощью _resource_ функции `decort_resgroup` создаём новую ресурсную группу, в которую будет помещён этот виртуальный сервер. В качестве альтернативы, для получения информации об уже имеющейся ресурсной группе можно использовать _data source_ функцию с таким же названием. + +Затем с помощью _resource_ функции `decort_disk` создаётся диск, который будет подключён к виртуальному серверу в качестве дополнительного. Помимо этого дополнительного диска у сервера будет также и загрузочный диск, на который в процессе создания сервера клонируется выбранный образ операционной системы. + +Виртуальный сервер - в данном примере на базе системы виртуализации KVM x86 - создаётся посредством _resource_ функции `decort_kvmvm`. + +Только авторизованные в контроллере облачной платформы пользователи могут управлять облачными ресурсами. Подробнее о способах авторизации см. [Обзор облачной платформы DECORT](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT.md). + +```terraform +# 1. Initialize DECORT plugin and connection to DECORT cloud controller +# NOTE: in this example credentials are expected to come from +# DECORT_APP_ID and DECORT_APP_SECRET environmental variables - set them +# in the shell before calling terraform. +# Alternatively you may define plugin parameters app_id and app_secret in +# the TF file, however, this may not be secure if you plan to share this TF +# file with others. + +provider "decort" { + authenticator = "decs3o" + controller_url = "<>" # specify correct DECORT controller URL, e.g. "https://ds1.digitalenergy.online" + oauth2_url = "<>" # specify corresponding DECORT OAUTH2 URL, e.g. "https://sso.digitalenergy.online" + app_id = "<>" # application secret to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode, e.g. "ewqfrvea7s890avw804389qwguf234h0otfi3w4eiu" + app_secret = "<>" # application ID to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode, e.g. "ewqfrvea7s890avw804389qwguf234h0otfi3w4eiu" + # allow_unverified_ssl = true +} + +# 2. Load account to use - new VM will belong to this account +data "decort_account" "my_account" { + account_id = # Specify account ID +} + +# 3. Load OS image to use for VM deployment +data "decort_image" "os_image" { + image_id = # Specify OS image id, e.g. 1234. You can get accessible image id from data source "decort_image_list" +} + +# 4. Create new Resource Group in the selected account, new VM will be created in this RG +resource "decort_resgroup" "my_rg" { + name = "NewRgByTF" + account_id = data.decort_account.my_account.account_id + gid = # Grid (platform) ID + # if you want to set resource quota on this Resource Group, uncomment + # the following code fragment + # quota { + # cpu = 8 # CPU limit + # ram = 8912 # RAM limit in MB + # disk = 96 # disk volume limit in GB + #} +} + +# 5. Create extra disk, which will be attached to the new VM. +# This step is optional - if you do not want extra disks on your VM, skip it +# and comment out extra_disks parameter when creating VM below. +resource "decort_disk" "extra_disk" { + disk_name = "extra-disk-for-vm" + account_id = data.decort_account.my_account.account_id + gid = # Grid (platform) ID + size_max = 5 # disk size in GB + type = "D" # disk type, always use "D" for extra disks + sep_id = data.decort_image.os_image.sep_id # use the same SEP ID as the OS image + pool = "<>" # consult your DECORT platform admin for configured storage pool names +} + +# 6. Create virtual machine (a compute of type KVM VM x86 in this example) +# Now that we have all necessary components at hand, we may create a virtual machine. +# This VM will be based on the previsouly obtained OS image, located in the specified +# Resource Group, directly connected to an external network, have a boot disk of +# specified size and one extra disk attached. +resource "decort_kvmvm" "my_new_vm" { + name = "tf-managed-vm" + driver = "KVM_X86" # Compute virtualization driver + rg_id = decort_resgroup.my_rg.id + cpu = 1 # CPU count + ram = 1024 # RAM size in MB, must be even number, ideally a power of 2 + boot_disk_size = 10 # Boot disk size in GB + image_id = data.decort_image.os_image.image_id + description = "Test KVM VM Compute managed by Terraform" + extra_disks = [ decort_disk.extra_disk.id ] + + network { + net_type = "EXTNET" + net_id = <> # specify external network ID to use, consult your DECORT platform admin for correct IDs + # ip_address = "<>" # you may optionally request a specific IP address + } +} +``` diff --git a/wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT.md b/wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT.md new file mode 100644 index 0000000..938223a --- /dev/null +++ b/wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT.md @@ -0,0 +1,31 @@ +## Основные понятия +Ниже перечислены основные понятия с указанием соответствующих им аргументов в Terraform провайдере DECORT. +1. **Контроллер облачной платформы DECORT** – управляющее приложение, которое обеспечивает авторизацию пользователей и оркестрацию облачных ресурсов. + - Адрес контроллера задается в обязательном аргументе `controller_url` на стадии инициализации Terraform провайдера DECORT. Например, `controller_url= "https://ds1.digitalenergy.online"` +2. **Авторизационный провайдер** – приложение, работающее по протоколу Oauth2, предназначенное для выпуска и валидации токенов доступа к контроллеру облачной платформы в соответствующих режимах авторизации. Все действия в платформе должны выполняться авторизованными пользователями, и авторизационное приложение позволяет получить токен доступа, действующий некоторое ограниченное время, наличие которого подтверждает успешную авторизацию. + - Адрес авторизационного провайдера задается в аргументе`oauth2_url` на стадии инициализации Terraform провайдера DECORT. Например `oauth2_url= "https://sso.digitalenergy.online"` +3. **Подписчик** (_account_) – сущность, которая используется для группирования облачных ресурсов по принадлежности к определенному клиенту для целей учета потребления и биллинга. + - Имя подписчика задается аргументом `account_name` при вызове _resource_ или _data_ функций провайдера. Альтернативной является задание численного идентификатора подписчика в аргументе `account_id`. +4. **Пользователь** (_user_) – пользователь облачной инфраструктуры, представленный учетной записью. Чтобы получить возможность управлять облачными ресурсами (например, создавать виртуальные серверы или дискт) пользователь должен быть ассоциирован с одним или несколькими подписчиками и иметь соответствующие права, определяемые ролевой моделью, принятой в облачной платформе DECORT. Для доступа к платформе пользователь должен авторизоваться одним из способов, описанных ниже в разделе «Способы авторизации». +5. **Ресурсная группа** (_resource group_) – способ группирования вычислительных ресурсов (например, виртуальных серверов по функциональному признаку или принадлежности к одному и тому же проекту). Ресурсную группу можно рассматривать как небольшой персональный дата-центр, в котором размещаются один или несколько серверов и виртуальных сетевых сегментов. Ресурсная группа идентифицируется по комбинации параметров `account` и `name`. Обратите внимание, что имя имя ресурсной группы уникально только в рамках одного и того же `account`. +6. **Вычислительный ресурс** (_compute_) - универсальная абстракция пользовательского сервера в платформе DECORT. Благодаря использованию такой абстракции можно, например, создать одну виртуальную машину на базе KVM Intel x86, а другую - на базе KVM IBM Power, а потом управлять ими - изменять количество CPU/RAM, подключать/отключать диски и т.п. - одинаковым образом, не задумываясь об их архитектурных различиях. В то же время, так как типизация ресурсов в Terraform не поддерживает наследование, различные типы вычислительных ресурсов, доступных на платформе DECORT и абстрагируемых через понятие унифицированный _compute_, в Terraform представлены разными типами (напр., свой тип для виртуальных серверов на базе KVM и свой тип для перспективных x86-совместимых bare metal серверов). +7. **Ресурс хранения** (_disk_) - универсальная абстракция дискового ресурса в платформе DECORT. Платформа поддерживает различные типы систем хранения данных, но при этом управление созданными на разных системах хранения дисками осуществляется посредством унифицированного набора действий, например, "подключить диск к _compute_", "увеличить размер диска", "сделать мгновенный снимок диска", "настроить параметры быстродействия диска". +8. **Виртуальный сервер** – экземпляр _compute_, в основе технической реализации которого лежит виртуальная машина, работающая в облаке DECORT и доступна по сети. Виртуальный сервер характеризуется количеством выделенных ему CPU (аргумент`cpu`), объемом ОЗУ (`ram`), размером загрузочного диска (`boot_disk size`). При создании виртуального сервера на загрузочный диск устанавливается образ операционной системы, заданный в аргументе `image_id`. Помимо загрузочного диска к виртуальному серверу можно подключить несколько дисков для хранения прикладных данных, список которых задается аргументами `extra_disks`. Виртуальный сервер идентифицируется по комбинации аргументов `name` (имя сервера) и `rgid` (идентификатор ресурсной группы). Обратите внимание, что имя виртуального сервера `name` уникально только в рамках одной и той же ресурсной группы. +9. **Виртуальный сетевой сегмент** (_Virtual Network Segment_ или _ViNS_) - сетевой сегмент и обеспечивающая его функционирование виртуальная инфраструктура, которые пользователь может создавать для своих нужд на уровне ресурсной группы или подписчика (_account_). ViNS можно создать полностью изолированным от внешних сетей (см. ниже _External Network_) или с подключением во внешнюю сеть. Внутри ViNS работает DHCP-сервис, обеспечивающий управление IP адресами экземпляров _compute_, подключённых в этот ViNS. +10. **Внешняя сеть** (_External Network_) - сетевой сегмент, через который платформа DECORT взаимодействует с внешними по отношению к ней сетевыми ресурсами. Например, в случае с публичным облаком на базе DECORT в качестве внешней сети выступает сеть Интернет. В отличие от ViNS платформа не управляет внешней сетью, а лишь пользуется её ресурсами. В платформе может быть настроено несколько внешних сетей с различными диапазонами IP адресов, и существует механизм управления доступом пользователей к внешним сетям. +11. Сетевой доступ к экземпляру _compute_ (виртуальному серверу) реализуется через его подключение к ViNS и/или прямое подключение во внешнюю сеть (External Network). Один и тот же экземпляр _compute_ может одновременно иметь несколько подключений в разные ViNS и/или различные внешние сети. + +## Способы авторизации +Облачная платформа DECORT поддерживает три базовых типа авторизации: +1. С использованием авторизационного провайдера, работающего по протоколу _Oauth2_. Данный способ является предпочтительным, так как обеспечивает бОльшую гибкость и безопасность. Для авторизации в этом режиме при инициализации Terrafrom провайдера DECORT необходимо указать параметры `oauth2_url` и `controller_url`, а также предоставить одно из нижеперечисленного: + - Комбинация Application ID & Application secret, соответствующих пользователю, от имени которого будет осуществляться управление облачными ресурсами в текущей сессии. В процессе проверки предоставленных Application ID & Application secret модуль получает от авторизационного провайдера токен (JSON Web Token, JWT), который затем используется для доступа к указанному контроллеру DECORT. Для авторизации по данному варианту, при инициализации Terraform провайдера DECORT следует установить аргумент `authenticator=decs3o` и задать аргументы `app_id` и `app_secret` (или определить соответствующие переменные окружения `DECORT_APP_ID` и `DECORT_APP_SECRET`). + - JSON Web Token – заранее полученный от авторизационного провайдера токен доступа, ассоциированный с определенным пользователем, от имени которого будет осуществляться управление облачными ресурсами в текущей сессии. Для авторизации по данному варианту, при инициализации Terraform провайдера DECORT следует установить аргумент `authenticator=jwt` и задать аргумент `jwt` (или определить переменную окружения `DECORT_JWT`). +2. С использованием комбинации _имя пользователя : пароль_. Данный режим не использует внешних авторизационных провайдеров и подразумевает, что пользователь с такой комбинацией зарегистрирован непосредственно на указанном в параметре `controller_url` контроллере облачной платформы DECORT. + - Чтобы провайдер авторизовался по данному варианту, при его инициализации следует установить аргумент `authenticator=legacy` и задать аргументы `user` и `password` (или определить соответствующие переменные окружения `DECORT_USER` и `DECORT_PASSWORD`). +3. С использованием авторизационного провайдера, работающего по протоколу _Oauth2_oidc_. Для авторизации в этом режиме при инициализации Terrafrom провайдера DECORT необходимо указать параметры `oauth2_url` и `controller_url`, а также Application ID & Application secret, _имя пользователя и пароль_, соответствующих пользователю, от имени которого будет осуществляться управление облачными ресурсами в текущей сессии, и _имя домена_. В процессе проверки предоставленных Application ID & Application secret и пары _имя пользователя-пароль_ модуль получает от авторизационного провайдера токен (JSON Web Token, JWT), который затем используется для доступа к указанному контроллеру DECORT. Для авторизации по данному варианту, при инициализации Terraform провайдера DECORT следует установить аргумент `authenticator=bvs`, задать аргументы `app_id` и `app_secret` (или определить соответствующие переменные окружения `DECORT_APP_ID` и `DECORT_APP_SECRET`), `bvs_user` и `bvs_password` (или определить соответствующие переменные окружения `DECORT_BVS_USER` и `DECORT_BVS_PASSWORD`), а также указать `domain` (или определить соответствующие переменные окружения `DECORT_DOMAIN`). + +После успешной авторизации пользователь (или приложение-клиент) получает доступ к ресурсам, находящимся под управлением соответствующего DECORT контроллера. Доступ предоставляется в рамках подписчиков (_account_), с которыми ассоциирован данный пользователь (_user_), и в соответствии с присвоенными ему ролями. + +## Пользовательская и административная группы API +Пользовательская группа API - группа API платформы DECORT, которая позволяет выполнять операции с платформой с правами обычного пользователя. Покрывает большую часть задач. +Административная группа API - группа API платформы DECORT, которая позволяет выполнять операции с платформой с расширенными правами. Данные права подразумевают расширенный перечень операций над ресурсами, расширенный перечень ресурсов, расширенную информацию. Требуются права администратора для взаимодействия с этой группой API. diff --git a/wiki/4.6.2/04.-Начало-работы-с-terraform-провайдером-DECORT.md b/wiki/4.6.2/04.-Начало-работы-с-terraform-провайдером-DECORT.md new file mode 100644 index 0000000..edaa664 --- /dev/null +++ b/wiki/4.6.2/04.-Начало-работы-с-terraform-провайдером-DECORT.md @@ -0,0 +1,6 @@ +Данный раздел описывает: +- Системные требования +- Установку провайдера +- Инициализацию провайдера +- Переключение режима работы между разными группами API +- Получение gid/grid_id площадки diff --git a/wiki/4.6.2/04.01-Установка-Terraform-провайдера-DECORT.md b/wiki/4.6.2/04.01-Установка-Terraform-провайдера-DECORT.md new file mode 100644 index 0000000..9661103 --- /dev/null +++ b/wiki/4.6.2/04.01-Установка-Terraform-провайдера-DECORT.md @@ -0,0 +1,150 @@ +## Системные требования + +Для запуска провайдера вам потребуется машина, на которой установлен Terraform. + +Кроме того, в связи с тем, что начиная с версии 0.12 Terraform изменил алгоритм поиска и инициализации локальных провайдеров, настройка данного провайдера для работы с Terraform 0.12 или более новыми версиями потребует выполнения ряда дополнительных действий. Подробнее см. [8.3 Настройка локального провайдера для работы с новыми версиями Terraform](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/08.-Полезные-советы#user-content-8-3-настройка-локального-провайдера-для-работы-с-новыми-версиями-terraform.md). + +## Установка +Начиная с версии провайдера `4.3.0` в релизном архиве находятся скрипты-инсталляторы. +Чтобы выполнить установку, необходимо: +1. Перейти по адресу: https://repository.basistech.ru/BASIS/terraform-provider-decort/releases +2. Выбрать необходимую версию провайдера подходящую под операционную систему. +3. Скачать архив. +4. Распаковать архив. +5. Выполнить скрипт установщика, `install.sh` или `install.bat` для Windows.
+*Для запуска `install.sh` не забудьте изменить права доступа к файлу* +```bash +chmod u+x install.sh +``` +6. Дождаться сообщения об успешной установке. Установщик выведет актуальный блок конфигурации провайдера, скопируйте его +```bash +DECORT provider version 4.3.0 has been successfully installed + +Copy this provider configuration to main.tf file: +terraform { + required_providers { + decort = { + version = "4.3.0" + source = "basis/decort/decort" + } + } +} +``` +7. После этого, создайте файл `main.tf` в рабочей директории, которая может находится в любом удобном для пользователя месте. +В данном примере, рабочая директория с файлом main.tf находится по пути: +```bash +~/work/tfdir/main.tf +``` +8. Вставьте в `main.tf` блок конфигурации провайдера, который был выведен на экран установщиком: +```terraform +terraform { + required_providers { + decort = { + version = "4.3.0" + source = "basis/decort/decort" + } + } +} +``` +9. Добавьте в файл блок с инициализацией провайдера. +```terraform +provider "decort" { + authenticator = "decs3o" + controller_url = "https://mr4.digitalenergy.online" + oauth2_url = "https://sso.digitalenergy.online" + allow_unverified_ssl = true +} +``` + +10. В консоли выполните команду +```bash +terraform init +``` + +11. В случае успешной установки, Terraform инициализирует провайдер и будет готов к дальнейшей работе. + +## Установка из релизов +Terraform провайдер DECORT имеет скомпилированные релизные версии, которые расположены по адресу: [Релизы](https://repository.basistech.ru/BASIS/terraform-provider-decort/releases). +Чтобы выполнить установку из релиза, необходимо: +1. Перейти по адресу: https://repository.basistech.ru/BASIS/terraform-provider-decort/releases +2. Выбрать необходимую версию провайдера подходящую под операционную систему. +3. Скачать архив. +4. Распаковать архив. +5. Полученный файл (в директории `bin/`) необходимо поместить: +Linux: +```bash +~/.terraform.d/plugins/${host_name}/${namespace}/${type}/${version}/${target} +``` +Windows: +```powershell +%APPDATA%\terraform.d\plugins\${host_name}\${namespace}\${type}\${version}\${target} +``` +Где: +- host_name - имя хоста, держателя провайдера, например, basis +- namespace - пространство имен хоста, например decort +- type - тип провайдера, может совпадать с пространством имен, например, decort +- version - версия провайдера, например 4.3.0 +- target - архитектура операционной системы, например windows_amd64 + +В примере ниже используется путь до провайдера на машине с ОС Linux: + +```bash +~/.terraform.d/plugins/basis/decort/decort/4.3.0/linux_amd64/tf-provider + ^ ^ ^ ^ ^ ^ + host_name | | | | | | + | | | | | + namespace | | | | | + | | | | + type | | | | + | | | + version | | | + | | + target | | + | + исполняемый файл | +``` + +6. После этого, создайте файл `main.tf` в рабочей директории, которая может находится в любом удобном для пользователя месте. +В данном примере, рабочая директория с файлом main.tf находится по пути: +```bash +~/work/tfdir/main.tf +``` +7. Добавьте в `main.tf` следующий блок +```terraform +terraform { + required_providers { + decort = { + version = "4.3.0" + source = "basis/decort/decort" + } + } +} +``` +В поле `version` указывается версия провайдера. +
+**ВНИМАНИЕ: Версии в блоке и в пути к исполняемому файлу провайдера должны совпадать!** + +В поле `source` помещается путь до репозитория с версией вида: + +```bash +${host_name}/${namespace}/${type} +``` + +**ВНИМАНИЕ: Версии в блоке и в пути к исполняемому файлу провайдера должны совпадать!** + +8. Добавьте в файл блок с инициализацией провайдера. +```terraform +provider "decort" { + authenticator = "decs3o" + controller_url = "https://mr4.digitalenergy.online" + oauth2_url = "https://sso.digitalenergy.online" + allow_unverified_ssl = true +} +``` + +9. В консоли выполните команду +```bash +terraform init +``` + +10. В случае успешной установки, Terraform инициализирует провайдер и будет готов к дальнейшей работе. diff --git a/wiki/4.6.2/04.02-Инициализация-Terraform-провайдера-DECORT.md b/wiki/4.6.2/04.02-Инициализация-Terraform-провайдера-DECORT.md new file mode 100644 index 0000000..5d63c29 --- /dev/null +++ b/wiki/4.6.2/04.02-Инициализация-Terraform-провайдера-DECORT.md @@ -0,0 +1,64 @@ +## Список аргументов для инициализации +Перед началом использования любой Terraform провайдер должен быть инициализирован. + +В процессе инициализации Terraform провайдера DECORT проверяется корректность переданных аргументов и выполняется авторизация в указанном контроллере облачной инфраструктуры. Подробнее о способах авторизации в платформе DECORT смотри соответствующий [раздел](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.6.2/03.-Обзор-облачной-платформы-DECORT#user-content-способы-авторизации.md). + +При инициализации Terraform провайдера DECORT используются следующие аргументы: + +| Аргумент | Переменная окружения | Описание | +| --- | --- | --- | +| allow_unverified_ssl | - | Если данный аргумент явно установлен в `true`, то провайдер **не будет** проверять SSL сертификаты при взаимодействии с авторизационным сервисом OAuth2 и контроллером облачной платформы.
Отключение проверок может быть полезным при работе в доверенной среде, использующей самоподписанные SSL сертификаты. Однако, так как отключение проверок несёт потенциальные риски безопасности, данную настройку следует использовать с осторожностью.
Разрешённые значения: `false` (значение по умолчанию) и `true`. | +| app_id | DECORT_APP_ID | Идентификатор приложения (клиента) для авторизации в контроллере облачной платформы в режиме `decs3o` или `bvs`.
Аргументы `app_id` и `app_secret` являются обязательными для режимов авторизации `authenticator=decs3o` и `authenticator=bvs`.
Если `app_id` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_APP_ID`. | +| app_secret | DECORT_APP_SECRET | Секретный код приложения (клиента) для авторизации в контроллере облачной платформы в режиме `decs3o` или `bvs`.
Аргументы `app_id` и `app_secret` являются обязательными для режимов авторизации `authenticator=decs3o` и `authenticator=bvs`.
Если `app_secret` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_APP_SECRET`. | +| authenticator | - | Режим авторизации при подключении к контроллеру облачной платформы.
Доступные режимы: `decs3o`, `legacy`, `jwt` или `bvs`.
Данный аргумент является обязательным. | +| bvs_user | DECORT_BVS_USER | Имя пользователя для авторизации в контроллере облачной платформы в режиме `bvs`.
Аргументы `bvs_password` и `bvs_user` являются обязательными для режима авторизации `authenticator=bvs`.
Если `bvs_user` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_BVS_USER`. | +| bvs_password | DECORT_BVS_PASSWORD | Пароль пользователя для авторизации в контроллере облачной платформы в режиме `bvs`.
Аргументы `bvs_user` и `bvs_password` являются обязательными для режима авторизации `authenticator=bvs`.
Если `bvs_password` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_BVS_PASSWORD`. | +| domain | DECORT_DOMAIN | Имя домена в контроллере облачной платформы в режиме `bvs`.
Данный аргумент является обязательным.
Если `domain` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_DOMAIN`. | +| controller_url | DECORT_CONTROLLER_URL | URL контроллера облачной платформы, через который будет осуществляться управление облачными ресурсами.
Данный аргумент является обязательным. | +| jwt | DECORT_JWT | JSON Web Token (JWT), который используется для авторизации в контроллере облачной платформы в режиме `jwt`.
Данный аргумент является обязательным для режима авторизации `authenticator=jwt`.
Если `jwt` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_JWT` | +| oauth2_url | DECORT_OAUTH2_URL | URL авторизационного сервиса OAuth2, который используется для управления доступом пользователей (или программных клиентов) к контроллеру облачной платформы.
Данный аргумент является обязательным для режимов авторизации `authenticator=decs3o`, `authenticator=bvs` и `authenticator=jwt`.
Если `oauth2_url` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_OAUTH2_URL` | +| password | DECORT_PASSWORD | Пароль для авторизации в контроллере облачной платформы в режиме `legacy`.
Аргументы `password` и `user` являются обязательными для режима авторизации `authenticator=legacy`.
Если `password` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_PASSWORD`. | +| user | DECORT_USER | Имя пользователя для авторизации в контроллере облачной платформы в режиме `legacy`.
Аргументы `user` и `password` являются обязательными для режима авторизации `authenticator=legacy`.
Если `user` не задан в tf-файле, то провайдер будет использовать значение из переменной окружения `DECORT_USER`. | + +## Пример инициализации в режиме авторизации `decs3o` +Пример инициализации Terraform провайдера DECORT: +```terraform +provider "decort" { + authenticator = "decs3o" + controller_url = "https://ctrl.decort.online" + oauth2_url = "https://oauth2.decort.online:7777" +} +``` + +В данном примере используется режим авторизации `decs3o`. + +Как отмечено выше, в данном режиме требуется указать аргументы `app_id` и `app_secret`, идентифицирующие пользователя (или приложение-клиент), от лица которого будут выполняться дальнейшие действия. Однако, так как данная информация является конфиденциальной (по сути, она эквивалентна паре _имя пользователя : пароль_), то в общем случае заносить такого рода данные в tf-файл не следует. Рекомендуется определять в среде запуска Terraform переменные окружения `DECORT_APP_ID` и `DECORT_APP_SECRET`, из которых провайдер извлечёт нужные данные. Приведенный пример подразумевает, что нужная информация будет получена из этих переменных окружения. + +Пользователь, от лица которого Terrafrom будет выполнять действия в облачной платформе, должен заранее создать пару _Application ID_ и _Application Secret_ в авторизационном приложении OAuth2. Именно эти значения, а также URL авторизационного приложения Oauth2, должны присваиваться аргументам `app_id`, `app_secret` и `oauth2_url` соответственно для успешной инициализации провайдера. + +Также обратите внимание на формат задания аргументов `controller_url` и `oauth2_url`. В общем случае они должны содержать идентификатор протокола (_https://_) и сетевой порт, если он отличается от порта по умолчанию (в примере для авторизационного сервиса OAuth2 указан порт _7777_). Эту информацию вы можете узнать у администратора вашей облачной инфраструктуры DECORT. + +## Пример инициализации в режиме авторизации `bvs` +Пример инициализации Terraform провайдера DECORT: +```terraform +provider "decort" { + authenticator = "bvs" + controller_url = "https://delta.qa.loc" + oauth2_url = "https://bvs-delta.qa.loc:8443" + app_id = "delta" + app_secret = "" + bvs_password = "" + bvs_user = "" + domain = "dynamix" +} +``` + +В данном примере используется режим авторизации `bvs`. + +Как отмечено выше, в данном режиме требуется указать аргументы `app_id` - идентификатор площадки - delta, alpha, poc, etc. Можно найти на странице администратора по следующему пути: вкладка безопасность - клиентские сервисы - наименование площадки. `app_secret` - пароль площадки. Можно найти на странице администратора по следующему пути: вкладка безопасность - клиентские сервисы - наименование площадки (символ i) - поле "Пароль". Однако, так как данная информация является конфиденциальной, то в общем случае заносить такого рода данные в tf-файл не следует. Рекомендуется определять в среде запуска Terraform переменные окружения `DECORT_APP_ID` и `DECORT_APP_SECRET`, из которых провайдер извлечёт нужные данные. Приведенный пример подразумевает, что нужная информация будет получена из этих переменных окружения. +Также обязательными аргументами являются: `bvs_user` - имя пользователя, `bvs_password` - пароль пользователя. Рекомендуется не заносить их в tf-файл, а определять в среде запуска Terraform переменные окружения `DECORT_BVS_USER` и `DECORT_BVS_PASSWORD`, из которых провайдер извлечёт нужные данные. Приведенный пример подразумевает, что нужная информация будет получена из этих переменных окружения. +Домен для подключения `domain` - указывается наименование площадки. Данный аргумент является обязательным. Рекомендуется не заносить его в tf-файл, а определять в среде запуска Terraform переменную окружения `DECORT_DOMAIN`, из которой провайдер извлечёт нужные данные. Приведенный пример подразумевает, что нужная информация будет получена из этих переменных окружения. + +Пользователь, от лица которого Terrafrom будет выполнять действия в облачной платформе, должен заранее получить от администратора _Application ID_ и _Application Secret_, _bvs user_ и _bvs password_, а также _domain_. А также осуществить первичный вход на платформу посредством браузера. + +Также обратите внимание на формат задания аргументов `controller_url` и `oauth2_url`. В общем случае они должны содержать идентификатор протокола (_https://_) и сетевой порт, если он отличается от порта по умолчанию (в примере для авторизационного сервиса OAuth2 указан порт _8443_). Эту информацию вы можете узнать у администратора вашей облачной инфраструктуры DECORT. diff --git a/wiki/4.6.2/04.03-Переключение-между-группами-API.md b/wiki/4.6.2/04.03-Переключение-между-группами-API.md new file mode 100644 index 0000000..fb722ac --- /dev/null +++ b/wiki/4.6.2/04.03-Переключение-между-группами-API.md @@ -0,0 +1,38 @@ +Так как платформа DECORT предоставляет для работы две группы API, то terraform провайдер позволяет свободно переключать режимы работы между этими группами. +По умолчанию стоит пользовательская группа API. Ее можно сменить на административную группу. +Если прав у пользователя будет достаточно, то запрос будет выполнен, если нет, то будет ошибка: +```bash +Permission denied +``` +Которая говорит о том, что прав недостаточно. Тогда для выполнения операции обратитесь к администратору платформы. +Установка режима взаимодействия с группами API осуществляется через установку переменной окружения _DECORT_ADMIN_MODE_. +Для более подробного описания возможностей каждой группы API см. соответствующий раздел. + +## Переключение режима работы в Windows +Используйте сл. команду: +```Powershell +$Env:DECORT_ADMIN_MODE=1 +``` +Для отключения: +```Powershell +$Env:DECORT_ADMIN_MODE=0 +``` +## Переключение режима работы в Linux +Используйте сл. команду: +```bash +DECORT_ADMIN_MODE=1 +``` +или +```bash +export DECORT_ADMIN_MODE=1 +``` +Для отключения: +```bash +DECORT_ADMIN_MODE=0 +``` +или +```bash +export DECORT_ADMIN_MODE=0 +``` +**ОБРАТИТЕ ВНИМАНИЕ** +Переменные окружения создаются для терминальной сессии. В сл. раз их придется задавать еще раз, если требуется режим, отличный от пользовательского. diff --git a/wiki/4.6.2/04.04-Получение-gid-или-grid_id.md b/wiki/4.6.2/04.04-Получение-gid-или-grid_id.md new file mode 100644 index 0000000..4b316ac --- /dev/null +++ b/wiki/4.6.2/04.04-Получение-gid-или-grid_id.md @@ -0,0 +1,31 @@ +Платформа может располагаться на нескольких площадках(grid). +Такие площадки имеют свой id. +Для создания некоторых ресурсов требуется ввести grid_id или gid площадки. +Получение gid различается для пользовательского и административного API. + +## Получение gid для пользовательского API +Для получения gid с помощью пользовательского API, необходимо получить информацию из _data_source_ функции _decort_locations_list_, как указано ниже: +```terraform +data "decort_locations_list" "ll" { + +} + +output "test" { + value = data.decort_locations_list.ll +} +``` +В файл состояния будет сохранен результат, где можно посмотреть доступные для работы площадки. + +## Получение gid для административного API +Для получения gid с помощью административного API, необходимо получить информацию из _data_source_ функции _decort_grid_list_, как указано ниже: +```terraform +data "decort_grid_list" "gl" { + +} + +output "test" { + value = data.decort_grid_list.gl +} + +``` +В файл состояния будет сохранен результат, где можно посмотреть доступные для работы площадки. diff --git a/wiki/4.6.2/04.05-Сборка-terraform-провайдера-в-образ.md b/wiki/4.6.2/04.05-Сборка-terraform-провайдера-в-образ.md new file mode 100644 index 0000000..02bc8b7 --- /dev/null +++ b/wiki/4.6.2/04.05-Сборка-terraform-провайдера-в-образ.md @@ -0,0 +1,43 @@ +Образ приложения - современный способ запуска приложений. Образ приложения представляет собой контейнер, в который входит ОС и необходимые для работы приложения пакеты. +Способов создать образ приложения довольно много, для этого существуют программы контейнеризации: +- Docker +- Podman +- и другие +Образ представляет собой "зафиксированную" версию приложения, что означает, что никакие изменения в приложения внесены быть не могут. Так же означает то, что приложение не может создавать побочные файлы при работе. +Контейнер - это запущенный экземпляр образа. То есть, один образ может порождать множество контейнеров, каждый из которых будет включать в себя отдельный экземпляр приложения. +Одно из преимуществ работы приложения в контейнере - кроссплатформенность. Это преимущество обуславливается тем, что образ приложения уже включает в себя все необходимое для успешной работы приложения, в том числе операционную систему. Поэтому, пользователю достаточно установить на вычислительной машине программу, которая обеспечивает работу с образами приложений. + +## Docker +Docker является одной из самых популярных программ для работы с образами. +Docker позволяет: +- Создавать образы +- Запускать контейнеры +- Управлять контейнерами +- Управлять образами +Скачать и установить Docker можно по ссылке https://docs.docker.com/get-docker/ + +## Сборка terraform провайдера +### Требования: +- Docker +- git +- Компилятор языка GO += make +### Установка необходимых программ +1. Компилятор языка GO можно скачать и установить по ссылке: https://go.dev/dl/ +2. Docker можно скачать и установить по ссылке выше. +3. Git можно скачать и установить по ссылке: https://git-scm.com/ +4. Программа make входит в пакет установленных программ для ОС Linux. Для Windows можно воспользоваться инструкцией со stack overflow: https://stackoverflow.com/questions/32127524/how-to-install-and-use-make-in-windows +### Порядок действий +1. Склонировать репозиторий с провайдером: +```bash +git clone https://github.com/rudecs/terraform-provider-decort.git +``` +2. Перейти в директорию со скачанным кодом: +```bash +cd terraform-provider-decort +``` +3. Выполнить команду: +```bash +make image +``` +В результате выполнения данной последовательности, будет создан docker образ, который содержит в себе приложение terraform, terraform провайдер. diff --git a/wiki/4.6.2/05.-Работа-с-terraform.md b/wiki/4.6.2/05.-Работа-с-terraform.md new file mode 100644 index 0000000..675f2ea --- /dev/null +++ b/wiki/4.6.2/05.-Работа-с-terraform.md @@ -0,0 +1,4 @@ +Раздел описывает некоторые практики работы с terraform, которые могут быть полезны пользователю. +Раздел включает в себя следующие статьи: +- Импортирование ресурсов +- Работа с таймаутами diff --git a/wiki/4.6.2/05.01-Импортирование-ресурсов.md b/wiki/4.6.2/05.01-Импортирование-ресурсов.md new file mode 100644 index 0000000..8a419d3 --- /dev/null +++ b/wiki/4.6.2/05.01-Импортирование-ресурсов.md @@ -0,0 +1,75 @@ +Импортирование ресурсов в terraform позволяет привести в соответствие состояние terraform (.tfstate) к состоянию ресурса в платформе. +Необходимость такого приведения возникает в нескольких случаях: +- Ресурс был создан через портал платформы, работа продолжается через terraform провайдер, +- Ресурс был создан через terraform провайдер, однако был изменен через портал платформы, +- Ресурс был создан через terraform провайдер, однако был изменен другим пользователем через terraform провайдер, +- И так далее + +Такие расхождения в состоянии ресурсов нередки, путей их решения несколько: +- Использовать импортирование ресурсов, +- Использовать общие файлы состояний ресурсов, к которым будут иметь доступ все участники, занятые в работе с платформой. +В текущем разделе рассматривается первый вариант. + +## Импортирование ресурсов +Импортирование ресурсов позволяет совершить запрос к платформе, чтобы сформировать файл состояния. +Чтобы совершить импортирование ресурсов необходимо ввести сл. команду: +```bash +terraform import . +``` +## Пример +Предположим, что у нас ресурс, описывающий диск: +```terraform +resource "decort_disk" "disk" { + account_id = 121212 + gid = 3333 + disk_name = "mySuperDisk" + size_max = 100500 +} +``` +Если запустить команду: +```bash +terraform apply +``` +То у нас будет создан новый диск. +Но, такой диск уже есть на площадке и мы хотели бы сформировать .tfstate для этого ресурса. +Поэтому, для начала, необходимо получить список дисков: +```terraform +data "decort_disk_list" "dl"{ + +} +output "test" { + value = data.decort_disk_list.dl +} +``` +В полученных данных необходимо найти требуемый диск, получить его id - параметр disk_id. Пусть это будет - 777777 +Теперь можно выполнить импортирование: +```bash +terraform import decort_disk.disk 777777 +``` +Команда должна успешно завершиться, появиться файл состояний, который позволит манипулировать ресурсом. + +## Ошибки при импортировании +При импортировании ресурса может возникнуть сл. ошибка: +```bash +Error: : required field is not set +``` +Где - наименование поля. +Ошибка возникает в том случае, если в описании ресурса отсутствует обязательное поле. +Например: +```terraform +resource "decort_disk" "disk" { + account_id = 121212 + gid = 3333 + size_max = 100500 +} +``` +В приведенном выше описании отсутствует поле disk_name, поэтому, при попытке импортирования возникнет ошибка. +Для ее устранения, необходимо выполнить запрос на получение списка дисков, найти недостающее поле, после чего добавить его в описание ресурса. +После этого повторить попытку импортирования. + +## Общий алгоритм устранения ошибок +1. Выполнить запрос импортирования +2. В случае ошибки - внести недостающие поля. +3. Повторить п.1. + + diff --git a/wiki/4.6.2/05.02-Работа-с-таймаутами.md b/wiki/4.6.2/05.02-Работа-с-таймаутами.md new file mode 100644 index 0000000..9a739b4 --- /dev/null +++ b/wiki/4.6.2/05.02-Работа-с-таймаутами.md @@ -0,0 +1,100 @@ +Terraform провайдер DECORT поддерживает тонкую настройку таймаутов выполнения запросов к платформе. Таймауты необходимы для определения максимального времени выполнения запроса. При превышении этого времени соединение рвется и запрос считается невыполненным. +Таймауты применяются при работе с _resource_ функциями провайдера. _Data source_ функции по-умолчанию имеют таймаут в 20 минут и изменяться не может. + +## Стандартные таймауты terraform +| Операция | Время | Описание | +| --- | --- | --- | +| create | 20 минут | Создание ресурса | +| read | 20 минут | Чтение ресурса | +| update | 20 минут | Обновление ресурса | +| delete | 20 минут | Удаление ресурса | +| default | 20 минут | Значение по умолчанию. Устанавливает значение для всех операций | + +## Стандартные таймауты провайдера DECORT +В провайдере DECORT таймауты переопределены для того, чтобы уменьшить нагрузку на платформу. +| Операция | Время | Описание | +| --- | --- | --- | +| create | 10 минут | Создание ресурса | +| read | 5 минут | Чтение ресурса | +| update | 5 минут | Обновление ресурса | +| delete | 5 минут | Удаление ресурса | +| default | 5 минут | Значение по умолчанию. Устанавливает значение для всех операций | + +## Установка таймаутов +Все таймауты можно установить самостоятельно для каждого ресурса. +Для этого используется блок _timeouts_, который имеется в каждом ресурсе провайдера. +Пример: +```terraform +resource "decort_res" "res_name" { + timeouts { + create = "10m" + update = "1m" + delete = "2m" + read = "7m" + #default = "15m" + } +} +``` +Где: +- create - операция создания ресурса +- read - операция чтения ресурса +- update - операция обновления ресурса +- delete - операция удаления ресурса +- default - установит заданное время для всех операций +## Формат установления времени +Как видно из примера выше, провайдер принимает на вход строку вида: +``` +"" +``` +Где: +- time-num - число +- time-val - сокращенная запись значения временного отрезка. + +Таблица с временными отрезками: + +| Отрезок | Значение | +| --- | --- | +| n | наносекунда | +| ms | миллисекунда | +| s | секунда | +| m | минута | +| h | час | + +Примеры: +``` +"10m" +"1s" +"1h10m" +``` +И так далее + +## Работа с таймером через .tf-файл +В .tf-файле, в блоке ресурса можно задавать таймауты для операций над ресурсом, однако, при работе с таймаутом, следует помнить о правиле: +__В случае изменения таймаутов в .tf-файле, операции с новыми таймаутами будут производиться только после apply/plan/destroy__ +То есть, если изменить таймауты и выполнить операцию, то она выполнится со старыми таймаутами, а сл. операция уже будет выполнена с новыми таймаутами. +Это объясняется тем, что значения таймаутов считываются из файла состояний .tfstate при выполнении операции, и новые значения таймаутов попадут туда только при успешно выполненной операции. + +## Ошибки при работе с таймаутом +### context deadline exceeded +Если время таймаута слишком короткое, то можно получить сл. ошибку: +``` +context deadline exceeded +``` +Которая говорит, что было выполнено прерывание работы программы из-за истечения времени на операцию. +Для исправления можно увеличить размер окна таймаута и выполнить успешный запрос (например, с помощью терминала), чтобы новое значения таймаутов было добавлено в .tfstate. В противном случае, файл состояния придется править в ручную, либо удалить его и импортировать ресурс для формирования .tfstate. + +### 504 ошибка +Данная ошибка говорит о том, что сервер принудительно разорвал соединения из-за истечения времени на ответ. +В случае получения данной ошибки, обратитесь в службу технической поддержки. + +## Работа с таймаутами через терминал +Сл. команда выполнит операцию terraform с заданным таймаутом: +```bash +timeout