diff --git a/CHANGELOG.md b/CHANGELOG.md
index d3ffff1..0fe41c7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,33 @@
-## Version 4.6.4
+## Version 4.7.0
-### Bugfix
-- Fix bug that network reconnects to the compute if the weight field was not specified
+### Feature
+- Added decort_dpdknet and decort_dpdknet_list data sources in cloudapi/dpdknet and cloudbroker/dpdknet
+- Added decort_dpdknet resource in cloudbroker/dpdknet
+- Added decort_audit data source in cloudapi/audit
+- Added decort_cb_audits_export_to_file data source in cloudbroker/audit
+- Added field uniq_pools in decort_resgroup resource in cloudapi/rg which can be used when updating resource
+- Added feature that allows to remove def_net in decort_resgroup(cloudapi/rg) and decort_cb_rg(cloudbroker/rg)
+- Added the delete_async_mode field in resources "decort_snapshot" and "kvmvm"
+- Added field guid in decort_cb_user_get_audit data source in cloudbroker/user
+- Added the pci_devices field in resources cloudbroker/kvmvm, cloudapi/kvmvm, datasources cloudbroker/kvmvm, cloudapi/kvmvm
+- Added field enabled in dataSourceImageListSchema in cloudapi/image and cloudbroker/image
+- Added fields mtu and libvirt_settings in vnfInterfaceSchema in cloudapi/vins and cloudbroker/vins
+- Added libvirt_settings filed in resources "decort_cb_kvmvm", "decort_kvmvm", datasources "decort_cb_kvmvm", "decort_cb_kvmvm_list", "decort_kvmvm", "decort_kvmvm_list"
+- Added field enabled in dataSourceImageListSchema in cloudapi/image and cloudbroker/image
+- Added fields meta and ckey in "decort_cb_grid" in cloudbroker/grid
+- Added field bus_number in data sources "decort_vins", "decort_cb_vins" and resources "decort_vins", "decort_cb_vins" in cloudapi/vins, cloudbroker/vins
+- Change drivers field from required to optional in resourceCDROMImageSchema in cloudbroker/image
+- Added chipset, bus_number fileds in resources "decort_cb_kvmvm", "decort_kvmvm", datasources "decort_cb_kvmvm", "decort_cb_kvmvm_list", "decort_kvmvm", "decort_kvmvm_list"
+- Added stack_id, image_id fileds in decort_cb_kvmvm_list
+- Added chipset field in "decort_k8s", "decort_k8s_wg", "decort_cb_k8s_cp", "decort_cb_k8s_wg"
+- Change drivers field from required to optional in decort_image_from_platform_disk and decort_cb_image_from_platform_disk
+- Change client_ids field from []int to []string in decort_flipgroup_list
+- Added feature to change IP network without stopping compute in resources "decort_cb_kvmvm", "decort_kvmvm" in cloudapi/kvmvm, cloudbroker/kvmvm
+### Removed
+- Remove apitask field in dataSourceAuditSchema in cloudbroker/audit
+- The ability to interact with kvmppc has been removed
+- Remove permanently field in resourceImageSchema, resourceVirtualImageSchema, resourceImageFromBlankComputeSchema, resourceImageFromPlatformDiskSchema in cloudapi/image and cloudbroker/image
+- Remove recursive_delete field in resource decort_cb_account in cloudbroker/account and cloudapi/account
+- The reason field has been deleted everywhere
+- Remove permanently field in resourceCDROMImageSchema in cloudbroker/image
diff --git a/LICENSE b/LICENSE
index 261eeb9..36cfecb 100644
--- a/LICENSE
+++ b/LICENSE
@@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
- Copyright [yyyy] [name of copyright owner]
+ Copyright 2022 Basis LTD
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/Makefile b/Makefile
index 3ba87ef..0ffb1cd 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.4
+VERSION=4.7.0
OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
FILES = ${BINARY}_${VERSION}_darwin_amd64\
diff --git a/README.md b/README.md
index b32c681..0200736 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@ Terraform provider для платформы Digital Energy Cloud Orchestration
| Версия DECORT API | Версия провайдера Terraform |
| ------ | ------ |
+| 4.1.0 | 4.7.x |
| 4.0.0 | 4.6.x |
| 3.8.9 | 4.5.x |
| 3.8.8 | 4.4.x |
@@ -30,8 +31,10 @@ Terraform provider для платформы Digital Energy Cloud Orchestration
- Режим пользователя:
- Работа с accounts,
+ - Работа с audit,
- Работа с bservice,
- Работа с disks,
+ - Работа с dpdk,
- Работа с extnets,
- Работа с flipgroups,
- Работа с image,
@@ -47,8 +50,9 @@ Terraform provider для платформы Digital Energy Cloud Orchestration
- Режим администратора:
- Работа с accounts,
- - Работа с audits,
+ - Работа с audit,
- Работа с disks,
+ - Работа с dpdk,
- Работа с extnets,
- Работа с flipgroups,
- Работа с grids,
diff --git a/docs/data-sources/account_flipgroups_list.md b/docs/data-sources/account_flipgroups_list.md
index 53284ca..ebf3b14 100644
--- a/docs/data-sources/account_flipgroups_list.md
+++ b/docs/data-sources/account_flipgroups_list.md
@@ -27,6 +27,7 @@ description: |-
- `name` (String) Filter by name
- `page` (Number) Page number
- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
- `vins_id` (Number) Filter by ViNS ID
- `vins_name` (String) Filter by ViNS name
diff --git a/docs/data-sources/audit.md b/docs/data-sources/audit.md
new file mode 100644
index 0000000..5a00485
--- /dev/null
+++ b/docs/data-sources/audit.md
@@ -0,0 +1,48 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_audit Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_audit (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `audit_guid` (String) audit guid
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `args` (String)
+- `call` (String)
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `kwargs` (String)
+- `remote_addr` (String)
+- `responsetime` (Number)
+- `result` (String)
+- `status_code` (Number)
+- `tags` (String)
+- `timestamp` (Number)
+- `timestamp_end` (Number)
+- `user` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_audit.md b/docs/data-sources/cb_audit.md
index 15af37e..3d93830 100644
--- a/docs/data-sources/cb_audit.md
+++ b/docs/data-sources/cb_audit.md
@@ -25,7 +25,6 @@ description: |-
### Read-Only
-- `apitask` (String)
- `args` (String)
- `call` (String)
- `guid` (String)
diff --git a/docs/data-sources/cb_audits_export_to_file.md b/docs/data-sources/cb_audits_export_to_file.md
new file mode 100644
index 0000000..4ed2c27
--- /dev/null
+++ b/docs/data-sources/cb_audits_export_to_file.md
@@ -0,0 +1,33 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_audits_export_to_file Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_audits_export_to_file (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `file_path` (String) file path
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_dpdknet.md b/docs/data-sources/cb_dpdknet.md
new file mode 100644
index 0000000..90665e7
--- /dev/null
+++ b/docs/data-sources/cb_dpdknet.md
@@ -0,0 +1,48 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_dpdknet Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_dpdknet (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `dpdk_id` (Number) The unique ID of the subscriber-owner of the DPDK network
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_access` (List of Number) List of accounts with access
+- `compute_ids` (List of Number) Compute IDs which uses this DPDK network
+- `created_time` (Number) Created time
+- `desc` (String) Description of DPDK network
+- `gid` (Number) ID of the grid (platform)
+- `guid` (Number) DPDK network ID on the storage side
+- `id` (String) The ID of this resource.
+- `name` (String) Name of network
+- `ovs_bridge` (String) OVS bridge in which interfaces for computers created
+- `rg_access` (List of Number) List of resource groups with access
+- `status` (String) DPDK network status
+- `updated_time` (Number) Updated time
+- `vlan_id` (Number) vlan ID
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_dpdknet_list.md b/docs/data-sources/cb_dpdknet_list.md
new file mode 100644
index 0000000..be7572d
--- /dev/null
+++ b/docs/data-sources/cb_dpdknet_list.md
@@ -0,0 +1,63 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_dpdknet_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_dpdknet_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Find by ID
+- `compute_ids` (List of Number) Find by compute IDs
+- `desc` (String) Find by description
+- `gid` (Number) Find by GID
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_access` (List of Number)
+- `compute_ids` (List of Number)
+- `created_time` (Number)
+- `desc` (String)
+- `dpdk_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `name` (String)
+- `ovs_bridge` (String)
+- `rg_access` (List of Number)
+- `status` (String)
+- `updated_time` (Number)
+- `vlan_id` (Number)
diff --git a/docs/data-sources/cb_grid.md b/docs/data-sources/cb_grid.md
index 09e8b9e..48893c8 100644
--- a/docs/data-sources/cb_grid.md
+++ b/docs/data-sources/cb_grid.md
@@ -26,11 +26,13 @@ description: |-
### Read-Only
- `auth_broker` (List of String)
+- `ckey` (String)
- `flag` (String)
- `gid` (Number)
- `guid` (Number)
- `id` (Number) The ID of this resource.
- `location_code` (String)
+- `meta` (List of String) meta
- `name` (String)
diff --git a/docs/data-sources/cb_grid_get_settings.md b/docs/data-sources/cb_grid_get_settings.md
new file mode 100644
index 0000000..824faaf
--- /dev/null
+++ b/docs/data-sources/cb_grid_get_settings.md
@@ -0,0 +1,114 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_get_settings Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_get_settings (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `grid_id` (Number) grid (platform) ID
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `allowed_ports` (List of Number)
+- `cleanup_retention_period` (Number)
+- `docker_registry` (List of Object) (see [below for nested schema](#nestedatt--docker_registry))
+- `enable_uptime_monitor` (Boolean)
+- `extnet_max_pre_reservations_num` (Number)
+- `healthcheck_notifications` (List of Object) (see [below for nested schema](#nestedatt--healthcheck_notifications))
+- `id` (String) The ID of this resource.
+- `k8s_cleanup_enabled` (Boolean)
+- `limits` (String)
+- `location_url` (String)
+- `net_qos` (List of Object) (see [below for nested schema](#nestedatt--net_qos))
+- `networks` (String)
+- `prometheus` (List of Object) (see [below for nested schema](#nestedatt--prometheus))
+- `vins_max_pre_reservations_num` (Number)
+- `vnfdev_mgmt_net_range` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `docker_registry`
+
+Read-Only:
+
+- `password` (String)
+- `server` (String)
+- `username` (String)
+
+
+
+### Nested Schema for `healthcheck_notifications`
+
+Read-Only:
+
+- `emails` (List of Object) (see [below for nested schema](#nestedobjatt--healthcheck_notifications--emails))
+
+
+### Nested Schema for `healthcheck_notifications.emails`
+
+Read-Only:
+
+- `address` (String)
+- `enabled` (Boolean)
+
+
+
+
+### Nested Schema for `net_qos`
+
+Read-Only:
+
+- `extnet` (List of Object) (see [below for nested schema](#nestedobjatt--net_qos--extnet))
+- `vins` (List of Object) (see [below for nested schema](#nestedobjatt--net_qos--vins))
+
+
+### Nested Schema for `net_qos.extnet`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `net_qos.vins`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `prometheus`
+
+Read-Only:
+
+- `scrape_interval` (Number)
diff --git a/docs/data-sources/cb_image.md b/docs/data-sources/cb_image.md
index 1fda9eb..8be93ca 100644
--- a/docs/data-sources/cb_image.md
+++ b/docs/data-sources/cb_image.md
@@ -28,7 +28,7 @@ description: |-
- `account_id` (Number) AccountId to make the image exclusive
- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
-- `architecture` (String) binary architecture of this image, one of X86_64 of PPC64_LE
+- `architecture` (String) binary architecture of this image, one of X86_64
- `boot_type` (String) Boot type of image bios or uefi
- `bootable` (Boolean) Does this image boot OS
- `cd_presented_to` (String)
diff --git a/docs/data-sources/cb_image_list.md b/docs/data-sources/cb_image_list.md
index bcee08d..cd26afe 100644
--- a/docs/data-sources/cb_image_list.md
+++ b/docs/data-sources/cb_image_list.md
@@ -20,6 +20,7 @@ description: |-
- `architecture` (String) find by architecture
- `bootable` (Boolean) find by bootable True or False
- `by_id` (Number) find by ID
+- `enabled` (Boolean) find by enabled True or False
- `hot_resize` (Boolean) find by hot resize True or False
- `image_size` (Number) find by image size
- `name` (String) find by name
diff --git a/docs/data-sources/cb_kvmvm.md b/docs/data-sources/cb_kvmvm.md
index 67d5e8b..a118e19 100644
--- a/docs/data-sources/cb_kvmvm.md
+++ b/docs/data-sources/cb_kvmvm.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String) reason for action
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
@@ -38,6 +37,7 @@ description: |-
- `boot_disk_size` (Number)
- `boot_order` (List of String)
- `cd_image_id` (Number)
+- `chipset` (String)
- `clone_reference` (Number)
- `clones` (List of Number)
- `computeci_id` (Number)
@@ -156,6 +156,7 @@ Read-Only:
- `account_id` (Number)
- `boot_partition` (Number)
+- `bus_number` (Number)
- `ckey` (String)
- `created_time` (Number)
- `deleted_time` (Number)
@@ -250,6 +251,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -257,8 +259,10 @@ Read-Only:
- `flip_group_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_type` (String)
@@ -270,6 +274,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `interfaces.qos`
diff --git a/docs/data-sources/cb_kvmvm_get_audits.md b/docs/data-sources/cb_kvmvm_get_audits.md
index cb66e2c..6e6cfa9 100644
--- a/docs/data-sources/cb_kvmvm_get_audits.md
+++ b/docs/data-sources/cb_kvmvm_get_audits.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/data-sources/cb_kvmvm_list.md b/docs/data-sources/cb_kvmvm_list.md
index bddc64a..4f75888 100644
--- a/docs/data-sources/cb_kvmvm_list.md
+++ b/docs/data-sources/cb_kvmvm_list.md
@@ -22,6 +22,7 @@ description: |-
- `extnet_id` (Number) Find by Extnet ID
- `extnet_name` (String) Find by Extnet name
- `ignore_k8s` (Boolean) If set to true, ignores any VMs associated with any k8s cluster
+- `image_id` (Number) Find by image ID
- `includedeleted` (Boolean)
- `ip_address` (String) Find by IP address
- `name` (String) Find by name
@@ -30,6 +31,7 @@ description: |-
- `rg_name` (String) Find by resgroup name
- `size` (Number)
- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `stack_id` (Number) Find by stack ID
- `status` (String) Find by status
- `tech_status` (String) Find by tech status
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
@@ -65,6 +67,7 @@ Read-Only:
- `boot_order` (List of String)
- `bootdisk_size` (Number)
- `cd_image_id` (Number)
+- `chipset` (String)
- `clone_reference` (Number)
- `clones` (List of Number)
- `compute_id` (Number)
@@ -163,6 +166,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `disk_id` (Number)
- `pci_slot` (Number)
@@ -172,6 +176,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -179,8 +184,10 @@ Read-Only:
- `flip_group_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_type` (String)
@@ -192,6 +199,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `items.interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `items.interfaces.qos`
diff --git a/docs/data-sources/cb_kvmvm_pfw_list.md b/docs/data-sources/cb_kvmvm_pfw_list.md
index b32a865..e73d39c 100644
--- a/docs/data-sources/cb_kvmvm_pfw_list.md
+++ b/docs/data-sources/cb_kvmvm_pfw_list.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/data-sources/cb_rg.md b/docs/data-sources/cb_rg.md
index d03f090..10cc1b7 100644
--- a/docs/data-sources/cb_rg.md
+++ b/docs/data-sources/cb_rg.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/data-sources/cb_rg_usage.md b/docs/data-sources/cb_rg_usage.md
index 5109395..33aeb5a 100644
--- a/docs/data-sources/cb_rg_usage.md
+++ b/docs/data-sources/cb_rg_usage.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/data-sources/cb_user_get_audit.md b/docs/data-sources/cb_user_get_audit.md
index 77b39c3..7533b4d 100644
--- a/docs/data-sources/cb_user_get_audit.md
+++ b/docs/data-sources/cb_user_get_audit.md
@@ -47,6 +47,7 @@ Optional:
Read-Only:
- `call` (String)
+- `guid` (String)
- `response_time` (Number)
- `status_code` (Number)
- `time` (Number)
diff --git a/docs/data-sources/cb_vins.md b/docs/data-sources/cb_vins.md
index 43ad813..bbbe42c 100644
--- a/docs/data-sources/cb_vins.md
+++ b/docs/data-sources/cb_vins.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String) reason for action
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
@@ -139,6 +138,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -146,8 +146,10 @@ Read-Only:
- `flipgroup_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_mask` (Number)
@@ -159,6 +161,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `vnf_dev.interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `vnf_dev.interfaces.qos`
diff --git a/docs/data-sources/cb_vins_list_deleted.md b/docs/data-sources/cb_vins_list_deleted.md
index 4a152e4..47a37c7 100644
--- a/docs/data-sources/cb_vins_list_deleted.md
+++ b/docs/data-sources/cb_vins_list_deleted.md
@@ -26,6 +26,7 @@ description: |-
- `size` (Number) Page size
- `sort_by` (String) sort by one of supported fields, format +|-(field)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vnf_dev_id` (Number) Filter by VNF Device id
### Read-Only
diff --git a/docs/data-sources/cb_vins_nat_rule_list.md b/docs/data-sources/cb_vins_nat_rule_list.md
index 5da23ed..c803517 100644
--- a/docs/data-sources/cb_vins_nat_rule_list.md
+++ b/docs/data-sources/cb_vins_nat_rule_list.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String) reason for action
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/data-sources/dpdknet.md b/docs/data-sources/dpdknet.md
new file mode 100644
index 0000000..6e7655f
--- /dev/null
+++ b/docs/data-sources/dpdknet.md
@@ -0,0 +1,48 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_dpdknet Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_dpdknet (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `dpdk_id` (Number) The unique ID of the subscriber-owner of the DPDK network
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_access` (List of Number) List of accounts with access
+- `compute_ids` (List of Number) Compute IDs which uses this DPDK network
+- `created_time` (Number) Created time
+- `desc` (String) Description of DPDK network
+- `gid` (Number) ID of the grid (platform)
+- `guid` (Number) DPDK network ID on the storage side
+- `id` (String) The ID of this resource.
+- `name` (String) Name of network
+- `ovs_bridge` (String) OVS bridge in which interfaces for computers created
+- `rg_access` (List of Number) List of resource groups with access
+- `status` (String) DPDK network status
+- `updated_time` (Number) Updated time
+- `vlan_id` (Number) vlan ID
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/dpdknet_list.md b/docs/data-sources/dpdknet_list.md
new file mode 100644
index 0000000..c71c1b6
--- /dev/null
+++ b/docs/data-sources/dpdknet_list.md
@@ -0,0 +1,63 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_dpdknet_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_dpdknet_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Find by ID
+- `compute_ids` (List of Number) Find by compute IDs
+- `desc` (String) Find by description
+- `gid` (Number) Find by GID
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_access` (List of Number)
+- `compute_ids` (List of Number)
+- `created_time` (Number)
+- `desc` (String)
+- `dpdk_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `name` (String)
+- `ovs_bridge` (String)
+- `rg_access` (List of Number)
+- `status` (String)
+- `updated_time` (Number)
+- `vlan_id` (Number)
diff --git a/docs/data-sources/flipgroup_list.md b/docs/data-sources/flipgroup_list.md
index f70e060..82679ed 100644
--- a/docs/data-sources/flipgroup_list.md
+++ b/docs/data-sources/flipgroup_list.md
@@ -20,7 +20,7 @@ description: |-
- `account_id` (Number) Account id
- `by_id` (Number) Filter by ID
- `by_ip` (String) Filter by IP-address
-- `client_ids` (List of Number) client_ids
+- `client_ids` (List of String) client_ids
- `conn_id` (Number) Conn id
- `extnet_id` (Number) Filter by ExtNetID
- `name` (String) Filter by Name
diff --git a/docs/data-sources/image_list.md b/docs/data-sources/image_list.md
index 44f1c0e..2ac1219 100644
--- a/docs/data-sources/image_list.md
+++ b/docs/data-sources/image_list.md
@@ -20,6 +20,7 @@ description: |-
- `architecture` (String) Filter by architecture
- `bootable` (Boolean) Find bootable images
- `by_id` (Number) Filter by ID
+- `enabled` (Boolean) find by enabled True or False
- `hot_resize` (Boolean) Find hot resizable images
- `image_size` (Number) Filter by image size
- `name` (String) Filter by name
diff --git a/docs/data-sources/kvmvm.md b/docs/data-sources/kvmvm.md
index 73091af..e5fc4bc 100644
--- a/docs/data-sources/kvmvm.md
+++ b/docs/data-sources/kvmvm.md
@@ -36,6 +36,7 @@ description: |-
- `boot_order` (List of String)
- `bootdisk_size` (Number)
- `cd_image_id` (Number)
+- `chipset` (String)
- `clone_reference` (Number)
- `clones` (List of Number)
- `computeci_id` (Number)
@@ -187,6 +188,7 @@ Read-Only:
- `account_id` (Number)
- `acl` (String)
- `boot_partition` (Number)
+- `bus_number` (Number)
- `created_time` (Number)
- `deleted_time` (Number)
- `description` (String)
@@ -278,6 +280,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -285,8 +288,10 @@ Read-Only:
- `flip_group_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_type` (String)
@@ -298,6 +303,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `interfaces.qos`
diff --git a/docs/data-sources/kvmvm_list.md b/docs/data-sources/kvmvm_list.md
index 7e600dc..e069365 100644
--- a/docs/data-sources/kvmvm_list.md
+++ b/docs/data-sources/kvmvm_list.md
@@ -65,6 +65,7 @@ Read-Only:
- `boot_order` (List of String)
- `bootdisk_size` (Number)
- `cd_image_id` (Number)
+- `chipset` (String)
- `clone_reference` (Number)
- `clones` (List of Number)
- `compute_id` (Number)
@@ -160,6 +161,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `disk_id` (Number)
- `pci_slot` (Number)
@@ -169,6 +171,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -176,8 +179,10 @@ Read-Only:
- `flip_group_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_type` (String)
@@ -189,6 +194,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `items.interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `items.interfaces.qos`
diff --git a/docs/data-sources/kvmvm_list_deleted.md b/docs/data-sources/kvmvm_list_deleted.md
index 3fcfb52..984e139 100644
--- a/docs/data-sources/kvmvm_list_deleted.md
+++ b/docs/data-sources/kvmvm_list_deleted.md
@@ -63,6 +63,7 @@ Read-Only:
- `boot_order` (List of String)
- `bootdisk_size` (Number)
- `cd_image_id` (Number)
+- `chipset` (String)
- `clone_reference` (Number)
- `clones` (List of Number)
- `compute_id` (Number)
@@ -158,6 +159,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `disk_id` (Number)
- `pci_slot` (Number)
@@ -167,6 +169,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -174,8 +177,10 @@ Read-Only:
- `flip_group_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_type` (String)
@@ -187,6 +192,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `items.interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `items.interfaces.qos`
diff --git a/docs/data-sources/resgroup.md b/docs/data-sources/resgroup.md
index 8488a57..8032010 100644
--- a/docs/data-sources/resgroup.md
+++ b/docs/data-sources/resgroup.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/data-sources/rg_usage.md b/docs/data-sources/rg_usage.md
index e67a3f2..70a26b0 100644
--- a/docs/data-sources/rg_usage.md
+++ b/docs/data-sources/rg_usage.md
@@ -21,7 +21,6 @@ description: |-
### Optional
-- `reason` (String)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/data-sources/vins.md b/docs/data-sources/vins.md
index 5191b2c..8007188 100644
--- a/docs/data-sources/vins.md
+++ b/docs/data-sources/vins.md
@@ -147,6 +147,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -154,8 +155,10 @@ Read-Only:
- `flipgroup_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_mask` (Number)
@@ -167,6 +170,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `vnf_dev.interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `vnf_dev.interfaces.qos`
diff --git a/docs/data-sources/vins_list.md b/docs/data-sources/vins_list.md
index 93aee27..08f74b9 100644
--- a/docs/data-sources/vins_list.md
+++ b/docs/data-sources/vins_list.md
@@ -27,6 +27,7 @@ description: |-
- `size` (Number) Page size
- `sort_by` (String) sort by one of supported fields, format +|-(field)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vnf_dev_id` (Number) Filter by VNF Device id
### Read-Only
diff --git a/docs/resources/account.md b/docs/resources/account.md
index 3b6d5b3..8158055 100644
--- a/docs/resources/account.md
+++ b/docs/resources/account.md
@@ -92,10 +92,6 @@ Required:
- `access_type` (String)
- `user_id` (String)
-Optional:
-
-- `recursive_delete` (Boolean)
-
### Nested Schema for `acl`
diff --git a/docs/resources/bservice_group.md b/docs/resources/bservice_group.md
index 3cad961..6add535 100644
--- a/docs/resources/bservice_group.md
+++ b/docs/resources/bservice_group.md
@@ -21,7 +21,7 @@ description: |-
- `compgroup_name` (String) name of the Compute Group to add
- `cpu` (Number) compute CPU number. All computes in the group have the same CPU count
- `disk` (Number) compute boot disk size in GB
-- `driver` (String) compute driver like a KVM_X86, KVM_PPC, etc.
+- `driver` (String) compute driver like a KVM_X86, etc.
- `image_id` (Number) OS image ID to create computes from
- `ram` (Number) compute RAM volume in MB. All computes in the group have the same RAM volume
- `service_id` (Number) ID of the Basic Service to add a group to
diff --git a/docs/resources/cb_account.md b/docs/resources/cb_account.md
index 2e04df9..6ab77d9 100644
--- a/docs/resources/cb_account.md
+++ b/docs/resources/cb_account.md
@@ -95,10 +95,6 @@ Required:
- `access_type` (String)
- `user_id` (String)
-Optional:
-
-- `recursive_delete` (Boolean)
-
### Nested Schema for `acl`
diff --git a/docs/resources/cb_cdrom_image.md b/docs/resources/cb_cdrom_image.md
index 4d4fcb2..10f2ba0 100644
--- a/docs/resources/cb_cdrom_image.md
+++ b/docs/resources/cb_cdrom_image.md
@@ -17,7 +17,6 @@ description: |-
### Required
-- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
- `gid` (Number) grid (platform) ID where this template should be create in
- `name` (String) Name of the rescue disk
- `url` (String) URL where to download ISO from
@@ -25,14 +24,14 @@ description: |-
### Optional
- `account_id` (Number) AccountId to make the image exclusive
-- `architecture` (String) binary architecture of this image, one of X86_64 of PPC64_LE
+- `architecture` (String) binary architecture of this image, one of X86_64
- `bootable` (Boolean) Does this image boot OS
- `computeci_id` (Number)
+- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
- `enabled` (Boolean)
- `enabled_stacks` (List of Number)
- `hot_resize` (Boolean) Does this machine supports hot resize
- `password_dl` (String) password for upload binary media
-- `permanently` (Boolean) Whether to completely delete the image
- `pool_name` (String) pool for image create
- `sep_id` (Number) storage endpoint provider ID
- `shared_with` (List of Number)
diff --git a/docs/resources/cb_disk.md b/docs/resources/cb_disk.md
index 73232e3..6f1d480 100644
--- a/docs/resources/cb_disk.md
+++ b/docs/resources/cb_disk.md
@@ -32,7 +32,6 @@ description: |-
- `node_ids` (Set of Number)
- `permanently` (Boolean) whether to completely delete the disk, works only with non attached disks
- `pool` (String)
-- `reason` (String) reason for an action
- `restore` (Boolean) restore deleting disk
- `sep_id` (Number)
- `shareable` (Boolean)
diff --git a/docs/resources/cb_disk_replication.md b/docs/resources/cb_disk_replication.md
deleted file mode 100644
index 90a2332..0000000
--- a/docs/resources/cb_disk_replication.md
+++ /dev/null
@@ -1,148 +0,0 @@
----
-# generated by https://github.com/hashicorp/terraform-plugin-docs
-page_title: "decort_cb_disk_replication Resource - terraform-provider-decort"
-subcategory: ""
-description: |-
-
----
-
-# decort_cb_disk_replication (Resource)
-
-
-
-
-
-
-## Schema
-
-### Required
-
-- `disk_id` (Number) Id of primary disk
-- `disk_name` (String) Name of disk replica
-- `pool_name` (String) Pool for disk location
-- `sep_id` (Number) Storage endpoint provider ID to create disk replica
-
-### Optional
-
-- `detach` (Boolean) Detach disk from machine first
-- `pause` (Boolean) Resume replication
-- `permanently` (Boolean) Delete disk permanently
-- `reason` (String) Reason for disk deletion
-- `reverse` (Boolean) Reverse replication
-- `start` (Boolean) Start/Stop replication
-- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
-
-### Read-Only
-
-- `account_id` (Number)
-- `account_name` (String)
-- `acl` (String)
-- `boot_partition` (Number)
-- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
-- `created_time` (Number)
-- `deleted_time` (Number)
-- `desc` (String)
-- `destruction_time` (Number)
-- `devicename` (String)
-- `disk_path` (String)
-- `gid` (Number)
-- `guid` (Number)
-- `id` (String) The ID of this resource.
-- `image_id` (Number)
-- `images` (List of Number)
-- `iotune` (List of Object) (see [below for nested schema](#nestedatt--iotune))
-- `iqn` (String)
-- `login` (String)
-- `milestones` (Number)
-- `order` (Number)
-- `params` (String)
-- `parent_id` (Number)
-- `passwd` (String)
-- `pci_slot` (Number)
-- `present_to` (List of Number)
-- `purge_attempts` (Number)
-- `purge_time` (Number)
-- `reality_device_number` (Number)
-- `reference_id` (String)
-- `replica_disk_id` (Number) Id of replica disk
-- `replication` (List of Object) Replication status (see [below for nested schema](#nestedatt--replication))
-- `res_id` (String)
-- `res_name` (String)
-- `role` (String)
-- `sep_type` (String)
-- `shareable` (Boolean)
-- `size_max` (Number)
-- `size_used` (Number)
-- `snapshots` (List of Object) (see [below for nested schema](#nestedatt--snapshots))
-- `status` (String)
-- `status_replication` (String) Status of replication
-- `tech_status` (String)
-- `type` (String)
-- `vmid` (Number)
-
-
-### Nested Schema for `timeouts`
-
-Optional:
-
-- `create` (String)
-- `default` (String)
-- `delete` (String)
-- `read` (String)
-- `update` (String)
-
-
-
-### Nested Schema for `computes`
-
-Read-Only:
-
-- `compute_id` (String)
-- `compute_name` (String)
-
-
-
-### Nested Schema for `iotune`
-
-Read-Only:
-
-- `read_bytes_sec` (Number)
-- `read_bytes_sec_max` (Number)
-- `read_iops_sec` (Number)
-- `read_iops_sec_max` (Number)
-- `size_iops_sec` (Number)
-- `total_bytes_sec` (Number)
-- `total_bytes_sec_max` (Number)
-- `total_iops_sec` (Number)
-- `total_iops_sec_max` (Number)
-- `write_bytes_sec` (Number)
-- `write_bytes_sec_max` (Number)
-- `write_iops_sec` (Number)
-- `write_iops_sec_max` (Number)
-
-
-
-### Nested Schema for `replication`
-
-Read-Only:
-
-- `disk_id` (Number)
-- `pool_id` (String)
-- `role` (String)
-- `self_volume_id` (String)
-- `storage_id` (String)
-- `volume_id` (String)
-
-
-
-### Nested Schema for `snapshots`
-
-Read-Only:
-
-- `guid` (String)
-- `label` (String)
-- `reference_id` (String)
-- `res_id` (String)
-- `snap_set_guid` (String)
-- `snap_set_time` (Number)
-- `timestamp` (Number)
diff --git a/docs/resources/cb_dpdknet.md b/docs/resources/cb_dpdknet.md
new file mode 100644
index 0000000..f3d84c0
--- /dev/null
+++ b/docs/resources/cb_dpdknet.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_dpdknet Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_dpdknet (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `gid` (Number) ID of the grid (platform)
+- `name` (String) Name of network
+- `ovs_bridge` (String) OVS bridge in which interfaces for computers created
+- `vlan_id` (Number) vlan ID
+
+### Optional
+
+- `account_access` (List of Number) List of accounts with access
+- `desc` (String) Description of DPDK network
+- `enabled` (Boolean) Enabled or disabled DPDK network
+- `rg_access` (List of Number) List of resource groups with access
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `compute_ids` (List of Number) Compute IDs which uses this DPDK network
+- `created_time` (Number) Created time
+- `dpdk_id` (Number) The unique ID of the subscriber-owner of the DPDK network
+- `guid` (Number) DPDK network ID on the storage side
+- `id` (String) The ID of this resource.
+- `status` (String) DPDK network status
+- `updated_time` (Number) Updated time
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_image.md b/docs/resources/cb_image.md
index c5829b6..ccc06ad 100644
--- a/docs/resources/cb_image.md
+++ b/docs/resources/cb_image.md
@@ -26,7 +26,7 @@ description: |-
- `account_id` (Number) AccountId to make the image exclusive
- `accounts` (List of Number)
-- `architecture` (String) binary architecture of this image, one of X86_64 of PPC64_LE
+- `architecture` (String) binary architecture of this image, one of X86_64
- `bootable` (Boolean) Does this image boot OS
- `computeci_id` (Number)
- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
@@ -37,9 +37,7 @@ description: |-
- `network_interface_naming` (String) select a network interface naming pattern for your Linux machine. eth - onboard, ens - pci slot naming
- `password` (String) Optional password for the image
- `password_dl` (String) password for upload binary media
-- `permanently` (Boolean) Whether to completely delete the image
- `pool_name` (String) pool for image create
-- `reason` (String)
- `sep_id` (Number) storage endpoint provider ID
- `shared_with` (List of Number)
- `sync_mode` (Boolean) Create image from a media identified by URL (in synchronous mode)
diff --git a/docs/resources/cb_image_from_blank_compute.md b/docs/resources/cb_image_from_blank_compute.md
index a91a79f..42b4628 100644
--- a/docs/resources/cb_image_from_blank_compute.md
+++ b/docs/resources/cb_image_from_blank_compute.md
@@ -34,9 +34,7 @@ description: |-
- `hot_resize` (Boolean) Does this machine supports hot resize
- `network_interface_naming` (String) select a network interface naming pattern for your Linux machine. eth - onboard, ens - pci slot naming
- `password` (String) Optional password for the image
-- `permanently` (Boolean) whether to completely delete the image
- `pool_name` (String) pool for image create
-- `reason` (String)
- `sep_id` (Number) storage endpoint provider ID
- `shared_with` (List of Number)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
diff --git a/docs/resources/cb_image_from_platform_disk.md b/docs/resources/cb_image_from_platform_disk.md
index e70ee6f..bd6ac0f 100644
--- a/docs/resources/cb_image_from_platform_disk.md
+++ b/docs/resources/cb_image_from_platform_disk.md
@@ -20,6 +20,7 @@ description: |-
- `architecture` (String) Image type linux, windows or other
- `boot_type` (String) Boot type of image BIOS or UEFI
- `disk_id` (Number) Disk Id
+- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
- `image_type` (String) Image type linux, windows or other
- `name` (String) Name of the rescue disk
@@ -30,15 +31,12 @@ description: |-
- `async_mode` (Boolean) create an image in async/sync mode
- `bootable` (Boolean) Does this image boot OS
- `computeci_id` (Number)
-- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
- `enabled` (Boolean)
- `enabled_stacks` (List of Number)
- `hot_resize` (Boolean) Does this machine supports hot resize
- `network_interface_naming` (String) select a network interface naming pattern for your Linux machine. eth - onboard, ens - pci slot naming
- `password` (String) Optional password for the image
-- `permanently` (Boolean) whether to completely delete the image
- `pool_name` (String) pool for image create
-- `reason` (String)
- `sep_id` (Number) storage endpoint provider ID
- `shared_with` (List of Number)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
diff --git a/docs/resources/cb_k8s_cp.md b/docs/resources/cb_k8s_cp.md
index 674f5e5..c4664d9 100644
--- a/docs/resources/cb_k8s_cp.md
+++ b/docs/resources/cb_k8s_cp.md
@@ -25,6 +25,7 @@ description: |-
### Optional
- `additional_sans` (List of String) Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names
+- `chipset` (String) Type of the emulated system.
- `cluster_config` (String) is used to define global settings and configurations for the entire cluster. It includes parameters such as cluster name, DNS settings, authentication methods, and other cluster-wide configurations. insert a valid JSON string with all levels of nesting.
- `cpu` (Number) Node CPU count.
- `desc` (String) Text description of this instance.
diff --git a/docs/resources/cb_k8s_wg.md b/docs/resources/cb_k8s_wg.md
index 8ebe078..ebde964 100644
--- a/docs/resources/cb_k8s_wg.md
+++ b/docs/resources/cb_k8s_wg.md
@@ -23,6 +23,7 @@ description: |-
### Optional
- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system.
- `cloud_init` (String)
- `cpu` (Number) Worker node CPU count.
- `disk` (Number) Worker node boot disk size. If unspecified or 0, size is defined by OS image size.
diff --git a/docs/resources/cb_kvmvm.md b/docs/resources/cb_kvmvm.md
index 0dbfdb3..977ce5a 100644
--- a/docs/resources/cb_kvmvm.md
+++ b/docs/resources/cb_kvmvm.md
@@ -32,6 +32,7 @@ description: |-
- `auto_start` (Boolean) Flag for redeploy compute
- `boot_disk_size` (Number) This compute instance boot disk size in GB. Make sure it is large enough to accomodate selected OS image.
- `cd` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--cd))
+- `chipset` (String) Type of the emulated system.
- `cloud_init` (String) Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.
- `cpu_pin` (Boolean) Run VM on dedicated CPUs. To use this feature, the system must be pre-configured by allocating CPUs on the physical node.
- `custom_fields` (String)
@@ -49,6 +50,7 @@ description: |-
- `image_id` (Number) ID of the OS image to base this compute instance on.
- `ipa_type` (String) compute purpose
- `is` (String) system name
+- `libvirt_settings` (Block Set) Configure libvirt virtio interface parameters. You can only delete values locally. Data on the platform cannot be deleted. (see [below for nested schema](#nestedblock--libvirt_settings))
- `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)
@@ -57,7 +59,6 @@ description: |-
- `pin_to_stack` (Boolean)
- `pool` (String) Pool to use if sepId is set, can be also empty if needed to be chosen by system.
- `port_forwarding` (Block Set) (see [below for nested schema](#nestedblock--port_forwarding))
-- `reason` (String) reason for action
- `reset` (Boolean)
- `restore` (Boolean)
- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
@@ -87,6 +88,7 @@ description: |-
- `computeci_id` (Number)
- `created_by` (String)
- `created_time` (Number)
+- `delete_async_mode` (Boolean) async mode
- `deleted_by` (String)
- `deleted_time` (Number)
- `devices` (String)
@@ -164,10 +166,6 @@ Required:
- `cdrom_id` (Number)
-Optional:
-
-- `reason` (String) reason for action
-
### Nested Schema for `disks`
@@ -185,7 +183,6 @@ Optional:
- `node_ids` (Set of Number)
- `permanently` (Boolean) Disk deletion status
- `pool` (String) Pool name; by default will be chosen automatically
-- `reason` (String) reason for action
- `sep_id` (Number) Storage endpoint provider ID; by default the same with boot disk
Read-Only:
@@ -196,6 +193,23 @@ Read-Only:
- `size_used` (Number)
+
+### Nested Schema for `libvirt_settings`
+
+Required:
+
+- `mac` (String)
+
+Optional:
+
+- `event_idx` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `network`
@@ -226,7 +240,6 @@ Optional:
- `local_port` (Number)
- `public_port_end` (Number)
-- `reason` (String) reason for action
Read-Only:
@@ -297,6 +310,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -304,8 +318,10 @@ Read-Only:
- `flip_group_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_type` (String)
@@ -317,6 +333,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `interfaces.qos`
diff --git a/docs/resources/cb_rg.md b/docs/resources/cb_rg.md
index 08e8004..0c99ebd 100644
--- a/docs/resources/cb_rg.md
+++ b/docs/resources/cb_rg.md
@@ -37,7 +37,6 @@ description: |-
- `ipcidr` (String) Address of the netowrk inside the private network segment (aka ViNS) if def_net_type=PRIVATE
- `owner` (String) username - owner of this RG. Leave blank to set current user as owner
- `permanently` (Boolean) flag to permanently delete resource group
-- `reason` (String)
- `register_computes` (Boolean) Register computes in registration system
- `resource_limits` (Block List, Max: 1) (see [below for nested schema](#nestedblock--resource_limits))
- `restore` (Boolean) restore deleted rg
@@ -74,10 +73,6 @@ Required:
- `right` (String) Access rights to set, one of 'R', 'RCX' or 'ARCXDU'
- `user` (String) User or group name to grant access
-Optional:
-
-- `reason` (String) Reason for action
-
### Nested Schema for `def_net`
@@ -89,7 +84,6 @@ Required:
Optional:
- `net_id` (Number) Network segment ID. If netType is PUBLIC and netId is 0 then default external network segment will be selected. If netType is PRIVATE and netId=0, the first ViNS defined for this RG will be selected. Otherwise, netId identifies either existing external network segment or ViNS.
-- `reason` (String) Reason for action
diff --git a/docs/resources/cb_vins.md b/docs/resources/cb_vins.md
index c3edd95..de64db8 100644
--- a/docs/resources/cb_vins.md
+++ b/docs/resources/cb_vins.md
@@ -35,7 +35,6 @@ description: |-
- `nat_rule` (Block List) (see [below for nested schema](#nestedblock--nat_rule))
- `permanently` (Boolean) permanently for delete request
- `pre_reservations_num` (Number)
-- `reason` (String)
- `rg_id` (Number)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
- `vins_id` (Number) vins id
@@ -98,7 +97,6 @@ Optional:
- `compute_id` (Number)
- `ip_addr` (String)
- `mac` (String)
-- `reason` (String)
@@ -206,6 +204,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -213,8 +212,10 @@ Read-Only:
- `flipgroup_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_mask` (Number)
@@ -226,6 +227,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `vnf_dev.interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `vnf_dev.interfaces.qos`
diff --git a/docs/resources/cb_virtual_image.md b/docs/resources/cb_virtual_image.md
index effce4f..a111057 100644
--- a/docs/resources/cb_virtual_image.md
+++ b/docs/resources/cb_virtual_image.md
@@ -29,8 +29,6 @@ description: |-
- `enabled_stacks` (List of Number)
- `hot_resize` (Boolean) Does this machine supports hot resize
- `password` (String) Optional password for the image
-- `permanently` (Boolean) Whether to completely delete the image
-- `reason` (String)
- `shared_with` (List of Number)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
- `username` (String) Optional username for the image
@@ -38,7 +36,7 @@ description: |-
### Read-Only
- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
-- `architecture` (String) binary architecture of this image, one of X86_64 of PPC64_LE
+- `architecture` (String) binary architecture of this image, one of X86_64
- `boot_type` (String) Boot type of image bios or uefi
- `ckey` (String)
- `deleted_time` (Number)
diff --git a/docs/resources/disk.md b/docs/resources/disk.md
index 976fc55..ea55a47 100644
--- a/docs/resources/disk.md
+++ b/docs/resources/disk.md
@@ -29,7 +29,6 @@ description: |-
- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--iotune))
- `permanently` (Boolean) Whether to completely delete the disk, works only with non attached disks
- `pool` (String) Pool for disk location
-- `reason` (String) Reason for deletion
- `sep_id` (Number) Storage endpoint provider ID to create disk
- `shareable` (Boolean)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
diff --git a/docs/resources/disk_replication.md b/docs/resources/disk_replication.md
deleted file mode 100644
index 502646b..0000000
--- a/docs/resources/disk_replication.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-# generated by https://github.com/hashicorp/terraform-plugin-docs
-page_title: "decort_disk_replication Resource - terraform-provider-decort"
-subcategory: ""
-description: |-
-
----
-
-# decort_disk_replication (Resource)
-
-
-
-
-
-
-## Schema
-
-### Required
-
-- `disk_id` (Number) Id of primary disk
-- `disk_name` (String) Name of disk replica
-- `pool_name` (String) Pool for disk location
-- `sep_id` (Number) Storage endpoint provider ID to create disk replica
-
-### Optional
-
-- `detach` (Boolean) Detach disk from machine first
-- `pause` (Boolean) Resume replication
-- `permanently` (Boolean) Delete disk permanently
-- `reason` (String) Reason for disk deletion
-- `reverse` (Boolean) Reverse replication
-- `start` (Boolean) Start/Stop replication
-- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
-
-### Read-Only
-
-- `account_id` (Number) The unique ID of the subscriber-owner of the disk
-- `account_name` (String) The name of the subscriber '(account') to whom this disk belongs
-- `acl` (String)
-- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
-- `created_time` (Number) Created time
-- `deleted_time` (Number) Deleted time
-- `desc` (String) Description of disk
-- `destruction_time` (Number) Time of final deletion
-- `devicename` (String) Name of the device
-- `gid` (Number) ID of the grid (platform)
-- `id` (String) The ID of this resource.
-- `image_id` (Number) Image ID
-- `images` (List of String) IDs of images using the disk
-- `iotune` (List of Object) (see [below for nested schema](#nestedatt--iotune))
-- `order` (Number) Disk order
-- `params` (String) Disk params
-- `parent_id` (Number) ID of the parent disk
-- `pci_slot` (Number) ID of the pci slot to which the disk is connected
-- `present_to` (List of Number)
-- `purge_time` (Number) Time of the last deletion attempt
-- `replica_disk_id` (Number) Id of replica disk
-- `replication` (List of Object) Replication status (see [below for nested schema](#nestedatt--replication))
-- `res_id` (String) Resource ID
-- `res_name` (String) Name of the resource
-- `role` (String) Disk role
-- `sep_type` (String) Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform
-- `shareable` (Boolean)
-- `size_max` (Number) Size in GB
-- `size_used` (Number) Number of used space, in GB
-- `snapshots` (List of Object) (see [below for nested schema](#nestedatt--snapshots))
-- `status` (String) Disk status
-- `status_replication` (String) Status of replication
-- `tech_status` (String) Technical status of the disk
-- `type` (String) The type of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'
-- `vmid` (Number) Virtual Machine ID (Deprecated)
-
-
-### Nested Schema for `timeouts`
-
-Optional:
-
-- `create` (String)
-- `default` (String)
-- `delete` (String)
-- `read` (String)
-- `update` (String)
-
-
-
-### Nested Schema for `computes`
-
-Read-Only:
-
-- `compute_id` (String)
-- `compute_name` (String)
-
-
-
-### Nested Schema for `iotune`
-
-Read-Only:
-
-- `read_bytes_sec` (Number)
-- `read_bytes_sec_max` (Number)
-- `read_iops_sec` (Number)
-- `read_iops_sec_max` (Number)
-- `size_iops_sec` (Number)
-- `total_bytes_sec` (Number)
-- `total_bytes_sec_max` (Number)
-- `total_iops_sec` (Number)
-- `total_iops_sec_max` (Number)
-- `write_bytes_sec` (Number)
-- `write_bytes_sec_max` (Number)
-- `write_iops_sec` (Number)
-- `write_iops_sec_max` (Number)
-
-
-
-### Nested Schema for `replication`
-
-Read-Only:
-
-- `disk_id` (Number)
-- `pool_id` (String)
-- `role` (String)
-- `self_volume_id` (String)
-- `storage_id` (String)
-- `volume_id` (String)
-
-
-
-### Nested Schema for `snapshots`
-
-Read-Only:
-
-- `guid` (String)
-- `label` (String)
-- `res_id` (String)
-- `snap_set_guid` (String)
-- `snap_set_time` (Number)
-- `timestamp` (Number)
diff --git a/docs/resources/image.md b/docs/resources/image.md
index 46ace49..0c9a596 100644
--- a/docs/resources/image.md
+++ b/docs/resources/image.md
@@ -26,13 +26,12 @@ description: |-
### Optional
-- `architecture` (String) binary architecture of this image, one of X86_64 of PPC64_LE
+- `architecture` (String) binary architecture of this image, one of X86_64
- `hot_resize` (Boolean) Does this machine supports hot resize
- `image_id` (Number) image id
- `network_interface_naming` (String) select a network interface naming pattern for your Linux machine. eth - onboard, ens - pci slot naming
- `password` (String) Optional password for the image
- `password_dl` (String) password for upload binary media
-- `permanently` (Boolean) whether to completely delete the image
- `pool_name` (String) pool for image create
- `sep_id` (Number) storage endpoint provider ID
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
diff --git a/docs/resources/image_from_blank_compute.md b/docs/resources/image_from_blank_compute.md
index 4c17897..4f01965 100644
--- a/docs/resources/image_from_blank_compute.md
+++ b/docs/resources/image_from_blank_compute.md
@@ -28,7 +28,6 @@ description: |-
- `async_mode` (Boolean) create an image in async/sync mode
- `hot_resize` (Boolean) Does this machine supports hot resize
- `password` (String) Optional password for the image
-- `permanently` (Boolean) whether to completely delete the image
- `pool_name` (String) pool for image create
- `sep_id` (Number) storage endpoint provider ID
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
diff --git a/docs/resources/image_from_platform_disk.md b/docs/resources/image_from_platform_disk.md
index 8111cce..c6c63fa 100644
--- a/docs/resources/image_from_platform_disk.md
+++ b/docs/resources/image_from_platform_disk.md
@@ -17,9 +17,10 @@ description: |-
### Required
-- `architecture` (String) binary architecture of this image, one of X86_64 of PPC64_LE
+- `architecture` (String) binary architecture of this image, one of X86_64
- `boot_type` (String) Boot type of image BIOS or UEFI
- `disk_id` (Number) Disk Id
+- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
- `name` (String) Name of the rescue disk
- `type` (String) Image type linux, windows or other
@@ -28,10 +29,8 @@ description: |-
- `account_id` (Number) AccountId to make the image exclusive
- `async_mode` (Boolean) create an image in async/sync mode
- `bootable` (Boolean) bootable image
-- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
- `hot_resize` (Boolean) Does this machine supports hot resize
- `password` (String) Optional password for the image
-- `permanently` (Boolean) whether to completely delete the image
- `pool_name` (String) pool for image create
- `sep_id` (Number) storage endpoint provider ID
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
diff --git a/docs/resources/image_virtual.md b/docs/resources/image_virtual.md
index 5867461..6aff231 100644
--- a/docs/resources/image_virtual.md
+++ b/docs/resources/image_virtual.md
@@ -22,7 +22,6 @@ description: |-
### Optional
-- `permanently` (Boolean) whether to completely delete the image
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
### Read-Only
diff --git a/docs/resources/k8s.md b/docs/resources/k8s.md
index 7f34bdd..a8f11dd 100644
--- a/docs/resources/k8s.md
+++ b/docs/resources/k8s.md
@@ -27,6 +27,7 @@ description: |-
- `additional_sans` (List of String) Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names
- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system.
- `cloud_init` (String) Meta data for working group computes, format YAML 'user_data': 1111
- `cluster_config` (String) is used to define global settings and configurations for the entire cluster. It includes parameters such as cluster name, DNS settings, authentication methods, and other cluster-wide configurations. insert a valid JSON string with all levels of nesting.
- `desc` (String) Text description of this instance.
@@ -142,6 +143,7 @@ Required:
Optional:
- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system.
- `labels` (List of String)
- `sep_id` (Number)
- `sep_pool` (String)
diff --git a/docs/resources/k8s_cp.md b/docs/resources/k8s_cp.md
index 6584463..9567b4b 100644
--- a/docs/resources/k8s_cp.md
+++ b/docs/resources/k8s_cp.md
@@ -25,6 +25,7 @@ description: |-
### Optional
- `additional_sans` (List of String) Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names
+- `chipset` (String) Type of the emulated system.
- `cluster_config` (String) is used to define global settings and configurations for the entire cluster. It includes parameters such as cluster name, DNS settings, authentication methods, and other cluster-wide configurations. insert a valid JSON string with all levels of nesting.
- `cpu` (Number) Node CPU count.
- `desc` (String) Text description of this instance.
diff --git a/docs/resources/k8s_wg.md b/docs/resources/k8s_wg.md
index 5838eea..0edfc26 100644
--- a/docs/resources/k8s_wg.md
+++ b/docs/resources/k8s_wg.md
@@ -23,6 +23,7 @@ description: |-
### Optional
- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system.
- `cloud_init` (String)
- `cpu` (Number) Worker node CPU count.
- `disk` (Number) Worker node boot disk size. If unspecified or 0, size is defined by OS image size.
diff --git a/docs/resources/kvmvm.md b/docs/resources/kvmvm.md
index 9b2e954..d78ea96 100644
--- a/docs/resources/kvmvm.md
+++ b/docs/resources/kvmvm.md
@@ -31,6 +31,7 @@ description: |-
- `auto_start` (Boolean) Flag for redeploy compute
- `boot_disk_size` (Number) This compute instance boot disk size in GB. Make sure it is large enough to accomodate selected OS image.
- `cd` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--cd))
+- `chipset` (String) Type of the emulated system.
- `cloud_init` (String) Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.
- `cpu_pin` (Boolean) Run VM on dedicated CPUs. To use this feature, the system must be pre-configured by allocating CPUs on the physical node.
- `custom_fields` (String)
@@ -59,6 +60,7 @@ description: |-
- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
- `sep_id` (Number) ID of SEP to create bootDisk on. Uses image's sepId if not set.
- `snapshot` (Block Set) (see [below for nested schema](#nestedblock--snapshot))
+- `snapshot_delete_async` (Boolean)
- `started` (Boolean) Is compute started.
- `stateless` (Boolean) Compute will be stateless (SVA_KVM_X86) if set to True
- `tags` (Block Set) (see [below for nested schema](#nestedblock--tags))
@@ -285,6 +287,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -292,8 +295,10 @@ Read-Only:
- `flip_group_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_type` (String)
@@ -305,6 +310,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `interfaces.qos`
diff --git a/docs/resources/resgroup.md b/docs/resources/resgroup.md
index 1f7ac35..4f9c4d0 100644
--- a/docs/resources/resgroup.md
+++ b/docs/resources/resgroup.md
@@ -35,10 +35,10 @@ description: |-
- `owner` (String)
- `permanently` (Boolean) Set to True if you want force delete non-empty RG
- `quota` (Block List, Max: 1) Quota settings for this resource group. (see [below for nested schema](#nestedblock--quota))
-- `reason` (String) Set to True if you want force delete non-empty RG
- `register_computes` (Boolean) Register computes in registration system
- `restore` (Boolean)
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `uniq_pools` (List of String)
### Read-Only
@@ -59,7 +59,6 @@ description: |-
- `rg_id` (Number)
- `secret` (String)
- `status` (String) Current status of this resource group.
-- `uniq_pools` (List of String)
- `updated_by` (String)
- `updated_time` (Number)
- `vins` (List of Number) List of VINs deployed in this resource group.
@@ -73,10 +72,6 @@ Required:
- `right` (String) Access rights to set, one of 'R', 'RCX' or 'ARCXDU'
- `user` (String) User or group name to grant access
-Optional:
-
-- `reason` (String) Reason for action
-
### Nested Schema for `def_net`
@@ -88,7 +83,6 @@ Required:
Optional:
- `net_id` (Number) Network segment ID. If netType is PUBLIC and netId is 0 then default external network segment will be selected. If netType is PRIVATE and netId=0, the first ViNS defined for this RG will be selected. Otherwise, netId identifies either existing external network segment or ViNS.
-- `reason` (String) Reason for action
diff --git a/docs/resources/snapshot.md b/docs/resources/snapshot.md
index 3e2f701..cb9be59 100644
--- a/docs/resources/snapshot.md
+++ b/docs/resources/snapshot.md
@@ -27,6 +27,7 @@ description: |-
### Read-Only
+- `delete_async_mode` (Boolean) async mode
- `disks` (List of Number)
- `guid` (String) guid of the snapshot
- `id` (String) The ID of this resource.
diff --git a/docs/resources/vins.md b/docs/resources/vins.md
index 262ba1e..fc897ef 100644
--- a/docs/resources/vins.md
+++ b/docs/resources/vins.md
@@ -202,6 +202,7 @@ Read-Only:
Read-Only:
+- `bus_number` (Number)
- `conn_id` (Number)
- `conn_type` (String)
- `def_gw` (String)
@@ -209,8 +210,10 @@ Read-Only:
- `flipgroup_id` (Number)
- `guid` (String)
- `ip_address` (String)
+- `libvirt_settings` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--libvirt_settings))
- `listen_ssh` (Boolean)
- `mac` (String)
+- `mtu` (Number)
- `name` (String)
- `net_id` (Number)
- `net_mask` (Number)
@@ -222,6 +225,20 @@ Read-Only:
- `type` (String)
- `vnfs` (List of Number)
+
+### Nested Schema for `vnf_dev.interfaces.libvirt_settings`
+
+Read-Only:
+
+- `event_idx` (String)
+- `guid` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
### Nested Schema for `vnf_dev.interfaces.qos`
diff --git a/go.mod b/go.mod
index 4934fac..2f6a7c8 100644
--- a/go.mod
+++ b/go.mod
@@ -8,7 +8,7 @@ require (
github.com/hashicorp/terraform-plugin-sdk/v2 v2.33.0
github.com/sirupsen/logrus v1.9.0
golang.org/x/net v0.23.0
- repository.basistech.ru/BASIS/decort-golang-sdk v1.8.3
+ repository.basistech.ru/BASIS/decort-golang-sdk v1.9.0
)
require (
@@ -58,7 +58,6 @@ require (
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
- github.com/mitchellh/cli v1.1.5 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
@@ -66,7 +65,6 @@ require (
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/posener/complete v1.2.3 // indirect
- github.com/russross/blackfriday v1.6.0 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
diff --git a/go.sum b/go.sum
index 365e43f..1142d2e 100644
--- a/go.sum
+++ b/go.sum
@@ -5,15 +5,11 @@ github.com/Kunde21/markdownfmt/v3 v3.1.0 h1:KiZu9LKs+wFFBQKhrZJrFZwtLnCCWJahL+S+
github.com/Kunde21/markdownfmt/v3 v3.1.0/go.mod h1:tPXN1RTyOzJwhfHoon9wUr4HGYmWgVxSQN6VBJDkrVc=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
-github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g=
github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
-github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk=
github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
-github.com/ProtonMail/go-crypto v1.1.0-alpha.0 h1:nHGfwXmFvJrSR9xu8qL7BkO4DqTHXE9N5vPhgY2I+j0=
-github.com/ProtonMail/go-crypto v1.1.0-alpha.0/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
github.com/ProtonMail/go-crypto v1.1.0-alpha.2 h1:bkyFVUP+ROOARdgCiJzNQo2V2kiB97LyUpzH9P6Hrlg=
github.com/ProtonMail/go-crypto v1.1.0-alpha.2/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
@@ -21,7 +17,6 @@ github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY=
github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4=
-github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
@@ -36,7 +31,6 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
-github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
@@ -45,7 +39,6 @@ github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
-github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4=
github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
@@ -69,7 +62,6 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hashicorp/cli v1.1.6 h1:CMOV+/LJfL1tXCOKrgAX0uRKnzjj/mpmqNXloRSy2K8=
@@ -94,28 +86,18 @@ github.com/hashicorp/go-plugin v1.6.0/go.mod h1:lBS5MtSSBZk0SHc66KACcjjlU6WzEVP/
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/hc-install v0.6.3 h1:yE/r1yJvWbtrJ0STwScgEnCanb0U9v7zp0Gbkmcoxqs=
-github.com/hashicorp/hc-install v0.6.3/go.mod h1:KamGdbodYzlufbWh4r9NRo8y6GLHWZP2GBtdnms1Ln0=
github.com/hashicorp/hc-install v0.7.0 h1:Uu9edVqjKQxxuD28mR5TikkKDd/p55S8vzPC1659aBk=
github.com/hashicorp/hc-install v0.7.0/go.mod h1:ELmmzZlGnEcqoUMKUuykHaPCIR1sYLYX+KSggWSKZuA=
github.com/hashicorp/hcl/v2 v2.19.1 h1://i05Jqznmb2EXqa39Nsvyan2o5XyMowW5fnCKW5RPI=
github.com/hashicorp/hcl/v2 v2.19.1/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE=
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
-github.com/hashicorp/terraform-exec v0.20.0 h1:DIZnPsqzPGuUnq6cH8jWcPunBfY+C+M8JyYF3vpnuEo=
-github.com/hashicorp/terraform-exec v0.20.0/go.mod h1:ckKGkJWbsNqFKV1itgMnE0hY9IYf1HoiekpuN0eWoDw=
github.com/hashicorp/terraform-exec v0.21.0 h1:uNkLAe95ey5Uux6KJdua6+cv8asgILFVWkd/RG0D2XQ=
github.com/hashicorp/terraform-exec v0.21.0/go.mod h1:1PPeMYou+KDUSSeRE9szMZ/oHf4fYUmB923Wzbq1ICg=
-github.com/hashicorp/terraform-json v0.21.0 h1:9NQxbLNqPbEMze+S6+YluEdXgJmhQykRyRNd+zTI05U=
-github.com/hashicorp/terraform-json v0.21.0/go.mod h1:qdeBs11ovMzo5puhrRibdD6d2Dq6TyE/28JiU4tIQxk=
github.com/hashicorp/terraform-json v0.22.1 h1:xft84GZR0QzjPVWs4lRUwvTcPnegqlyS7orfb5Ltvec=
github.com/hashicorp/terraform-json v0.22.1/go.mod h1:JbWSQCLFSXFFhg42T7l9iJwdGXBYV8fmmD6o/ML4p3A=
-github.com/hashicorp/terraform-plugin-docs v0.13.0 h1:6e+VIWsVGb6jYJewfzq2ok2smPzZrt1Wlm9koLeKazY=
-github.com/hashicorp/terraform-plugin-docs v0.13.0/go.mod h1:W0oCmHAjIlTHBbvtppWHe8fLfZ2BznQbuv8+UD8OucQ=
github.com/hashicorp/terraform-plugin-docs v0.19.4 h1:G3Bgo7J22OMtegIgn8Cd/CaSeyEljqjH3G39w28JK4c=
github.com/hashicorp/terraform-plugin-docs v0.19.4/go.mod h1:4pLASsatTmRynVzsjEhbXZ6s7xBlUw/2Kt0zfrq8HxA=
github.com/hashicorp/terraform-plugin-go v0.22.0 h1:1OS1Jk5mO0f5hrziWJGXXIxBrMe2j/B8E+DVGw43Xmc=
@@ -130,8 +112,6 @@ github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S
github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc=
github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE=
github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
-github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
-github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU=
github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
@@ -149,12 +129,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
-github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
@@ -162,8 +140,6 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mitchellh/cli v1.1.5 h1:OxRIeJXpAMztws/XHlN2vu6imG5Dpq+j61AzAX5fLng=
-github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4=
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
@@ -181,21 +157,15 @@ github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DV
github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
-github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
-github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
-github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
-github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ=
github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
@@ -206,7 +176,6 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
@@ -226,26 +195,18 @@ github.com/yuin/goldmark v1.7.1 h1:3bajkSilaCbjdKVsKdZjZCLBNPL9pYzrCakKaf4U49U=
github.com/yuin/goldmark v1.7.1/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E=
github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc=
github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0=
-github.com/zclconf/go-cty v1.14.2 h1:kTG7lqmBou0Zkx35r6HJHUQTvaRPr5bIAf3AoHS0izI=
-github.com/zclconf/go-cty v1.14.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8=
github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
go.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ5JnxRw=
go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
-golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
-golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME=
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8=
-golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -253,15 +214,12 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
-golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -275,8 +233,6 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
-golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -288,8 +244,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
-golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -319,5 +273,5 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-repository.basistech.ru/BASIS/decort-golang-sdk v1.8.3 h1:fCwFvZR+HID7ie4Aap7cJd6SbuJ+4gBWysKaMQDCPgc=
-repository.basistech.ru/BASIS/decort-golang-sdk v1.8.3/go.mod h1:OaUynHHuSjWMzpfyoL4au6oLcUogqUkPPBKA15pbHWo=
+repository.basistech.ru/BASIS/decort-golang-sdk v1.9.0 h1:RLOWSc7EJ6O37aPHQI9gkJ2JfuZMzGonF2PKeWN6sXw=
+repository.basistech.ru/BASIS/decort-golang-sdk v1.9.0/go.mod h1:OaUynHHuSjWMzpfyoL4au6oLcUogqUkPPBKA15pbHWo=
diff --git a/internal/provider/data_sources_map.go b/internal/provider/data_sources_map.go
index 353db7d..de5e343 100644
--- a/internal/provider/data_sources_map.go
+++ b/internal/provider/data_sources_map.go
@@ -23,8 +23,10 @@ package provider
import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/audit"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/bservice"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/dpdknet"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/extnet"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/flipgroup"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/image"
@@ -41,6 +43,7 @@ import (
cb_account "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/account"
cb_audit "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/audit"
cb_disks "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/disks"
+ cb_dpdknet "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/dpdknet"
cb_extnet "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/extnet"
cb_flipgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/flipgroup"
cb_grid "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/grid"
@@ -63,6 +66,7 @@ import (
func newDataSourcesMap() map[string]*schema.Resource {
return map[string]*schema.Resource{
"decort_account": account.DataSourceAccount(),
+ "decort_audit": audit.DataSourceAudit(),
"decort_resgroup": rg.DataSourceResgroup(),
"decort_kvmvm": kvmvm.DataSourceCompute(),
"decort_kvmvm_list": kvmvm.DataSourceComputeList(),
@@ -127,6 +131,8 @@ func newDataSourcesMap() map[string]*schema.Resource {
"decort_bservice_snapshot_list": bservice.DataSourceBasicServiceSnapshotList(),
"decort_bservice_group": bservice.DataSourceBasicServiceGroup(),
"decort_bservice_deleted_list": bservice.DataSourceBasicServiceDeletedList(),
+ "decort_dpdknet": dpdknet.DataSourceDPDKNet(),
+ "decort_dpdknet_list": dpdknet.DataSourceDPDKNetList(),
"decort_extnet_list": extnet.DataSourceExtnetList(),
"decort_extnet_computes_list": extnet.DataSourceExtnetComputesList(),
"decort_extnet": extnet.DataSourceExtnet(),
@@ -168,6 +174,9 @@ func newDataSourcesMap() map[string]*schema.Resource {
"decort_cb_audit": cb_audit.DataSourceAudit(),
"decort_cb_audit_list": cb_audit.DataSourceAuditList(),
"decort_cb_audit_linked_jobs": cb_audit.DataSourceAuditLinkedJobs(),
+ "decort_cb_audits_export_to_file": cb_audit.DataSourceAuditsToFile(),
+ "decort_cb_dpdknet": cb_dpdknet.DataSourceDPDKNet(),
+ "decort_cb_dpdknet_list": cb_dpdknet.DataSourceDPDKNetList(),
"decort_cb_extnet": cb_extnet.DataSourceExtnetCB(),
"decort_cb_extnet_list": cb_extnet.DataSourceExtnetListCB(),
"decort_cb_extnet_default": cb_extnet.DataSourceExtnetDefaultCB(),
@@ -179,6 +188,7 @@ func newDataSourcesMap() map[string]*schema.Resource {
"decort_cb_grid_post_status": cb_grid.DataSourceGridPostStatus(),
"decort_cb_grid_get_diagnosis": cb_grid.DataSourceGridGetDiagnosis(),
"decort_cb_grid_post_diagnosis": cb_grid.DataSourceGridPostDiagnosis(),
+ "decort_cb_grid_get_settings": cb_grid.DataSourceGridGetSettings(),
"decort_cb_grid_list": cb_grid.DataSourceGridList(),
"decort_cb_grid_list_emails": cb_grid.DataSourceGridListEmails(),
"decort_cb_grid_list_consumption": cb_grid.DataSourceGridListConsumption(),
diff --git a/internal/provider/resource_map.go b/internal/provider/resource_map.go
index 0858cb3..efb1113 100644
--- a/internal/provider/resource_map.go
+++ b/internal/provider/resource_map.go
@@ -37,6 +37,7 @@ import (
cb_account "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/account"
cb_disks "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/disks"
+ cb_dpdknet "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/dpdknet"
cb_extnet "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/extnet"
cb_flipgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/flipgroup"
cb_image "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/image"
@@ -54,11 +55,11 @@ import (
func newResourcesMap() map[string]*schema.Resource {
return map[string]*schema.Resource{
- "decort_resgroup": rg.ResourceResgroup(),
- "decort_kvmvm": kvmvm.ResourceCompute(),
- "decort_disk": disks.ResourceDisk(),
- "decort_disk_snapshot": disks.ResourceDiskSnapshot(),
- "decort_disk_replication": disks.ResourceDiskReplication(),
+ "decort_resgroup": rg.ResourceResgroup(),
+ "decort_kvmvm": kvmvm.ResourceCompute(),
+ "decort_disk": disks.ResourceDisk(),
+ "decort_disk_snapshot": disks.ResourceDiskSnapshot(),
+ //"decort_disk_replication": disks.ResourceDiskReplication(),
"decort_vins": vins.ResourceVins(),
"decort_pfw": pfw.ResourcePfw(),
"decort_k8s": k8s.ResourceK8s(),
@@ -80,12 +81,13 @@ func newResourcesMap() map[string]*schema.Resource {
"decort_flipgroup": flipgroup.ResourceFlipgroup(),
"decort_vins_static_route": vins.ResourceStaticRoute(),
- "decort_cb_account": cb_account.ResourceAccount(),
- "decort_cb_extnet": cb_extnet.ResourceExtnetCB(),
- "decort_cb_extnet_static_route": cb_extnet.ResourceStaticRoute(),
- "decort_cb_disk": cb_disks.ResourceDisk(),
- "decort_cb_disk_snapshot": cb_disks.ResourceDiskSnapshot(),
- "decort_cb_disk_replication": cb_disks.ResourceDiskReplication(),
+ "decort_cb_account": cb_account.ResourceAccount(),
+ "decort_cb_dpdknet": cb_dpdknet.ResourceDPDKNet(),
+ "decort_cb_extnet": cb_extnet.ResourceExtnetCB(),
+ "decort_cb_extnet_static_route": cb_extnet.ResourceStaticRoute(),
+ "decort_cb_disk": cb_disks.ResourceDisk(),
+ "decort_cb_disk_snapshot": cb_disks.ResourceDiskSnapshot(),
+ //"decort_cb_disk_replication": cb_disks.ResourceDiskReplication(),
"decort_cb_image": cb_image.ResourceImage(),
"decort_cb_image_from_blank_compute": cb_image.ResourceImageFromBlankCompute(),
"decort_cb_image_from_platform_disk": cb_image.ResourceImageFromPlatformDisk(),
diff --git a/internal/service/cloudapi/account/data_source_account_flipgroups_list.go b/internal/service/cloudapi/account/data_source_account_flipgroups_list.go
index 282ae4c..5fdc224 100644
--- a/internal/service/cloudapi/account/data_source_account_flipgroups_list.go
+++ b/internal/service/cloudapi/account/data_source_account_flipgroups_list.go
@@ -126,6 +126,11 @@ func dataSourceAccountFlipGroupsListSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "Filter by flipgroup ID",
},
+ "sort_by": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "sort by one of supported fields, format +|-(field)",
+ },
"page": {
Type: schema.TypeInt,
Optional: true,
diff --git a/internal/service/cloudapi/account/resource_account.go b/internal/service/cloudapi/account/resource_account.go
index c867f9f..5a4fa07 100644
--- a/internal/service/cloudapi/account/resource_account.go
+++ b/internal/service/cloudapi/account/resource_account.go
@@ -315,9 +315,8 @@ func resourceAccountUpdate(ctx context.Context, d *schema.ResourceData, m interf
userConv := user.(map[string]interface{})
req := account.DeleteUserRequest{
- AccountID: accountId,
- UserID: userConv["user_id"].(string),
- RecursiveDelete: userConv["recursive_delete"].(bool),
+ AccountID: accountId,
+ UserID: userConv["user_id"].(string),
}
_, err := c.CloudAPI().Account().DeleteUser(ctx, req)
if err != nil {
@@ -381,8 +380,7 @@ func isChangedUser(els []interface{}, el interface{}) bool {
elOldConv := elOld.(map[string]interface{})
elConv := el.(map[string]interface{})
if elOldConv["user_id"].(string) == elConv["user_id"].(string) &&
- (!strings.EqualFold(elOldConv["access_type"].(string), elConv["access_type"].(string)) ||
- elOldConv["recursive_delete"].(bool) != elConv["recursive_delete"].(bool)) {
+ (!strings.EqualFold(elOldConv["access_type"].(string), elConv["access_type"].(string))) {
return true
}
}
@@ -424,11 +422,6 @@ func resourceAccountSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Required: true,
},
- "recursive_delete": {
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- },
},
},
},
diff --git a/internal/service/cloudapi/account/utility_account_flip_groups.go b/internal/service/cloudapi/account/utility_account_flip_groups.go
index aa30fdc..ea30177 100644
--- a/internal/service/cloudapi/account/utility_account_flip_groups.go
+++ b/internal/service/cloudapi/account/utility_account_flip_groups.go
@@ -72,6 +72,10 @@ func utilityAccountFlipGroupsListCheckPresence(ctx context.Context, d *schema.Re
req.ByIP = by_ip.(string)
}
+ if sortBy, ok := d.GetOk("sort_by"); ok {
+ req.SortBy = sortBy.(string)
+ }
+
if flipgroup_id, ok := d.GetOk("flipgroup_id"); ok {
req.FLIPGroupID = uint64(flipgroup_id.(int))
}
diff --git a/internal/service/cloudapi/audit/data_source_audit.go b/internal/service/cloudapi/audit/data_source_audit.go
new file mode 100644
index 0000000..bc31a4d
--- /dev/null
+++ b/internal/service/cloudapi/audit/data_source_audit.go
@@ -0,0 +1,128 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Sergey Kisil,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package audit
+
+import (
+ "context"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceAuditRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ auditRec, err := utilityAuditCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("") // ensure ID is empty in this case
+ return diag.FromErr(err)
+ }
+
+ flattenAudit(d, auditRec)
+ d.SetId(d.Get("audit_guid").(string))
+
+ return nil
+}
+
+func DataSourceAudit() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAuditRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAuditSchemaMake(),
+ }
+}
+
+func dataSourceAuditSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "audit_guid": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "audit guid",
+ },
+
+ "args": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "call": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "kwargs": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "remote_addr": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "responsetime": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "result": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status_code": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tags": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "timestamp": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "timestamp_end": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "user": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ }
+}
diff --git a/internal/service/cloudapi/audit/flattens.go b/internal/service/cloudapi/audit/flattens.go
new file mode 100644
index 0000000..fd2117c
--- /dev/null
+++ b/internal/service/cloudapi/audit/flattens.go
@@ -0,0 +1,56 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Sergey Kisil,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package audit
+
+import (
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/audit"
+)
+
+func flattenAudit(d *schema.ResourceData, au *audit.RecordAudit) {
+ log.Debugf("flattenAudit: decoded audit guid %s", d.Get("audit_guid").(string))
+
+ d.Set("args", au.Arguments)
+ d.Set("call", au.Call)
+ d.Set("guid", au.GUID)
+ d.Set("kwargs", au.Kwargs)
+ d.Set("remote_addr", au.RemoteAddr)
+ d.Set("responsetime", au.ResponseTime)
+ d.Set("result", au.Result)
+ d.Set("status_code", au.StatusCode)
+ d.Set("tags", au.Tags)
+ d.Set("timestamp", au.Timestamp)
+ d.Set("timestamp_end", au.TimestampEnd)
+ d.Set("user", au.User)
+}
diff --git a/internal/service/cloudapi/audit/utility_audit.go b/internal/service/cloudapi/audit/utility_audit.go
new file mode 100644
index 0000000..b0d3931
--- /dev/null
+++ b/internal/service/cloudapi/audit/utility_audit.go
@@ -0,0 +1,62 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Sergey Kisil,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package audit
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/audit"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAuditCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*audit.RecordAudit, error) {
+ c := m.(*controller.ControllerCfg)
+ req := audit.GetRequest{}
+
+ if d.Id() != "" {
+ req.AuditGuid = d.Id()
+ } else {
+ req.AuditGuid = d.Get("audit_guid").(string)
+ }
+
+ log.Debugf("utilityStackCheckPresence: load audit")
+ auditInfo, err := c.CloudAPI().Audit().Get(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return auditInfo, nil
+}
diff --git a/internal/service/cloudapi/bservice/resource_bservice_group.go b/internal/service/cloudapi/bservice/resource_bservice_group.go
index 27b73e5..280a8d5 100644
--- a/internal/service/cloudapi/bservice/resource_bservice_group.go
+++ b/internal/service/cloudapi/bservice/resource_bservice_group.go
@@ -394,7 +394,7 @@ func resourceBasicServiceGroupSchemaMake() map[string]*schema.Schema {
"driver": {
Type: schema.TypeString,
Required: true,
- Description: "compute driver like a KVM_X86, KVM_PPC, etc.",
+ Description: "compute driver like a KVM_X86, etc.",
},
///4.4.0
"sep_id": {
diff --git a/internal/service/cloudapi/disks/resource_disk.go b/internal/service/cloudapi/disks/resource_disk.go
index acc9be0..a73a329 100644
--- a/internal/service/cloudapi/disks/resource_disk.go
+++ b/internal/service/cloudapi/disks/resource_disk.go
@@ -238,12 +238,6 @@ func resourceDiskUpdate(ctx context.Context, d *schema.ResourceData, m interface
DiskID: disk.ID,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- } else {
- req.Reason = "Terraform automatic restore"
- }
-
_, err := c.CloudAPI().Disks().Restore(ctx, req)
if err != nil {
warnings.Add(err)
@@ -362,7 +356,6 @@ func resourceDiskDelete(ctx context.Context, d *schema.ResourceData, m interface
DiskID: disk.ID,
Detach: d.Get("detach").(bool),
Permanently: d.Get("permanently").(bool),
- Reason: d.Get("reason").(string),
}
c := m.(*controller.ControllerCfg)
@@ -437,12 +430,6 @@ func resourceDiskSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "Whether to completely delete the disk, works only with non attached disks",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Default: "",
- Description: "Reason for deletion",
- },
"shareable": {
Type: schema.TypeBool,
Optional: true,
@@ -677,27 +664,27 @@ func resourceDiskSchemaMake() map[string]*schema.Schema {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"disk_id": {
- Type: schema.TypeInt,
+ Type: schema.TypeInt,
Computed: true,
},
"pool_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"role": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"self_volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"storage_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
},
diff --git a/internal/service/cloudapi/disks/resource_disk_replication.go b/internal/service/cloudapi/disks/resource_disk_replication.go
index 6cca162..5e3700a 100644
--- a/internal/service/cloudapi/disks/resource_disk_replication.go
+++ b/internal/service/cloudapi/disks/resource_disk_replication.go
@@ -177,7 +177,6 @@ func resourceDiskReplicationDelete(ctx context.Context, d *schema.ResourceData,
DiskID: disk.ID,
Detach: d.Get("detach").(bool),
Permanently: d.Get("permanently").(bool),
- Reason: d.Get("reason").(string),
}
log.Debugf("resourceDiskReplicationDelete: delete disk replica for disk with ID: %d", diskId)
@@ -243,11 +242,6 @@ func resourceDiskReplicationSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "Delete disk permanently",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "Reason for disk deletion",
- },
"replica_disk_id": {
Type: schema.TypeInt,
Computed: true,
diff --git a/internal/service/cloudapi/dpdknet/data_source_dpdk.go b/internal/service/cloudapi/dpdknet/data_source_dpdk.go
new file mode 100644
index 0000000..7add04a
--- /dev/null
+++ b/internal/service/cloudapi/dpdknet/data_source_dpdk.go
@@ -0,0 +1,153 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+
+ "github.com/google/uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceDPDKNetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ dpdk, err := utilityDPDKNetCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+
+ flattenDPDKNet(d, dpdk)
+
+ return nil
+}
+
+func dataSourceDPDKNetSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "dpdk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "The unique ID of the subscriber-owner of the DPDK network",
+ },
+ "account_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of accounts with access",
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of DPDK network",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "DPDK network ID on the storage side",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of network",
+ },
+ "rg_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of resource groups with access",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "DPDK network status",
+ },
+ "ovs_bridge": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "OVS bridge in which interfaces for computers created",
+ },
+ "vlan_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "vlan ID",
+ },
+ "compute_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "Compute IDs which uses this DPDK network",
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Updated time",
+ },
+ }
+
+ return res
+}
+
+func DataSourceDPDKNet() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDPDKNetRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDPDKNetSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/dpdknet/data_source_dpdk_list.go b/internal/service/cloudapi/dpdknet/data_source_dpdk_list.go
new file mode 100644
index 0000000..35c5dd1
--- /dev/null
+++ b/internal/service/cloudapi/dpdknet/data_source_dpdk_list.go
@@ -0,0 +1,212 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+
+ "github.com/google/uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceDPDKNetListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ dpdkList, err := utilityDPDKNetListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenDPDKNetList(dpdkList))
+ d.Set("entry_count", dpdkList.EntryCount)
+
+ return nil
+}
+
+func dataSourceDPDKNetListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "by_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by ID",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by GID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by name",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by description",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by status",
+ },
+ "compute_ids": {
+ Type: schema.TypeList,
+ Optional: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "Find by compute IDs",
+ },
+ "sort_by": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "sort by one of supported fields, format +|-(field)",
+ },
+ "page": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Page number",
+ },
+ "size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Page size",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "dpdk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "The unique ID of the subscriber-owner of the DPDK network",
+ },
+ "account_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of accounts with access",
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of DPDK network",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "DPDK network ID on the storage side",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of network",
+ },
+ "rg_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of resource groups with access",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "DPDK network status",
+ },
+ "ovs_bridge": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "OVS bridge in which interfaces for computers created",
+ },
+ "vlan_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "vlan ID",
+ },
+ "compute_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "Compute IDs which uses this DPDK network",
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Updated time",
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceDPDKNetList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDPDKNetListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDPDKNetListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/dpdknet/flattens.go b/internal/service/cloudapi/dpdknet/flattens.go
new file mode 100644
index 0000000..062002b
--- /dev/null
+++ b/internal/service/cloudapi/dpdknet/flattens.go
@@ -0,0 +1,44 @@
+package dpdknet
+
+import (
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/dpdknet"
+)
+
+func flattenDPDKNet(d *schema.ResourceData, dpdk *dpdk.RecordDPDKNet) {
+ d.Set("dpdk_id", dpdk.ID)
+ d.Set("account_access", dpdk.AccountAccess)
+ d.Set("created_time", dpdk.CreatedTime)
+ d.Set("desc", dpdk.Description)
+ d.Set("gid", dpdk.GID)
+ d.Set("guid", dpdk.GUID)
+ d.Set("name", dpdk.Name)
+ d.Set("rg_access", dpdk.RGAccess)
+ d.Set("status", dpdk.Status)
+ d.Set("ovs_bridge", dpdk.OVSBridge)
+ d.Set("vlan_id", dpdk.VlanID)
+ d.Set("compute_ids", dpdk.ComputeIDs)
+ d.Set("updated_time", dpdk.UpdatedTime)
+}
+
+func flattenDPDKNetList(list *dpdk.ListDPDKNet) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(list.Data))
+ for _, dpdk := range list.Data {
+ temp := map[string]interface{}{
+ "dpdk_id": dpdk.ID,
+ "account_access": dpdk.AccountAccess,
+ "desc": dpdk.Description,
+ "gid": dpdk.GID,
+ "guid": dpdk.GUID,
+ "name": dpdk.Name,
+ "rg_access": dpdk.RGAccess,
+ "status": dpdk.Status,
+ "ovs_bridge": dpdk.OVSBridge,
+ "vlan_id": dpdk.VlanID,
+ "compute_ids": dpdk.ComputeIDs,
+ "updated_time": dpdk.UpdatedTime,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
diff --git a/internal/service/cloudapi/dpdknet/utility_dpdk.go b/internal/service/cloudapi/dpdknet/utility_dpdk.go
new file mode 100644
index 0000000..f284998
--- /dev/null
+++ b/internal/service/cloudapi/dpdknet/utility_dpdk.go
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+ "strconv"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ log "github.com/sirupsen/logrus"
+ dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/dpdknet"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func utilityDPDKNetCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*dpdk.RecordDPDKNet, error) {
+ c := m.(*controller.ControllerCfg)
+ req := dpdk.GetRequest{}
+
+ if d.Get("dpdk_id") != nil {
+ if d.Get("dpdk_id").(int) == 0 {
+ id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.DPDKID = id
+ } else {
+ req.DPDKID = uint64(d.Get("dpdk_id").(int))
+ }
+ } else {
+ id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.DPDKID = id
+ }
+
+ log.Debugf("utilityDPDKCheckPresence: get DPDK network")
+ dpdk, err := c.CloudAPI().DPDKNet().Get(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return dpdk, nil
+}
diff --git a/internal/service/cloudapi/dpdknet/utility_dpdk_list.go b/internal/service/cloudapi/dpdknet/utility_dpdk_list.go
new file mode 100644
index 0000000..a38c2c2
--- /dev/null
+++ b/internal/service/cloudapi/dpdknet/utility_dpdk_list.go
@@ -0,0 +1,87 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/dpdknet"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityDPDKNetListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*dpdk.ListDPDKNet, error) {
+ c := m.(*controller.ControllerCfg)
+ req := dpdk.ListRequest{}
+
+ if byID, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(byID.(int))
+ }
+ if GID, ok := d.GetOk("gid"); ok {
+ req.GID = uint64(GID.(int))
+ }
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+ if desc, ok := d.GetOk("description"); ok {
+ req.Description = desc.(string)
+ }
+ if status, ok := d.GetOk("status"); ok {
+ req.Status = status.(string)
+ }
+ if computeIDs, ok := d.GetOk("compute_ids"); ok {
+ IDs := computeIDs.([]interface{})
+ for _, ID := range IDs {
+ req.ComputeIDs = append(req.ComputeIDs, uint64(ID.(int)))
+ }
+ }
+ if sortBy, ok := d.GetOk("sort_by"); ok {
+ req.SortBy = sortBy.(string)
+ }
+ if page, ok := d.GetOk("page"); ok {
+ req.Page = uint64(page.(int))
+ }
+ if size, ok := d.GetOk("size"); ok {
+ req.Size = uint64(size.(int))
+ }
+
+ log.Debugf("utilityDPDKListCheckPresence: load DPDK network list")
+ dpdkList, err := c.CloudAPI().DPDKNet().List(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return dpdkList, nil
+}
diff --git a/internal/service/cloudapi/flipgroup/data_source_flipgroup_list.go b/internal/service/cloudapi/flipgroup/data_source_flipgroup_list.go
index 90aa3a7..fc38333 100644
--- a/internal/service/cloudapi/flipgroup/data_source_flipgroup_list.go
+++ b/internal/service/cloudapi/flipgroup/data_source_flipgroup_list.go
@@ -124,7 +124,7 @@ func dataSourceFlipgroupListSchemaMake() map[string]*schema.Schema {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
- Type: schema.TypeInt,
+ Type: schema.TypeString,
},
Description: "client_ids",
},
diff --git a/internal/service/cloudapi/flipgroup/utility_flipgroup.go b/internal/service/cloudapi/flipgroup/utility_flipgroup.go
index c423f9f..2cf4c6c 100644
--- a/internal/service/cloudapi/flipgroup/utility_flipgroup.go
+++ b/internal/service/cloudapi/flipgroup/utility_flipgroup.go
@@ -189,7 +189,7 @@ func utilityFlipgroupListCheckPresence(ctx context.Context, d *schema.ResourceDa
if cliensId, ok := d.GetOk("client_ids"); ok {
cliensIds := cliensId.([]interface{})
for _, elem := range cliensIds {
- req.ClientIDs = append(req.ClientIDs, uint64(elem.(int)))
+ req.ClientIDs = append(req.ClientIDs, (elem.(string)))
}
}
if status, ok := d.GetOk("status"); ok {
diff --git a/internal/service/cloudapi/image/data_source_image_list.go b/internal/service/cloudapi/image/data_source_image_list.go
index 4ad5494..025f5cb 100644
--- a/internal/service/cloudapi/image/data_source_image_list.go
+++ b/internal/service/cloudapi/image/data_source_image_list.go
@@ -132,6 +132,11 @@ func dataSourceImageListSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "page size",
},
+ "enabled": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "find by enabled True or False",
+ },
"items": {
Type: schema.TypeList,
Computed: true,
diff --git a/internal/service/cloudapi/image/image_rs_subresource.go b/internal/service/cloudapi/image/image_rs_subresource.go
index 14f277f..4653ac1 100644
--- a/internal/service/cloudapi/image/image_rs_subresource.go
+++ b/internal/service/cloudapi/image/image_rs_subresource.go
@@ -129,8 +129,8 @@ func resourceImageSchemaMake(sch map[string]*schema.Schema) map[string]*schema.S
Type: schema.TypeString,
Optional: true,
Computed: true,
- ValidateFunc: validation.StringInSlice([]string{"X86_64", "PPC64_LE"}, true),
- Description: "binary architecture of this image, one of X86_64 of PPC64_LE",
+ ValidateFunc: validation.StringInSlice([]string{"X86_64"}, true),
+ Description: "binary architecture of this image, one of X86_64",
}
sch["drivers"] = &schema.Schema{
@@ -141,13 +141,6 @@ func resourceImageSchemaMake(sch map[string]*schema.Schema) map[string]*schema.S
},
}
- sch["permanently"] = &schema.Schema{
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- Description: "whether to completely delete the image",
- }
-
sch["network_interface_naming"] = &schema.Schema{
Type: schema.TypeString,
Optional: true,
diff --git a/internal/service/cloudapi/image/image_virtual_rs_subresource.go b/internal/service/cloudapi/image/image_virtual_rs_subresource.go
index fb481ab..e565407 100644
--- a/internal/service/cloudapi/image/image_virtual_rs_subresource.go
+++ b/internal/service/cloudapi/image/image_virtual_rs_subresource.go
@@ -1,67 +1,60 @@
-/*
-Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
-Authors:
-Petr Krutov,
-Stanislav Solovev,
-Kasim Baybikov,
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-/*
-Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
-Orchestration Technology) with Terraform by Hashicorp.
-
-Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
-
-Please see README.md to learn where to place source code so that it
-builds seamlessly.
-
-Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
-*/
-
-package image
-
-import (
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
-)
-
-func resourceImageVirtualSchemaMake(sch map[string]*schema.Schema) map[string]*schema.Schema {
- delete(sch, "show_all")
- sch["name"] = &schema.Schema{
- Type: schema.TypeString,
- Required: true,
- Description: "Name of the rescue disk",
- }
-
- sch["link_to"] = &schema.Schema{
- Type: schema.TypeInt,
- Required: true,
- Description: "ID of real image to link this virtual image to upon creation",
- }
-
- sch["permanently"] = &schema.Schema{
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- Description: "whether to completely delete the image",
- }
-
- sch["image_id"] = &schema.Schema{
- Type: schema.TypeInt,
- Computed: true,
- Description: "Image id",
- }
-
- return sch
-}
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package image
+
+import (
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func resourceImageVirtualSchemaMake(sch map[string]*schema.Schema) map[string]*schema.Schema {
+ delete(sch, "show_all")
+ sch["name"] = &schema.Schema{
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Name of the rescue disk",
+ }
+
+ sch["link_to"] = &schema.Schema{
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of real image to link this virtual image to upon creation",
+ }
+
+ sch["image_id"] = &schema.Schema{
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image id",
+ }
+
+ return sch
+}
diff --git a/internal/service/cloudapi/image/resource_image.go b/internal/service/cloudapi/image/resource_image.go
index 1452fa4..6a8bb29 100644
--- a/internal/service/cloudapi/image/resource_image.go
+++ b/internal/service/cloudapi/image/resource_image.go
@@ -157,10 +157,6 @@ func resourceImageDelete(ctx context.Context, d *schema.ResourceData, m interfac
ImageID: uint64(d.Get("image_id").(int)),
}
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudAPI().Image().Delete(ctx, req)
if err != nil {
return diag.FromErr(err)
diff --git a/internal/service/cloudapi/image/resource_image_from_blank_compute.go b/internal/service/cloudapi/image/resource_image_from_blank_compute.go
index c5e42c0..64e242f 100644
--- a/internal/service/cloudapi/image/resource_image_from_blank_compute.go
+++ b/internal/service/cloudapi/image/resource_image_from_blank_compute.go
@@ -194,10 +194,6 @@ func resourceImageFromBlankComputeDelete(ctx context.Context, d *schema.Resource
ImageID: uint64(d.Get("image_id").(int)),
}
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudAPI().Image().Delete(ctx, req)
if err != nil {
return diag.FromErr(err)
@@ -352,12 +348,6 @@ func resourceImageFromBlankComputeSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "create an image in async/sync mode",
},
- "permanently": {
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- Description: "whether to completely delete the image",
- },
"image_id": {
Type: schema.TypeInt,
diff --git a/internal/service/cloudapi/image/resource_image_from_platform_disk.go b/internal/service/cloudapi/image/resource_image_from_platform_disk.go
index 787a7ec..594feb2 100644
--- a/internal/service/cloudapi/image/resource_image_from_platform_disk.go
+++ b/internal/service/cloudapi/image/resource_image_from_platform_disk.go
@@ -201,10 +201,6 @@ func resourceImageFromPlatformDiskDelete(ctx context.Context, d *schema.Resource
ImageID: uint64(d.Get("image_id").(int)),
}
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudAPI().Image().Delete(ctx, req)
if err != nil {
return diag.FromErr(err)
@@ -302,8 +298,8 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
"architecture": {
Type: schema.TypeString,
Required: true,
- ValidateFunc: validation.StringInSlice([]string{"X86_64", "PPC64_LE"}, true),
- Description: "binary architecture of this image, one of X86_64 of PPC64_LE",
+ ValidateFunc: validation.StringInSlice([]string{"X86_64"}, true),
+ Description: "binary architecture of this image, one of X86_64",
},
"username": {
@@ -338,11 +334,10 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
},
"drivers": {
Type: schema.TypeList,
- Optional: true,
- Computed: true,
+ Required: true,
Elem: &schema.Schema{
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86", "KVM_PPC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86"}, false), // observe case while validating
Type: schema.TypeString,
},
Description: "List of types of compute suitable for image. Example: [ \"KVM_X86\" ]",
@@ -365,12 +360,6 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "create an image in async/sync mode",
},
- "permanently": {
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- Description: "whether to completely delete the image",
- },
"image_id": {
Type: schema.TypeInt,
diff --git a/internal/service/cloudapi/image/utility_image_list.go b/internal/service/cloudapi/image/utility_image_list.go
index b7f73a6..6f9a6ee 100644
--- a/internal/service/cloudapi/image/utility_image_list.go
+++ b/internal/service/cloudapi/image/utility_image_list.go
@@ -46,12 +46,12 @@ func utilityImageListCheckPresence(ctx context.Context, d *schema.ResourceData,
c := m.(*controller.ControllerCfg)
req := image.ListRequest{}
- if sep_id, ok := d.GetOk("sep_id"); ok {
- req.SEPID = uint64(sep_id.(int))
+ if sepID, ok := d.GetOk("sep_id"); ok {
+ req.SEPID = uint64(sepID.(int))
}
- if by_id, ok := d.GetOk("by_id"); ok {
- req.ByID = uint64(by_id.(int))
+ if byID, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(byID.(int))
}
if name, ok := d.GetOk("name"); ok {
@@ -66,31 +66,31 @@ func utilityImageListCheckPresence(ctx context.Context, d *schema.ResourceData,
req.Architecture = architecture.(string)
}
- if type_image, ok := d.GetOk("type_image"); ok {
- req.TypeImage = type_image.(string)
+ if typeImage, ok := d.GetOk("type_image"); ok {
+ req.TypeImage = typeImage.(string)
}
- if image_size, ok := d.GetOk("image_size"); ok {
- req.ImageSize = uint64(image_size.(int))
+ if imageSize, ok := d.GetOk("image_size"); ok {
+ req.ImageSize = uint64(imageSize.(int))
}
- if sep_name, ok := d.GetOk("sep_name"); ok {
- req.SEPName = sep_name.(string)
+ if sepName, ok := d.GetOk("sep_name"); ok {
+ req.SEPName = sepName.(string)
}
if pool, ok := d.GetOk("pool"); ok {
req.Pool = pool.(string)
}
- if public, ok := d.GetOk("public"); ok {
+ if public, ok := d.GetOkExists("public"); ok {
req.Public = public.(bool)
}
- if hot_resize, ok := d.GetOk("hot_resize"); ok {
- req.HotResize = hot_resize.(bool)
+ if hotResize, ok := d.GetOkExists("hot_resize"); ok {
+ req.HotResize = hotResize.(bool)
}
- if bootable, ok := d.GetOk("bootable"); ok {
+ if bootable, ok := d.GetOkExists("bootable"); ok {
req.Bootable = bootable.(bool)
}
@@ -104,6 +104,9 @@ func utilityImageListCheckPresence(ctx context.Context, d *schema.ResourceData,
if size, ok := d.GetOk("size"); ok {
req.Size = uint64(size.(int))
}
+ if enabled, ok := d.GetOkExists("enabled"); ok {
+ req.Enabled = enabled.(bool)
+ }
log.Debugf("utilityImageListCheckPresence: load image list")
imageList, err := c.CloudAPI().Image().List(ctx, req)
diff --git a/internal/service/cloudapi/k8s/data_source_k8s.go b/internal/service/cloudapi/k8s/data_source_k8s.go
index 3bdd006..565383b 100644
--- a/internal/service/cloudapi/k8s/data_source_k8s.go
+++ b/internal/service/cloudapi/k8s/data_source_k8s.go
@@ -103,16 +103,17 @@ func dataSourceK8sRead(ctx context.Context, d *schema.ResourceData, m interface{
}
d.Set("kubeconfig", kubeconfig)
+ if cluster.LBID != 0 {
+ getLbReq := lb.GetRequest{LBID: cluster.LBID}
+ lb, err := c.CloudAPI().LB().Get(ctx, getLbReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
- getLbReq := lb.GetRequest{LBID: cluster.LBID}
- lb, err := c.CloudAPI().LB().Get(ctx, getLbReq)
- if err != nil {
- return diag.FromErr(err)
+ d.Set("extnet_id", lb.ExtNetID)
+ d.Set("lb_ip", lb.PrimaryNode.FrontendIP)
}
- d.Set("extnet_id", lb.ExtNetID)
- d.Set("lb_ip", lb.PrimaryNode.FrontendIP)
-
flattenK8sData(d, *cluster, masterComputeList, workersComputeList)
return nil
}
diff --git a/internal/service/cloudapi/k8s/flattens.go b/internal/service/cloudapi/k8s/flattens.go
index 5700660..2ab76b8 100644
--- a/internal/service/cloudapi/k8s/flattens.go
+++ b/internal/service/cloudapi/k8s/flattens.go
@@ -254,6 +254,20 @@ func flattenK8sData(d *schema.ResourceData, cluster k8s.RecordK8S, masters []com
d.Set("tech_status", cluster.TechStatus)
d.Set("updated_by", cluster.UpdatedBy)
d.Set("updated_time", cluster.UpdatedTime)
+ d.Set("highly_available_lb", cluster.HighlyAvailableLB)
+ d.Set("address_vip", flattenAddressVIP(cluster.AddressVIP))
+ d.Set("extnet_only", cluster.ExtnetOnly)
+ d.Set("with_lb", cluster.WithLB)
+}
+
+func flattenAddressVIP(addressVIP k8s.K8SAddressVIP) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "backend_ip": addressVIP.BackendIP,
+ "frontend_ip": addressVIP.FrontendIP,
+ }
+ res = append(res, temp)
+ return res
}
func flattenServiceAccount(serviceAccount k8s.RecordServiceAccount) []map[string]interface{} {
diff --git a/internal/service/cloudapi/k8s/node_subresource.go b/internal/service/cloudapi/k8s/node_subresource.go
index c448d34..8790bcd 100644
--- a/internal/service/cloudapi/k8s/node_subresource.go
+++ b/internal/service/cloudapi/k8s/node_subresource.go
@@ -153,6 +153,11 @@ func workersSchemaMake() map[string]*schema.Schema {
Schema: detailedInfoSchemaMake(),
},
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Type of the emulated system.",
+ },
"guid": {
Type: schema.TypeString,
Computed: true,
diff --git a/internal/service/cloudapi/k8s/resource_k8s.go b/internal/service/cloudapi/k8s/resource_k8s.go
index 0ab2217..aee87cc 100644
--- a/internal/service/cloudapi/k8s/resource_k8s.go
+++ b/internal/service/cloudapi/k8s/resource_k8s.go
@@ -202,8 +202,13 @@ func resourceK8sCreate(ctx context.Context, d *schema.ResourceData, m interface{
if oidcCertificate, ok := d.GetOk("oidc_cert"); ok {
createReq.OidcCertificate = oidcCertificate.(string)
}
+
///
+ if chipset, ok := d.GetOk("chipset"); ok {
+ createReq.Chipset = chipset.(string)
+ }
+
createReq.ExtNetOnly = d.Get("extnet_only").(bool)
if extNet, ok := d.GetOk("extnet_id"); ok {
@@ -745,6 +750,12 @@ func resourceK8sSchemaMake() map[string]*schema.Schema {
Description: "insert ssl certificate in x509 pem format",
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Type of the emulated system.",
+ },
+
"desc": {
Type: schema.TypeString,
Optional: true,
diff --git a/internal/service/cloudapi/k8s/resource_k8s_cp.go b/internal/service/cloudapi/k8s/resource_k8s_cp.go
index 4f059cb..646b39c 100644
--- a/internal/service/cloudapi/k8s/resource_k8s_cp.go
+++ b/internal/service/cloudapi/k8s/resource_k8s_cp.go
@@ -124,6 +124,10 @@ func resourceK8sCPCreate(ctx context.Context, d *schema.ResourceData, m interfac
createReq.MasterSEPID = uint64(sepId.(int))
}
+ if chipset, ok := d.GetOk("chipset"); ok {
+ createReq.Chipset = chipset.(string)
+ }
+
if sepPool, ok := d.GetOk("sep_pool"); ok {
createReq.MasterSEPPool = sepPool.(string)
}
@@ -532,10 +536,10 @@ func resourceK8sCPUpdate(ctx context.Context, d *schema.ResourceData, m interfac
oldVal, newVal := d.GetChange("num")
if oldVal.(int) > newVal.(int) {
- ids := make([]string, 0)
+ ids := make([]uint64, 0)
for i := oldVal.(int) - 1; i >= newVal.(int); i-- {
id := cluster.K8SGroups.Masters.DetailedInfo[i].ID
- ids = append(ids, strconv.FormatUint(id, 10))
+ ids = append(ids, id)
}
req := k8s.DeleteMasterFromGroupRequest{
@@ -656,6 +660,11 @@ func resourceK8sCPSchemaMake() map[string]*schema.Schema {
),
Description: "Node RAM in MB.",
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Type of the emulated system.",
+ },
"disk": {
Type: schema.TypeInt,
Optional: true,
diff --git a/internal/service/cloudapi/k8s/resource_k8s_wg.go b/internal/service/cloudapi/k8s/resource_k8s_wg.go
index b5213b1..d850b2a 100644
--- a/internal/service/cloudapi/k8s/resource_k8s_wg.go
+++ b/internal/service/cloudapi/k8s/resource_k8s_wg.go
@@ -70,6 +70,7 @@ func resourceK8sWgCreate(ctx context.Context, d *schema.ResourceData, m interfac
WorkerRAM: uint64(d.Get("ram").(int)),
WorkerSEPID: uint64(d.Get("worker_sep_id").(int)),
WorkerSEPPool: d.Get("worker_sep_pool").(string),
+ Chipset: d.Get("chipset").(string),
}
labels, _ := d.Get("labels").([]interface{})
@@ -168,6 +169,7 @@ func resourceK8sWgUpdate(ctx context.Context, d *schema.ResourceData, m interfac
K8SID: uint64(d.Get("k8s_id").(int)),
WorkersGroupID: wg.ID,
Num: uint64(newNum) - wg.Num,
+ Chipset: d.Get("chipset").(string),
}
_, err := c.CloudAPI().K8S().WorkerAdd(ctx, req)
@@ -253,6 +255,12 @@ func resourceK8sWgSchemaMake() map[string]*schema.Schema {
Description: "Number of worker nodes to create.",
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Type of the emulated system.",
+ },
+
"cpu": {
Type: schema.TypeInt,
Optional: true,
diff --git a/internal/service/cloudapi/k8s/utility_k8s.go b/internal/service/cloudapi/k8s/utility_k8s.go
index 239cffb..b537245 100644
--- a/internal/service/cloudapi/k8s/utility_k8s.go
+++ b/internal/service/cloudapi/k8s/utility_k8s.go
@@ -84,6 +84,7 @@ func updateNum(ctx context.Context, c *controller.ControllerCfg, cluster *k8s.Re
K8SID: cluster.ID,
WorkersGroupID: uint64(wgNew["id"].(int)),
Num: uint64(newNum - oldNum),
+ Chipset: wgNew["chipset"].(string),
}
_, err := c.CloudAPI().K8S().WorkerAdd(ctx, req)
@@ -145,6 +146,7 @@ func addWGs(ctx context.Context, c *controller.ControllerCfg, cluster *k8s.Recor
WorkerCPU: uint64(found_wg["cpu"].(int)),
WorkerRAM: uint64(found_wg["ram"].(int)),
WorkerDisk: uint64(found_wg["disk"].(int)),
+ Chipset: found_wg["chipset"].(string),
}
labels, _ := found_wg["labels"].([]interface{})
diff --git a/internal/service/cloudapi/kvmvm/data_source_compute.go b/internal/service/cloudapi/kvmvm/data_source_compute.go
index fcf5065..8585925 100644
--- a/internal/service/cloudapi/kvmvm/data_source_compute.go
+++ b/internal/service/cloudapi/kvmvm/data_source_compute.go
@@ -260,6 +260,10 @@ func computeListDisksSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"created_time": {
Type: schema.TypeInt,
Computed: true,
@@ -475,6 +479,10 @@ func computeQOSSchemaMake() map[string]*schema.Schema {
func computeInterfacesSchemaMake() map[string]*schema.Schema {
return map[string]*schema.Schema{
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"conn_id": {
Type: schema.TypeInt,
Computed: true,
@@ -511,6 +519,10 @@ func computeInterfacesSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"name": {
Type: schema.TypeString,
Computed: true,
@@ -542,6 +554,13 @@ func computeInterfacesSchemaMake() map[string]*schema.Schema {
Schema: computeQOSSchemaMake(),
},
},
+ "libvirt_settings": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: computeLibvirtSettingsSchemaMake(),
+ },
+ },
"target": {
Type: schema.TypeString,
Computed: true,
@@ -559,6 +578,40 @@ func computeInterfacesSchemaMake() map[string]*schema.Schema {
},
}
}
+
+func computeLibvirtSettingsSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+}
+
func computeOsUsersSchemaMake() map[string]*schema.Schema {
return map[string]*schema.Schema{
"guid": {
@@ -650,6 +703,10 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "chipset": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
"boot_order": {
Type: schema.TypeList,
Computed: true,
diff --git a/internal/service/cloudapi/kvmvm/data_source_compute_list.go b/internal/service/cloudapi/kvmvm/data_source_compute_list.go
index cf4786f..d3f48d5 100644
--- a/internal/service/cloudapi/kvmvm/data_source_compute_list.go
+++ b/internal/service/cloudapi/kvmvm/data_source_compute_list.go
@@ -64,6 +64,10 @@ func dataSourceComputeListRead(ctx context.Context, d *schema.ResourceData, m in
func computeDisksSchemaMake() map[string]*schema.Schema {
return map[string]*schema.Schema{
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"disk_id": {
Type: schema.TypeInt,
Computed: true,
@@ -136,6 +140,10 @@ func itemComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "chipset": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
"clones": {
Type: schema.TypeList,
Computed: true,
diff --git a/internal/service/cloudapi/kvmvm/flattens.go b/internal/service/cloudapi/kvmvm/flattens.go
index fc2d680..2ce2e3f 100644
--- a/internal/service/cloudapi/kvmvm/flattens.go
+++ b/internal/service/cloudapi/kvmvm/flattens.go
@@ -47,8 +47,9 @@ func flattenDisks(disks []compute.InfoDisk) []map[string]interface{} {
res := make([]map[string]interface{}, 0)
for _, disk := range disks {
temp := map[string]interface{}{
- "disk_id": disk.ID,
- "pci_slot": disk.PCISlot,
+ "bus_number": disk.BusNumber,
+ "disk_id": disk.ID,
+ "pci_slot": disk.PCISlot,
}
res = append(res, temp)
}
@@ -69,30 +70,49 @@ func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface
res := make([]map[string]interface{}, 0, len(interfaces))
for _, interfaceItem := range interfaces {
temp := map[string]interface{}{
- "conn_id": interfaceItem.ConnID,
- "conn_type": interfaceItem.ConnType,
- "def_gw": interfaceItem.DefGW,
- "enabled": interfaceItem.Enabled,
- "flip_group_id": interfaceItem.FLIPGroupID,
- "guid": interfaceItem.GUID,
- "ip_address": interfaceItem.IPAddress,
- "listen_ssh": interfaceItem.ListenSSH,
- "mac": interfaceItem.MAC,
- "name": interfaceItem.Name,
- "net_id": interfaceItem.NetID,
- "netmask": interfaceItem.NetMask,
- "net_type": interfaceItem.NetType,
- "node_id": interfaceItem.NodeID,
- "pci_slot": interfaceItem.PCISlot,
- "qos": flattenQOS(interfaceItem.QOS),
- "target": interfaceItem.Target,
- "type": interfaceItem.Type,
- "vnfs": interfaceItem.VNFs,
+ "bus_number": interfaceItem.BusNumber,
+ "conn_id": interfaceItem.ConnID,
+ "conn_type": interfaceItem.ConnType,
+ "def_gw": interfaceItem.DefGW,
+ "enabled": interfaceItem.Enabled,
+ "flip_group_id": interfaceItem.FLIPGroupID,
+ "guid": interfaceItem.GUID,
+ "ip_address": interfaceItem.IPAddress,
+ "listen_ssh": interfaceItem.ListenSSH,
+ "mac": interfaceItem.MAC,
+ "mtu": interfaceItem.MTU,
+ "name": interfaceItem.Name,
+ "net_id": interfaceItem.NetID,
+ "netmask": interfaceItem.NetMask,
+ "net_type": interfaceItem.NetType,
+ "node_id": interfaceItem.NodeID,
+ "pci_slot": interfaceItem.PCISlot,
+ "qos": flattenQOS(interfaceItem.QOS),
+ "target": interfaceItem.Target,
+ "type": interfaceItem.Type,
+ "vnfs": interfaceItem.VNFs,
+ "libvirt_settings": flattenLibvirtSettings(interfaceItem.LibvirtSettings),
}
res = append(res, temp)
}
return res
}
+
+func flattenLibvirtSettings(libvirtSettings compute.LibvirtSettings) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "guid": libvirtSettings.GUID,
+ "txmode": libvirtSettings.TXMode,
+ "ioeventfd": libvirtSettings.IOEventFD,
+ "event_idx": libvirtSettings.EventIDx,
+ "queues": libvirtSettings.Queues,
+ "rx_queue_size": libvirtSettings.RXQueueSize,
+ "tx_queue_size": libvirtSettings.TXQueueSize,
+ }
+ res = append(res, temp)
+ return res
+}
+
func flattenSnapSets(snapSets compute.ListSnapSets) []map[string]interface{} {
res := make([]map[string]interface{}, 0, len(snapSets))
for _, snapSet := range snapSets {
@@ -165,6 +185,7 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
"arch": compute.Architecture,
"boot_order": compute.BootOrder,
"bootdisk_size": compute.BootDiskSize,
+ "chipset": compute.Chipset,
"cd_image_id": compute.CdImageId,
"clone_reference": compute.CloneReference,
"clones": compute.Clones,
@@ -348,6 +369,7 @@ func flattenCompute(d *schema.ResourceData, computeRec compute.RecordCompute, pc
d.Set("cd_image_id", computeRec.CdImageId)
d.Set("sep_id", bootDisk.SepID)
d.Set("pool", bootDisk.Pool)
+ d.Set("chipset", computeRec.Chipset)
d.Set("clone_reference", computeRec.CloneReference)
d.Set("clones", computeRec.Clones)
d.Set("computeci_id", computeRec.ComputeCIID)
@@ -503,6 +525,7 @@ func flattenListComputeDisks(disks compute.ListComputeDisks) []map[string]interf
"acl": string(acl),
"account_id": disk.AccountID,
"boot_partition": disk.BootPartition,
+ "bus_number": disk.BusNumber,
"created_time": disk.CreatedTime,
"deleted_time": disk.DeletedTime,
"description": disk.Description,
@@ -590,6 +613,7 @@ func flattenDataCompute(d *schema.ResourceData, computeRec compute.RecordCompute
d.Set("affinity_weight", computeRec.AffinityWeight)
d.Set("anti_affinity_rules", flattenListRules(computeRec.AntiAffinityRules))
d.Set("arch", computeRec.Architecture)
+ d.Set("chipset", computeRec.Chipset)
d.Set("boot_order", computeRec.BootOrder)
d.Set("bootdisk_size", computeRec.BootDiskSize)
d.Set("cd_image_id", computeRec.CdImageId)
diff --git a/internal/service/cloudapi/kvmvm/network_subresource.go b/internal/service/cloudapi/kvmvm/network_subresource.go
index 4071e55..b6f7df2 100644
--- a/internal/service/cloudapi/kvmvm/network_subresource.go
+++ b/internal/service/cloudapi/kvmvm/network_subresource.go
@@ -128,7 +128,7 @@ func networkSubresourceSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Required: true,
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"EXTNET", "VINS", "VFNIC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"EXTNET", "VINS", "VFNIC", "DPDK"}, false), // observe case while validating
Description: "Type of the network for this connection, either EXTNET or VINS.",
},
diff --git a/internal/service/cloudapi/kvmvm/old_schemas.go b/internal/service/cloudapi/kvmvm/old_schemas.go
index 07d0c8a..c56c389 100644
--- a/internal/service/cloudapi/kvmvm/old_schemas.go
+++ b/internal/service/cloudapi/kvmvm/old_schemas.go
@@ -27,7 +27,7 @@ func resourceComputeResourceV1() *schema.Resource {
Required: true,
ForceNew: true,
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86", "KVM_PPC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86"}, false), // observe case while validating
Description: "Hardware architecture of this compute instance.",
},
"cpu": {
@@ -569,7 +569,7 @@ func resourceComputeResourceV2() *schema.Resource {
Required: true,
ForceNew: true,
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86", "KVM_PPC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86"}, false), // observe case while validating
Description: "Hardware architecture of this compute instance.",
},
"cpu": {
diff --git a/internal/service/cloudapi/kvmvm/resource_check_input_values.go b/internal/service/cloudapi/kvmvm/resource_check_input_values.go
index c5ab3ad..fcec08e 100644
--- a/internal/service/cloudapi/kvmvm/resource_check_input_values.go
+++ b/internal/service/cloudapi/kvmvm/resource_check_input_values.go
@@ -38,6 +38,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/dpdknet"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/image"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
@@ -147,6 +148,23 @@ func existVFPoolId(ctx context.Context, m interface{}, id int) (int, bool) {
return id, false
}
+func existDPDKNetId(ctx context.Context, m interface{}, id int) (int, bool) {
+ c := m.(*controller.ControllerCfg)
+ req := dpdknet.ListRequest{ByID: uint64(id)}
+
+ dpdkList, err := c.CloudAPI().DPDKNet().List(ctx, req)
+ if err != nil {
+ log.Debugf("Unable to retrieve vfpool list, %s", err)
+ return id, false
+ }
+
+ if len(dpdkList.Data) == 1 {
+ return 0, true
+ }
+
+ return id, false
+}
+
func isMoreThanOneDisksTypeB(ctx context.Context, disks interface{}) bool {
count := 0
diff --git a/internal/service/cloudapi/kvmvm/resource_compute.go b/internal/service/cloudapi/kvmvm/resource_compute.go
index 42191fc..e45d335 100644
--- a/internal/service/cloudapi/kvmvm/resource_compute.go
+++ b/internal/service/cloudapi/kvmvm/resource_compute.go
@@ -42,7 +42,6 @@ import (
log "github.com/sirupsen/logrus"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
- "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/kvmppc"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/kvmx86"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
@@ -60,7 +59,6 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
log.Debugf("resourceComputeCreate: called for Compute name %q, RG ID %d", d.Get("name").(string), d.Get("rg_id").(int))
c := m.(*controller.ControllerCfg)
createReqX86 := kvmx86.CreateRequest{}
- createReqPPC := kvmppc.CreateRequest{}
hasRG, err := existRgID(ctx, d, m)
if err != nil {
@@ -101,12 +99,13 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
return diag.Errorf("resourceComputeCreate: can't create compute because extnet ID %d is not allowed or does not exist", extNetId)
}
case "VFNIC":
- if d.Get("driver").(string) == "KVM_PPC" {
- return diag.Errorf("resourceComputeCreate: can't create compute because 'VFNIC' net_type is not allowed for driver 'KVM_PPC'")
- }
if vfpoolId, ok := existVFPoolId(ctx, m, networkData["net_id"].(int)); !ok {
return diag.Errorf("resourceComputeCreate: can't create compute because vfpool ID %d is not allowed or does not exist", vfpoolId)
}
+ case "DPDK":
+ if dpdkId, ok := existDPDKNetId(ctx, m, networkData["net_id"].(int)); !ok {
+ return diag.Errorf("resourceComputeCreate: can't create compute because DPDK ID %d is not allowed or does not exist", dpdkId)
+ }
default:
continue
}
@@ -115,32 +114,26 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
argVal, ok := d.GetOk("description")
if ok {
- createReqPPC.Description = argVal.(string)
createReqX86.Description = argVal.(string)
}
if sepID, ok := d.GetOk("sep_id"); ok {
- createReqPPC.SEPID = uint64(sepID.(int))
createReqX86.SepID = uint64(sepID.(int))
}
if pool, ok := d.GetOk("pool"); ok {
- createReqPPC.Pool = pool.(string)
createReqX86.Pool = pool.(string)
}
if ipaType, ok := d.GetOk("ipa_type"); ok {
- createReqPPC.IPAType = ipaType.(string)
createReqX86.IPAType = ipaType.(string)
}
if bootSize, ok := d.GetOk("boot_disk_size"); ok {
- createReqPPC.BootDisk = uint64(bootSize.(int))
createReqX86.BootDisk = uint64(bootSize.(int))
}
if IS, ok := d.GetOk("is"); ok {
- createReqPPC.IS = IS.(string)
createReqX86.IS = IS.(string)
}
@@ -181,45 +174,8 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
}
- createReqPPC.Interfaces = make([]kvmppc.Interface, 0)
-
- if networks, ok := d.GetOk("network"); ok {
- if networks.(*schema.Set).Len() > 0 {
- ns := networks.(*schema.Set).List()
- sort.Slice(ns, func(i, j int) bool {
- weightI := ns[i].(map[string]interface{})["weight"].(int)
- weightJ := ns[j].(map[string]interface{})["weight"].(int)
- if weightI == 0 {
- return false
- }
- if weightJ == 0 {
- return true
- }
- return weightI < weightJ
- })
- interfaces := make([]kvmppc.Interface, 0)
- for _, elem := range ns {
- netInterfaceVal := elem.(map[string]interface{})
- reqInterface := kvmppc.Interface{
- NetType: netInterfaceVal["net_type"].(string),
- NetID: uint64(netInterfaceVal["net_id"].(int)),
- }
-
- ipaddr, ipSet := netInterfaceVal["ip_address"]
- if ipSet {
- reqInterface.IPAddr = ipaddr.(string)
- }
-
- interfaces = append(interfaces, reqInterface)
- }
-
- createReqPPC.Interfaces = interfaces
- }
- }
-
if disks, ok := d.GetOk("disks"); ok {
disksX86 := make([]kvmx86.DataDisk, 0)
- disksPPC := make([]kvmppc.DataDisk, 0)
for _, elem := range disks.([]interface{}) {
diskVal := elem.(map[string]interface{})
@@ -244,97 +200,59 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
createReqX86.DataDisks = disksX86
- for _, elem := range disks.([]interface{}) {
- diskVal := elem.(map[string]interface{})
- reqDataDisk := kvmppc.DataDisk{
- DiskName: diskVal["disk_name"].(string),
- Size: uint64(diskVal["size"].(int)),
- }
- if sepId, ok := diskVal["sep_id"]; ok {
- reqDataDisk.SepID = uint64(sepId.(int))
- }
- if pool, ok := diskVal["pool"]; ok {
- reqDataDisk.Pool = pool.(string)
- }
- if desc, ok := diskVal["desc"]; ok {
- reqDataDisk.Description = desc.(string)
- }
- if imageID, ok := diskVal["image_id"]; ok {
- reqDataDisk.ImageID = uint64(imageID.(int))
- }
- disksPPC = append(disksPPC, reqDataDisk)
- }
-
- createReqPPC.DataDisks = disksPPC
}
argVal, ok = d.GetOk("cloud_init")
if ok {
userdata := argVal.(string)
if userdata != "" && userdata != "applied" {
- createReqPPC.Userdata = strings.TrimSpace(userdata)
createReqX86.Userdata = strings.TrimSpace(userdata)
}
}
var computeId uint64
driver := d.Get("driver").(string)
- if driver == "KVM_PPC" {
- createReqPPC.RGID = uint64(d.Get("rg_id").(int))
- createReqPPC.Name = d.Get("name").(string)
- createReqPPC.CPU = uint64(d.Get("cpu").(int))
- createReqPPC.RAM = uint64(d.Get("ram").(int))
- createReqPPC.ImageID = uint64(d.Get("image_id").(int))
-
- log.Debugf("resourceComputeCreate: creating Compute of type KVM VM PowerPC")
- apiResp, err := c.CloudAPI().KVMPPC().Create(ctx, createReqPPC)
- if err != nil {
- return diag.FromErr(err)
- }
-
- d.SetId(strconv.FormatUint(apiResp, 10))
- computeId = apiResp
- } else {
- createReqX86.RGID = uint64(d.Get("rg_id").(int))
- createReqX86.Name = d.Get("name").(string)
- createReqX86.CPU = uint64(d.Get("cpu").(int))
- createReqX86.RAM = uint64(d.Get("ram").(int))
- createReqX86.Driver = driver
+ createReqX86.RGID = uint64(d.Get("rg_id").(int))
+ createReqX86.Name = d.Get("name").(string)
+ createReqX86.CPU = uint64(d.Get("cpu").(int))
+ createReqX86.RAM = uint64(d.Get("ram").(int))
- if image, ok := d.GetOk("image_id"); ok {
- createReqX86.ImageID = uint64(image.(int))
- }
- if withoutBootDisk, ok := d.GetOk("without_boot_disk"); ok {
- createReqX86.WithoutBootDisk = withoutBootDisk.(bool)
- }
+ createReqX86.Driver = driver
- if custom_fields, ok := d.GetOk("custom_fields"); ok {
- val := custom_fields.(string)
- val = strings.ReplaceAll(val, "\\", "")
- val = strings.ReplaceAll(val, "\n", "")
- val = strings.ReplaceAll(val, "\t", "")
- val = strings.TrimSpace(val)
+ if image, ok := d.GetOk("image_id"); ok {
+ createReqX86.ImageID = uint64(image.(int))
+ }
+ if withoutBootDisk, ok := d.GetOk("without_boot_disk"); ok {
+ createReqX86.WithoutBootDisk = withoutBootDisk.(bool)
+ }
- createReqX86.CustomFields = val
- }
+ if custom_fields, ok := d.GetOk("custom_fields"); ok {
+ val := custom_fields.(string)
+ val = strings.ReplaceAll(val, "\\", "")
+ val = strings.ReplaceAll(val, "\n", "")
+ val = strings.ReplaceAll(val, "\t", "")
+ val = strings.TrimSpace(val)
- if numaAffinity, ok := d.GetOk("numa_affinity"); ok {
- createReqX86.NumaAffinity = numaAffinity.(string)
- }
- createReqX86.CPUPin = d.Get("cpu_pin").(bool)
- createReqX86.HPBacked = d.Get("hp_backed").(bool)
+ createReqX86.CustomFields = val
+ }
- log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
- apiResp, err := c.CloudAPI().KVMX86().Create(ctx, createReqX86)
- if err != nil {
- return diag.FromErr(err)
- }
+ if numaAffinity, ok := d.GetOk("numa_affinity"); ok {
+ createReqX86.NumaAffinity = numaAffinity.(string)
+ }
+ createReqX86.CPUPin = d.Get("cpu_pin").(bool)
+ createReqX86.HPBacked = d.Get("hp_backed").(bool)
+ createReqX86.Chipset = d.Get("chipset").(string)
- d.SetId(strconv.FormatUint(apiResp, 10))
- computeId = apiResp
+ log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
+ apiResp, err := c.CloudAPI().KVMX86().Create(ctx, createReqX86)
+ if err != nil {
+ return diag.FromErr(err)
}
+ d.SetId(strconv.FormatUint(apiResp, 10))
+ computeId = apiResp
+
warnings := dc.Warnings{}
cleanup := false
@@ -730,12 +648,13 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
return diag.Errorf("resourceComputeUpdate: can't update compute because extnet ID %d is not allowed or does not exist", extNetId)
}
case "VFNIC":
- if d.Get("driver").(string) == "KVM_PPC" {
- return diag.Errorf("resourceComputeUpdate: can't create compute because 'VFNIC' net_type is not allowed for driver 'KVM_PPC'")
- }
if vfpoolId, ok := existVFPoolId(ctx, m, networkData["net_id"].(int)); !ok {
return diag.Errorf("resourceComputeUpdate: can't create compute because vfpool ID %d is not allowed or does not exist", vfpoolId)
}
+ case "DPDK":
+ if dpdkId, ok := existDPDKNetId(ctx, m, networkData["net_id"].(int)); !ok {
+ return diag.Errorf("resourceComputeCreate: can't create compute because DPDK ID %d is not allowed or does not exist", dpdkId)
+ }
default:
continue
}
@@ -960,6 +879,10 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
req.HPBacked = d.Get("hp_backed").(bool)
}
+ if d.HasChange("chipset") {
+ req.Chipset = d.Get("chipset").(string)
+ }
+
// Note bene: numa_affinity, cpu_pin and hp_backed are not allowed to be changed for compute in STARTED tech status.
// If STARTED, we need to stop it before update
var isStopRequired bool
@@ -1449,10 +1372,19 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
Label: snapshotItem["label"].(string),
}
- _, err := c.CloudAPI().Compute().SnapshotDelete(ctx, req)
- if err != nil {
- return diag.FromErr(err)
+ asyncMode, ok := d.GetOk("snapshot_delete_async")
+ if ok && asyncMode.(bool) {
+ _, err := c.CloudAPI().Compute().SnapshotDeleteAsync(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ } else {
+ _, err := c.CloudAPI().Compute().SnapshotDelete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
}
+
}
}
@@ -1924,7 +1856,7 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
Required: true,
// ForceNew: true,
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86", "KVM_PPC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86"}, false), // observe case while validating
Description: "Hardware architecture of this compute instance.",
},
"cpu": {
@@ -1948,6 +1880,12 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
//ForceNew: true, //REDEPLOY
Description: "ID of the OS image to base this compute instance on.",
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "Type of the emulated system.",
+ },
"without_boot_disk": {
Type: schema.TypeBool,
Optional: true,
@@ -2124,6 +2062,10 @@ func ResourceComputeSchemaMake() map[string]*schema.Schema {
Schema: snapshotSubresourceSchemaMake(),
},
},
+ "snapshot_delete_async": {
+ Type: schema.TypeBool,
+ Optional: true,
+ },
"rollback": {
Type: schema.TypeSet,
MaxItems: 1,
diff --git a/internal/service/cloudapi/kvmvm/utility_compute.go b/internal/service/cloudapi/kvmvm/utility_compute.go
index a3869b2..ded1fa7 100644
--- a/internal/service/cloudapi/kvmvm/utility_compute.go
+++ b/internal/service/cloudapi/kvmvm/utility_compute.go
@@ -177,13 +177,16 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
oldSet, newSet := d.GetChange("network")
+ oldList := oldSet.(*schema.Set).List()
+ newList := newSet.(*schema.Set).List()
+
+ detachMap, changeIpMap, attachMap := differenceNetwork(oldList, newList)
+
apiErrCount := 0
var lastSavedError error
- detachSet := oldSet.(*schema.Set).Difference(newSet.(*schema.Set))
- log.Debugf("utilityComputeNetworksConfigure: detach set has %d items for Compute ID %s", detachSet.Len(), d.Id())
- for _, runner := range detachSet.List() {
- netData := runner.(map[string]interface{})
+ log.Debugf("utilityComputeNetworksConfigure: detach set has %d items for Compute ID %s", len(detachMap), d.Id())
+ for _, netData := range detachMap {
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
req := compute.NetDetachRequest{
ComputeID: computeId,
@@ -200,22 +203,41 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
}
}
+ log.Debugf("utilityComputeNetworksConfigure: changeIp set has %d items for Compute ID %s", len(changeIpMap), d.Id())
+ for _, netData := range changeIpMap {
+ computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req := compute.ChangeIPRequest{
+ ComputeID: computeId,
+ NetType: netData["net_type"].(string),
+ NetID: uint64(netData["net_id"].(int)),
+ IPAddr: netData["ip_address"].(string),
+ }
+
+ _, err := c.CloudAPI().Compute().ChangeIP(ctx, req)
+ if err != nil {
+ log.Errorf("utilityComputeNetworksConfigure: failed to change net ID %d of type %s from Compute ID %s: %s",
+ netData["net_id"].(int), netData["net_type"].(string), d.Id(), err)
+ apiErrCount++
+ lastSavedError = err
+ }
+ }
+
needStart := false
- if d.Get("network").(*schema.Set).Len() == 1 || oldSet.(*schema.Set).Len() < 1 {
+ if oldSet.(*schema.Set).Len() == len(detachMap) || oldSet.(*schema.Set).Len() == 0 {
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
if err := utilityComputeStop(ctx, computeId, m); err != nil {
apiErrCount++
lastSavedError = err
}
- needStart = true
+ if start := d.Get("started"); start.(bool) {
+ needStart = true
+ }
}
- attachSet := newSet.(*schema.Set).Difference(oldSet.(*schema.Set))
- attachList := attachSet.List()
- sort.Slice(attachList, func(i, j int) bool {
- weightI := attachList[i].(map[string]interface{})["weight"].(int)
- weightJ := attachList[j].(map[string]interface{})["weight"].(int)
+ sort.Slice(attachMap, func(i, j int) bool {
+ weightI := attachMap[i]["weight"].(int)
+ weightJ := attachMap[j]["weight"].(int)
if weightI == 0 {
return false
}
@@ -224,9 +246,8 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
}
return weightI < weightJ
})
- log.Debugf("utilityComputeNetworksConfigure: attach set has %d items for Compute ID %s", attachSet.Len(), d.Id())
- for _, runner := range attachList {
- netData := runner.(map[string]interface{})
+ log.Debugf("utilityComputeNetworksConfigure: attach set has %d items for Compute ID %s", len(attachMap), d.Id())
+ for _, netData := range attachMap {
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
req := compute.NetAttachRequest{
ComputeID: computeId,
@@ -343,3 +364,50 @@ func utilityComputeUpdatePciDevices(ctx context.Context, d *schema.ResourceData,
return nil
}
+
+func differenceNetwork(oldList, newList []interface{}) (detachMap, changeIpMap, attachMap []map[string]interface{}) {
+ attachMap = make([]map[string]interface{}, 0)
+ changeIpMap = make([]map[string]interface{}, 0)
+ detachMap = make([]map[string]interface{}, 0)
+ for _, oldNetwork := range oldList {
+ oldMap := oldNetwork.(map[string]interface{})
+ found := false
+ for _, newNetwork := range newList {
+ newMap := newNetwork.(map[string]interface{})
+ if newMap["net_type"] == oldMap["net_type"] && newMap["net_id"] == oldMap["net_id"] && newMap["weight"] == oldMap["weight"] {
+ if (newMap["net_type"].(string) == "EXTNET" || newMap["net_type"].(string) == "VINS") && newMap["ip_address"] != oldMap["ip_address"] {
+ changeIpMap = append(changeIpMap, newMap)
+ found = true
+ break
+ } else if newMap["ip_address"] == oldMap["ip_address"] {
+ found = true
+ break
+ }
+ }
+ }
+ if found {
+ continue
+ }
+ detachMap = append(detachMap, oldMap)
+ }
+
+ for _, newNetwork := range newList {
+ newMap := newNetwork.(map[string]interface{})
+ found := false
+ for _, oldNetwork := range oldList {
+ oldMap := oldNetwork.(map[string]interface{})
+ if newMap["net_type"] == oldMap["net_type"] && newMap["net_id"] == oldMap["net_id"] && newMap["weight"] == oldMap["weight"] {
+ if newMap["ip_address"] == oldMap["ip_address"] || ((newMap["net_type"].(string) == "EXTNET" || newMap["net_type"].(string) == "VINS") && newMap["ip_address"] != oldMap["ip_address"]) {
+ found = true
+ break
+ }
+ }
+ }
+ if found {
+ continue
+ }
+ attachMap = append(attachMap, newMap)
+ }
+
+ return
+}
diff --git a/internal/service/cloudapi/rg/data_source_rg.go b/internal/service/cloudapi/rg/data_source_rg.go
index 2dc46d1..f42df3c 100644
--- a/internal/service/cloudapi/rg/data_source_rg.go
+++ b/internal/service/cloudapi/rg/data_source_rg.go
@@ -280,10 +280,7 @@ func dataSourceRgSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
+
"account_id": {
Type: schema.TypeInt,
Computed: true,
diff --git a/internal/service/cloudapi/rg/data_source_rg_usage.go b/internal/service/cloudapi/rg/data_source_rg_usage.go
index 9b49b61..2cc5f4b 100644
--- a/internal/service/cloudapi/rg/data_source_rg_usage.go
+++ b/internal/service/cloudapi/rg/data_source_rg_usage.go
@@ -59,10 +59,6 @@ func dataSourceRgUsageSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
"cpu": {
Type: schema.TypeInt,
diff --git a/internal/service/cloudapi/rg/flattens.go b/internal/service/cloudapi/rg/flattens.go
index 0f20842..86485d7 100644
--- a/internal/service/cloudapi/rg/flattens.go
+++ b/internal/service/cloudapi/rg/flattens.go
@@ -89,7 +89,6 @@ func flattenResgroup(d *schema.ResourceData, details rg.RecordResourceGroup) err
d.Set("account_id", details.AccountID)
d.Set("gid", details.GID)
- d.Set("def_net_type", details.DefNetType)
d.Set("name", details.Name)
d.Set("quota", flattenQuota(details.ResourceLimits))
d.Set("account_name", details.AccountName)
diff --git a/internal/service/cloudapi/rg/resource_rg.go b/internal/service/cloudapi/rg/resource_rg.go
index 2fa6dff..4f78481 100644
--- a/internal/service/cloudapi/rg/resource_rg.go
+++ b/internal/service/cloudapi/rg/resource_rg.go
@@ -45,7 +45,6 @@ import (
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/status"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)
@@ -139,8 +138,6 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
}
if defNetType, ok := d.GetOk("def_net_type"); ok {
req.DefNet = defNetType.(string) // NOTE: in API default network type is set by "def_net" parameter
- } else {
- d.Set("def_net_type", "PRIVATE")
}
if owner, ok := d.GetOk("owner"); ok {
@@ -155,10 +152,6 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
req.Description = description.(string)
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
if extNetId, ok := d.GetOk("ext_net_id"); ok {
req.ExtNetID = uint64(extNetId.(int))
}
@@ -195,10 +188,6 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
Right: right,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
_, err := c.CloudAPI().RG().AccessGrant(ctx, req)
if err != nil {
w.Add(err)
@@ -222,16 +211,12 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
if netID, ok := defNetItem["net_id"]; ok {
req.NetID = uint64(netID.(int))
}
- if reason, ok := defNetItem["reason"]; ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudAPI().RG().SetDefNet(ctx, req)
if err != nil {
w.Add(err)
}
- d.Set("def_net_type", netType)
}
}
@@ -242,10 +227,6 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
RGID: apiResp,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
_, err := c.CloudAPI().RG().Enable(ctx, req)
if err != nil {
w.Add(err)
@@ -255,10 +236,6 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
RGID: apiResp,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
_, err := c.CloudAPI().RG().Disable(ctx, req)
if err != nil {
w.Add(err)
@@ -287,7 +264,6 @@ func resourceResgroupRead(ctx context.Context, d *schema.ResourceData, m interfa
case status.Modeled:
return diag.Errorf("The resource group is in status: %s, please, contact support for more information", rgData.Status)
case status.Created:
- case status.Enabled:
case status.Deleted:
// restoreReq := rg.RestoreRequest{RGID: rgData.ID}
// enableReq := rg.EnableRequest{RGID: rgData.ID}
@@ -374,10 +350,6 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
if restore, ok := d.GetOk("restore"); ok && restore.(bool) {
restoreReq := rg.RestoreRequest{RGID: rgData.ID}
- if reason, ok := d.GetOk("reason"); ok {
- restoreReq.Reason = reason.(string)
- }
-
_, err := c.CloudAPI().RG().Restore(ctx, restoreReq)
if err != nil {
return diag.FromErr(err)
@@ -386,9 +358,6 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
if enable, ok := d.GetOk("enable"); ok && enable.(bool) {
enableReq := rg.EnableRequest{RGID: rgData.ID}
- if reason, ok := d.GetOk("reason"); ok {
- enableReq.Reason = reason.(string)
- }
_, err = c.CloudAPI().RG().Enable(ctx, enableReq)
if err != nil {
return diag.FromErr(err)
@@ -423,26 +392,19 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
The following code fragment checks if any of these have been changed and generates error.
*/
- if d.HasChange("def_net") {
- _, newDefNet := d.GetChange("def_net")
- if newDefNet.(*schema.Set).Len() == 0 {
- return diag.Errorf("resourceResgroupUpdate: block def_net must not be empty")
- }
- }
for _, attr := range []string{"def_net_type", "ipcidr", "ext_ip"} {
- attr_new, attr_old := d.GetChange("def_net_type")
- if attr_new.(string) != attr_old.(string) {
+ attrNew, attrOld := d.GetChange(attr)
+ if attrNew.(string) != attrOld.(string) {
return diag.FromErr(fmt.Errorf("resourceResgroupUpdate: RG ID %s: changing %s for existing RG is not allowed", d.Id(), attr))
}
}
- attrNew, attrOld := d.GetChange("ext_net_id")
- if attrNew.(int) != attrOld.(int) {
+ if d.HasChange("ext_net_id") {
return diag.FromErr(fmt.Errorf("resourceResgroupUpdate: RG ID %s: changing ext_net_id for existing RG is not allowed", d.Id()))
}
- if d.HasChanges("name", "quota", "description", "register_computes") {
+ if d.HasChanges("name", "quota", "description", "register_computes", "uniq_pools") {
if err := utilityUpdateRG(ctx, d, m, rgData.ID); err != nil {
return diag.FromErr(err)
}
@@ -477,9 +439,6 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
RGID: rgData.ID,
User: user,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudAPI().RG().AccessRevoke(ctx, req)
if err != nil {
@@ -499,10 +458,6 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
Right: right,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
_, err := c.CloudAPI().RG().AccessGrant(ctx, req)
if err != nil {
return diag.FromErr(err)
@@ -511,30 +466,31 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
}
if d.HasChange("def_net") {
- if ok := d.HasChange("def_net"); ok {
- oldDefNet, newDefNet := d.GetChange("def_net")
- if newDefNet.(*schema.Set).Len() > 0 {
- changedDefNet := (newDefNet.(*schema.Set).Difference(oldDefNet.(*schema.Set))).List()
- for _, changedDefNetInterface := range changedDefNet {
- defNetItem := changedDefNetInterface.(map[string]interface{})
- netType := defNetItem["net_type"].(string)
-
- req := rg.SetDefNetRequest{
- RGID: rgData.ID,
- NetType: netType,
- }
-
- if netID, ok := defNetItem["net_id"]; ok {
- req.NetID = uint64(netID.(int))
- }
- if reason, ok := defNetItem["reason"]; ok {
- req.Reason = reason.(string)
- }
-
- _, err := c.CloudAPI().RG().SetDefNet(ctx, req)
- if err != nil {
- return diag.FromErr(err)
- }
+ oldDefNet, newDefNet := d.GetChange("def_net")
+ if oldDefNet.(*schema.Set).Len() > 0 {
+ _, err := c.CloudAPI().RG().RemoveDefNet(ctx, rg.RemoveDefNetRequest{RGID: rgData.ID})
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ if newDefNet.(*schema.Set).Len() > 0 {
+ changedDefNet := (newDefNet.(*schema.Set).Difference(oldDefNet.(*schema.Set))).List()
+ for _, changedDefNetInterface := range changedDefNet {
+ defNetItem := changedDefNetInterface.(map[string]interface{})
+ netType := defNetItem["net_type"].(string)
+
+ req := rg.SetDefNetRequest{
+ RGID: rgData.ID,
+ NetType: netType,
+ }
+
+ if netID, ok := defNetItem["net_id"]; ok {
+ req.NetID = uint64(netID.(int))
+ }
+
+ _, err := c.CloudAPI().RG().SetDefNet(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
}
}
}
@@ -559,9 +515,6 @@ func resourceResgroupDelete(ctx context.Context, d *schema.ResourceData, m inter
if permanently, ok := d.GetOk("permanently"); ok {
req.Permanently = permanently.(bool)
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudAPI().RG().Delete(ctx, req)
if err != nil {
@@ -598,7 +551,6 @@ func ResourceRgSchemaMake() map[string]*schema.Schema {
"def_net_type": {
Type: schema.TypeString,
Optional: true,
- Computed: true,
ValidateFunc: validation.StringInSlice([]string{"PRIVATE", "PUBLIC", "NONE"}, false),
Description: "Type of the network, which this resource group will use as default for its computes - PRIVATE or PUBLIC or NONE.",
},
@@ -700,11 +652,6 @@ func ResourceRgSchemaMake() map[string]*schema.Schema {
Required: true,
Description: "Access rights to set, one of 'R', 'RCX' or 'ARCXDU'",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "Reason for action",
- },
},
},
},
@@ -727,11 +674,6 @@ func ResourceRgSchemaMake() map[string]*schema.Schema {
Default: 0,
Description: "Network segment ID. If netType is PUBLIC and netId is 0 then default external network segment will be selected. If netType is PRIVATE and netId=0, the first ViNS defined for this RG will be selected. Otherwise, netId identifies either existing external network segment or ViNS.",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "Reason for action",
- },
},
},
},
@@ -754,11 +696,6 @@ func ResourceRgSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "Set to True if you want force delete non-empty RG",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "Set to True if you want force delete non-empty RG",
- },
"register_computes": {
Type: schema.TypeBool,
Optional: true,
@@ -876,6 +813,7 @@ func ResourceRgSchemaMake() map[string]*schema.Schema {
},
"uniq_pools": {
Type: schema.TypeList,
+ Optional: true,
Computed: true,
Elem: &schema.Schema{
Type: schema.TypeString,
@@ -913,25 +851,18 @@ func ResourceResgroup() *schema.Resource {
Default: &constants.Timeout300s,
},
- Schema: ResourceRgSchemaMake(),
- CustomizeDiff: customdiff.All(
- customdiff.IfValueChange("def_net",
- func(ctx context.Context, oldValue, newValue, meta interface{}) bool {
- return true
- },
- func(ctx context.Context, d *schema.ResourceDiff, m interface{}) error {
- oldValue, newValue := d.GetChange("def_net")
-
- old := len(oldValue.(*schema.Set).List())
- new_ := len(newValue.(*schema.Set).List())
+ CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
+ if diff.HasChange("def_net") {
+ diff.SetNewComputed("def_net_id")
+ }
+ if diff.HasChanges() {
+ diff.SetNewComputed("updated_by")
+ diff.SetNewComputed("updated_time")
+ }
+ return nil
+ },
- if old == 1 && new_ == 0 {
- return fmt.Errorf("CustomizeDiff: block def_net must not be empty")
- }
- return nil
- },
- ),
- ),
+ Schema: ResourceRgSchemaMake(),
StateUpgraders: []schema.StateUpgrader{
{
Type: resourceRGResourceV1().CoreConfigSchema().ImpliedType(),
diff --git a/internal/service/cloudapi/rg/utility_rg.go b/internal/service/cloudapi/rg/utility_rg.go
index 01247c5..ed31dd6 100644
--- a/internal/service/cloudapi/rg/utility_rg.go
+++ b/internal/service/cloudapi/rg/utility_rg.go
@@ -52,9 +52,6 @@ func utilityResgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m
} else {
req.RGID = uint64(d.Get("rg_id").(int))
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
rgData, err := c.CloudAPI().RG().Get(ctx, req)
if err != nil {
@@ -137,8 +134,14 @@ func utilityUpdateRG(ctx context.Context, d *schema.ResourceData, m interface{},
req.RegisterComputes = d.Get("register_computes").(bool)
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
+ if d.HasChange("uniq_pools") {
+ uniqPools := d.Get("uniq_pools").([]interface{})
+ if len(uniqPools) == 0 {
+ req.ClearUniqPools = true
+ }
+ for _, pool := range uniqPools {
+ req.UniqPools = append(req.UniqPools, pool.(string))
+ }
}
_, err := c.CloudAPI().RG().Update(ctx, req)
diff --git a/internal/service/cloudapi/rg/utility_rg_usage.go b/internal/service/cloudapi/rg/utility_rg_usage.go
index e51d24e..6b664b9 100644
--- a/internal/service/cloudapi/rg/utility_rg_usage.go
+++ b/internal/service/cloudapi/rg/utility_rg_usage.go
@@ -46,10 +46,6 @@ func utilityDataRgUsageCheckPresence(ctx context.Context, d *schema.ResourceData
RGID: uint64(d.Get("rg_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
usage, err := c.CloudAPI().RG().Usage(ctx, req)
if err != nil {
return nil, err
diff --git a/internal/service/cloudapi/snapshot/resource_snapshot.go b/internal/service/cloudapi/snapshot/resource_snapshot.go
index 6f236f8..0b14f6a 100644
--- a/internal/service/cloudapi/snapshot/resource_snapshot.go
+++ b/internal/service/cloudapi/snapshot/resource_snapshot.go
@@ -86,9 +86,17 @@ func resourceSnapshotDelete(ctx context.Context, d *schema.ResourceData, m inter
Label: d.Get("label").(string),
}
- _, err := c.CloudAPI().Compute().SnapshotDelete(ctx, req)
- if err != nil {
- return diag.FromErr(err)
+ asyncMode, ok := d.GetOk("delete_async_mode")
+ if ok && asyncMode.(bool) {
+ _, err := c.CloudAPI().Compute().SnapshotDeleteAsync(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ } else {
+ _, err := c.CloudAPI().Compute().SnapshotDelete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
}
d.SetId("")
@@ -160,6 +168,11 @@ func resourceSnapshotSchemaMake() map[string]*schema.Schema {
Computed: true,
Description: "timestamp",
},
+ "delete_async_mode": {
+ Type: schema.TypeBool,
+ Computed: true,
+ Description: "async mode",
+ },
}
}
diff --git a/internal/service/cloudapi/vins/data_source_vins.go b/internal/service/cloudapi/vins/data_source_vins.go
index 3664d88..8bb1bff 100644
--- a/internal/service/cloudapi/vins/data_source_vins.go
+++ b/internal/service/cloudapi/vins/data_source_vins.go
@@ -154,6 +154,47 @@ func vnfInterfaceSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "mtu",
+ },
+ "libvirt_settings": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
"name": {
Type: schema.TypeString,
Computed: true,
@@ -170,7 +211,7 @@ func vnfInterfaceSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
- "node_id" : {
+ "node_id": {
Type: schema.TypeInt,
Computed: true,
},
@@ -178,6 +219,10 @@ func vnfInterfaceSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"qos": {
Type: schema.TypeList,
Computed: true,
diff --git a/internal/service/cloudapi/vins/data_source_vins_list.go b/internal/service/cloudapi/vins/data_source_vins_list.go
index 62c16a5..5fb8f33 100644
--- a/internal/service/cloudapi/vins/data_source_vins_list.go
+++ b/internal/service/cloudapi/vins/data_source_vins_list.go
@@ -83,6 +83,11 @@ func dataSourceVinsListSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "Filter by external IP address",
},
+ "vnf_dev_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by VNF Device id",
+ },
"include_deleted": {
Type: schema.TypeBool,
Optional: true,
diff --git a/internal/service/cloudapi/vins/flattens.go b/internal/service/cloudapi/vins/flattens.go
index e74792d..ce2483b 100644
--- a/internal/service/cloudapi/vins/flattens.go
+++ b/internal/service/cloudapi/vins/flattens.go
@@ -87,25 +87,28 @@ func flattenInterfaces(interfaces []vins.ItemVNFInterface) []map[string]interfac
res := make([]map[string]interface{}, 0, len(interfaces))
for _, vnfInterface := range interfaces {
temp := map[string]interface{}{
- "conn_id": vnfInterface.ConnID,
- "conn_type": vnfInterface.ConnType,
- "def_gw": vnfInterface.DefGW,
- "enabled": vnfInterface.Enabled,
- "flipgroup_id": vnfInterface.FLIPGroupID,
- "guid": vnfInterface.GUID,
- "ip_address": vnfInterface.IPAddress,
- "listen_ssh": vnfInterface.ListenSSH,
- "mac": vnfInterface.MAC,
- "name": vnfInterface.Name,
- "net_id": vnfInterface.NetID,
- "net_mask": vnfInterface.NetMask,
- "net_type": vnfInterface.NetType,
- "node_id": vnfInterface.NodeID,
- "pci_slot": vnfInterface.PCISlot,
- "qos": flattenQOS(vnfInterface.QOS),
- "target": vnfInterface.Target,
- "type": vnfInterface.Type,
- "vnfs": vnfInterface.VNFs,
+ "conn_id": vnfInterface.ConnID,
+ "conn_type": vnfInterface.ConnType,
+ "def_gw": vnfInterface.DefGW,
+ "enabled": vnfInterface.Enabled,
+ "flipgroup_id": vnfInterface.FLIPGroupID,
+ "guid": vnfInterface.GUID,
+ "ip_address": vnfInterface.IPAddress,
+ "listen_ssh": vnfInterface.ListenSSH,
+ "mac": vnfInterface.MAC,
+ "mtu": vnfInterface.MTU,
+ "name": vnfInterface.Name,
+ "net_id": vnfInterface.NetID,
+ "net_mask": vnfInterface.NetMask,
+ "net_type": vnfInterface.NetType,
+ "node_id": vnfInterface.NodeID,
+ "pci_slot": vnfInterface.PCISlot,
+ "bus_number": vnfInterface.BusNumber,
+ "qos": flattenQOS(vnfInterface.QOS),
+ "target": vnfInterface.Target,
+ "type": vnfInterface.Type,
+ "vnfs": vnfInterface.VNFs,
+ "libvirt_settings": flattenLibvirtSettings(vnfInterface.LibvirtSettings),
}
res = append(res, temp)
}
@@ -113,6 +116,21 @@ func flattenInterfaces(interfaces []vins.ItemVNFInterface) []map[string]interfac
return res
}
+func flattenLibvirtSettings(libvirtSettings vins.LibvirtSettings) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "guid": libvirtSettings.GUID,
+ "txmode": libvirtSettings.TXMode,
+ "ioeventfd": libvirtSettings.IOEventFD,
+ "event_idx": libvirtSettings.EventIDx,
+ "queues": libvirtSettings.Queues,
+ "rx_queue_size": libvirtSettings.RXQueueSize,
+ "tx_queue_size": libvirtSettings.TXQueueSize,
+ }
+ res = append(res, temp)
+ return res
+}
+
func flattenVNFDev(vnfDev vins.RecordVNFDev) []map[string]interface{} {
res := make([]map[string]interface{}, 0)
temp := map[string]interface{}{
diff --git a/internal/service/cloudapi/vins/utility_vins_list.go b/internal/service/cloudapi/vins/utility_vins_list.go
index 320328b..8b682b9 100644
--- a/internal/service/cloudapi/vins/utility_vins_list.go
+++ b/internal/service/cloudapi/vins/utility_vins_list.go
@@ -66,6 +66,10 @@ func utilityVinsListCheckPresence(ctx context.Context, d *schema.ResourceData, m
req.ExtIP = ext_ip.(string)
}
+ if VNFDevId, ok := d.GetOk("vnfdev_id"); ok {
+ req.VNFDevId = uint64(VNFDevId.(int))
+ }
+
if includeDeleted, ok := d.GetOk("include_deleted"); ok {
req.IncludeDeleted = includeDeleted.(bool)
}
diff --git a/internal/service/cloudbroker/account/schema.go b/internal/service/cloudbroker/account/schema.go
index 8ac0fc6..b2e9cbf 100644
--- a/internal/service/cloudbroker/account/schema.go
+++ b/internal/service/cloudbroker/account/schema.go
@@ -49,11 +49,6 @@ func resourceAccountSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Required: true,
},
- "recursive_delete": {
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- },
},
},
},
diff --git a/internal/service/cloudbroker/account/utility_account.go b/internal/service/cloudbroker/account/utility_account.go
index b9c2e55..e108b25 100644
--- a/internal/service/cloudbroker/account/utility_account.go
+++ b/internal/service/cloudbroker/account/utility_account.go
@@ -165,9 +165,8 @@ func utilityAccountUsersUpdate(ctx context.Context, d *schema.ResourceData, m in
userConv := user.(map[string]interface{})
_, err := c.CloudBroker().Account().DeleteUser(ctx, account.DeleteUserRequest{
- AccountID: acc.ID,
- UserName: userConv["user_id"].(string),
- RecursiveDelete: userConv["recursive_delete"].(bool),
+ AccountID: acc.ID,
+ UserName: userConv["user_id"].(string),
})
if err != nil {
@@ -414,8 +413,7 @@ func isChangedUser(els []interface{}, el interface{}) bool {
elOldConv := elOld.(map[string]interface{})
elConv := el.(map[string]interface{})
if elOldConv["user_id"].(string) == elConv["user_id"].(string) &&
- (!strings.EqualFold(elOldConv["access_type"].(string), elConv["access_type"].(string)) ||
- elOldConv["recursive_delete"].(bool) != elConv["recursive_delete"].(bool)) {
+ (!strings.EqualFold(elOldConv["access_type"].(string), elConv["access_type"].(string))) {
return true
}
}
diff --git a/internal/service/cloudbroker/audit/data_source_audit_export_to_file.go b/internal/service/cloudbroker/audit/data_source_audit_export_to_file.go
new file mode 100644
index 0000000..029f8e2
--- /dev/null
+++ b/internal/service/cloudbroker/audit/data_source_audit_export_to_file.go
@@ -0,0 +1,92 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Sergey Kisil,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package audit
+
+import (
+ "context"
+ "os"
+
+ "github.com/google/uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceAuditsToFileRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ filePath := "audits.tar.gz"
+ if userPath, ok := d.GetOk("file_path"); ok {
+ filePath = userPath.(string)
+ }
+
+ log.Debugf("dataSourceAuditsToFileRead: create file with name: %s", filePath)
+ file, err := os.Create(filePath)
+ defer file.Close()
+ if err != nil {
+ d.SetId("") // ensure ID is empty in this case
+ return diag.FromErr(err)
+ }
+
+ data, err := utilityAuditsToFileCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("") // ensure ID is empty in this case
+ return diag.FromErr(err)
+ }
+
+ log.Debugf("dataSourceAuditsToFileRead: write data to file with name: %s", filePath)
+ _, err = file.Write(data)
+ if err != nil {
+ d.SetId("") // ensure ID is empty in this case
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+
+ return nil
+}
+
+func DataSourceAuditsToFile() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAuditsToFileRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAuditToFileSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudbroker/audit/flattens.go b/internal/service/cloudbroker/audit/flattens.go
index 85164fd..493de04 100644
--- a/internal/service/cloudbroker/audit/flattens.go
+++ b/internal/service/cloudbroker/audit/flattens.go
@@ -41,7 +41,6 @@ import (
func flattenAudit(d *schema.ResourceData, au *audit.RecordAudit) {
log.Debugf("flattenAudit: decoded audit guid %s", d.Get("audit_guid").(string))
- d.Set("apitask", au.Apitask)
d.Set("args", au.Arguments)
d.Set("call", au.Call)
d.Set("guid", au.GUID)
diff --git a/internal/service/cloudbroker/audit/schema.go b/internal/service/cloudbroker/audit/schema.go
index 49a4c51..229b4fb 100644
--- a/internal/service/cloudbroker/audit/schema.go
+++ b/internal/service/cloudbroker/audit/schema.go
@@ -10,10 +10,6 @@ func dataSourceAuditSchemaMake() map[string]*schema.Schema {
Description: "audit guid",
},
- "apitask": {
- Type: schema.TypeString,
- Computed: true,
- },
"args": {
Type: schema.TypeString,
Computed: true,
@@ -211,3 +207,13 @@ func dataSourceLinkedJobsSchemaMake() map[string]*schema.Schema {
},
}
}
+
+func dataSourceAuditToFileSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "file_path": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "file path",
+ },
+ }
+}
diff --git a/internal/service/cloudbroker/audit/utility_audit_export_to_file.go b/internal/service/cloudbroker/audit/utility_audit_export_to_file.go
new file mode 100644
index 0000000..7aa9697
--- /dev/null
+++ b/internal/service/cloudbroker/audit/utility_audit_export_to_file.go
@@ -0,0 +1,54 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Sergey Kisil,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package audit
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAuditsToFileCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) ([]byte, error) {
+ c := m.(*controller.ControllerCfg)
+
+ log.Debugf("utilityAuditToFileCheckPresence: load audit file")
+ auditTar, err := c.CloudBroker().Audit().ExportAuditsToFile(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ return auditTar, nil
+}
diff --git a/internal/service/cloudbroker/disks/resource_disk.go b/internal/service/cloudbroker/disks/resource_disk.go
index 12111fd..3d6ac94 100644
--- a/internal/service/cloudbroker/disks/resource_disk.go
+++ b/internal/service/cloudbroker/disks/resource_disk.go
@@ -264,7 +264,6 @@ func resourceDiskDelete(ctx context.Context, d *schema.ResourceData, m interface
DiskID: disk.ID,
Detach: d.Get("detach").(bool),
Permanently: d.Get("permanently").(bool),
- Reason: d.Get("reason").(string),
}
_, err = c.CloudBroker().Disks().Delete(ctx, req)
@@ -334,12 +333,6 @@ func resourceDiskRestore(ctx context.Context, d *schema.ResourceData, m interfac
DiskID: uint64(d.Get("disk_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- } else {
- req.Reason = "Terraform automatic restore"
- }
-
_, err := c.CloudBroker().Disks().Restore(ctx, req)
return err
}
diff --git a/internal/service/cloudbroker/disks/resource_disk_replication.go b/internal/service/cloudbroker/disks/resource_disk_replication.go
index 27298fa..223edd5 100644
--- a/internal/service/cloudbroker/disks/resource_disk_replication.go
+++ b/internal/service/cloudbroker/disks/resource_disk_replication.go
@@ -177,7 +177,6 @@ func resourceDiskReplicationDelete(ctx context.Context, d *schema.ResourceData,
DiskID: disk.ID,
Detach: d.Get("detach").(bool),
Permanently: d.Get("permanently").(bool),
- Reason: d.Get("reason").(string),
}
log.Debugf("resourceDiskReplicationDelete: delete disk replica for disk with ID: %d", diskId)
diff --git a/internal/service/cloudbroker/disks/schema.go b/internal/service/cloudbroker/disks/schema.go
index 6d4b265..c73eaf8 100644
--- a/internal/service/cloudbroker/disks/schema.go
+++ b/internal/service/cloudbroker/disks/schema.go
@@ -207,27 +207,27 @@ func dataSourceDiskSchemaMake() map[string]*schema.Schema {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"disk_id": {
- Type: schema.TypeInt,
+ Type: schema.TypeInt,
Computed: true,
},
"pool_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"role": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"self_volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"storage_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
},
@@ -611,27 +611,27 @@ func dataSourceDiskListSchemaMake() map[string]*schema.Schema {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"disk_id": {
- Type: schema.TypeInt,
+ Type: schema.TypeInt,
Computed: true,
},
"pool_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"role": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"self_volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"storage_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
},
@@ -1006,27 +1006,27 @@ func dataSourceDiskListDeletedSchemaMake() map[string]*schema.Schema {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"disk_id": {
- Type: schema.TypeInt,
+ Type: schema.TypeInt,
Computed: true,
},
"pool_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"role": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"self_volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"storage_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
},
@@ -1859,12 +1859,6 @@ func resourceDiskSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "whether to completely delete the disk, works only with non attached disks",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Default: "",
- Description: "reason for an action",
- },
"shareable": {
Type: schema.TypeBool,
Optional: true,
@@ -2072,27 +2066,27 @@ func resourceDiskSchemaMake() map[string]*schema.Schema {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"disk_id": {
- Type: schema.TypeInt,
+ Type: schema.TypeInt,
Computed: true,
},
"pool_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"role": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"self_volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"storage_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
},
@@ -2393,27 +2387,27 @@ func dataSourceDiskReplicationSchemaMake() map[string]*schema.Schema {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"disk_id": {
- Type: schema.TypeInt,
+ Type: schema.TypeInt,
Computed: true,
},
"pool_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"role": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"self_volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"storage_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
},
@@ -2568,11 +2562,7 @@ func resourceDiskReplicationSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "Delete disk permanently",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "Reason for disk deletion",
- },
+
"replica_disk_id": {
Type: schema.TypeInt,
Computed: true,
@@ -2771,27 +2761,27 @@ func resourceDiskReplicationSchemaMake() map[string]*schema.Schema {
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"disk_id": {
- Type: schema.TypeInt,
+ Type: schema.TypeInt,
Computed: true,
},
"pool_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"role": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"self_volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"storage_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
"volume_id": {
- Type: schema.TypeString,
+ Type: schema.TypeString,
Computed: true,
},
},
@@ -2889,4 +2879,4 @@ func resourceDiskReplicationSchemaMake() map[string]*schema.Schema {
}
return rets
-}
\ No newline at end of file
+}
diff --git a/internal/service/cloudbroker/dpdknet/data_source_dpdk.go b/internal/service/cloudbroker/dpdknet/data_source_dpdk.go
new file mode 100644
index 0000000..6b88eed
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/data_source_dpdk.go
@@ -0,0 +1,72 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+
+ "github.com/google/uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceDPDKNetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ dpdk, err := utilityDPDKNetCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+
+ flattenDPDKNet(d, dpdk)
+
+ return nil
+}
+
+func DataSourceDPDKNet() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDPDKNetRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDPDKNetSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudbroker/dpdknet/data_source_dpdk_list.go b/internal/service/cloudbroker/dpdknet/data_source_dpdk_list.go
new file mode 100644
index 0000000..ef067e7
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/data_source_dpdk_list.go
@@ -0,0 +1,72 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+
+ "github.com/google/uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceDPDKNetListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ dpdkList, err := utilityDPDKNetListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenDPDKNetList(dpdkList))
+ d.Set("entry_count", dpdkList.EntryCount)
+
+ return nil
+}
+
+func DataSourceDPDKNetList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDPDKNetListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDPDKNetListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudbroker/dpdknet/flattens.go b/internal/service/cloudbroker/dpdknet/flattens.go
new file mode 100644
index 0000000..49f6003
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/flattens.go
@@ -0,0 +1,44 @@
+package dpdknet
+
+import (
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet"
+)
+
+func flattenDPDKNet(d *schema.ResourceData, dpdk *dpdk.RecordDPDKNet) {
+ d.Set("dpdk_id", dpdk.ID)
+ d.Set("account_access", dpdk.AccountAccess)
+ d.Set("created_time", dpdk.CreatedTime)
+ d.Set("desc", dpdk.Description)
+ d.Set("gid", dpdk.GID)
+ d.Set("guid", dpdk.GUID)
+ d.Set("name", dpdk.Name)
+ d.Set("rg_access", dpdk.RGAccess)
+ d.Set("status", dpdk.Status)
+ d.Set("ovs_bridge", dpdk.OVSBridge)
+ d.Set("vlan_id", dpdk.VlanID)
+ d.Set("compute_ids", dpdk.ComputeIDs)
+ d.Set("updated_time", dpdk.UpdatedTime)
+}
+
+func flattenDPDKNetList(list *dpdk.ListDPDKNet) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(list.Data))
+ for _, dpdk := range list.Data {
+ temp := map[string]interface{}{
+ "dpdk_id": dpdk.ID,
+ "account_access": dpdk.AccountAccess,
+ "desc": dpdk.Description,
+ "gid": dpdk.GID,
+ "guid": dpdk.GUID,
+ "name": dpdk.Name,
+ "rg_access": dpdk.RGAccess,
+ "status": dpdk.Status,
+ "ovs_bridge": dpdk.OVSBridge,
+ "vlan_id": dpdk.VlanID,
+ "compute_ids": dpdk.ComputeIDs,
+ "updated_time": dpdk.UpdatedTime,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
diff --git a/internal/service/cloudbroker/dpdknet/resource_check_input_values.go b/internal/service/cloudbroker/dpdknet/resource_check_input_values.go
new file mode 100644
index 0000000..19db0b6
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/resource_check_input_values.go
@@ -0,0 +1,24 @@
+package dpdknet
+
+import (
+ "context"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/ic"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func checkParamsExistence(ctx context.Context, d *schema.ResourceData, c *controller.ControllerCfg) diag.Diagnostics {
+ var errs []error
+
+ gid := uint64(d.Get("gid").(int))
+
+ if err := ic.ExistGID(ctx, gid, c); err != nil {
+ errs = append(errs, err)
+ }
+
+ return dc.ErrorsToDiagnostics(errs)
+}
diff --git a/internal/service/cloudbroker/dpdknet/resource_dpdk.go b/internal/service/cloudbroker/dpdknet/resource_dpdk.go
new file mode 100644
index 0000000..05adf30
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/resource_dpdk.go
@@ -0,0 +1,246 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+ "strconv"
+
+ dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/dc"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/status"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ log "github.com/sirupsen/logrus"
+)
+
+func resourceDPDKNetCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceDPDKNetCreate: called for DPDK network %s", d.Get("name").(string))
+ c := m.(*controller.ControllerCfg)
+
+ if diags := checkParamsExistence(ctx, d, c); diags != nil {
+ return diags
+ }
+
+ req := dpdk.CreateRequest{
+ Name: d.Get("name").(string),
+ GID: uint64(d.Get("gid").(int)),
+ VlanID: uint64(d.Get("vlan_id").(int)),
+ OVSBridge: d.Get("ovs_bridge").(string),
+ }
+
+ if desc, ok := d.GetOk("desc"); ok {
+ req.Description = desc.(string)
+ }
+
+ if accountAccess, ok := d.GetOk("account_access"); ok {
+ IDs := accountAccess.([]interface{})
+ for _, ID := range IDs {
+ req.AccountAccess = append(req.AccountAccess, uint64(ID.(int)))
+ }
+ }
+ if rgAccess, ok := d.GetOk("rg_access"); ok {
+ IDs := rgAccess.([]interface{})
+ for _, ID := range IDs {
+ req.RGAccess = append(req.RGAccess, uint64(ID.(int)))
+ }
+ }
+
+ dpdkID, err := c.CloudBroker().DPDKNet().Create(ctx, req)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ d.SetId(strconv.FormatUint(dpdkID, 10))
+ d.Set("dpdk_id", dpdkID)
+
+ warnings := dc.Warnings{}
+
+ if err = utilityDPDKNetEnabled(ctx, d, m); err != nil {
+ warnings.Add(err)
+ }
+
+ return append(warnings.Get(), resourceDPDKNetRead(ctx, d, m)...)
+}
+
+func resourceDPDKNetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceDPDKNetRead: called for pdpk_id %d", d.Get("dpdk_id").(int))
+ w := dc.Warnings{}
+
+ dpdkItem, err := utilityDPDKNetCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ log.Debugf("status: %s", dpdkItem.Status)
+
+ switch dpdkItem.Status {
+ case status.Destroyed, status.Purged:
+ d.Set("dpdk_id", 0)
+ d.SetId("")
+ return diag.Errorf("The resource cannot be read because it has been destroyed")
+ case status.Deleted:
+ case status.Assigned:
+ case status.Modeled:
+ return diag.Errorf("The DPDK network is in status: %s, please, contact support for more information", dpdkItem.Status)
+ case status.Creating:
+ case status.Created:
+ case status.Allocated:
+ case status.Unallocated:
+ }
+
+ flattenDPDKNet(d, dpdkItem)
+
+ return w.Get()
+}
+
+func resourceDPDKNetUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceDPDKNetUpdate: called for dpdk_id %d", d.Get("dpdk_id").(int))
+ c := m.(*controller.ControllerCfg)
+ w := dc.Warnings{}
+
+ if diags := checkParamsExistence(ctx, d, c); diags != nil {
+ return diags
+ }
+
+ dpdkItem, err := utilityDPDKNetCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ switch dpdkItem.Status {
+ case status.Destroyed, status.Purged:
+ d.Set("dpdk_id", 0)
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been destroyed")
+ case status.Deleted:
+ d.Set("dpdk_id", 0)
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been deleted")
+ case status.Assigned:
+ case status.Modeled:
+ return diag.Errorf("The DPDK network is in status: %s, please, contact support for more information", dpdkItem.Status)
+ case status.Creating:
+ case status.Created:
+ case status.Allocated:
+ case status.Unallocated:
+ }
+
+ if d.HasChange("enabled") {
+ if err := utilityDPDKNetEnabled(ctx, d, m); err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChanges("name", "desc", "vlan_id", "ovs_bridge", "account_access", "rg_access") {
+ if err := utilityDPDKNetUpdate(ctx, d, m); err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ return append(w.Get(), resourceDPDKNetRead(ctx, d, m)...)
+}
+
+func resourceDPDKNetDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceDPDKNetDelete: called for dpdk_id %d", d.Get("dpdk_id").(int))
+ c := m.(*controller.ControllerCfg)
+
+ dpdkItem, err := utilityDPDKNetCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ req := dpdk.DeleteRequest{
+ DPDKID: dpdkItem.ID,
+ }
+
+ if d.Get("enabled") == true {
+ req := dpdk.DisableRequest{
+ DPDKID: dpdkItem.ID,
+ }
+
+ if _, err := c.CloudBroker().DPDKNet().Disable(ctx, req); err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ _, err = c.CloudBroker().DPDKNet().Delete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ d.SetId("")
+
+ return nil
+}
+
+func ResourceDPDKNet() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ CreateContext: resourceDPDKNetCreate,
+ ReadContext: resourceDPDKNetRead,
+ UpdateContext: resourceDPDKNetUpdate,
+ DeleteContext: resourceDPDKNetDelete,
+
+ Importer: &schema.ResourceImporter{
+ StateContext: schema.ImportStatePassthroughContext,
+ },
+
+ CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
+ if diff.HasChange("enable") {
+ diff.SetNewComputed("status")
+ }
+ if diff.HasChanges() {
+ diff.SetNewComputed("updated_time")
+ }
+ return nil
+ },
+
+ Timeouts: &schema.ResourceTimeout{
+ Create: &constants.Timeout600s,
+ Read: &constants.Timeout300s,
+ Update: &constants.Timeout300s,
+ Delete: &constants.Timeout300s,
+ Default: &constants.Timeout300s,
+ },
+
+ Schema: resourceDPDKNetSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudbroker/dpdknet/schema.go b/internal/service/cloudbroker/dpdknet/schema.go
new file mode 100644
index 0000000..a2d3860
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/schema.go
@@ -0,0 +1,312 @@
+package dpdknet
+
+import "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+
+func dataSourceDPDKNetSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "dpdk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "The unique ID of the subscriber-owner of the DPDK network",
+ },
+ "account_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of accounts with access",
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of DPDK network",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "DPDK network ID on the storage side",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of network",
+ },
+ "rg_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of resource groups with access",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "DPDK network status",
+ },
+ "ovs_bridge": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "OVS bridge in which interfaces for computers created",
+ },
+ "vlan_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "vlan ID",
+ },
+ "compute_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "Compute IDs which uses this DPDK network",
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Updated time",
+ },
+ }
+
+ return res
+}
+
+func dataSourceDPDKNetListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "by_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by ID",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by GID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by name",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by description",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by status",
+ },
+ "compute_ids": {
+ Type: schema.TypeList,
+ Optional: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "Find by compute IDs",
+ },
+ "sort_by": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "sort by one of supported fields, format +|-(field)",
+ },
+ "page": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Page number",
+ },
+ "size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Page size",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "dpdk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "The unique ID of the subscriber-owner of the DPDK network",
+ },
+ "account_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of accounts with access",
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of DPDK network",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "DPDK network ID on the storage side",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of network",
+ },
+ "rg_access": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of resource groups with access",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "DPDK network status",
+ },
+ "ovs_bridge": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "OVS bridge in which interfaces for computers created",
+ },
+ "vlan_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "vlan ID",
+ },
+ "compute_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "Compute IDs which uses this DPDK network",
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Updated time",
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func resourceDPDKNetSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "gid": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the grid (platform)",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Name of network",
+ },
+ "ovs_bridge": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "OVS bridge in which interfaces for computers created",
+ },
+ "vlan_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "vlan ID",
+ },
+ "dpdk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the DPDK network",
+ },
+ "account_access": {
+ Type: schema.TypeList,
+ Optional: true,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of accounts with access",
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "Description of DPDK network",
+ },
+ "enabled": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "Enabled or disabled DPDK network",
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "DPDK network ID on the storage side",
+ },
+ "rg_access": {
+ Type: schema.TypeList,
+ Optional: true,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "List of resource groups with access",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "DPDK network status",
+ },
+ "compute_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "Compute IDs which uses this DPDK network",
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Updated time",
+ },
+ }
+ return res
+}
diff --git a/internal/service/cloudbroker/dpdknet/utility_dpdk.go b/internal/service/cloudbroker/dpdknet/utility_dpdk.go
new file mode 100644
index 0000000..0b9ee10
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/utility_dpdk.go
@@ -0,0 +1,166 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+ "strconv"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ log "github.com/sirupsen/logrus"
+ dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func utilityDPDKNetCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*dpdk.RecordDPDKNet, error) {
+ c := m.(*controller.ControllerCfg)
+ req := dpdk.GetRequest{}
+
+ if d.Get("dpdk_id") != nil {
+ if d.Get("dpdk_id").(int) == 0 {
+ id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.DPDKID = id
+ } else {
+ req.DPDKID = uint64(d.Get("dpdk_id").(int))
+ }
+ } else {
+ id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.DPDKID = id
+ }
+
+ log.Debugf("utilityDPDKCheckPresence: get DPDK network")
+ dpdk, err := c.CloudBroker().DPDKNet().Get(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return dpdk, nil
+}
+
+func utilityDPDKNetEnabled(ctx context.Context, d *schema.ResourceData, m interface{}) error {
+ c := m.(*controller.ControllerCfg)
+
+ dpdkID, _ := strconv.ParseUint(d.Id(), 10, 64)
+ enabled := d.Get("enabled").(bool)
+
+ if enabled {
+ req := dpdk.EnableRequest{
+ DPDKID: dpdkID,
+ }
+
+ if _, err := c.CloudBroker().DPDKNet().Enable(ctx, req); err != nil {
+ return err
+ }
+ } else {
+ req := dpdk.DisableRequest{
+ DPDKID: dpdkID,
+ }
+
+ if _, err := c.CloudBroker().DPDKNet().Disable(ctx, req); err != nil {
+ return err
+ }
+ }
+ log.Debugf("resourceDPDKNetUpdate: enable=%v DPDK Network ID %s after completing its resource configuration", enabled, d.Id())
+
+ return nil
+}
+
+func utilityDPDKNetUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) error {
+ c := m.(*controller.ControllerCfg)
+
+ dpdkID, _ := strconv.ParseUint(d.Id(), 10, 64)
+
+ req := dpdk.UpdateRequest{
+ DPDKID: dpdkID,
+ }
+
+ if d.HasChange("name") {
+ req.Name = d.Get("name").(string)
+ }
+
+ if d.HasChange("desc") {
+ req.Description = d.Get("desc").(string)
+ }
+
+ if d.HasChange("vlan_id") {
+ req.VlanID = uint64(d.Get("vlan_id").(int))
+ }
+
+ if d.HasChange("ovs_bridge") {
+ req.OVSBridge = d.Get("ovs_bridge").(string)
+ }
+
+ if d.HasChange("account_access") {
+ if accountAccess, ok := d.GetOk("account_access"); ok {
+ IDs := accountAccess.([]interface{})
+ for _, ID := range IDs {
+ req.AccountAccess = append(req.AccountAccess, uint64(ID.(int)))
+ }
+ }
+ }
+
+ if d.HasChange("rg_access") {
+ if rgAccess, ok := d.GetOk("rg_access"); ok {
+ IDs := rgAccess.([]interface{})
+ for _, ID := range IDs {
+ req.RGAccess = append(req.RGAccess, uint64(ID.(int)))
+ }
+ }
+ }
+
+ if d.Get("enabled") == true {
+ req := dpdk.DisableRequest{
+ DPDKID: dpdkID,
+ }
+
+ if _, err := c.CloudBroker().DPDKNet().Disable(ctx, req); err != nil {
+ return err
+ }
+ }
+
+ if _, err := c.CloudBroker().DPDKNet().Update(ctx, req); err != nil {
+ return err
+ }
+
+ if d.Get("enabled") == true {
+ req := dpdk.EnableRequest{
+ DPDKID: dpdkID,
+ }
+
+ if _, err := c.CloudBroker().DPDKNet().Enable(ctx, req); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
diff --git a/internal/service/cloudbroker/dpdknet/utility_dpdk_list.go b/internal/service/cloudbroker/dpdknet/utility_dpdk_list.go
new file mode 100644
index 0000000..a1b5a40
--- /dev/null
+++ b/internal/service/cloudbroker/dpdknet/utility_dpdk_list.go
@@ -0,0 +1,108 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package dpdknet
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityDPDKNetListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*dpdk.ListDPDKNet, error) {
+ c := m.(*controller.ControllerCfg)
+ req := dpdk.ListRequest{}
+
+ if byID, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(byID.(int))
+ }
+ if GID, ok := d.GetOk("gid"); ok {
+ req.GID = uint64(GID.(int))
+ }
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+ if desc, ok := d.GetOk("description"); ok {
+ req.Description = desc.(string)
+ }
+ if status, ok := d.GetOk("status"); ok {
+ req.Status = status.(string)
+ }
+ if vlanID, ok := d.GetOk("vlan_id"); ok {
+ req.VlanID = uint64(vlanID.(int))
+ }
+ if computeIDs, ok := d.GetOk("compute_ids"); ok {
+ IDs := computeIDs.([]interface{})
+ for _, ID := range IDs {
+ req.ComputeIDs = append(req.ComputeIDs, uint64(ID.(int)))
+ }
+ }
+ if computeIDs, ok := d.GetOk("compute_ids"); ok {
+ IDs := computeIDs.([]interface{})
+ for _, ID := range IDs {
+ req.ComputeIDs = append(req.ComputeIDs, uint64(ID.(int)))
+ }
+ }
+ if accountAccess, ok := d.GetOk("account_access"); ok {
+ IDs := accountAccess.([]interface{})
+ for _, ID := range IDs {
+ req.AccountAccess = append(req.AccountAccess, uint64(ID.(int)))
+ }
+ }
+ if rgAccess, ok := d.GetOk("rg_access"); ok {
+ IDs := rgAccess.([]interface{})
+ for _, ID := range IDs {
+ req.RGAccess = append(req.RGAccess, uint64(ID.(int)))
+ }
+ }
+ if sortBy, ok := d.GetOk("sort_by"); ok {
+ req.SortBy = sortBy.(string)
+ }
+ if page, ok := d.GetOk("page"); ok {
+ req.Page = uint64(page.(int))
+ }
+ if size, ok := d.GetOk("size"); ok {
+ req.Size = uint64(size.(int))
+ }
+
+ log.Debugf("utilityDPDKListCheckPresence: load DPDK network list")
+ dpdkList, err := c.CloudBroker().DPDKNet().List(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return dpdkList, nil
+}
diff --git a/internal/service/cloudbroker/grid/data_source_grid_get_settings.go b/internal/service/cloudbroker/grid/data_source_grid_get_settings.go
new file mode 100644
index 0000000..3491a7b
--- /dev/null
+++ b/internal/service/cloudbroker/grid/data_source_grid_get_settings.go
@@ -0,0 +1,69 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package grid
+
+import (
+ "context"
+
+ "github.com/google/uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceGridGetSettingsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ gridSettings, err := utilityGridGetSettingsCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ id := uuid.New()
+ d.SetId(id.String())
+ flattenGridSettings(d, gridSettings)
+
+ return nil
+}
+
+func DataSourceGridGetSettings() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceGridGetSettingsRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceGridGetSettingsSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudbroker/grid/flattens.go b/internal/service/cloudbroker/grid/flattens.go
index cac0817..4e28336 100644
--- a/internal/service/cloudbroker/grid/flattens.go
+++ b/internal/service/cloudbroker/grid/flattens.go
@@ -1,12 +1,16 @@
package grid
import (
+ "encoding/json"
+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/grid"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/flattens"
)
func flattenGrid(d *schema.ResourceData, grid *grid.RecordGrid) {
+ d.Set("ckey", grid.CKey)
+ d.Set("meta", flattens.FlattenMeta(grid.Meta))
d.Set("auth_broker", flattens.FlattenMeta(grid.AuthBroker))
d.Set("name", grid.Name)
d.Set("flag", grid.Flag)
@@ -88,3 +92,83 @@ func flattenGridSeps(seps map[string]map[string]grid.DiskUsage) []map[string]int
}
return res
}
+
+func flattenGridSettings(d *schema.ResourceData, gridSettings *grid.RecordSettingsGrid) {
+ limits, _ := json.Marshal(gridSettings.Limits)
+ d.Set("allowed_ports", gridSettings.Allowedports)
+ d.Set("cleanup_retention_period", gridSettings.CleanupRetentionPeriod)
+ d.Set("docker_registry", flattenDockerRegistry(gridSettings.DockerRegistry))
+ d.Set("enable_uptime_monitor", gridSettings.EnableUptimeMonitor)
+ d.Set("extnet_max_pre_reservations_num", gridSettings.ExtnetMaxPreReservationsNum)
+ d.Set("healthcheck_notifications", flattenHealthcheckNotifications(gridSettings.HealthcheckNotifications))
+ d.Set("k8s_cleanup_enabled", gridSettings.K8sCleanupEnabled)
+ d.Set("limits", string(limits))
+ d.Set("location_url", gridSettings.LocationURL)
+ d.Set("net_qos", flattenNetQOS(gridSettings.NetQOS))
+ d.Set("networks", gridSettings.Networks)
+ d.Set("prometheus", flattenPrometheus(gridSettings.Prometheus))
+ d.Set("vins_max_pre_reservations_num", gridSettings.VinsMaxPreReservationsNum)
+ d.Set("vnfdev_mgmt_net_range", gridSettings.VnfdevMgmtNetRange)
+}
+
+func flattenDockerRegistry(dr grid.DockerRegistry) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "password": dr.Password,
+ "server": dr.Server,
+ "username": dr.Username,
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenHealthcheckNotifications(hn grid.HealthcheckNotifications) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "emails": flattenEmails(hn.Emails),
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenEmails(emails []grid.Emails) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(emails))
+ for _, email := range emails {
+ temp := map[string]interface{}{
+ "address": email.Address,
+ "enabled": email.Enabled,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenNetQOS(netQOS grid.NetQOS) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "extnet": flattenSettingsNetQOS(netQOS.ExtNet),
+ "vins": flattenSettingsNetQOS(netQOS.VINS),
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenSettingsNetQOS(qos grid.SettingsNetQOS) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "e_rate": qos.ERate,
+ "in_burst": qos.InBurst,
+ "in_rate": qos.InRate,
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenPrometheus(pr grid.Prometheus) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "scrape_interval": pr.ScrapeInterval,
+ }
+ res = append(res, temp)
+ return res
+}
diff --git a/internal/service/cloudbroker/grid/schema.go b/internal/service/cloudbroker/grid/schema.go
index f21b9a2..693bc1a 100644
--- a/internal/service/cloudbroker/grid/schema.go
+++ b/internal/service/cloudbroker/grid/schema.go
@@ -8,6 +8,18 @@ func dataSourceGetGridSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
+ "ckey": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "meta": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ Description: "meta",
+ },
"auth_broker": {
Type: schema.TypeList,
Computed: true,
@@ -593,3 +605,160 @@ func dataSourceGridPostDiagnosisSchemaMake() map[string]*schema.Schema {
},
}
}
+
+func dataSourceGridGetSettingsSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "grid_id": {
+ Type: schema.TypeInt,
+ Description: "grid (platform) ID",
+ Required: true,
+ },
+ "allowed_ports": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "cleanup_retention_period": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "docker_registry": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "password": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "server": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "username": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "enable_uptime_monitor": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "extnet_max_pre_reservations_num": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "healthcheck_notifications": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "emails": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "address": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "enabled": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "k8s_cleanup_enabled": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "limits": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "location_url": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "net_qos": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "extnet": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "e_rate": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "in_burst": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "in_rate": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "vins": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "e_rate": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "in_burst": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "in_rate": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "networks": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "prometheus": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "scrape_interval": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "vins_max_pre_reservations_num": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vnfdev_mgmt_net_range": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ }
+}
diff --git a/internal/service/cloudbroker/grid/utility_grid_get_settings.go b/internal/service/cloudbroker/grid/utility_grid_get_settings.go
new file mode 100644
index 0000000..ea70a4c
--- /dev/null
+++ b/internal/service/cloudbroker/grid/utility_grid_get_settings.go
@@ -0,0 +1,63 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package grid
+
+import (
+ "context"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/grid"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityGridGetSettingsCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*grid.RecordSettingsGrid, error) {
+ c := m.(*controller.ControllerCfg)
+ req := grid.GetSettingsRequest{}
+
+ if d.Id() != "" {
+ id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.GID = id
+ } else {
+ req.GID = uint64(d.Get("grid_id").(int))
+ }
+
+ log.Debugf("utilityGridutilityGridGetSettingsCheckPresenceCheckPresence: load grid settings")
+ gridSettingsRec, err := c.CloudBroker().Grid().GetSettings(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return gridSettingsRec, nil
+}
diff --git a/internal/service/cloudbroker/ic/input_checks.go b/internal/service/cloudbroker/ic/input_checks.go
index 1b56891..4ccc77b 100644
--- a/internal/service/cloudbroker/ic/input_checks.go
+++ b/internal/service/cloudbroker/ic/input_checks.go
@@ -8,6 +8,7 @@ import (
cb_account "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
cb_compute "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/compute"
cb_disks "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/disks"
+ cb_dpdk "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet"
cb_extnet "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/extnet"
cb_gid "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/grid"
cb_image "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/image"
@@ -284,6 +285,39 @@ func ExistVFPools(ctx context.Context, vfpoolIds []uint64, c *controller.Control
return errs
}
+func ExistDPDKNet(ctx context.Context, dpdkIds []uint64, c *controller.ControllerCfg) []error {
+ var errs []error
+
+ if len(dpdkIds) == 0 {
+ return errs
+ }
+
+ req := cb_dpdk.ListRequest{}
+
+ dpdkList, err := c.CloudBroker().DPDKNet().List(ctx, req)
+ if err != nil {
+ errs = append(errs, err)
+ return errs
+ }
+
+ for _, dpdkId := range dpdkIds {
+ found := false
+
+ for _, dpdk := range dpdkList.Data {
+ if dpdkId == dpdk.ID {
+ found = true
+ break
+ }
+ }
+
+ if !found {
+ errs = append(errs, fmt.Errorf("DPDKNet with ID %v not found", dpdkId))
+ }
+ }
+
+ return errs
+}
+
func ExistExtNetInLb(ctx context.Context, extNetId uint64, c *controller.ControllerCfg) error {
if extNetId == 0 {
return nil
diff --git a/internal/service/cloudbroker/image/resource_cdrom_image.go b/internal/service/cloudbroker/image/resource_cdrom_image.go
index b21f8f1..f265e77 100644
--- a/internal/service/cloudbroker/image/resource_cdrom_image.go
+++ b/internal/service/cloudbroker/image/resource_cdrom_image.go
@@ -130,10 +130,6 @@ func resourceCDROMImageDelete(ctx context.Context, d *schema.ResourceData, m int
ImageID: imageData.ID,
}
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudBroker().Image().DeleteCDROMImage(ctx, req)
if err != nil {
return diag.FromErr(err)
diff --git a/internal/service/cloudbroker/image/resource_image.go b/internal/service/cloudbroker/image/resource_image.go
index 364367a..aca6c55 100644
--- a/internal/service/cloudbroker/image/resource_image.go
+++ b/internal/service/cloudbroker/image/resource_image.go
@@ -141,13 +141,6 @@ func resourceImageDelete(ctx context.Context, d *schema.ResourceData, m interfac
ImageID: uint64(d.Get("image_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudBroker().Image().Delete(ctx, req)
if err != nil {
return diag.FromErr(err)
diff --git a/internal/service/cloudbroker/image/resource_image_from_blank_compute.go b/internal/service/cloudbroker/image/resource_image_from_blank_compute.go
index 05c8598..61afb9a 100644
--- a/internal/service/cloudbroker/image/resource_image_from_blank_compute.go
+++ b/internal/service/cloudbroker/image/resource_image_from_blank_compute.go
@@ -179,13 +179,6 @@ func resourceImageFromBlankComputeDelete(ctx context.Context, d *schema.Resource
ImageID: uint64(d.Get("image_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudBroker().Image().Delete(ctx, req)
if err != nil {
return diag.FromErr(err)
diff --git a/internal/service/cloudbroker/image/resource_image_from_platform_disk.go b/internal/service/cloudbroker/image/resource_image_from_platform_disk.go
index 1762834..6bbb038 100644
--- a/internal/service/cloudbroker/image/resource_image_from_platform_disk.go
+++ b/internal/service/cloudbroker/image/resource_image_from_platform_disk.go
@@ -186,13 +186,6 @@ func resourceImageFromPlatformDiskDelete(ctx context.Context, d *schema.Resource
ImageID: uint64(d.Get("image_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudBroker().Image().Delete(ctx, req)
if err != nil {
return diag.FromErr(err)
diff --git a/internal/service/cloudbroker/image/resource_virtual_image.go b/internal/service/cloudbroker/image/resource_virtual_image.go
index facda76..9ebc244 100644
--- a/internal/service/cloudbroker/image/resource_virtual_image.go
+++ b/internal/service/cloudbroker/image/resource_virtual_image.go
@@ -99,13 +99,6 @@ func resourceVirtualImageDelete(ctx context.Context, d *schema.ResourceData, m i
ImageID: uint64(d.Get("image_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
- if permanently, ok := d.GetOk("permanently"); ok {
- req.Permanently = permanently.(bool)
- }
-
_, err = c.CloudBroker().Image().Delete(ctx, req)
if err != nil {
return diag.FromErr(err)
diff --git a/internal/service/cloudbroker/image/schema.go b/internal/service/cloudbroker/image/schema.go
index 7077693..849f299 100644
--- a/internal/service/cloudbroker/image/schema.go
+++ b/internal/service/cloudbroker/image/schema.go
@@ -407,6 +407,11 @@ func dataSourceImageListSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "page size",
},
+ "enabled": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "find by enabled True or False",
+ },
"items": {
Type: schema.TypeList,
Computed: true,
@@ -458,7 +463,7 @@ func dataSourceImageListSchemaMake() map[string]*schema.Schema {
"architecture": {
Type: schema.TypeString,
Computed: true,
- Description: "binary architecture of this image, one of X86_64 of PPC64_LE",
+ Description: "binary architecture of this image, one of X86_64",
},
"boot_type": {
Type: schema.TypeString,
@@ -716,7 +721,7 @@ func dataSourceImageSchemaMake() map[string]*schema.Schema {
"architecture": {
Type: schema.TypeString,
Computed: true,
- Description: "binary architecture of this image, one of X86_64 of PPC64_LE",
+ Description: "binary architecture of this image, one of X86_64",
},
"boot_type": {
Type: schema.TypeString,
@@ -922,7 +927,7 @@ func resourceCDROMImageSchemaMake() map[string]*schema.Schema {
},
"drivers": {
Type: schema.TypeList,
- Required: true,
+ Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
@@ -968,13 +973,7 @@ func resourceCDROMImageSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Optional: true,
Computed: true,
- Description: "binary architecture of this image, one of X86_64 of PPC64_LE",
- },
- "permanently": {
- Type: schema.TypeBool,
- Optional: true,
- Computed: true,
- Description: "Whether to completely delete the image",
+ Description: "binary architecture of this image, one of X86_64",
},
"bootable": {
Type: schema.TypeBool,
@@ -1269,12 +1268,7 @@ func resourceImageSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Optional: true,
Computed: true,
- Description: "binary architecture of this image, one of X86_64 of PPC64_LE",
- },
- "permanently": {
- Type: schema.TypeBool,
- Optional: true,
- Description: "Whether to completely delete the image",
+ Description: "binary architecture of this image, one of X86_64",
},
"bootable": {
Type: schema.TypeBool,
@@ -1313,10 +1307,7 @@ func resourceImageSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
},
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
+
"accounts": {
Type: schema.TypeList,
Optional: true,
@@ -1534,15 +1525,7 @@ func resourceVirtualImageSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
},
},
- "permanently": {
- Type: schema.TypeBool,
- Optional: true,
- Description: "Whether to completely delete the image",
- },
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
+
"unc_path": {
Type: schema.TypeString,
Computed: true,
@@ -1595,7 +1578,7 @@ func resourceVirtualImageSchemaMake() map[string]*schema.Schema {
"architecture": {
Type: schema.TypeString,
Computed: true,
- Description: "binary architecture of this image, one of X86_64 of PPC64_LE",
+ Description: "binary architecture of this image, one of X86_64",
},
"boot_type": {
Type: schema.TypeString,
@@ -1801,12 +1784,6 @@ func resourceImageFromBlankComputeSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "create an image in async/sync mode",
},
- "permanently": {
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- Description: "whether to completely delete the image",
- },
"bootable": {
Type: schema.TypeBool,
Optional: true,
@@ -1838,10 +1815,7 @@ func resourceImageFromBlankComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
},
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
+
"accounts": {
Type: schema.TypeList,
Optional: true,
@@ -2039,7 +2013,7 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
"architecture": {
Type: schema.TypeString,
Required: true,
- ValidateFunc: validation.StringInSlice([]string{"X86_64", "PPC64_LE"}, true),
+ ValidateFunc: validation.StringInSlice([]string{"X86_64"}, true),
Description: "Image type linux, windows or other",
},
@@ -2069,11 +2043,10 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
},
"drivers": {
Type: schema.TypeList,
- Optional: true,
- Computed: true,
+ Required: true,
Elem: &schema.Schema{
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86", "KVM_PPC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86"}, false), // observe case while validating
Type: schema.TypeString,
},
Description: "List of types of compute suitable for image. Example: [ \"KVM_X86\" ]",
@@ -2096,12 +2069,6 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
Default: false,
Description: "create an image in async/sync mode",
},
- "permanently": {
- Type: schema.TypeBool,
- Optional: true,
- Default: false,
- Description: "whether to completely delete the image",
- },
"bootable": {
Type: schema.TypeBool,
Optional: true,
@@ -2133,10 +2100,7 @@ func resourceImageFromPlatformDiskSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
},
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
+
"accounts": {
Type: schema.TypeList,
Optional: true,
diff --git a/internal/service/cloudbroker/image/utility_image_list.go b/internal/service/cloudbroker/image/utility_image_list.go
index 44d97ee..ed17f60 100644
--- a/internal/service/cloudbroker/image/utility_image_list.go
+++ b/internal/service/cloudbroker/image/utility_image_list.go
@@ -72,13 +72,13 @@ func utilityImageListCheckPresence(ctx context.Context, d *schema.ResourceData,
if pool, ok := d.GetOk("pool"); ok {
req.Pool = pool.(string)
}
- if public, ok := d.GetOk("public"); ok {
+ if public, ok := d.GetOkExists("public"); ok {
req.Public = public.(bool)
}
- if hotResize, ok := d.GetOk("hot_resize"); ok {
+ if hotResize, ok := d.GetOkExists("hot_resize"); ok {
req.HotResize = hotResize.(bool)
}
- if bootable, ok := d.GetOk("bootable"); ok {
+ if bootable, ok := d.GetOkExists("bootable"); ok {
req.Bootable = bootable.(bool)
}
if sortBy, ok := d.GetOk("sort_by"); ok {
@@ -90,7 +90,9 @@ func utilityImageListCheckPresence(ctx context.Context, d *schema.ResourceData,
if size, ok := d.GetOk("size"); ok {
req.Size = uint64(size.(int))
}
-
+ if enabled, ok := d.GetOkExists("enabled"); ok {
+ req.Enabled = enabled.(bool)
+ }
log.Debugf("utilityImageListCheckPresence: load image list")
imageList, err := c.CloudBroker().Image().List(ctx, req)
if err != nil {
diff --git a/internal/service/cloudbroker/image/utility_resource_create.go b/internal/service/cloudbroker/image/utility_resource_create.go
index adeb99e..9c229e1 100644
--- a/internal/service/cloudbroker/image/utility_resource_create.go
+++ b/internal/service/cloudbroker/image/utility_resource_create.go
@@ -48,14 +48,6 @@ func SyncCreateRequest(ctx context.Context, d *schema.ResourceData, m interface{
ImageType: d.Get("image_type").(string),
}
- c := m.(*controller.ControllerCfg)
-
- if err := ic.ExistGID(ctx, uint64(d.Get("gid").(int)), c); err != nil {
- return req, err
- }
-
- req.GID = uint64(d.Get("gid").(int))
-
if _, ok := d.GetOk("drivers"); ok {
drivers := []string{}
for _, driver := range d.Get("drivers").([]interface{}) {
diff --git a/internal/service/cloudbroker/k8s/data_source_k8s.go b/internal/service/cloudbroker/k8s/data_source_k8s.go
index 4b1ec0b..537d1d4 100644
--- a/internal/service/cloudbroker/k8s/data_source_k8s.go
+++ b/internal/service/cloudbroker/k8s/data_source_k8s.go
@@ -111,14 +111,16 @@ func dataSourceK8sRead(ctx context.Context, d *schema.ResourceData, m interface{
d.Set("kubeconfig", kubeconfig)
- getLbReq := lb.GetRequest{LBID: cluster.LBID}
- lb, err := c.CloudBroker().LB().Get(ctx, getLbReq)
- if err != nil {
- return diag.FromErr(err)
- }
+ if cluster.LBID != 0 {
+ getLbReq := lb.GetRequest{LBID: cluster.LBID}
+ lb, err := c.CloudBroker().LB().Get(ctx, getLbReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
- d.Set("extnet_id", lb.ExtNetID)
- d.Set("lb_ip", lb.PrimaryNode.FrontendIP)
+ d.Set("extnet_id", lb.ExtNetID)
+ d.Set("lb_ip", lb.PrimaryNode.FrontendIP)
+ }
flattenK8sData(d, cluster, masterComputeList, workersComputeList)
return nil
diff --git a/internal/service/cloudbroker/k8s/flattens.go b/internal/service/cloudbroker/k8s/flattens.go
index f3794d6..64fc176 100644
--- a/internal/service/cloudbroker/k8s/flattens.go
+++ b/internal/service/cloudbroker/k8s/flattens.go
@@ -64,6 +64,9 @@ func flattenResourceK8sCP(d *schema.ResourceData, k8s k8s.RecordK8S, masters []c
d.Set("updated_by", k8s.UpdatedBy)
d.Set("updated_time", k8s.UpdatedTime)
d.Set("network_plugin", k8s.NetworkPlugin)
+ d.Set("highly_available_lb", k8s.HighlyAvailableLB)
+ d.Set("address_vip", flattenAddressVIP(k8s.AddressVIP))
+ d.Set("extnet_only", k8s.ExtnetOnly)
flattenCPParams(d, k8s.K8SGroups.Masters, masters)
}
@@ -100,6 +103,20 @@ func flattenK8sData(d *schema.ResourceData, cluster *k8s.RecordK8S, masters []co
d.Set("tech_status", cluster.TechStatus)
d.Set("updated_by", cluster.UpdatedBy)
d.Set("updated_time", cluster.UpdatedTime)
+ d.Set("highly_available_lb", cluster.HighlyAvailableLB)
+ d.Set("address_vip", flattenAddressVIP(cluster.AddressVIP))
+ d.Set("extnet_only", cluster.ExtnetOnly)
+ d.Set("with_lb", cluster.WithLB)
+}
+
+func flattenAddressVIP(addressVIP k8s.K8SAddressVIP) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "backend_ip": addressVIP.BackendIP,
+ "frontend_ip": addressVIP.FrontendIP,
+ }
+ res = append(res, temp)
+ return res
}
func flattenAcl(acl k8s.RecordACLGroup) []map[string]interface{} {
diff --git a/internal/service/cloudbroker/k8s/resource_k8s_cp.go b/internal/service/cloudbroker/k8s/resource_k8s_cp.go
index f947300..3c91239 100644
--- a/internal/service/cloudbroker/k8s/resource_k8s_cp.go
+++ b/internal/service/cloudbroker/k8s/resource_k8s_cp.go
@@ -158,6 +158,10 @@ func resourceK8sCPCreate(ctx context.Context, d *schema.ResourceData, m interfac
createReq.OidcCertificate = oidcCertificate.(string)
}
+ if chipset, ok := d.GetOk("chipset"); ok {
+ createReq.Chipset = chipset.(string)
+ }
+
if extNetOnly, ok := d.GetOk("extnet_only"); ok {
createReq.ExtNetOnly = extNetOnly.(bool)
}
@@ -475,10 +479,10 @@ func handleUpdateNum(ctx context.Context, d *schema.ResourceData, c *controller.
oldVal, newVal := d.GetChange("num")
if oldVal.(int) > newVal.(int) {
- ids := make([]string, 0)
+ ids := make([]uint64, 0)
for i := oldVal.(int) - 1; i >= newVal.(int); i-- {
id := k8sData.K8SGroups.Masters.DetailedInfo[i].ID
- ids = append(ids, strconv.FormatUint(id, 10))
+ ids = append(ids, id)
}
req := k8s.DeleteMasterFromGroupRequest{
diff --git a/internal/service/cloudbroker/k8s/resource_k8s_wg.go b/internal/service/cloudbroker/k8s/resource_k8s_wg.go
index 07963ef..30734af 100644
--- a/internal/service/cloudbroker/k8s/resource_k8s_wg.go
+++ b/internal/service/cloudbroker/k8s/resource_k8s_wg.go
@@ -65,6 +65,7 @@ func resourceK8sWgCreate(ctx context.Context, d *schema.ResourceData, m interfac
WorkerRAM: uint64(d.Get("ram").(int)),
WorkerSEPID: uint64(d.Get("worker_sep_id").(int)),
WorkerSEPPool: d.Get("worker_sep_pool").(string),
+ Chipset: d.Get("chipset").(string),
}
if d.Get("disk") == nil {
@@ -187,6 +188,7 @@ func resourceK8sWgUpdate(ctx context.Context, d *schema.ResourceData, m interfac
K8SID: uint64(d.Get("k8s_id").(int)),
WorkersGroupID: wg.ID,
Num: uint64(newNum) - wg.Num,
+ Chipset: d.Get("chipset").(string),
}
_, err := c.CloudBroker().K8S().WorkerAdd(ctx, req)
diff --git a/internal/service/cloudbroker/k8s/schema.go b/internal/service/cloudbroker/k8s/schema.go
index 6c31296..ce9c1be 100644
--- a/internal/service/cloudbroker/k8s/schema.go
+++ b/internal/service/cloudbroker/k8s/schema.go
@@ -1439,6 +1439,11 @@ func resourceK8sCPSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "insert ssl certificate in x509 pem format",
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Type of the emulated system.",
+ },
"lb_sysctl_params": {
Type: schema.TypeList,
Optional: true,
@@ -1771,6 +1776,11 @@ func resourceK8sWgSchemaMake() map[string]*schema.Schema {
),
Description: "Node RAM in MB.",
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Type of the emulated system.",
+ },
"disk": {
Type: schema.TypeInt,
Optional: true,
diff --git a/internal/service/cloudbroker/kvmvm/data_source_compute.go b/internal/service/cloudbroker/kvmvm/data_source_compute.go
index 05cb415..1e74118 100644
--- a/internal/service/cloudbroker/kvmvm/data_source_compute.go
+++ b/internal/service/cloudbroker/kvmvm/data_source_compute.go
@@ -39,7 +39,6 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
- // "github.com/hashicorp/terraform-plugin-sdk/helper/validation"
)
func dataSourceComputeRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
diff --git a/internal/service/cloudbroker/kvmvm/flattens.go b/internal/service/cloudbroker/kvmvm/flattens.go
index 39a5aea..b28e385 100644
--- a/internal/service/cloudbroker/kvmvm/flattens.go
+++ b/internal/service/cloudbroker/kvmvm/flattens.go
@@ -38,6 +38,7 @@ func flattenCompute(d *schema.ResourceData, computeRec *compute.RecordCompute, p
d.Set("boot_disk_id", bootDisk.ID)
// we intentionally use the SizeMax field, do not change it until the BootDiskSize field is fixed on the platform
d.Set("boot_disk_size", bootDisk.SizeMax)
+ d.Set("chipset", computeRec.Chipset)
d.Set("cd_image_id", computeRec.CdImageId)
d.Set("clone_reference", computeRec.CloneReference)
d.Set("clones", computeRec.Clones)
@@ -156,31 +157,49 @@ func flattenInterfaces(ifaces compute.ListInterfaces) []map[string]interface{} {
for _, iface := range ifaces {
res = append(res, map[string]interface{}{
- "conn_id": iface.ConnID,
- "conn_type": iface.ConnType,
- "def_gw": iface.DefGW,
- "enabled": iface.Enabled,
- "flip_group_id": iface.FLIPGroupID,
- "guid": iface.GUID,
- "ip_address": iface.IPAddress,
- "listen_ssh": iface.ListenSSH,
- "mac": iface.MAC,
- "name": iface.Name,
- "net_id": iface.NetID,
- "netmask": iface.NetMask,
- "net_type": iface.NetType,
- "node_id": iface.NodeID,
- "pci_slot": iface.PCISlot,
- "qos": flattenQOS(iface.QOS),
- "target": iface.Target,
- "type": iface.Type,
- "vnfs": iface.VNFs,
+ "bus_number": iface.BusNumber,
+ "conn_id": iface.ConnID,
+ "conn_type": iface.ConnType,
+ "def_gw": iface.DefGW,
+ "enabled": iface.Enabled,
+ "flip_group_id": iface.FLIPGroupID,
+ "guid": iface.GUID,
+ "ip_address": iface.IPAddress,
+ "listen_ssh": iface.ListenSSH,
+ "mac": iface.MAC,
+ "mtu": iface.MTU,
+ "name": iface.Name,
+ "net_id": iface.NetID,
+ "netmask": iface.NetMask,
+ "net_type": iface.NetType,
+ "node_id": iface.NodeID,
+ "pci_slot": iface.PCISlot,
+ "qos": flattenQOS(iface.QOS),
+ "target": iface.Target,
+ "type": iface.Type,
+ "vnfs": iface.VNFs,
+ "libvirt_settings": flattenLibvirtSettings(iface.LibvirtSettings),
})
}
return res
}
+func flattenLibvirtSettings(libvirtSettings compute.LibvirtSettings) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "guid": libvirtSettings.GUID,
+ "txmode": libvirtSettings.TXMode,
+ "ioeventfd": libvirtSettings.IOEventFD,
+ "event_idx": libvirtSettings.EventIDx,
+ "queues": libvirtSettings.Queues,
+ "rx_queue_size": libvirtSettings.RXQueueSize,
+ "tx_queue_size": libvirtSettings.TXQueueSize,
+ }
+ res = append(res, temp)
+ return res
+}
+
func flattenQOS(qos compute.QOS) []map[string]interface{} {
return []map[string]interface{}{
{
@@ -275,6 +294,7 @@ func flattenComputeList(computes *compute.ListComputes) []map[string]interface{}
"affinity_weight": computeItem.AffinityWeight,
"anti_affinity_rules": flattenListRules(computeItem.AntiAffinityRules),
"arch": computeItem.Arch,
+ "chipset": computeItem.Chipset,
"cd_image_id": computeItem.CdImageId,
"boot_order": computeItem.BootOrder,
"bootdisk_size": computeItem.BootDiskSize,
@@ -406,8 +426,9 @@ func flattenDisks(disks []compute.InfoDisk) []map[string]interface{} {
res := make([]map[string]interface{}, 0)
for _, disk := range disks {
temp := map[string]interface{}{
- "disk_id": disk.ID,
- "pci_slot": disk.PCISlot,
+ "bus_number": disk.BusNumber,
+ "disk_id": disk.ID,
+ "pci_slot": disk.PCISlot,
}
res = append(res, temp)
}
@@ -593,6 +614,7 @@ func flattenDataCompute(d *schema.ResourceData, compFacts *compute.RecordCompute
d.Set("anti_affinity_rules", flattenAffinityRules(compFacts.AntiAffinityRules))
d.Set("arch", compFacts.Arch)
d.Set("boot_order", compFacts.BootOrder)
+ d.Set("chipset", compFacts.Chipset)
d.Set("cd_image_id", compFacts.CdImageId)
d.Set("clone_reference", compFacts.CloneReference)
d.Set("clones", compFacts.Clones)
@@ -708,6 +730,7 @@ func flattenDisk(diskList compute.ListDisks) []map[string]interface{} {
"meta": flattens.FlattenMeta(disk.Meta),
"account_id": disk.AccountID,
"boot_partition": disk.BootPartition,
+ "bus_number": disk.BusNumber,
"created_time": disk.CreatedTime,
"deleted_time": disk.DeletedTime,
"desc": disk.Description,
diff --git a/internal/service/cloudbroker/kvmvm/resource_check_input_values.go b/internal/service/cloudbroker/kvmvm/resource_check_input_values.go
index d373b77..b3ba89e 100644
--- a/internal/service/cloudbroker/kvmvm/resource_check_input_values.go
+++ b/internal/service/cloudbroker/kvmvm/resource_check_input_values.go
@@ -2,7 +2,6 @@ package kvmvm
import (
"context"
- "errors"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -37,7 +36,7 @@ func checkParamsExistence(ctx context.Context, d *schema.ResourceData, c *contro
func existNetworks(ctx context.Context, d *schema.ResourceData, c *controller.ControllerCfg) []error {
var errs []error
- var vinsIds, extNetIds, vfpoolIds []uint64
+ var vinsIds, extNetIds, vfpoolIds, dpdkIds []uint64
networksIface, ok := d.GetOk("network")
if !ok {
@@ -54,10 +53,9 @@ func existNetworks(ctx context.Context, d *schema.ResourceData, c *controller.Co
case "EXTNET":
extNetIds = append(extNetIds, uint64(network["net_id"].(int)))
case "VFNIC":
- if d.Get("driver").(string) == "KVM_PPC" {
- errs = append(errs, errors.New("'VFNIC' net_type is not allowed for driver 'KVM_PPC'"))
- }
vfpoolIds = append(vfpoolIds, uint64(network["net_id"].(int)))
+ case "DPDK":
+ dpdkIds = append(dpdkIds, uint64(network["net_id"].(int)))
default:
continue
}
@@ -75,5 +73,9 @@ func existNetworks(ctx context.Context, d *schema.ResourceData, c *controller.Co
errs = append(errs, vfpoolErrs...)
}
+ if dpdkErrs := ic.ExistDPDKNet(ctx, dpdkIds, c); dpdkErrs != nil {
+ errs = append(errs, dpdkErrs...)
+ }
+
return errs
}
diff --git a/internal/service/cloudbroker/kvmvm/resource_compute.go b/internal/service/cloudbroker/kvmvm/resource_compute.go
index 6780fee..4007a8a 100644
--- a/internal/service/cloudbroker/kvmvm/resource_compute.go
+++ b/internal/service/cloudbroker/kvmvm/resource_compute.go
@@ -42,7 +42,6 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
log "github.com/sirupsen/logrus"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/compute"
- "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/kvmppc"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/kvmx86"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
@@ -55,59 +54,48 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
c := m.(*controller.ControllerCfg)
createReqX86 := kvmx86.CreateRequest{}
- createReqPPC := kvmppc.CreateRequest{}
if diags := checkParamsExistence(ctx, d, c); diags != nil {
return diags
}
if desc, ok := d.GetOk("description"); ok {
- createReqPPC.Description = desc.(string)
createReqX86.Description = desc.(string)
}
if sepID, ok := d.GetOk("sep_id"); ok {
- createReqPPC.SEPID = uint64(sepID.(int))
createReqX86.SEPID = uint64(sepID.(int))
}
if pool, ok := d.GetOk("pool"); ok {
- createReqPPC.Pool = pool.(string)
createReqX86.Pool = pool.(string)
}
if stackID, ok := d.GetOk("stack_id"); ok {
- createReqPPC.StackID = uint64(stackID.(int))
createReqX86.StackID = uint64(stackID.(int))
}
if start, ok := d.GetOk("started"); ok {
- createReqPPC.Start = start.(bool)
createReqX86.Start = start.(bool)
}
if ipaType, ok := d.GetOk("ipa_type"); ok {
- createReqPPC.IPAType = ipaType.(string)
createReqX86.IPAType = ipaType.(string)
}
if bootSize, ok := d.GetOk("boot_disk_size"); ok {
- createReqPPC.BootDisk = uint64(bootSize.(int))
createReqX86.BootDisk = uint64(bootSize.(int))
}
if IS, ok := d.GetOk("is"); ok {
- createReqPPC.IS = IS.(string)
createReqX86.IS = IS.(string)
}
createReqX86.Interfaces = make([]kvmx86.Interface, 0)
- createReqPPC.Interfaces = make([]kvmppc.Interface, 0)
if networks, ok := d.GetOk("network"); ok {
if networks.(*schema.Set).Len() > 0 {
ns := networks.(*schema.Set).List()
- log.Debugf("BEFORE SORT %v", ns)
sort.Slice(ns, func(i, j int) bool {
weightI := ns[i].(map[string]interface{})["weight"].(int)
weightJ := ns[j].(map[string]interface{})["weight"].(int)
@@ -119,9 +107,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
return weightI < weightJ
})
- log.Debugf("AFTER SORT %v", ns)
interfacesX86 := make([]kvmx86.Interface, 0)
- interfacesPPC := make([]kvmppc.Interface, 0)
for _, elem := range ns {
netInterfaceVal := elem.(map[string]interface{})
@@ -139,28 +125,11 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
createReqX86.Interfaces = interfacesX86
- for _, elem := range ns {
- netInterfaceVal := elem.(map[string]interface{})
- reqInterface := kvmppc.Interface{
- NetType: netInterfaceVal["net_type"].(string),
- NetID: uint64(netInterfaceVal["net_id"].(int)),
- }
-
- ipaddr, ipSet := netInterfaceVal["ip_address"]
- if ipSet {
- reqInterface.IPAddr = ipaddr.(string)
- }
-
- interfacesPPC = append(interfacesPPC, reqInterface)
- }
- createReqPPC.Interfaces = interfacesPPC
-
}
}
if disks, ok := d.GetOk("disks"); ok {
disksX86 := make([]kvmx86.DataDisk, 0)
- disksPPC := make([]kvmppc.DataDisk, 0)
for _, elem := range disks.([]interface{}) {
diskVal := elem.(map[string]interface{})
@@ -185,96 +154,58 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
createReqX86.DataDisks = disksX86
- for _, elem := range disks.([]interface{}) {
- diskVal := elem.(map[string]interface{})
- reqDataDisk := kvmppc.DataDisk{
- DiskName: diskVal["disk_name"].(string),
- Size: uint64(diskVal["size"].(int)),
- }
- if sepId, ok := diskVal["sep_id"]; ok {
- reqDataDisk.SepID = uint64(sepId.(int))
- }
- if pool, ok := diskVal["pool"]; ok {
- reqDataDisk.Pool = pool.(string)
- }
- if desc, ok := diskVal["desc"]; ok {
- reqDataDisk.Description = desc.(string)
- }
- if imageID, ok := diskVal["image_id"]; ok {
- reqDataDisk.ImageID = uint64(imageID.(int))
- }
- disksPPC = append(disksPPC, reqDataDisk)
- }
-
- createReqPPC.DataDisks = disksPPC
}
if cloudInit, ok := d.GetOk("cloud_init"); ok {
userdata := cloudInit.(string)
if userdata != "" && userdata != "applied" {
- createReqPPC.Userdata = strings.TrimSpace(userdata)
createReqX86.Userdata = strings.TrimSpace(userdata)
}
}
var computeId uint64
driver := d.Get("driver").(string)
- if driver == "KVM_PPC" {
- createReqPPC.RGID = uint64(d.Get("rg_id").(int))
- createReqPPC.Name = d.Get("name").(string)
- createReqPPC.CPU = uint64(d.Get("cpu").(int))
- createReqPPC.RAM = uint64(d.Get("ram").(int))
- createReqPPC.ImageID = uint64(d.Get("image_id").(int))
-
- log.Debugf("resourceComputeCreate: creating Compute of type KVM VM PowerPC")
- apiResp, err := c.CloudBroker().KVMPPC().Create(ctx, createReqPPC)
- if err != nil {
- return diag.FromErr(err)
- }
- d.SetId(strconv.FormatUint(apiResp, 10))
- computeId = apiResp
- } else {
- createReqX86.RGID = uint64(d.Get("rg_id").(int))
- createReqX86.Name = d.Get("name").(string)
- createReqX86.CPU = uint64(d.Get("cpu").(int))
- createReqX86.RAM = uint64(d.Get("ram").(int))
+ createReqX86.RGID = uint64(d.Get("rg_id").(int))
+ createReqX86.Name = d.Get("name").(string)
+ createReqX86.CPU = uint64(d.Get("cpu").(int))
+ createReqX86.RAM = uint64(d.Get("ram").(int))
- if image, ok := d.GetOk("image_id"); ok {
- createReqX86.ImageID = uint64(image.(int))
- }
- if withoutBootDisk, ok := d.GetOk("without_boot_disk"); ok {
- createReqX86.WithoutBootDisk = withoutBootDisk.(bool)
- }
+ if image, ok := d.GetOk("image_id"); ok {
+ createReqX86.ImageID = uint64(image.(int))
+ }
+ if withoutBootDisk, ok := d.GetOk("without_boot_disk"); ok {
+ createReqX86.WithoutBootDisk = withoutBootDisk.(bool)
+ }
- createReqX86.Driver = driver
+ createReqX86.Driver = driver
- if custom_fields, ok := d.GetOk("custom_fields"); ok {
- val := custom_fields.(string)
- val = strings.ReplaceAll(val, "\\", "")
- val = strings.ReplaceAll(val, "\n", "")
- val = strings.ReplaceAll(val, "\t", "")
- val = strings.TrimSpace(val)
+ if custom_fields, ok := d.GetOk("custom_fields"); ok {
+ val := custom_fields.(string)
+ val = strings.ReplaceAll(val, "\\", "")
+ val = strings.ReplaceAll(val, "\n", "")
+ val = strings.ReplaceAll(val, "\t", "")
+ val = strings.TrimSpace(val)
- createReqX86.CustomField = val
- }
-
- if numaAffinity, ok := d.GetOk("numa_affinity"); ok {
- createReqX86.NumaAffinity = numaAffinity.(string)
- }
- createReqX86.CPUPin = d.Get("cpu_pin").(bool)
- createReqX86.HPBacked = d.Get("hp_backed").(bool)
+ createReqX86.CustomField = val
+ }
- log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
- apiResp, err := c.CloudBroker().KVMX86().Create(ctx, createReqX86)
- if err != nil {
- return diag.FromErr(err)
- }
+ if numaAffinity, ok := d.GetOk("numa_affinity"); ok {
+ createReqX86.NumaAffinity = numaAffinity.(string)
+ }
+ createReqX86.CPUPin = d.Get("cpu_pin").(bool)
+ createReqX86.HPBacked = d.Get("hp_backed").(bool)
+ createReqX86.Chipset = d.Get("chipset").(string)
- d.SetId(strconv.FormatUint(apiResp, 10))
- computeId = apiResp
+ log.Debugf("resourceComputeCreate: creating Compute of type KVM VM x86")
+ apiResp, err := c.CloudBroker().KVMX86().Create(ctx, createReqX86)
+ if err != nil {
+ return diag.FromErr(err)
}
+ d.SetId(strconv.FormatUint(apiResp, 10))
+ computeId = apiResp
+
warnings := dc.Warnings{}
cleanup := false
@@ -285,9 +216,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
Permanently: true,
DetachDisks: true,
}
- if reason, ok := d.Get("reason").(string); ok {
- req.Reason = reason
- }
+
if _, err := c.CloudBroker().Compute().Delete(ctx, req); err != nil {
log.Errorf("resourceComputeCreate: could not delete compute after failed creation: %v", err)
}
@@ -439,9 +368,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
if int64(pfwItem["public_port_end"].(int)) != 0 {
req.PublicPortEnd = int64(pfwItem["public_port_end"].(int))
}
- if pfwItem["reason"].(string) != "" {
- req.Reason = pfwItem["reason"].(string)
- }
+
pwfId, err := c.CloudBroker().Compute().PFWAdd(ctx, req)
if err != nil {
warnings.Add(err)
@@ -499,9 +426,7 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
ComputeID: computeId,
CDROMID: uint64(snapshotItem["cdrom_id"].(int)),
}
- if snapshotItem["reason"].(string) != "" {
- req.Reason = snapshotItem["reason"].(string)
- }
+
_, err := c.CloudBroker().Compute().CDInsert(ctx, req)
if err != nil {
warnings.Add(err)
@@ -560,6 +485,31 @@ func resourceComputeCreate(ctx context.Context, d *schema.ResourceData, m interf
}
}
}
+
+ if ars, ok := d.GetOk("libvirt_settings"); ok {
+ log.Debugf("resourceComputeCreate: Configure libvirt virtio interface parameters on ComputeID: %d", computeId)
+ settings := ars.(*schema.Set).List()
+ if len(settings) > 0 {
+ for _, v := range settings {
+ settingsConv := v.(map[string]interface{})
+ req := compute.SetNetConfigRequest{
+ ComputeID: computeId,
+ MAC: settingsConv["mac"].(string),
+ TXMode: settingsConv["txmode"].(string),
+ IOEventFD: settingsConv["ioeventfd"].(string),
+ EventIDx: settingsConv["event_idx"].(string),
+ Queues: uint64(settingsConv["queues"].(int)),
+ RXQueueSize: uint64(settingsConv["rx_queue_size"].(int)),
+ TXQueueSize: uint64(settingsConv["tx_queue_size"].(int)),
+ }
+
+ _, err := c.CloudBroker().Compute().SetNetConfig(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))
@@ -823,6 +773,12 @@ func resourceComputeUpdate(ctx context.Context, d *schema.ResourceData, m interf
}
}
+ if d.HasChange("libvirt_settings") {
+ if err := utilityComputeUpdateLibvirtSettings(ctx, d, m); err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
return append(resourceComputeRead(ctx, d, m), warnings.Get()...)
}
diff --git a/internal/service/cloudbroker/kvmvm/schema.go b/internal/service/cloudbroker/kvmvm/schema.go
index 2463ac9..a0be1a4 100644
--- a/internal/service/cloudbroker/kvmvm/schema.go
+++ b/internal/service/cloudbroker/kvmvm/schema.go
@@ -15,11 +15,6 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Required: true,
Description: "Get compute by id",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "reason for action",
- },
"account_id": {
Type: schema.TypeInt,
@@ -146,6 +141,10 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
},
},
+ "chipset": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
"cd_image_id": {
Type: schema.TypeInt,
Computed: true,
@@ -225,6 +224,10 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"created_time": {
Type: schema.TypeInt,
Computed: true,
@@ -554,6 +557,10 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"conn_id": {
Type: schema.TypeInt,
Computed: true,
@@ -590,6 +597,10 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"name": {
Type: schema.TypeString,
Computed: true,
@@ -614,6 +625,7 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+
"qos": {
Type: schema.TypeList,
Computed: true,
@@ -638,6 +650,42 @@ func dataSourceComputeSchemaMake() map[string]*schema.Schema {
},
},
},
+ "libvirt_settings": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
"target": {
Type: schema.TypeString,
Computed: true,
@@ -932,6 +980,16 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "Find by IP address",
},
+ "stack_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by stack ID",
+ },
+ "image_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by image ID",
+ },
"extnet_name": {
Type: schema.TypeString,
Optional: true,
@@ -1098,6 +1156,10 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
+ "chipset": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
"cd_image_id": {
Type: schema.TypeInt,
Computed: true,
@@ -1158,6 +1220,10 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"disk_id": {
Type: schema.TypeInt,
Computed: true,
@@ -1198,6 +1264,10 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"conn_id": {
Type: schema.TypeInt,
Computed: true,
@@ -1234,6 +1304,10 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"name": {
Type: schema.TypeString,
Computed: true,
@@ -1282,6 +1356,42 @@ func dataSourceComputeListSchemaMake() map[string]*schema.Schema {
},
},
},
+ "libvirt_settings": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
"target": {
Type: schema.TypeString,
Computed: true,
@@ -2153,10 +2263,6 @@ func dataSourceComputeGetAuditsSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
"items": {
Type: schema.TypeList,
@@ -2196,10 +2302,6 @@ func dataSourceComputePfwListSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
"items": {
Type: schema.TypeList,
@@ -2792,7 +2894,7 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Required: true,
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86", "KVM_PPC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"SVA_KVM_X86", "KVM_X86"}, false), // observe case while validating
Description: "Hardware architecture of this compute instance.",
},
"cpu": {
@@ -2815,6 +2917,12 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "ID of the OS image to base this compute instance on.",
},
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "Type of the emulated system.",
+ },
"without_boot_disk": {
Type: schema.TypeBool,
Optional: true,
@@ -2900,7 +3008,7 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Required: true,
StateFunc: statefuncs.StateFuncToUpper,
- ValidateFunc: validation.StringInSlice([]string{"EXTNET", "VINS", "VFNIC"}, false), // observe case while validating
+ ValidateFunc: validation.StringInSlice([]string{"EXTNET", "VINS", "VFNIC", "DPDK"}, false), // observe case while validating
Description: "Type of the network for this connection, either EXTNET or VINS.",
},
@@ -2934,11 +3042,7 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
},
Description: "Optional network connection(s) for this compute. You may specify several network blocks, one for each connection.",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "reason for action",
- },
+
"affinity_label": {
Type: schema.TypeString,
Optional: true,
@@ -2981,6 +3085,11 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
},
},
},
+ "delete_async_mode": {
+ Type: schema.TypeBool,
+ Computed: true,
+ Description: "async mode",
+ },
"anti_affinity_rules": {
Type: schema.TypeList,
Optional: true,
@@ -3092,11 +3201,6 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "reason for action",
- },
},
},
},
@@ -3152,11 +3256,6 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Computed: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "reason for action",
- },
},
},
},
@@ -3211,11 +3310,6 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "reason for action",
- },
},
},
},
@@ -3317,6 +3411,43 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
},
Description: "ID of the connected pci devices",
},
+ "libvirt_settings": {
+ Type: schema.TypeSet,
+ Optional: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "mac": {
+ Type: schema.TypeString,
+ Required: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Optional: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Optional: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Optional: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ },
+ },
+ Description: "Configure libvirt virtio interface parameters. You can only delete values locally. Data on the platform cannot be deleted.",
+ },
// Computed properties
"account_id": {
Type: schema.TypeInt,
@@ -3436,6 +3567,10 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"conn_id": {
Type: schema.TypeInt,
Computed: true,
@@ -3472,6 +3607,10 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
Type: schema.TypeString,
Computed: true,
},
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"name": {
Type: schema.TypeString,
Computed: true,
@@ -3520,6 +3659,42 @@ func resourceComputeSchemaMake() map[string]*schema.Schema {
},
},
},
+ "libvirt_settings": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
"target": {
Type: schema.TypeString,
Computed: true,
diff --git a/internal/service/cloudbroker/kvmvm/utility_compute.go b/internal/service/cloudbroker/kvmvm/utility_compute.go
index 6577e49..538011f 100644
--- a/internal/service/cloudbroker/kvmvm/utility_compute.go
+++ b/internal/service/cloudbroker/kvmvm/utility_compute.go
@@ -532,10 +532,6 @@ func utilityComputeCheckPresence(ctx context.Context, d *schema.ResourceData, m
req.ComputeID = uint64(d.Get("compute_id").(int))
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
res, err := c.CloudBroker().Compute().Get(ctx, req)
if err != nil {
return nil, err
@@ -586,13 +582,16 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
oldSet, newSet := d.GetChange("network")
+ oldList := oldSet.(*schema.Set).List()
+ newList := newSet.(*schema.Set).List()
+
+ detachMap, changeIpMap, attachMap := differenceNetwork(oldList, newList)
+
apiErrCount := 0
var lastSavedError error
- detachSet := oldSet.(*schema.Set).Difference(newSet.(*schema.Set))
- log.Debugf("utilityComputeNetworksConfigure: detach set has %d items for Compute ID %s", detachSet.Len(), d.Id())
- for _, runner := range detachSet.List() {
- netData := runner.(map[string]interface{})
+ log.Debugf("utilityComputeNetworksConfigure: detach set has %d items for Compute ID %s", len(detachMap), d.Id())
+ for _, netData := range detachMap {
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
req := compute.NetDetachRequest{
ComputeID: computeId,
@@ -609,21 +608,40 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
}
}
+ log.Debugf("utilityComputeNetworksConfigure: changeIp set has %d items for Compute ID %s", len(changeIpMap), d.Id())
+ for _, netData := range changeIpMap {
+ computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req := compute.ChangeIPRequest{
+ ComputeID: computeId,
+ NetType: netData["net_type"].(string),
+ NetID: uint64(netData["net_id"].(int)),
+ IPAddr: netData["ip_address"].(string),
+ }
+
+ _, err := c.CloudBroker().Compute().ChangeIP(ctx, req)
+ if err != nil {
+ log.Errorf("utilityComputeNetworksConfigure: failed to change net ID %d of type %s from Compute ID %s: %s",
+ netData["net_id"].(int), netData["net_type"].(string), d.Id(), err)
+ apiErrCount++
+ lastSavedError = err
+ }
+ }
+
needStart := false
- if d.Get("network").(*schema.Set).Len() == 1 || oldSet.(*schema.Set).Len() < 1 {
+ if oldSet.(*schema.Set).Len() == len(detachMap) || oldSet.(*schema.Set).Len() == 0 {
if err := utilityComputeStop(ctx, d, m); err != nil {
apiErrCount++
lastSavedError = err
}
- needStart = true
+ if start := d.Get("started"); start.(bool) {
+ needStart = true
+ }
}
- attachSet := newSet.(*schema.Set).Difference(oldSet.(*schema.Set))
- attachList := attachSet.List()
- sort.Slice(attachList, func(i, j int) bool {
- weightI := attachList[i].(map[string]interface{})["weight"].(int)
- weightJ := attachList[j].(map[string]interface{})["weight"].(int)
+ sort.Slice(attachMap, func(i, j int) bool {
+ weightI := attachMap[i]["weight"].(int)
+ weightJ := attachMap[j]["weight"].(int)
if weightI == 0 {
return false
}
@@ -632,9 +650,8 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
}
return weightI < weightJ
})
- log.Debugf("utilityComputeNetworksConfigure: attach set has %d items for Compute ID %s", attachSet.Len(), d.Id())
- for _, runner := range attachList {
- netData := runner.(map[string]interface{})
+ log.Debugf("utilityComputeNetworksConfigure: attach set has %d items for Compute ID %s", len(attachMap), d.Id())
+ for _, netData := range attachMap {
computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
req := compute.NetAttachRequest{
ComputeID: computeId,
@@ -672,6 +689,53 @@ func utilityComputeNetworksConfigure(ctx context.Context, d *schema.ResourceData
return nil
}
+func differenceNetwork(oldList, newList []interface{}) (detachMap, changeIpMap, attachMap []map[string]interface{}) {
+ attachMap = make([]map[string]interface{}, 0)
+ changeIpMap = make([]map[string]interface{}, 0)
+ detachMap = make([]map[string]interface{}, 0)
+ for _, oldNetwork := range oldList {
+ oldMap := oldNetwork.(map[string]interface{})
+ found := false
+ for _, newNetwork := range newList {
+ newMap := newNetwork.(map[string]interface{})
+ if newMap["net_type"] == oldMap["net_type"] && newMap["net_id"] == oldMap["net_id"] && newMap["weight"] == oldMap["weight"] {
+ if (newMap["net_type"].(string) == "EXTNET" || newMap["net_type"].(string) == "VINS") && newMap["ip_address"] != oldMap["ip_address"] {
+ changeIpMap = append(changeIpMap, newMap)
+ found = true
+ break
+ } else if newMap["ip_address"] == oldMap["ip_address"] {
+ found = true
+ break
+ }
+ }
+ }
+ if found {
+ continue
+ }
+ detachMap = append(detachMap, oldMap)
+ }
+
+ for _, newNetwork := range newList {
+ newMap := newNetwork.(map[string]interface{})
+ found := false
+ for _, oldNetwork := range oldList {
+ oldMap := oldNetwork.(map[string]interface{})
+ if newMap["net_type"] == oldMap["net_type"] && newMap["net_id"] == oldMap["net_id"] && newMap["weight"] == oldMap["weight"] {
+ if newMap["ip_address"] == oldMap["ip_address"] || ((newMap["net_type"].(string) == "EXTNET" || newMap["net_type"].(string) == "VINS") && newMap["ip_address"] != oldMap["ip_address"]) {
+ found = true
+ break
+ }
+ }
+ }
+ if found {
+ continue
+ }
+ attachMap = append(attachMap, newMap)
+ }
+
+ return
+}
+
func utilityComputeUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) error {
c := m.(*controller.ControllerCfg)
@@ -697,6 +761,10 @@ func utilityComputeUpdate(ctx context.Context, d *schema.ResourceData, m interfa
req.HPBacked = d.Get("hp_backed").(bool)
}
+ if d.HasChange("chipset") {
+ req.Chipset = d.Get("chipset").(string)
+ }
+
// Note bene: numa_affinity, cpu_pin and hp_backed are not allowed to be changed for compute in STARTED tech status.
// If STARTED, we need to stop it before update
var isStopRequired bool
@@ -947,6 +1015,36 @@ func utilityComputeUpdatePciDevices(ctx context.Context, d *schema.ResourceData,
return nil
}
+func utilityComputeUpdateLibvirtSettings(ctx context.Context, d *schema.ResourceData, m interface{}) error {
+ c := m.(*controller.ControllerCfg)
+ computeId, _ := strconv.ParseUint(d.Id(), 10, 64)
+ oldSet, newSet := d.GetChange("libvirt_settings")
+
+ added := (newSet.(*schema.Set).Difference(oldSet.(*schema.Set))).List()
+ if len(added) > 0 {
+ for _, v := range added {
+ settingsConv := v.(map[string]interface{})
+ req := compute.SetNetConfigRequest{
+ ComputeID: computeId,
+ MAC: settingsConv["mac"].(string),
+ TXMode: settingsConv["txmode"].(string),
+ IOEventFD: settingsConv["ioeventfd"].(string),
+ EventIDx: settingsConv["event_idx"].(string),
+ Queues: uint64(settingsConv["queues"].(int)),
+ RXQueueSize: uint64(settingsConv["rx_queue_size"].(int)),
+ TXQueueSize: uint64(settingsConv["tx_queue_size"].(int)),
+ }
+
+ _, err := c.CloudBroker().Compute().SetNetConfig(ctx, req)
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ return nil
+}
+
func utilityComputeUpdateTags(ctx context.Context, d *schema.ResourceData, m interface{}) error {
c := m.(*controller.ControllerCfg)
@@ -1013,9 +1111,6 @@ func utilityComputeUpdatePFW(ctx context.Context, d *schema.ResourceData, m inte
} else {
req.PublicPortEnd = uint64(pfwItem["public_port_end"].(int))
}
- if pfwItem["reason"].(string) != "" {
- req.Reason = pfwItem["reason"].(string)
- }
_, err := c.CloudBroker().Compute().PFWDel(ctx, req)
if err != nil {
@@ -1037,9 +1132,6 @@ func utilityComputeUpdatePFW(ctx context.Context, d *schema.ResourceData, m inte
if pfwItem["local_port"].(int) != 0 {
req.LocalBasePort = uint64(pfwItem["local_port"].(int))
}
- if pfwItem["reason"].(string) != "" {
- req.Reason = pfwItem["reason"].(string)
- }
pwfId, err := c.CloudBroker().Compute().PFWAdd(ctx, req)
if err != nil {
@@ -1136,9 +1228,17 @@ func utilityComputeUpdateSnapshot(ctx context.Context, d *schema.ResourceData, m
Label: snapshotItem["label"].(string),
}
- _, err := c.CloudBroker().Compute().SnapshotDelete(ctx, req)
- if err != nil {
- return err
+ asyncMode, ok := d.GetOk("snapshot_delete_async")
+ if ok && asyncMode.(bool) {
+ _, err := c.CloudBroker().Compute().SnapshotDeleteAsync(ctx, req)
+ if err != nil {
+ return err
+ }
+ } else {
+ _, err := c.CloudBroker().Compute().SnapshotDelete(ctx, req)
+ if err != nil {
+ return err
+ }
}
}
}
@@ -1218,9 +1318,6 @@ func utilityComputeUpdateCD(ctx context.Context, d *schema.ResourceData, m inter
req := compute.CDEjectRequest{
ComputeID: computeId,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().Compute().CDEject(ctx, req)
if err != nil {
@@ -1235,9 +1332,6 @@ func utilityComputeUpdateCD(ctx context.Context, d *schema.ResourceData, m inter
ComputeID: computeId,
CDROMID: uint64(cdItem["cdrom_id"].(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().Compute().CDInsert(ctx, req)
if err != nil {
diff --git a/internal/service/cloudbroker/kvmvm/utility_compute_get_audits.go b/internal/service/cloudbroker/kvmvm/utility_compute_get_audits.go
index 82325f6..4fe73ef 100644
--- a/internal/service/cloudbroker/kvmvm/utility_compute_get_audits.go
+++ b/internal/service/cloudbroker/kvmvm/utility_compute_get_audits.go
@@ -46,10 +46,6 @@ func utilityComputeGetAuditsCheckPresence(ctx context.Context, d *schema.Resourc
ComputeID: uint64(d.Get("compute_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
computeAudits, err := c.CloudBroker().Compute().GetAudits(ctx, req)
if err != nil {
return nil, err
diff --git a/internal/service/cloudbroker/kvmvm/utility_compute_list.go b/internal/service/cloudbroker/kvmvm/utility_compute_list.go
index c33acc0..0a15535 100644
--- a/internal/service/cloudbroker/kvmvm/utility_compute_list.go
+++ b/internal/service/cloudbroker/kvmvm/utility_compute_list.go
@@ -69,6 +69,12 @@ func utilityDataComputeListCheckPresence(ctx context.Context, d *schema.Resource
if ipAddress, ok := d.GetOk("ip_address"); ok {
req.IPAddress = ipAddress.(string)
}
+ if stackID, ok := d.GetOk("stack_id"); ok {
+ req.StackID = stackID.(uint64)
+ }
+ if imageID, ok := d.GetOk("image_id"); ok {
+ req.ImageID = imageID.(uint64)
+ }
if extNetName, ok := d.GetOk("extnet_name"); ok {
req.ExtNetName = extNetName.(string)
}
diff --git a/internal/service/cloudbroker/kvmvm/utility_compute_pfw_list.go b/internal/service/cloudbroker/kvmvm/utility_compute_pfw_list.go
index 1eaf0a6..0579a25 100644
--- a/internal/service/cloudbroker/kvmvm/utility_compute_pfw_list.go
+++ b/internal/service/cloudbroker/kvmvm/utility_compute_pfw_list.go
@@ -46,10 +46,6 @@ func utilityComputePfwListCheckPresence(ctx context.Context, d *schema.ResourceD
ComputeID: uint64(d.Get("compute_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
listPFWs, err := c.CloudBroker().Compute().PFWList(ctx, req)
if err != nil {
return nil, err
diff --git a/internal/service/cloudbroker/lb/resource_lb.go b/internal/service/cloudbroker/lb/resource_lb.go
index ce52403..320d2a7 100644
--- a/internal/service/cloudbroker/lb/resource_lb.go
+++ b/internal/service/cloudbroker/lb/resource_lb.go
@@ -58,7 +58,7 @@ func resourceLBCreate(ctx context.Context, d *schema.ResourceData, m interface{}
req := lb.CreateRequest{
Name: d.Get("name").(string),
RGID: uint64(d.Get("rg_id").(int)),
- ExtNetID: uint64(d.Get("extnet_id").(int)),
+ ExtNetID: int64(d.Get("extnet_id").(int)),
VINSID: uint64(d.Get("vins_id").(int)),
}
if start, ok := d.GetOk("start"); ok {
diff --git a/internal/service/cloudbroker/rg/flattens.go b/internal/service/cloudbroker/rg/flattens.go
index c3150de..0488764 100644
--- a/internal/service/cloudbroker/rg/flattens.go
+++ b/internal/service/cloudbroker/rg/flattens.go
@@ -475,7 +475,6 @@ func flattenResourceRG(d *schema.ResourceData, rgData *rg.RecordRG) {
d.Set("gid", rgData.GID)
d.Set("rg_name", rgData.Name)
d.Set("resource_limits", flattenRgResourceLimits(rgData.ResourceLimits))
- d.Set("def_net_type", rgData.DefNetType)
d.Set("description", rgData.Description)
d.Set("register_computes", rgData.RegisterComputes)
d.Set("uniq_pools", rgData.UniqPools)
diff --git a/internal/service/cloudbroker/rg/models.go b/internal/service/cloudbroker/rg/models.go
index 49d6a1c..33855ba 100644
--- a/internal/service/cloudbroker/rg/models.go
+++ b/internal/service/cloudbroker/rg/models.go
@@ -77,7 +77,6 @@ type ResgroupUpdateParam struct {
Disk int `json:"maxVDiskCapacity"`
Cpu int `json:"maxCPUCapacity"`
NetTraffic int `json:"maxNetworkPeerTransfer"`
- Reason string `json:"reason"`
}
type AccountAclRecord struct {
diff --git a/internal/service/cloudbroker/rg/resource_rg.go b/internal/service/cloudbroker/rg/resource_rg.go
index 68991ed..8acf2c5 100644
--- a/internal/service/cloudbroker/rg/resource_rg.go
+++ b/internal/service/cloudbroker/rg/resource_rg.go
@@ -117,18 +117,10 @@ func resourceResgroupCreate(ctx context.Context, d *schema.ResourceData, m inter
req.DefNet = defNetType.(string)
}
- if ipcidr, ok := d.GetOk("ipcidr"); ok {
- req.IPCIDR = ipcidr.(string)
- }
-
if description, ok := d.GetOk("description"); ok {
req.Description = description.(string)
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
if extNetId, ok := d.GetOk("ext_net_id"); ok {
req.ExtNetID = uint64(extNetId.(int))
}
@@ -211,7 +203,6 @@ func resourceResgroupRead(ctx context.Context, d *schema.ResourceData, m interfa
d.Get("rg_name").(string), d.Get("account_id").(int))
//c := m.(*controller.ControllerCfg)
-
rgData, err := utilityResgroupCheckPresence(ctx, d, m)
if err != nil {
d.SetId("") // ensure ID is empty
@@ -301,8 +292,7 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
restore, ok := d.GetOk("restore")
if ok && restore.(bool) {
restoreReq := rg.RestoreRequest{
- RGID: rgData.ID,
- Reason: "automatic restore of resource by terraform",
+ RGID: rgData.ID,
}
_, err := c.CloudBroker().RG().Restore(ctx, restoreReq)
@@ -316,8 +306,7 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
enable, ok := d.GetOk("enable")
if ok && enable.(bool) {
enableReq := rg.EnableRequest{
- RGID: rgData.ID,
- Reason: "automatic enable of resource by terraform",
+ RGID: rgData.ID,
}
_, err = c.CloudBroker().RG().Enable(ctx, enableReq)
@@ -349,20 +338,12 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
/* NOTE: we do not allow changing the following attributes of an existing RG via terraform:
- def_net_type
- - ipcidr
- ext_net_id
- ext_ip
The following code fragment checks if any of these have been changed and generates error.
*/
- if ok := d.HasChange("def_net"); ok {
- _, newDefNet := d.GetChange("def_net")
- if newDefNet.(*schema.Set).Len() == 0 {
- return diag.Errorf("resourceResgroupUpdate: block def_net must not be empty")
- }
- }
-
- for _, attr := range []string{"def_net_type", "ipcidr", "ext_ip"} {
+ for _, attr := range []string{"def_net_type", "ext_ip"} {
attrNew, attrOld := d.GetChange(attr)
if attrNew.(string) != attrOld.(string) {
return diag.FromErr(fmt.Errorf("resourceResgroupUpdate: RG ID %s: changing %s for existing RG is not allowed", d.Id(), attr))
@@ -444,6 +425,9 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
if d.HasChange("uniq_pools") {
uniqPools := d.Get("uniq_pools").([]interface{})
+ if len(uniqPools) == 0 {
+ req.ClearUniqPools = true
+ }
for _, pool := range uniqPools {
req.UniqPools = append(req.UniqPools, pool.(string))
}
@@ -468,6 +452,13 @@ func resourceResgroupUpdate(ctx context.Context, d *schema.ResourceData, m inter
}
if d.HasChange("def_net") {
+ oldDefNet, _ := d.GetChange("def_net")
+ if oldDefNet.(*schema.Set).Len() > 0 {
+ _, err := c.CloudBroker().RG().RemoveDefNet(ctx, rg.RemoveDefNetRequest{RGID: rgData.ID})
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
if err := resourceRGSetDefNet(ctx, d, m); err != nil {
return diag.FromErr(err)
}
@@ -520,9 +511,6 @@ func resourceResgroupDelete(ctx context.Context, d *schema.ResourceData, m inter
if permanently, ok := d.GetOk("permanently"); ok {
req.Permanently = permanently.(bool)
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
c := m.(*controller.ControllerCfg)
_, err = c.CloudBroker().RG().Delete(ctx, req)
@@ -559,10 +547,6 @@ func resourceRGAccessGrant(ctx context.Context, d *schema.ResourceData, m interf
Right: right,
}
- if reason, ok := access["reason"]; ok {
- req.Reason = reason.(string)
- }
-
if _, err := c.CloudBroker().RG().AccessGrant(ctx, req); err != nil {
errs = append(errs, err)
}
@@ -593,9 +577,6 @@ func resourceRGSetDefNet(ctx context.Context, d *schema.ResourceData, m interfac
if netID, ok := defNetItem["net_id"]; ok {
req.NetID = uint64(netID.(int))
}
- if reason, ok := defNetItem["reason"]; ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().RG().SetDefNet(ctx, req)
return err
@@ -651,10 +632,6 @@ func resourceRGChangeAccess(ctx context.Context, d *schema.ResourceData, m inter
User: user,
}
- if reason, ok := deleteItem["reason"]; ok {
- reqRevoke.Reason = reason.(string)
- }
-
_, err := c.CloudBroker().RG().AccessRevoke(ctx, reqRevoke)
if err != nil {
return err
@@ -673,10 +650,6 @@ func resourceRGChangeAccess(ctx context.Context, d *schema.ResourceData, m inter
Right: right,
}
- if reason, ok := addedItem["reason"]; ok {
- reqGrant.Reason = reason.(string)
- }
-
_, err := c.CloudBroker().RG().AccessGrant(ctx, reqGrant)
if err != nil {
return err
@@ -749,6 +722,17 @@ func ResourceResgroup() *schema.Resource {
StateContext: schema.ImportStatePassthroughContext,
},
+ CustomizeDiff: func(ctx context.Context, diff *schema.ResourceDiff, i interface{}) error {
+ if diff.HasChange("def_net") {
+ diff.SetNewComputed("def_net_id")
+ }
+ if diff.HasChanges() {
+ diff.SetNewComputed("updated_by")
+ diff.SetNewComputed("updated_time")
+ }
+ return nil
+ },
+
Timeouts: &schema.ResourceTimeout{
Create: &constants.Timeout600s,
Read: &constants.Timeout300s,
diff --git a/internal/service/cloudbroker/rg/schema.go b/internal/service/cloudbroker/rg/schema.go
index d58c41b..757ff43 100644
--- a/internal/service/cloudbroker/rg/schema.go
+++ b/internal/service/cloudbroker/rg/schema.go
@@ -11,10 +11,7 @@ func dataSourceRgSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
+
"account_id": {
Type: schema.TypeInt,
Computed: true,
@@ -739,10 +736,6 @@ func dataSourceRgUsageSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Required: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
"cpu": {
Type: schema.TypeInt,
@@ -2268,7 +2261,6 @@ func resourceRgSchemaMake() map[string]*schema.Schema {
"def_net_type": {
Type: schema.TypeString,
Optional: true,
- Computed: true,
// Default: "PRIVATE",
ValidateFunc: validation.StringInSlice([]string{"PRIVATE", "PUBLIC", "NONE"}, false),
Description: "Type of the network, which this resource group will use as default for its computes - PRIVATE or PUBLIC or NONE.",
@@ -2287,11 +2279,6 @@ func resourceRgSchemaMake() map[string]*schema.Schema {
Description: "User-defined text description of this resource group.",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
-
"ext_net_id": {
Type: schema.TypeInt,
Optional: true,
@@ -2337,11 +2324,6 @@ func resourceRgSchemaMake() map[string]*schema.Schema {
Required: true,
Description: "Access rights to set, one of 'R', 'RCX' or 'ARCXDU'",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "Reason for action",
- },
},
},
},
@@ -2364,11 +2346,6 @@ func resourceRgSchemaMake() map[string]*schema.Schema {
Default: 0,
Description: "Network segment ID. If netType is PUBLIC and netId is 0 then default external network segment will be selected. If netType is PRIVATE and netId=0, the first ViNS defined for this RG will be selected. Otherwise, netId identifies either existing external network segment or ViNS.",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "Reason for action",
- },
},
},
},
diff --git a/internal/service/cloudbroker/rg/utility_rg.go b/internal/service/cloudbroker/rg/utility_rg.go
index e4743f3..499927b 100644
--- a/internal/service/cloudbroker/rg/utility_rg.go
+++ b/internal/service/cloudbroker/rg/utility_rg.go
@@ -50,9 +50,6 @@ func utilityResgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m
} else {
req.RGID = uint64(d.Get("rg_id").(int))
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
rgData, err := c.CloudBroker().RG().Get(ctx, req)
if err != nil {
diff --git a/internal/service/cloudbroker/rg/utility_rg_usage.go b/internal/service/cloudbroker/rg/utility_rg_usage.go
index c56ab60..8d7abdc 100644
--- a/internal/service/cloudbroker/rg/utility_rg_usage.go
+++ b/internal/service/cloudbroker/rg/utility_rg_usage.go
@@ -46,10 +46,6 @@ func utilityDataRgUsageCheckPresence(ctx context.Context, d *schema.ResourceData
RGID: uint64(d.Get("rg_id").(int)),
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
usage, err := c.CloudBroker().RG().Usage(ctx, req)
if err != nil {
return nil, err
diff --git a/internal/service/cloudbroker/user/flattens.go b/internal/service/cloudbroker/user/flattens.go
index 770c646..459b77e 100644
--- a/internal/service/cloudbroker/user/flattens.go
+++ b/internal/service/cloudbroker/user/flattens.go
@@ -124,6 +124,7 @@ func flattenUserGetAudits(audits *user.ListAudits) []map[string]interface{} {
"response_time": item.ResponseTime,
"status_code": item.StatusCode,
"time": item.Time,
+ "guid": item.GUID,
}
res = append(res, temp)
}
diff --git a/internal/service/cloudbroker/user/schema.go b/internal/service/cloudbroker/user/schema.go
index ba12a80..6898164 100644
--- a/internal/service/cloudbroker/user/schema.go
+++ b/internal/service/cloudbroker/user/schema.go
@@ -198,6 +198,10 @@ func dataSourceUserGetAuditSchemaMake() map[string]*schema.Schema {
Type: schema.TypeFloat,
Computed: true,
},
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
},
},
},
diff --git a/internal/service/cloudbroker/vins/flattens.go b/internal/service/cloudbroker/vins/flattens.go
index 637d5be..ed9626f 100644
--- a/internal/service/cloudbroker/vins/flattens.go
+++ b/internal/service/cloudbroker/vins/flattens.go
@@ -72,6 +72,7 @@ func flattenVins(d *schema.ResourceData, vinsRecord *vins.RecordVINS) {
d.Set("vnfs", flattenVinsRecordVNFs(vinsRecord.VNFs))
d.Set("vxlan_id", vinsRecord.VXLANID)
d.Set("nat_rule", flattenRuleBlock(vinsRecord.VNFs.NAT.Config.Rules))
+ d.Set("computes", flattenComputes(vinsRecord.Computes))
}
func flattenVinsData(d *schema.ResourceData, vinsRecord *vins.RecordVINS) {
@@ -109,6 +110,23 @@ func flattenVinsData(d *schema.ResourceData, vinsRecord *vins.RecordVINS) {
d.Set("user_managed", vinsRecord.UserManaged)
d.Set("vnfs", flattenVinsRecordVNFs(vinsRecord.VNFs))
d.Set("vxlan_id", vinsRecord.VXLANID)
+ d.Set("computes", flattenComputes(vinsRecord.Computes))
+
+}
+
+func flattenLibvirtSettings(libvirtSettings vins.LibvirtSettings) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "guid": libvirtSettings.GUID,
+ "txmode": libvirtSettings.TXMode,
+ "ioeventfd": libvirtSettings.IOEventFD,
+ "event_idx": libvirtSettings.EventIDx,
+ "queues": libvirtSettings.Queues,
+ "rx_queue_size": libvirtSettings.RXQueueSize,
+ "tx_queue_size": libvirtSettings.TXQueueSize,
+ }
+ res = append(res, temp)
+ return res
}
func flattenVinsVNFDev(vd vins.VNFDev) []map[string]interface{} {
@@ -138,6 +156,18 @@ func flattenVinsVNFDev(vd vins.VNFDev) []map[string]interface{} {
return res
}
+func flattenComputes(computes []vins.Computes) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(computes))
+ for _, compute := range computes {
+ tmp := map[string]interface{}{
+ "id": compute.ID,
+ "name": compute.Name,
+ }
+ res = append(res, tmp)
+ }
+ return res
+}
+
func flattenVinsRecordVNFs(rv vins.RecordVNFs) []map[string]interface{} {
res := make([]map[string]interface{}, 0)
temp := map[string]interface{}{
@@ -393,25 +423,28 @@ func flattenVinsListInterfaces(i vins.ListInterfaces) []map[string]interface{} {
res := make([]map[string]interface{}, 0, len(i))
for _, v := range i {
temp := map[string]interface{}{
- "conn_id": v.ConnID,
- "conn_type": v.ConnType,
- "def_gw": v.DefGW,
- "enabled": v.Enabled,
- "flipgroup_id": v.FLIPGroupID,
- "guid": v.GUID,
- "ip_address": v.IPAddress,
- "listen_ssh": v.ListenSSH,
- "mac": v.MAC,
- "name": v.Name,
- "net_id": v.NetID,
- "net_mask": v.NetMask,
- "net_type": v.NetType,
- "node_id": v.NodeID,
- "pci_slot": v.PCISlot,
- "qos": flattenVinsQOS(v.QOS),
- "target": v.Target,
- "type": v.Type,
- "vnfs": v.VNFs,
+ "conn_id": v.ConnID,
+ "conn_type": v.ConnType,
+ "def_gw": v.DefGW,
+ "enabled": v.Enabled,
+ "flipgroup_id": v.FLIPGroupID,
+ "guid": v.GUID,
+ "ip_address": v.IPAddress,
+ "listen_ssh": v.ListenSSH,
+ "mac": v.MAC,
+ "mtu": v.MTU,
+ "name": v.Name,
+ "net_id": v.NetID,
+ "net_mask": v.NetMask,
+ "net_type": v.NetType,
+ "node_id": v.NodeID,
+ "pci_slot": v.PCISlot,
+ "bus_number": v.BusNumber,
+ "qos": flattenVinsQOS(v.QOS),
+ "target": v.Target,
+ "type": v.Type,
+ "vnfs": v.VNFs,
+ "libvirt_settings": flattenLibvirtSettings(v.LibvirtSettings),
}
res = append(res, temp)
}
diff --git a/internal/service/cloudbroker/vins/resource_utility.go b/internal/service/cloudbroker/vins/resource_utility.go
index fd77299..e99d395 100644
--- a/internal/service/cloudbroker/vins/resource_utility.go
+++ b/internal/service/cloudbroker/vins/resource_utility.go
@@ -64,9 +64,7 @@ func createVinsInAcc(ctx context.Context, d *schema.ResourceData, m interface{},
if preReservationsNum, ok := d.GetOk("pre_reservations_num"); ok {
req.PreReservationsNum = uint64(preReservationsNum.(int))
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
+
if routesList, ok := d.GetOk("routes"); ok {
var routes []vins.Route
var route vins.Route
@@ -117,9 +115,7 @@ func createVinsInRG(ctx context.Context, d *schema.ResourceData, m interface{},
if preReservationsNum, ok := d.GetOk("pre_reservations_num"); ok {
req.PreReservationsNum = uint64(preReservationsNum.(int))
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
+
if routesList, ok := d.GetOk("routes"); ok {
var routes []vins.Route
var route vins.Route
diff --git a/internal/service/cloudbroker/vins/resource_vins.go b/internal/service/cloudbroker/vins/resource_vins.go
index 9a967a9..c71d1be 100644
--- a/internal/service/cloudbroker/vins/resource_vins.go
+++ b/internal/service/cloudbroker/vins/resource_vins.go
@@ -343,9 +343,6 @@ func resourceVinsDelete(ctx context.Context, d *schema.ResourceData, m interface
if permanently, ok := d.GetOk("permanently"); ok {
req.Permanently = permanently.(bool)
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
if _, err := c.CloudBroker().VINS().Delete(ctx, req); err != nil {
return diag.FromErr(err)
@@ -362,9 +359,6 @@ func resourceVinsEnable(ctx context.Context, d *schema.ResourceData, m interface
req := vins.EnableRequest{
VINSID: vinsId,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().Enable(ctx, req)
return err
@@ -376,9 +370,6 @@ func resourceVinsDisable(ctx context.Context, d *schema.ResourceData, m interfac
req := vins.DisableRequest{
VINSID: vinsId,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().Disable(ctx, req)
return err
@@ -390,9 +381,6 @@ func resourceVinsRestore(ctx context.Context, d *schema.ResourceData, m interfac
req := vins.RestoreRequest{
VINSID: vinsId,
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().Restore(ctx, req)
return err
@@ -421,9 +409,6 @@ func resourceVinsIpReserve(ctx context.Context, d *schema.ResourceData, m interf
if computeId, ok := ip["compute_id"]; ok {
req.ComputeID = uint64(computeId.(int))
}
- if reason, ok := ip["reason"]; ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().IPReserve(ctx, req)
if err != nil {
@@ -459,9 +444,6 @@ func resourceVinsNatRuleAdd(ctx context.Context, d *schema.ResourceData, m inter
if proto, ok := natRule["proto"]; ok {
req.Proto = proto.(string)
}
- if reason, ok := natRule["reason"]; ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().NATRuleAdd(ctx, req)
if err != nil {
@@ -505,10 +487,6 @@ func resourceVinsChangeExtNetId(ctx context.Context, d *schema.ResourceData, m i
// there was preexisting external net connection - disconnect ViNS
req := vins.ExtNetDisconnectRequest{VINSID: vinsId}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
_, err := c.CloudBroker().VINS().ExtNetDisconnect(ctx, req)
return err
}
@@ -521,9 +499,6 @@ func resourceVinsChangeExtNetId(ctx context.Context, d *schema.ResourceData, m i
if ip, ok := d.GetOk("ext_ip"); ok && ip != "" {
req.IP = ip.(string)
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().ExtNetConnect(ctx, req)
return err
@@ -593,9 +568,6 @@ func resourceVinsChangeIp(ctx context.Context, d *schema.ResourceData, m interfa
if ip["compute_id"].(int) != 0 {
req.ComputeID = uint64(ip["compute_id"].(int))
}
- if ip["reason"].(string) != "" {
- req.Reason = ip["reason"].(string)
- }
_, err := c.CloudBroker().VINS().IPReserve(ctx, req)
if err != nil {
@@ -640,9 +612,6 @@ func resourceVinsChangeNatRule(ctx context.Context, d *schema.ResourceData, m in
VINSID: vinsId,
RuleID: int64(natRule["rule_id"].(int)),
}
- if natRule["reason"].(string) != "" {
- req.Reason = natRule["reason"].(string)
- }
_, err := c.CloudBroker().VINS().NATRuleDel(ctx, req)
errs = append(errs, err)
@@ -738,9 +707,6 @@ func resourceVinsChangeVnfRedeploy(ctx context.Context, d *schema.ResourceData,
_, newRedeploy := d.GetChange("vnfdev_redeploy")
if newRedeploy.(bool) {
req := vins.VNFDevRedeployRequest{VINSID: vinsId}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().VNFDevRedeploy(ctx, req)
return err
@@ -757,9 +723,6 @@ func resourceVinsChangeVnfRestart(ctx context.Context, d *schema.ResourceData, m
_, newRestart := d.GetChange("vnfdev_restart")
if newRestart.(bool) {
req := vins.VNFDevRestartRequest{VINSID: vinsId}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().VNFDevRestart(ctx, req)
if err != nil {
@@ -778,9 +741,6 @@ func resourceVinsChangeVnfReset(ctx context.Context, d *schema.ResourceData, m i
_, newRestart := d.GetChange("vnfdev_reset")
if newRestart.(bool) {
req := vins.VNFDevResetRequest{VINSID: vinsId}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().VNFDevReset(ctx, req)
if err != nil {
@@ -799,9 +759,6 @@ func resourceVinsChangeVnfStartStop(ctx context.Context, d *schema.ResourceData,
_, newStart := d.GetChange("vnfdev_start")
if newStart.(bool) {
req := vins.VNFDevStartRequest{VINSID: vinsId}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().VNFDevStart(ctx, req)
if err != nil {
@@ -810,9 +767,6 @@ func resourceVinsChangeVnfStartStop(ctx context.Context, d *schema.ResourceData,
}
req := vins.VNFDevStopRequest{VINSID: vinsId}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
_, err := c.CloudBroker().VINS().VNFDevStop(ctx, req)
return err
diff --git a/internal/service/cloudbroker/vins/schema.go b/internal/service/cloudbroker/vins/schema.go
index 74c7859..31beb90 100644
--- a/internal/service/cloudbroker/vins/schema.go
+++ b/internal/service/cloudbroker/vins/schema.go
@@ -12,11 +12,7 @@ func dataSourceVinsSchemaMake() map[string]*schema.Schema {
Required: true,
Description: "vins id",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "reason for action",
- },
+
"vnf_dev": {
Type: schema.TypeList,
Computed: true,
@@ -195,6 +191,47 @@ func dataSourceVinsSchemaMake() map[string]*schema.Schema {
Computed: true,
Description: "mac",
},
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "mtu",
+ },
+ "libvirt_settings": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
"name": {
Type: schema.TypeString,
Computed: true,
@@ -224,6 +261,10 @@ func dataSourceVinsSchemaMake() map[string]*schema.Schema {
Computed: true,
Description: "pci slot",
},
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
"qos": {
Type: schema.TypeList,
Computed: true,
@@ -1445,6 +1486,11 @@ func dataSourceVinsListDeletedSchemaMake() map[string]*schema.Schema {
Optional: true,
Description: "Filter by external IP",
},
+ "vnf_dev_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by VNF Device id",
+ },
"sort_by": {
Type: schema.TypeString,
Optional: true,
@@ -1796,11 +1842,7 @@ func DataSourceVinsNatRuleListSchemaMake() map[string]*schema.Schema {
Required: true,
Description: "Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.",
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- Description: "reason for action",
- },
+
"items": {
Type: schema.TypeList,
Computed: true,
@@ -1967,10 +2009,6 @@ func resourceVinsSchemaMake() map[string]*schema.Schema {
},
},
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
// Additional parameters from CreateInRG
"rg_id": {
@@ -2032,10 +2070,6 @@ func resourceVinsSchemaMake() map[string]*schema.Schema {
Type: schema.TypeInt,
Optional: true,
},
- "reason": {
- Type: schema.TypeString,
- Optional: true,
- },
},
},
},
@@ -2324,6 +2358,47 @@ func resourceVinsSchemaMake() map[string]*schema.Schema {
Computed: true,
Description: "mac",
},
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "mtu",
+ },
+ "libvirt_settings": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "txmode": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ioeventfd": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "event_idx": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "queues": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "tx_queue_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
"name": {
Type: schema.TypeString,
Computed: true,
@@ -2353,6 +2428,11 @@ func resourceVinsSchemaMake() map[string]*schema.Schema {
Computed: true,
Description: "pci slot",
},
+ "bus_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "bus number",
+ },
"qos": {
Type: schema.TypeList,
Computed: true,
diff --git a/internal/service/cloudbroker/vins/utility_vins.go b/internal/service/cloudbroker/vins/utility_vins.go
index a6dc803..7fbf471 100644
--- a/internal/service/cloudbroker/vins/utility_vins.go
+++ b/internal/service/cloudbroker/vins/utility_vins.go
@@ -56,10 +56,6 @@ func utilityVinsCheckPresence(ctx context.Context, d *schema.ResourceData, m int
req.VINSID = uint64(d.Get("vins_id").(int))
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
vins, err := c.CloudBroker().VINS().Get(ctx, req)
if err != nil {
return nil, err
diff --git a/internal/service/cloudbroker/vins/utility_vins_list_deleted.go b/internal/service/cloudbroker/vins/utility_vins_list_deleted.go
index e59dadc..5996a22 100644
--- a/internal/service/cloudbroker/vins/utility_vins_list_deleted.go
+++ b/internal/service/cloudbroker/vins/utility_vins_list_deleted.go
@@ -69,6 +69,9 @@ func utilityVinsListDeletedCheckPresence(ctx context.Context, d *schema.Resource
if size, ok := d.GetOk("size"); ok {
req.Size = uint64(size.(int))
}
+ if VNFDevId, ok := d.GetOk("vnfdev_id"); ok {
+ req.VNFDevId = uint64(VNFDevId.(int))
+ }
log.Debugf("utilityVinsListDeletedCheckPresence")
vinsList, err := c.CloudBroker().VINS().ListDeleted(ctx, req)
diff --git a/internal/service/cloudbroker/vins/utility_vins_nat_rule_list.go b/internal/service/cloudbroker/vins/utility_vins_nat_rule_list.go
index 71dcaf1..dd03370 100644
--- a/internal/service/cloudbroker/vins/utility_vins_nat_rule_list.go
+++ b/internal/service/cloudbroker/vins/utility_vins_nat_rule_list.go
@@ -52,10 +52,6 @@ func utilityVinsNatRuleListCheckPresence(ctx context.Context, d *schema.Resource
req.VINSID = uint64(d.Get("vins_id").(int))
}
- if reason, ok := d.GetOk("reason"); ok {
- req.Reason = reason.(string)
- }
-
natRuleList, err := c.CloudBroker().VINS().NATRuleList(ctx, req)
if err != nil {
return nil, err
diff --git a/samples/README.md b/samples/README.md
index 49d940c..ae896fc 100644
--- a/samples/README.md
+++ b/samples/README.md
@@ -7,109 +7,272 @@
- cloudapi:
- data:
- - image
- - image_list
- - image_list_stacks
- - snapshot_list
- - pcidevice_list
- - pcidevice
- - vgpu
- - disk_list
- - rg_list
- - account_list
+ - account
+ - account_audits_list
- account_computes_list
+ - account_consumed_units
+ - account_consumed_units_by_type
+ - account_deleted_list
- account_disks_list
- - account_vins_list
- - account_audits_list
- - account
- - account_rg_list
- - account_counsumed_units
- - account_counsumed_units_by_type
+ - account_flipgroups_list
+ - account_list
- account_reserved_units
+ - account_resource_consumption_get
+ - account_resource_consumption_list
+ - account_rg_list
- account_templates_list
- - account_deleted_list
- - bservice_list
- - bservice_snapshot_list
- - bservice_deleted_list
+ - account_vins_list
+ - audit
- bservice
+ - bservice_deleted_list
- bservice_group
- - extnet_default
- - extnet_list
- - extnet
- - extnet_computes_list
- - vins_list
- - locations_list
- - location_url
- - lb
- - lb_list
- - lb_list_deleted
+ - bservice_list
+ - bservice_snapshot_list
+ - disk
+ - disk_list
- disk_list_deleted
- - disk_list_unattached
- disk_list_types
- disk_list_types_detailed
- - disk_snapshot_list
+ - disk_list_unattached
+ - disk_replication
- disk_snapshot
- - resources:
+ - disk_snapshot_list
+ - dpdknet
+ - dpdknet_list
+ - extnet
+ - extnet_computes_list
+ - extnet_default
+ - extnet_list
+ - flipgroup
+ - flipgroup_list
- image
- - virtual_image
- - cdrom_image
- - delete_images
+ - image_list
+ - k8ci_list
- k8s
+ - k8s_computes
+ - k8s_list
+ - k8s_list_deleted
- k8s_wg
- - snapshot
- - pcidevice
- - account
- - bservice
- - bservice_group
+ - k8s_wg_cloud_init
+ - k8s_wg_list
+ - kvmvm
+ - kvmvm_audits
+ - kvmvm_get_audits
+ - kvmvm_get_console_url
+ - kvmvm_get_log
+ - kvmvm_list
+ - vkvmvm_list_deleted
+ - kvmvm_pci_device_list
+ - kvmvm_pfw_list
+ - kvmvm_snapshot_usage
+ - kvmvm_user_list
+ - kvmvm_vgpu_list
- lb
- - lb_frontend
- - lb_backend
- - lb_frontend_bind
- - lb_backend_server
- - disk_snapshot
-- cloudbroker:
- - data:
- - grid
- - grid_list
- - image
- - image_list
- - image_list_stacks
- - pcidevice_list
- - pcidevice
- - sep
- - sep_list
- - sep_disk_list
- - sep_config
- - sep_pool
- - sep_consumption
- - disk_list
+ - lb_list
+ - lb_list_deleted
+ - location_url
+ - locations_list
+ - resgroup
+ - rg_affinity_group_computes
+ - rg_affinity_groups_get
+ - rg_affinity_groups_list
+ - rg_audits
- rg_list
- - account_list
- - account_computes_list
- - account_disks_list
- - account_vins_list
- - account_audits_list
- - account
- - account_rg_list
- - account_counsumed_units
- - account_counsumed_units_by_type
- - account_reserved_units
- - account_templates_list
- - account_deleted_list
+ - rg_list_computes
+ - rg_list_deleted
+ - rg_list_lb
+ - rg_list_pfw
+ - rg_list_vins
+ - rg_resource_consumption_get
+ - rg_resource_consumption_list
+ - rg_usage
+ - snapshot_list
+ - stack
+ - stack_list
+ - vfpool
+ - vfpool_list
+ - vins
+ - vins_audits
+ - vins_ext_net_list
+ - vins_ip_list
- vins_list
+ - vins_list_deleted
+ - vins_nat_rule_list
+ - vins_static_route
+ - vins_static_route_list
- resources:
+ - account
+ - bservice
+ - bservice_group
+ - disk
+ - disk_snapshot
+ - flipgroup
- image
- - virtual_image
- - cdrom_image
- - delete_images
+ - image_from_blank_compute
+ - image_from_platform_disk
+ - image_virtual
- k8s
+ - k8s_cp
- k8s_wg
+ - kvmvm
+ - lb
+ - lb_backend
+ - lb_backend_server
+ - lb_frontend
+ - lb_frontend_bind
+ - pfw
+ - resgroup
- snapshot
- - pcidevice
- - sep
- - sep_config
- - account
- vins
+ - vins_static_route
+- cloudbroker:
+ - data:
+ - cb_account
+ - cb_account_audits_list
+ - cb_account_available_templates_list
+ - cb_account_computes_list
+ - cb_account_disks_list
+ - cb_account_flipgroups_list
+ - cb_account_list
+ - cb_account_list_deleted
+ - cb_account_resource_consumption_get
+ - cb_account_resource_consumption_list
+ - cb_account_rg_list
+ - cb_account_vins_list
+ - cb_audit
+ - cb_audit_linked_jobs
+ - cb_audit_list
+ - cb_audits_export_to_file
+ - cb_disk
+ - cb_disk_list
+ - cb_disk_list_deleted
+ - cb_disk_list_types
+ - cb_disk_list_types_detailed
+ - cb_disk_list_unattached
+ - cb_disk_replication
+ - cb_disk_snapshot
+ - cb_disk_snapshot_list
+ - cb_dpdknet
+ - cb_dpdknet_list
+ - cb_extnet
+ - cb_extnet_default
+ - cb_extnet_list
+ - cb_extnet_static_route
+ - cb_extnet_static_route_list
+ - cb_flipgroup
+ - cb_flipgroup_list
+ - cb_grid
+ - cb_grid_get_consumption
+ - cb_grid_get_diagnosis
+ - cb_grid_get_settings
+ - cb_grid_get_status
+ - cb_grid_list
+ - cb_grid_list_consumption
+ - cb_grid_list_emails
+ - cb_grid_post_diagnosis
+ - cb_grid_post_status
+ - cb_image
+ - cb_image_list
+ - cb_image_list_stacks
+ - cb_k8ci
+ - cb_k8ci_list
+ - cb_k8ci_list_deleted
+ - cb_k8s
+ - cb_k8s_computes
+ - cb_k8s_list
+ - cb_k8s_list_deleted
+ - cb_k8s_wg
+ - cb_k8s_wg_cloud_init
+ - cb_k8s_wg_list
+ - cb_kvmvm
+ - cb_kvmvm_affinity_relations
+ - cb_kvmvm_audits
+ - cb_kvmvm_boot_order_get
+ - cb_kvmvm_get_audits
+ - cb_kvmvm_get_console_url
+ - cb_kvmvm_get_log
+ - cb_kvmvm_list
+ - cb_kvmvm_list_deleted
+ - cb_kvmvm_migrate_storage_info
+ - cb_kvmvm_pci_device_list
+ - cb_kvmvm_pfw_list
+ - cb_kvmvm_snapshot_list
+ - cb_kvmvm_snapshot_usage
+ - cb_kvmvm_user_list
+ - cb_kvmvm_vgpu_list
+ - cb_lb
+ - cb_lb_list
+ - cb_lb_list_deleted
+ - cb_node
+ - cb_node_list
+ - cb_pcidevice
+ - cb_pcidevice_list
+ - cb_rg
+ - cb_rg_affinity_group_computes
+ - cb_rg_affinity_groups_get
+ - cb_rg_affinity_groups_list
+ - cb_rg_audits
+ - cb_rg_list
+ - cb_rg_list_computes
+ - cb_rg_list_deleted
+ - cb_rg_list_lb
+ - cb_rg_list_pfw
+ - cb_rg_list_vins
+ - cb_rg_resource_consumption_get
+ - cb_rg_resource_consumption_list
+ - cb_rg_usage
+ - cb_sep
+ - cb_sep_config
+ - cb_sep_consumption
+ - cb_sep_disk_list
+ - cb_sep_list
+ - cb_sep_pool
+ - cb_stack
+ - cb_stack_list
+ - cb_user
+ - cb_user_get_audit
+ - cb_user_list
+ - cb_vfpool
+ - cb_vfpool_list
+ - cb_vins
+ - cb_vins_audits
+ - cb_vins_ext_net_list
+ - cb_vins_ip_list
+ - cb_vins_list
+ - cb_vins_list_deleted
+ - cb_vins_nat_rule_list
+ - cb_vins_static_route
+ - cb_vins_static_route_list
+ - resources:
+ - cb_account
+ - cb_cdrom_image
+ - cb_disk
+ - cb_disk_snapshot
+ - cb_dpdknet
+ - cb_extnet
+ - cb_extnet_static_route
+ - cb_flipgroup
+ - cb_image
+ - cb_image_from_blank_compute
+ - cb_image_from_platform_disk
+ - cb_k8ci
+ - cb_k8s_cp
+ - cb_k8s_wg
+ - cb_kvmvm
+ - cb_lb
+ - cb_lb_backend
+ - cb_lb_backend_server
+ - cb_lb_frontend
+ - cb_lb_frontend_bind
+ - cb_pcidevice
+ - cb_rg
+ - cb_sep
+ - cb_sep_config
+ - cb_user
+ - cb_vfpool
+ - cb_vins
+ - cb_vins_static_route
+ - cb_virtual_image
## Как пользоваться примерами
diff --git a/samples/cloudapi/account/data_account_flipgroups_list/main.tf b/samples/cloudapi/account/data_account_flipgroups_list/main.tf
index eb253a1..c1b00f4 100644
--- a/samples/cloudapi/account/data_account_flipgroups_list/main.tf
+++ b/samples/cloudapi/account/data_account_flipgroups_list/main.tf
@@ -62,6 +62,12 @@ data "decort_account_flipgroups_list" "afgl" {
#тип - целое число
#flipgroup_id = 100
+ #сортировка по одному из поддерживаемых полей
+ #опциональный параметр
+ #тип - строка
+ #формат - "+поле" по возрастанию / "-поле" по убыванию
+ #sort_by = "+name"
+
#кол-во страниц для вывода
#опциональный параметр
#тип - целое число
diff --git a/samples/cloudapi/account/resource_account/main.tf b/samples/cloudapi/account/resource_account/main.tf
index b7836f2..3e69a16 100644
--- a/samples/cloudapi/account/resource_account/main.tf
+++ b/samples/cloudapi/account/resource_account/main.tf
@@ -77,12 +77,6 @@ resource "decort_account" "a" {
#ARCXDU - админ
access_type = "R"
- #рекурсивное удаление пользователя из всех ресурсов аккаунтов
- #необязательный параметр
- #тип - булев
- #по-умолчанию - false
- #применяется при удалении пользователя из аккаунта
- recursive_delete = true
}
users {
user_id = "username_1@decs3o"
diff --git a/samples/cloudapi/audit/data_audit/main.tf b/samples/cloudapi/audit/data_audit/main.tf
new file mode 100644
index 0000000..f2d590f
--- /dev/null
+++ b/samples/cloudapi/audit/data_audit/main.tf
@@ -0,0 +1,39 @@
+/*
+Пример использования
+Получение аудита по guid
+*/
+
+#Расскомментируйте этот код,
+#и внесите необходимые правки в версию и путь,
+#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
+/*
+terraform {
+ required_providers {
+ decort = {
+ source = "basis/decort/decort"
+ version = ""
+ }
+ }
+}
+*/
+
+provider "decort" {
+ authenticator = "decs3o"
+ #controller_url =
+ controller_url = "https://ds1.digitalenergy.online"
+ #oauth2_url =
+ oauth2_url = "https://sso.digitalenergy.online"
+ allow_unverified_ssl = true
+}
+
+data "decort_audit" "audit" {
+ #guid аудита
+ #обязательный параметр
+ #тип - строка
+ audit_guid = "abcdefg"
+
+}
+
+output "test" {
+ value = data.decort_audit.audit
+}
diff --git a/samples/cloudapi/disk/resource_disk/main.tf b/samples/cloudapi/disk/resource_disk/main.tf
index b6b862d..0af19ce 100644
--- a/samples/cloudapi/disk/resource_disk/main.tf
+++ b/samples/cloudapi/disk/resource_disk/main.tf
@@ -57,11 +57,6 @@ resource "decort_disk" "acl" {
#тип - булев
permanently = false
- #описание причины удаления
- #опциональный параметр
- #тип - строка
- reason = "some"
-
#Флаг, отвечающий за доступность диска дургим ресурсам
#опциональный параметр
#тип - строка
diff --git a/samples/cloudapi/dpdknet/data_dpdknet/main.tf b/samples/cloudapi/dpdknet/data_dpdknet/main.tf
new file mode 100644
index 0000000..59ec65c
--- /dev/null
+++ b/samples/cloudapi/dpdknet/data_dpdknet/main.tf
@@ -0,0 +1,38 @@
+/*
+Пример использования
+Получение данных диска
+*/
+
+#Расскомментируйте этот код,
+#и внесите необходимые правки в версию и путь,
+#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
+/*
+terraform {
+ required_providers {
+ decort = {
+ source = "basis/decort/decort"
+ version = ""
+ }
+ }
+}
+*/
+
+provider "decort" {
+ authenticator = "decs3o"
+ #controller_url =
+ controller_url = "https://ds1.digitalenergy.online"
+ #oauth2_url =
+ oauth2_url = "https://sso.digitalenergy.online"
+ allow_unverified_ssl = true
+}
+
+data "decort_dpdknet" "dpdk" {
+ #фильтр по id DPDK сети
+ #обязательный параметр
+ #тип - целое число
+ dpdk_id = 49304
+}
+
+output "test" {
+ value = data.decort_dpdknet.dpdk
+}
diff --git a/samples/cloudapi/disk/resource_disk_replication/main.tf b/samples/cloudapi/dpdknet/data_dpdknet_list/main.tf
similarity index 50%
rename from samples/cloudapi/disk/resource_disk_replication/main.tf
rename to samples/cloudapi/dpdknet/data_dpdknet_list/main.tf
index 99304ef..1ae79a3 100644
--- a/samples/cloudapi/disk/resource_disk_replication/main.tf
+++ b/samples/cloudapi/dpdknet/data_dpdknet_list/main.tf
@@ -1,6 +1,6 @@
/*
Пример использования
-Ресурс репликации диска
+Получение списка доступных дисков
*/
#Расскомментируйте этот код,
@@ -26,59 +26,54 @@ provider "decort" {
allow_unverified_ssl = true
}
-resource "decort_disk_replication" "dr" {
- #id диска из которого будет создана реплика
- #обязательный параметр
+data "decort_dpdknet_list" "dl" {
+ #фильтр по id DPDK сети
+ #опциональный параметр
#тип - целое число
- disk_id = 20100
-
- #имя реплики диска
- #обязательный параметр
- #тип - строка
- disk_name = "test"
+ #by_id = 100
- #sep id
- #обязательный параметр
+ #фильтр по grid ID
+ #опциональный параметр
#тип - целое число
- sep_id = 1
-
- #название pool
- #обязательный параметр
+ #gid = 100
+
+ #фильтр по имени сети
+ #опциональный параметр
#тип - строка
- pool_name = "some"
+ #name = "test_dpdk"
- #флаг паузы
+ #фильтр по описания
#опциональный параметр
- #тип - булев
- #pause = false
+ #тип - строка
+ #desc = "user"
- #флаг для изменения ролей дисков
+ #фильтр по статусу
#опциональный параметр
- #тип - булев
- #reverse = false
+ #тип - строка
+ #status = "ENABLED"
- #флаг для запуска связи между диском и репликой
+ #фильтр по compute IDs
#опциональный параметр
- #тип - булев
- #start = false
+ #тип - массив чисел
+ #compute_ids = [11111,22222]
- #флаг для отключения диска от ВМ при удалении
+ #сортировка по одному из поддерживаемых полей
#опциональный параметр
- #тип - булев
- #detach = false
+ #тип - строка
+ #формат - "+поле" по возрастанию / "-поле" по убыванию
+ #sort_by = "+name"
- #флаг для удаления реплики диска безвозвратно
+ #кол-во страниц для вывода
#опциональный параметр
- #тип - булев
- #permanently = false
+ #тип - целое число
+ #page = 1
- #описание причины удаления
+ #размер страницы
#опциональный параметр
- #тип - строка
- #reason = "some"
+ #тип - целое число
+ #size = 1
}
-
output "test" {
- value = decort_disk_replication.dr
+ value = data.decort_dpdknet_list.dl
}
diff --git a/samples/cloudapi/flipgroup/data_flipgroup_list/main.tf b/samples/cloudapi/flipgroup/data_flipgroup_list/main.tf
index 0dc80f4..c5f2cb6 100644
--- a/samples/cloudapi/flipgroup/data_flipgroup_list/main.tf
+++ b/samples/cloudapi/flipgroup/data_flipgroup_list/main.tf
@@ -93,8 +93,8 @@ data "decort_flipgroup_list" "fg" {
#фильтр по id клиентов
#опциональный параметр
- #тип - массив целых чисел
- #client_ids = [10,11]
+ #тип - массив строк
+ #client_ids = ["10","11"]
#фильтр по статусу
#опциональный параметр
diff --git a/samples/cloudapi/image/data_image_list/main.tf b/samples/cloudapi/image/data_image_list/main.tf
index 19bfe71..6d6130e 100644
--- a/samples/cloudapi/image/data_image_list/main.tf
+++ b/samples/cloudapi/image/data_image_list/main.tf
@@ -75,18 +75,18 @@ data "decort_image_list" "il" {
#фильтр по доступу
#опциональный параметр
- #тип - булевый тип
- #public = "true"
+ #тип - булев
+ #public = true
#фильтр по hot_resize
#опциональный параметр
- #тип - булевый тип
- #hot_resize = "true"
+ #тип - булев
+ #hot_resize = true
#фильтр по bootable
#опциональный параметр
- #тип - булевый тип
- #bootable = "true"
+ #тип - булев
+ #bootable = true
#сортировка по одному из поддерживаемых полей
#опциональный параметр
@@ -105,6 +105,11 @@ data "decort_image_list" "il" {
#тип - целое число
#если не задан - выводятся все доступные данные
#size = 3
+
+ #фильтр по enabled
+ #опциональный параметр
+ #тип - булев
+ #enabled = true
}
output "test" {
diff --git a/samples/cloudapi/image/resource_image/main.tf b/samples/cloudapi/image/resource_image/main.tf
index 1d83200..7d71f19 100644
--- a/samples/cloudapi/image/resource_image/main.tf
+++ b/samples/cloudapi/image/resource_image/main.tf
@@ -94,15 +94,10 @@ resource "decort_image" "img" {
#тип - строка
pool_name = "pool"
- #архитектура образа (X86_64 / PPC64_LE)
+ #архитектура образа (X86_64)
#опциональный параметр
#тип - строка
- architecture = "PPC64_LE"
-
- #флаг окончательного удаления
- #опциональный параметр
- #тип - булев
- permanently = true
+ architecture = "X86_64"
#наименование сетевого интерфейса для вашего компьютера с Linux, eth - встроенный, ens - pci слот
#опциональный параметр
diff --git a/samples/cloudapi/image/resource_image_from_blank_compute/main.tf b/samples/cloudapi/image/resource_image_from_blank_compute/main.tf
index 39d6f28..606ec7b 100644
--- a/samples/cloudapi/image/resource_image_from_blank_compute/main.tf
+++ b/samples/cloudapi/image/resource_image_from_blank_compute/main.tf
@@ -95,11 +95,6 @@ resource "decort_image_from_blank_compute" "img" {
#тип - булев
#async_mode = true
- #флаг окончательного удаления
- #опциональный параметр
- #тип - булев
- #permanently = true
-
}
output "img_out" {
diff --git a/samples/cloudapi/image/resource_image_from_platform_disk/main.tf b/samples/cloudapi/image/resource_image_from_platform_disk/main.tf
index d113407..5699ada 100644
--- a/samples/cloudapi/image/resource_image_from_platform_disk/main.tf
+++ b/samples/cloudapi/image/resource_image_from_platform_disk/main.tf
@@ -57,10 +57,16 @@ resource "decort_image_from_platform_disk" "img" {
#архитектура образа
#используется для создания образа
#обязательный параметр
- #возможные значения - X86_64, PPC64_LE
+ #возможные значения - X86_64
#тип - строка
architecture = "X86_64"
+ #драйверы компьютов, подходящие для данного образа
+ #используется для создания образа
+ #обязательный параметр
+ #тип - массив строк
+ drivers = ["KVM_X86"]
+
#имя пользователя для образа
#используется для создания образа
#опциональный параметр
@@ -91,12 +97,6 @@ resource "decort_image_from_platform_disk" "img" {
#тип - строка
#pool_name = "pool"
- #драйверы компьютов, подходящие для данного образа
- #используется для создания образа
- #опциональный параметр
- #тип - массив строк
- #drivers = ["KVM_X86"]
-
#поддержка hot resize
#используется для создания образа
#опциональный параметр
@@ -116,10 +116,6 @@ resource "decort_image_from_platform_disk" "img" {
#тип - булев
#async_mode = true
- #флаг окончательного удаления
- #опциональный параметр
- #тип - булев
- #permanently = true
}
output "img_out" {
diff --git a/samples/cloudapi/image/resource_image_virtual/main.tf b/samples/cloudapi/image/resource_image_virtual/main.tf
index 01ff9fe..e68e3f1 100644
--- a/samples/cloudapi/image/resource_image_virtual/main.tf
+++ b/samples/cloudapi/image/resource_image_virtual/main.tf
@@ -43,10 +43,6 @@ resource "decort_image_virtual" "iv" {
#тип - целое число
link_to = 123
- #Флаг для удаления диска
- #опциональный параметр
- #тип - булев
- permanently = false
}
output "sr" {
diff --git a/samples/cloudapi/k8s/resource_k8s/main.tf b/samples/cloudapi/k8s/resource_k8s/main.tf
index 0ecea74..fec659c 100644
--- a/samples/cloudapi/k8s/resource_k8s/main.tf
+++ b/samples/cloudapi/k8s/resource_k8s/main.tf
@@ -148,6 +148,11 @@ resource "decort_k8s" "cluster" {
#опциональный параметр
#тип - строка
sep_pool = "data01"
+
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ chipset = "i440fx"
}
#...Далее можно создавать произвольное кол-во дополнительных worker групп
@@ -188,6 +193,11 @@ resource "decort_k8s" "cluster" {
#тип - строка
sep_pool = "data01"
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ chipset = "i440fx"
+
#список лейблов
#опциональный параметр
#тип - массив строк
@@ -286,6 +296,11 @@ resource "decort_k8s" "cluster" {
# тип - файл с форматом в виде x509 pem
oidc_cert = file("ca.crt")
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ chipset = "i440fx"
+
# запуск,остановка кластера
# опциональный параметр
# тип - булев
diff --git a/samples/cloudapi/k8s/resource_k8s_wg/main.tf b/samples/cloudapi/k8s/resource_k8s_wg/main.tf
index 6048535..49ab513 100644
--- a/samples/cloudapi/k8s/resource_k8s_wg/main.tf
+++ b/samples/cloudapi/k8s/resource_k8s_wg/main.tf
@@ -58,6 +58,11 @@ resource "decort_k8s_wg" "wg" {
#по-умолчанию - 1024
ram = 1024
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ chipset = "i440fx"
+
#размер загрузочного диска для worker node, в Гбайтах
#опциональный параметр
#тип - целое число
diff --git a/samples/cloudapi/kvmvm/resource_kvmvm/main.tf b/samples/cloudapi/kvmvm/resource_kvmvm/main.tf
index e3e1959..374caf5 100644
--- a/samples/cloudapi/kvmvm/resource_kvmvm/main.tf
+++ b/samples/cloudapi/kvmvm/resource_kvmvm/main.tf
@@ -57,6 +57,11 @@ resource "decort_kvmvm" "comp" {
#тип - целое число
ram = 2048
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ chipset = "i440fx"
+
#размер загрузочного диска
#опциональный параметр
#тип - целое число
@@ -74,7 +79,7 @@ resource "decort_kvmvm" "comp" {
#конфигурация cloud init
#опциональный параметр
- #тип - файл в формате JSON/YAML
+ #тип - файл в формате JSON
cloud_init = file("initconfig.tftpl")
#описание compute
@@ -259,7 +264,7 @@ resource "decort_kvmvm" "comp" {
#опциональный параметр
#тип - блок сетей
network {
- #тип сети VINS/EXTNET (для любого драйвера) и VFNIC (для KVM_X86)
+ #тип сети VINS/EXTNET/DPDK (для любого драйвера) и VFNIC (для KVM_X86)
#обязательный параметр
#тип - строка
net_type = "VINS"
@@ -348,6 +353,12 @@ resource "decort_kvmvm" "comp" {
label = "label1"
}
+ #флаг для удаления снапшотов в асинхронном режиме
+ #опциональный параметр
+ #дефолтное значение - false
+ #тип - булев
+ snapshot_delete_async = true
+
#rollback на нужный снапшот
#опциональный параметр
#Не имеет смысла при отсутсвии снапшотов
diff --git a/samples/cloudapi/rg/data_rg/main.tf b/samples/cloudapi/rg/data_rg/main.tf
index a6951ff..1703737 100644
--- a/samples/cloudapi/rg/data_rg/main.tf
+++ b/samples/cloudapi/rg/data_rg/main.tf
@@ -31,11 +31,7 @@ data "decort_resgroup" "rg" {
#обязательный параметр
#тип - целое число
rg_id = 1535
-
- #причина для выполнения действия
- #необязятельный параметр
- #тип - строка
- reason = "TEST"
+
}
output "output" {
diff --git a/samples/cloudapi/rg/data_rg_usage/main.tf b/samples/cloudapi/rg/data_rg_usage/main.tf
index 5d6e4d3..e2f22b9 100644
--- a/samples/cloudapi/rg/data_rg_usage/main.tf
+++ b/samples/cloudapi/rg/data_rg_usage/main.tf
@@ -30,12 +30,7 @@ data "decort_rg_usage" "rg_usage" {
#id ресурсной группы
#обязательный параметр
#тип - целое число
-
rg_id = 123
- #причина для действия
- #необязательный параметр
- #тип - строка
- reason = "TEST"
}
output "output" {
diff --git a/samples/cloudapi/rg/resource_rg/main.tf b/samples/cloudapi/rg/resource_rg/main.tf
index 0c39e3d..191ed51 100644
--- a/samples/cloudapi/rg/resource_rg/main.tf
+++ b/samples/cloudapi/rg/resource_rg/main.tf
@@ -50,6 +50,7 @@ resource "decort_resgroup" "rg" {
#опциональный параметр
#виртуальные машины, созданные в этой RG, по умолчанию будут подключены к этой сети
#допустимые значения: PRIVATE, PUBLIC, NONE
+ #по умолчанию: PRIVATE
#тип - строка
def_net_type = "NONE"
@@ -68,11 +69,6 @@ resource "decort_resgroup" "rg" {
#тип - строка
ext_ip = "1.1.1.1"
- #причина выполнения
- #опциональный параметр
- #тип - строка
- reason = "TEST"
-
#описание
#опциональный параметр
#тип - строка
@@ -92,8 +88,8 @@ resource "decort_resgroup" "rg" {
#опциональный параметр
#тип - блок прав доступа
access {
- #имя юзера предоставляемому права
- #обязательный праметр при использовании блока
+ #имя юзера предоставляемому права
+ #обязательный параметр при использовании блока
#тип - строка
user = "kasim_baybikov_1@decs3o"
@@ -105,7 +101,6 @@ resource "decort_resgroup" "rg" {
#установить сеть по умолчанию
#опциональный параметр
- #при добавлении блока, удалять его нельзя
#тип - блок сетей
def_net {
#тип сети
@@ -122,10 +117,6 @@ resource "decort_resgroup" "rg" {
#тип - целое число
net_id = 1234
- #причина выполнения
- #опциональный параметр
- #тип - строка
- reason = "TEST"
}
#лимиты ресурсов для ресурсной группы
@@ -163,6 +154,12 @@ resource "decort_resgroup" "rg" {
ext_ips = 29
}
+ #список названий pools
+ #необязательный параметр
+ #игнорируется при создании ресурса, применяется только при обновлении
+ #тип - массив строк
+ #uniq_pools = ["sep1_poolName1", "sep2_poolName2"]
+
#флаг для принудительного удаления ресурсной группы
#опциональный параметр
#тип - булев
diff --git a/samples/cloudapi/snapshot/resource_snapshot/main.tf b/samples/cloudapi/snapshot/resource_snapshot/main.tf
index fe2fbc3..621d819 100644
--- a/samples/cloudapi/snapshot/resource_snapshot/main.tf
+++ b/samples/cloudapi/snapshot/resource_snapshot/main.tf
@@ -46,7 +46,13 @@ resource "decort_snapshot" "s" {
#если флаг был измеен с false на true, то произойдет откат
#по-уолчанию - false
#тип - булев
- #rollback = false
+ rollback = false
+
+ #флаг для удаление снапшота асинхронном режиме
+ #опциональный параметр
+ #по умолчанию - false
+ #тип - булев
+ delete_async_mode = true
}
diff --git a/samples/cloudapi/vins/data_vins_list/main.tf b/samples/cloudapi/vins/data_vins_list/main.tf
index c27d721..003ed51 100644
--- a/samples/cloudapi/vins/data_vins_list/main.tf
+++ b/samples/cloudapi/vins/data_vins_list/main.tf
@@ -52,6 +52,11 @@ data "decort_vins_list" "vl" {
#тип - строка
#ext_ip = "test"
+ #фильтр по VNF Device id
+ #опциональный параметр
+ #тип - целое число
+ #vnf_dev_id = 14
+
#включение удаленных vins в результат
#опциональный параметр
#тип - булев
diff --git a/samples/cloudbroker/account/resource_account/main.tf b/samples/cloudbroker/account/resource_account/main.tf
index b04b064..cb80e56 100644
--- a/samples/cloudbroker/account/resource_account/main.tf
+++ b/samples/cloudbroker/account/resource_account/main.tf
@@ -127,12 +127,6 @@ resource "decort_cb_account" "acc" {
#ARCXDU - админ
access_type = "R"
- #рекурсивное удаление пользователя из всех ресурсов аккаунтов
- #опциональный параметр
- #тип - булев
- #по-умолчанию - false
- #применяется при удалении пользователя из аккаунта
- recursive_delete = true
}
*/
diff --git a/samples/cloudbroker/audit/data_audits_export_to_file/main.tf b/samples/cloudbroker/audit/data_audits_export_to_file/main.tf
new file mode 100644
index 0000000..a5f2290
--- /dev/null
+++ b/samples/cloudbroker/audit/data_audits_export_to_file/main.tf
@@ -0,0 +1,39 @@
+/*
+Пример использования
+Получения списка аудитов в виде архива csv файлов
+*/
+
+#Расскомментируйте этот код,
+#и внесите необходимые правки в версию и путь,
+#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
+/*
+terraform {
+ required_providers {
+ decort = {
+ source = "basis/decort/decort"
+ version = ""
+ }
+ }
+}
+*/
+
+provider "decort" {
+ authenticator = "decs3o"
+ #controller_url =
+ controller_url = "https://ds1.digitalenergy.online"
+ #oauth2_url =
+ oauth2_url = "https://sso.digitalenergy.online"
+ allow_unverified_ssl = true
+}
+
+data "decort_cb_audits_export_to_file" "audit" {
+ #путь, где будет создан архив, если не указан, создается в директории с main.tf с именем "audits.tar.gz"
+ #обязательный параметр
+ #тип - строка
+ file_path = "abcdefg.tar.gz"
+
+}
+
+output "test" {
+ value = data.decort_cb_audits_export_to_file.audit
+}
diff --git a/samples/cloudbroker/disk/resource_disk/main.tf b/samples/cloudbroker/disk/resource_disk/main.tf
index e0834a9..6dcbc45 100644
--- a/samples/cloudbroker/disk/resource_disk/main.tf
+++ b/samples/cloudbroker/disk/resource_disk/main.tf
@@ -41,7 +41,7 @@ resource "decort_cb_disk" "acl" {
#тип - целое число
gid = 212
- #название диска диска
+ #название диска
#обязательный параметр
#тип - строка
disk_name = "super-disk-re"
@@ -101,11 +101,6 @@ resource "decort_cb_disk" "acl" {
#тип - булев
#permanently = true
- #причина удаления диска
- #опциональный параметр
- #тип - строка
- #reason = "delete"
-
#флаг поделиться диском
#опциональный параметр
#тип - булев
diff --git a/samples/cloudbroker/disk/resource_disk_replication/main.tf b/samples/cloudbroker/disk/resource_disk_replication/main.tf
deleted file mode 100644
index 5604840..0000000
--- a/samples/cloudbroker/disk/resource_disk_replication/main.tf
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-Пример использования
-Ресурс репликации диска
-*/
-
-#Расскомментируйте этот код,
-#и внесите необходимые правки в версию и путь,
-#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
-
-/*
-terraform {
- required_providers {
- decort = {
- source = "basis/decort/decort"
- version = ""
- }
- }
-}
-*/
-
-provider "decort" {
- authenticator = "decs3o"
- #controller_url =
- controller_url = "https://ds1.digitalenergy.online"
- #oauth2_url =
- oauth2_url = "https://sso.digitalenergy.online"
- allow_unverified_ssl = true
-}
-
-resource "decort_cb_disk_replication" "dr" {
- #ID диска из которого будет создана реплика
- #обязательный параметр
- #тип - целое число
- disk_id = 20100
-
- #Имя реплики диска
- #обязательный параметр
- #тип - строка
- disk_name = "test"
-
- #sep id
- #обязательный параметр
- #тип - целое число
- sep_id = 1
-
- #название pool
- #обязательный параметр
- #тип - строка
- pool_name = "some"
-
- #флаг паузы
- #опциональный параметр
- #тип - булев
- #pause = false
-
- #флаг для изменения ролей дисков
- #опциональный параметр
- #тип - булев
- #reverse = false
-
- #флаг для запуска связи между диском и репликой
- #опциональный параметр
- #тип - булев
- #start = false
-
- #флаг для отключения диска от ВМ при удалении
- #опциональный параметр
- #тип - булев
- #detach = false
-
- #флаг для удаления реплики диска безвозвратно
- #опциональный параметр
- #тип - булев
- #permanently = false
-
- #описание причины удаления
- #опциональный параметр
- #тип - строка
- #reason = "some"
-}
-
-output "test" {
- value = decort_cb_disk_replication.dr
-}
diff --git a/samples/cloudbroker/dpdknet/data_dpdknet/main.tf b/samples/cloudbroker/dpdknet/data_dpdknet/main.tf
new file mode 100644
index 0000000..719016c
--- /dev/null
+++ b/samples/cloudbroker/dpdknet/data_dpdknet/main.tf
@@ -0,0 +1,38 @@
+/*
+Пример использования
+Получение данных диска
+*/
+
+#Расскомментируйте этот код,
+#и внесите необходимые правки в версию и путь,
+#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
+/*
+terraform {
+ required_providers {
+ decort = {
+ source = "basis/decort/decort"
+ version = ""
+ }
+ }
+}
+*/
+
+provider "decort" {
+ authenticator = "decs3o"
+ #controller_url =
+ controller_url = "https://ds1.digitalenergy.online"
+ #oauth2_url =
+ oauth2_url = "https://sso.digitalenergy.online"
+ allow_unverified_ssl = true
+}
+
+data "decort_cb_dpdknet" "dpdk" {
+ #фильтр по id DPDK сети
+ #обязательный параметр
+ #тип - целое число
+ dpdk_id = 49304
+}
+
+output "test" {
+ value = data.decort_cb_dpdknet.dpdk
+}
diff --git a/samples/cloudbroker/dpdknet/data_dpdknet_list/main.tf b/samples/cloudbroker/dpdknet/data_dpdknet_list/main.tf
new file mode 100644
index 0000000..4950a18
--- /dev/null
+++ b/samples/cloudbroker/dpdknet/data_dpdknet_list/main.tf
@@ -0,0 +1,89 @@
+/*
+Пример использования
+Получение списка доступных дисков
+*/
+
+#Расскомментируйте этот код,
+#и внесите необходимые правки в версию и путь,
+#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
+/*
+terraform {
+ required_providers {
+ decort = {
+ source = "basis/decort/decort"
+ version = ""
+ }
+ }
+}
+*/
+
+provider "decort" {
+ authenticator = "decs3o"
+ #controller_url =
+ controller_url = "https://ds1.digitalenergy.online"
+ #oauth2_url =
+ oauth2_url = "https://sso.digitalenergy.online"
+ allow_unverified_ssl = true
+}
+
+data "decort_cb_dpdknet_list" "dl" {
+ #фильтр по id DPDK сети
+ #опциональный параметр
+ #тип - целое число
+ #by_id = 100
+
+ #фильтр по grid ID
+ #опциональный параметр
+ #тип - целое число
+ #gid = 100
+
+ #фильтр по имени сети
+ #опциональный параметр
+ #тип - строка
+ #name = "test_dpdk"
+
+ #фильтр по описания
+ #опциональный параметр
+ #тип - строка
+ #desc = "user"
+
+ #фильтр по статусу
+ #опциональный параметр
+ #тип - строка
+ #status = "ENABLED"
+
+ #фильтр по доступным аккаунтам
+ #опциональный параметр
+ #тип - массив чисел
+ #account_access = [11111,22222]
+
+ #фильтр по доступным ресурсным группам
+ #опциональный параметр
+ #тип - массив чисел
+ #rg_access = [11111,22222]
+
+ #фильтр по compute IDs
+ #опциональный параметр
+ #тип - массив чисел
+ #compute_ids = [11111,22222]
+
+ #сортировка по одному из поддерживаемых полей
+ #опциональный параметр
+ #тип - строка
+ #формат - "+поле" по возрастанию / "-поле" по убыванию
+ #sort_by = "+name"
+
+ #кол-во страниц для вывода
+ #опциональный параметр
+ #тип - целое число
+ #page = 1
+
+ #размер страницы
+ #опциональный параметр
+ #тип - целое число
+ #size = 1
+}
+
+output "test" {
+ value = data.decort_cb_dpdknet_list.dl
+}
diff --git a/samples/cloudbroker/dpdknet/resource_dpdknet/main.tf b/samples/cloudbroker/dpdknet/resource_dpdknet/main.tf
new file mode 100644
index 0000000..b716521
--- /dev/null
+++ b/samples/cloudbroker/dpdknet/resource_dpdknet/main.tf
@@ -0,0 +1,78 @@
+/*
+Пример использования
+Ресурса диска:
+1. Создание ресурса
+2. Изменение ресурса
+3. Удаление ресурса
+*/
+
+#Раскомментируйте этот код,
+#и внесите необходимые правки в версию и путь,
+#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
+
+/*
+terraform {
+ required_providers {
+ decort = {
+ source = "basis/decort/decort"
+ version = ""
+ }
+ }
+}
+*/
+
+provider "decort" {
+ authenticator = "decs3o"
+ #controller_url =
+ controller_url = "https://ds1.digitalenergy.online"
+ #oauth2_url =
+ oauth2_url = "https://sso.digitalenergy.online"
+ allow_unverified_ssl = true
+}
+
+resource "decort_cb_dpdknet" "dpdk" {
+ #название
+ #обязательный параметр
+ #тип - строка
+ name = "dpdk-name"
+
+ #gid
+ #обязательный параметр
+ #тип - целое число
+ gid = 212
+
+ #vlanid для тегирования траффика на интерфейсе для компьюта
+ #обязательный параметр
+ #тип - целое число
+ vlan_id = 123
+
+ #OVS bridge в котором будут создаваться интерфейсы для компьютов, созданные из этой сети
+ #обязательный параметр
+ #тип - строка
+ ovs_bridge = "OVSBridge"
+
+ #описание сети
+ #опциональный параметр
+ #тип - строка
+ #desc = "description"
+
+ #список id аккаунтов, которым может быть выделена сеть в эксклюзивное пользование
+ #опциональный параметр
+ #тип - массив целых чисел
+ #account_access = [10,11]
+
+ #список id ресурсных групп, которым может быть выделена сеть в эксклюзивное пользование
+ #опциональный параметр
+ #тип - массив целых чисел
+ #rg_access = [10,11]
+
+ #флаг доступности сети для проведения с ней операций
+ #опциональный параметр
+ #по умолчанию - false
+ #тип - булев
+ #enabled = true
+}
+
+output "test" {
+ value = decort_cb_dpdknet.dpdk
+}
diff --git a/samples/cloudbroker/grid/data_grid_get_settings/main.tf b/samples/cloudbroker/grid/data_grid_get_settings/main.tf
new file mode 100644
index 0000000..52607fd
--- /dev/null
+++ b/samples/cloudbroker/grid/data_grid_get_settings/main.tf
@@ -0,0 +1,39 @@
+/*
+Пример использования
+Получение настроек grid (платформы) по id
+*/
+
+#Расскомментируйте этот код,
+#и внесите необходимые правки в версию и путь,
+#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
+/*
+terraform {
+ required_providers {
+ decort = {
+ source = "basis/decort/decort"
+ version = ""
+ }
+ }
+}
+*/
+
+provider "decort" {
+ authenticator = "decs3o"
+ #controller_url =
+ controller_url = "https://ds1.digitalenergy.online"
+ #oauth2_url =
+ oauth2_url = "https://sso.digitalenergy.online"
+ allow_unverified_ssl = true
+}
+
+data "decort_cb_grid_get_settings" "gs" {
+ #id grid для получения информации
+ #обязательный параметр
+ #тип - целое число
+ grid_id = 215
+
+}
+
+output "test" {
+ value = data.decort_cb_grid_get_settings.gs
+}
diff --git a/samples/cloudbroker/image/data_image_list/main.tf b/samples/cloudbroker/image/data_image_list/main.tf
index 3315586..63093b2 100644
--- a/samples/cloudbroker/image/data_image_list/main.tf
+++ b/samples/cloudbroker/image/data_image_list/main.tf
@@ -75,17 +75,17 @@ data "decort_cb_image_list" "il" {
#фильтр по доступу
#опциональный параметр
#тип - булев
- #public = "true"
+ #public = true
#фильтр по hot_resize
#опциональный параметр
#тип - булев
- #hot_resize = "true"
+ #hot_resize = true
#фильтр по bootable
#опциональный параметр
#тип - булев
- #bootable = "true"
+ #bootable = true
#сортировка по одному из поддерживаемых полей
#опциональный параметр
@@ -105,6 +105,11 @@ data "decort_cb_image_list" "il" {
#тип - целое число
#size = 3
+ #фильтр по enabled
+ #опциональный параметр
+ #тип - булев
+ #enabled = true
+
}
output "test" {
diff --git a/samples/cloudbroker/image/resource_delete_images/main.tf b/samples/cloudbroker/image/resource_delete_images/main.tf
index 4656d67..a9e4d0f 100644
--- a/samples/cloudbroker/image/resource_delete_images/main.tf
+++ b/samples/cloudbroker/image/resource_delete_images/main.tf
@@ -39,11 +39,6 @@ resource "decort_delete_images" "my_images" {
#по-умолчанию - false
#тип - булев
permanently = true
-
- #причина удаления
- #обязательный параметр
- #тип - строка
- reason = "test delete"
}
output "test" {
diff --git a/samples/cloudbroker/image/resource_image/main.tf b/samples/cloudbroker/image/resource_image/main.tf
index c553a54..f9db50b 100644
--- a/samples/cloudbroker/image/resource_image/main.tf
+++ b/samples/cloudbroker/image/resource_image/main.tf
@@ -155,16 +155,6 @@ resource "decort_cb_image" "my_image" {
#для удаления всех доступных аккаунтов, необходимо передать пустой массив
#accounts = [9, 5]
- #мгновенное удаление
- #опциональный параметр, можно использовать перед удалением
- #тип - булев
- #permanently = true
-
- #причина удаления
- #опциональный параметр, можно использовать перед удалением
- #тип - строка
- #reason = "test"
-
#наименование сетевого интерфейса для вашего компьютера с Linux, eth - встроенный, ens - pci слот
#опциональный параметр
#тип - строка
diff --git a/samples/cloudbroker/image/resource_image_cdrom/main.tf b/samples/cloudbroker/image/resource_image_cdrom/main.tf
index de8015a..1ae097e 100644
--- a/samples/cloudbroker/image/resource_image_cdrom/main.tf
+++ b/samples/cloudbroker/image/resource_image_cdrom/main.tf
@@ -48,7 +48,7 @@ resource "decort_cb_cdrom_image" "my_image" {
gid = 212
#драйвера
- #обязательный параметр
+ #опциональный параметр
#тип - массив строк
#возможные варианты - ["KVM_X86", "SVA_KVM_X86"], ["KVM_X86"], ["SVA_KVM_X86"]
drivers = ["KVM_X86", "SVA_KVM_X86"]
@@ -116,11 +116,6 @@ resource "decort_cb_cdrom_image" "my_image" {
#опциональный параметр, используется на уже созданном ресурсе
#тип - булев
#bootable = true
-
- #мгновенное удаление
- #опциональный параметр, можно использовать перед удалением
- #тип - булев
- #permanently = true
}
output "test" {
diff --git a/samples/cloudbroker/image/resource_image_from_blank_compute/main.tf b/samples/cloudbroker/image/resource_image_from_blank_compute/main.tf
index e806755..f840f60 100644
--- a/samples/cloudbroker/image/resource_image_from_blank_compute/main.tf
+++ b/samples/cloudbroker/image/resource_image_from_blank_compute/main.tf
@@ -133,16 +133,6 @@ resource "decort_cb_image_from_blank_compute" "my_image" {
#для удаления всех доступных аккаунтов, необходимо передать пустой массив
#accounts = [9, 5]
- #мгновенное удаление
- #опциональный параметр, можно использовать перед удалением
- #тип - булев
- #permanently = true
-
- #причина удаления
- #опциональный параметр, можно использовать перед удалением
- #тип - строка
- #reason = "test"
-
#наименование сетевого интерфейса для вашего компьютера с Linux, eth - встроенный, ens - pci слот
#используется для обновления образа
#опциональный параметр
diff --git a/samples/cloudbroker/image/resource_image_from_platform_disk/main.tf b/samples/cloudbroker/image/resource_image_from_platform_disk/main.tf
index 14789de..03ee91b 100644
--- a/samples/cloudbroker/image/resource_image_from_platform_disk/main.tf
+++ b/samples/cloudbroker/image/resource_image_from_platform_disk/main.tf
@@ -59,10 +59,16 @@ resource "decort_cb_image_from_platform_disk" "my_image" {
#архитектура образа
#используется для создания образа
#обязательный параметр
- #возможные значения - X86_64 or PPC64_LE
+ #возможные значения - X86_64
#тип - строка
architecture = "X86_64"
+ #драйверы компьютов, подходящие для данного образа
+ #используется для создания образа
+ #обязательный параметр
+ #тип - массив строк
+ drivers = ["KVM_X86"]
+
#имя пользователя для образа
#используется для обновления и создания образа
#опциональный параметр
@@ -93,12 +99,6 @@ resource "decort_cb_image_from_platform_disk" "my_image" {
#тип - строка
#pool_name = "pool"
- #драйверы компьютов, подходящие для данного образа
- #используется для создания образа
- #опциональный параметр
- #тип - массив строк
- #drivers = ["KVM_X86"]
-
#поддержка hot resize
#используется для обновления и создания образа
#опциональный параметр
@@ -146,16 +146,6 @@ resource "decort_cb_image_from_platform_disk" "my_image" {
#для удаления всех доступных аккаунтов, необходимо передать пустой массив
#accounts = [9, 5]
- #мгновенное удаление
- #опциональный параметр, можно использовать перед удалением
- #тип - булев
- #permanently = true
-
- #причина удаления
- #опциональный параметр, можно использовать перед удалением
- #тип - строка
- #reason = "test"
-
#наименование сетевого интерфейса для вашего компьютера с Linux, eth - встроенный, ens - pci слот
#используется для обновления образа
#опциональный параметр
diff --git a/samples/cloudbroker/image/resource_virtual_image/main.tf b/samples/cloudbroker/image/resource_virtual_image/main.tf
index e996d53..d5c6b0b 100644
--- a/samples/cloudbroker/image/resource_virtual_image/main.tf
+++ b/samples/cloudbroker/image/resource_virtual_image/main.tf
@@ -95,18 +95,6 @@ resource "decort_cb_virtual_image" "my_image" {
#для удаления всех доступных стаков, необходимо передать пустой массив
#тип - массив целых чисел
#enabled_stacks = [9]
-
- #мгновенное удаление
- #опциональный параметр
- #можно использовать перед удалением
- #тип - булев
- #permanently = true
-
- #причина удаления
- #опциональный параметр
- #можно использовать перед удалением
- #тип - строка
- #reason = "test"
}
diff --git a/samples/cloudbroker/k8s/resource_k8s_cp/main.tf b/samples/cloudbroker/k8s/resource_k8s_cp/main.tf
index 9a03684..5ac19e5 100644
--- a/samples/cloudbroker/k8s/resource_k8s_cp/main.tf
+++ b/samples/cloudbroker/k8s/resource_k8s_cp/main.tf
@@ -175,6 +175,11 @@ resource "decort_cb_k8s_cp" "cp" {
#тип - файл с форматом в виде .crt
oidc_cert = file("ca.crt")
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ chipset = "i440fx"
+
#пользовательские значения sysctl для LB
#опциональный параметр
#тип - массив мап
diff --git a/samples/cloudbroker/k8s/resource_k8s_wg/main.tf b/samples/cloudbroker/k8s/resource_k8s_wg/main.tf
index 5a3ec46..d8cd2ad 100644
--- a/samples/cloudbroker/k8s/resource_k8s_wg/main.tf
+++ b/samples/cloudbroker/k8s/resource_k8s_wg/main.tf
@@ -94,6 +94,11 @@ resource "decort_cb_k8s_wg" "wg" {
#используется при создании и обновлении ресурса
cloud_init = file("initconfig.tftpl")
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ chipset = "i440fx"
+
}
output "test_wg" {
diff --git a/samples/cloudbroker/kvmvm/data_kvmvm/main.tf b/samples/cloudbroker/kvmvm/data_kvmvm/main.tf
index a57a4b2..08badf3 100644
--- a/samples/cloudbroker/kvmvm/data_kvmvm/main.tf
+++ b/samples/cloudbroker/kvmvm/data_kvmvm/main.tf
@@ -33,11 +33,6 @@ data "decort_cb_kvmvm" "comp" {
#тип - целое число
compute_id = 11346
- #прична запроса
- #опциональный параметр
- #тип - строка
- reason = "test"
-
}
output "test" {
diff --git a/samples/cloudbroker/kvmvm/data_kvmvm_get_audits/main.tf b/samples/cloudbroker/kvmvm/data_kvmvm_get_audits/main.tf
index cdbbcc2..3d1628d 100644
--- a/samples/cloudbroker/kvmvm/data_kvmvm_get_audits/main.tf
+++ b/samples/cloudbroker/kvmvm/data_kvmvm_get_audits/main.tf
@@ -32,11 +32,6 @@ data "decort_cb_kvmvm_get_audits" "kvmvm_get_audits" {
#тип - целое число
compute_id = 10154
- #причина запроса
- #опциональный параметр
- #тип - строка
- #reason = "test"
-
}
output "output" {
diff --git a/samples/cloudbroker/kvmvm/data_kvmvm_pfw_list/main.tf b/samples/cloudbroker/kvmvm/data_kvmvm_pfw_list/main.tf
index fef83c6..1306a6e 100644
--- a/samples/cloudbroker/kvmvm/data_kvmvm_pfw_list/main.tf
+++ b/samples/cloudbroker/kvmvm/data_kvmvm_pfw_list/main.tf
@@ -32,11 +32,6 @@ data "decort_cb_kvmvm_pfw_list" "kvmvm_pfw_list" {
#тип - целое число
compute_id = 48
- #причина запроса
- #опциональный параметр
- #тип - строка
- reason = "test"
-
}
output "output" {
diff --git a/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf b/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf
index ef69598..f56fba2 100644
--- a/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf
+++ b/samples/cloudbroker/kvmvm/resource_kvmvm/main.tf
@@ -57,6 +57,11 @@ resource "decort_cb_kvmvm" "comp" {
#тип - целое число
ram = 2048
+ #тип эмулируемой системы
+ #опциональный параметр
+ #тип - строка
+ #chipset = "i440fx"
+
#id образа диска для создания compute
#опциональный параметр
#тип - целое число
@@ -84,7 +89,7 @@ resource "decort_cb_kvmvm" "comp" {
#конфигурация cloud init
#опциональный параметр
- #тип - файл в формате JSON/YAML
+ #тип - файл в формате JSON
#cloud_init = file("initconfig.tftpl")
#описание compute
@@ -268,16 +273,11 @@ resource "decort_cb_kvmvm" "comp" {
#тип - строка (json-encoded)
#custom_fields = "{`key`:`value`}"
- #описание необходимости выполнения действия
- #опциональный параметр
- #тип - строка
- #reason = "need"
-
#присоединения сетей и удаление сетей в компьюте
#опциональный параметр
#тип - блок
#network {
- #тип сети VINS/EXTNET (для любого драйвера) и VFNIC (для KVM_X86)
+ #тип сети VINS/EXTNET/DPDK (для любого драйвера) и VFNIC (для KVM_X86)
#обязательный параметр
#тип - строка
#net_type = "VINS"
@@ -366,7 +366,13 @@ resource "decort_cb_kvmvm" "comp" {
#label = "label1"
#}
- #Rollback на нужный снапшот
+ #флаг для удаления снапшотов в асинхронном режиме
+ #опциональный параметр
+ #дефолтное значение - false
+ #тип - булев
+ #snapshot_delete_async = true
+
+ #rollback на нужный снапшот
#опциональный параметр
#не имеет смысла при отсутсвии снапшотов
#тип - блок
@@ -464,10 +470,55 @@ resource "decort_cb_kvmvm" "comp" {
#тип - булев
#detach_disks = true
- #Ффлаг для удаления компьюта
+ #флаг для удаления компьюта
#опциональный параметр
#тип - булев
#permanently = false
+
+ #конфигурация параметров libvirt virtio интерфейса
+ #опциональный параметр
+ #добавление блока возможно только при выключенной виртуальной машине,
+ #удаление блока удалит настройки только локально, состояние на платформе не изменится
+ #тип - блок
+ #libvirt_settings {
+ #mac адреc
+ #обязательный параметр
+ #тип - строка
+ #mac = "52:54:00:00:19:e1"
+
+ #tx mode
+ #опциональный параметр
+ #возможные значения - 'iothread', 'timer' или 'selected by hypervisor'
+ #тип - строка
+ #txmode = "iothread"
+
+ #IO event
+ #опциональный параметр
+ #возможные значения - 'on', 'off' or 'selected by hypervisor'
+ #тип - строка
+ #ioeventfd = "on"
+
+ #event ID
+ #опциональный параметр
+ #возможные значения - 'on', 'off' or 'selected by hypervisor'
+ #тип - строка
+ #event_idx = "off"
+
+ #количество очередей
+ #опциональный параметр
+ #тип - целое число
+ #queues = "4"
+
+ #длина очереди RX
+ #опциональный параметр
+ #тип - целое число
+ #rx_queue_size = "1024"
+
+ #длина очереди TX
+ #опциональный параметр
+ #тип - целое число
+ #tx_queue_size = "1024"
+ #}
}
output "test" {
diff --git a/samples/cloudbroker/rg/data_rg/main.tf b/samples/cloudbroker/rg/data_rg/main.tf
index 7ef2386..47b27d7 100644
--- a/samples/cloudbroker/rg/data_rg/main.tf
+++ b/samples/cloudbroker/rg/data_rg/main.tf
@@ -32,11 +32,6 @@ data "decort_cb_rg" "rg" {
#обязательный параметр
#тип - целое число
rg_id = 1022
-
- #причина для выполнения действия
- #необязятельный параметр
- #тип - строка
- reason = "TEST"
}
output "output" {
diff --git a/samples/cloudbroker/rg/data_rg_usage/main.tf b/samples/cloudbroker/rg/data_rg_usage/main.tf
index d16b565..0680842 100644
--- a/samples/cloudbroker/rg/data_rg_usage/main.tf
+++ b/samples/cloudbroker/rg/data_rg_usage/main.tf
@@ -32,11 +32,6 @@ data "decort_cb_rg_usage" "rg_usage" {
#обязательный параметр
#тип - целое число
rg_id = 123
-
- #причина для действия
- #необязательный параметр
- #тип - строка
- #reason = "TEST"
}
output "output" {
diff --git a/samples/cloudbroker/rg/resource_rg/main.tf b/samples/cloudbroker/rg/resource_rg/main.tf
index 7d1ae2e..2bebccc 100644
--- a/samples/cloudbroker/rg/resource_rg/main.tf
+++ b/samples/cloudbroker/rg/resource_rg/main.tf
@@ -85,6 +85,7 @@ resource "decort_cb_rg" "rg" {
#виртуальные машины, созданные в этой RG, по умолчанию будут подключены к этой сети.
#Допустимые значения: PRIVATE, PUBLIC, NONE.
#необязательный параметр
+ #по умолчанию: PRIVATE
#тип - строка
#def_net_type = "NONE"
@@ -108,11 +109,6 @@ resource "decort_cb_rg" "rg" {
#тип - строка
#ext_ip = "1.1.1.1"
- #причина выполнения
- #необязательный параметр
- #тип - строка
- #reason = "TEST"
-
#зарегистрировать компьюты в регистрационной системе
#необязательный параметр
#тип - булев
@@ -138,10 +134,6 @@ resource "decort_cb_rg" "rg" {
#разрешенные значения: "R", "RCX" or "ARCXDU"
right = "RCX"
- #причина запроса
- #необязательный параметр
- #тип - строка
- reason = "test"
}
#установить сеть по умолчанию
@@ -162,11 +154,6 @@ resource "decort_cb_rg" "rg" {
#необязательный параметр
#тип - целое число
net_id = 1234
-
- #причина выполнения
- #необязательный параметр
- #тип - строка
- reason = "TEST"
}
#может ли запуститься ВМ, если ресурсов CPU недостаточно
diff --git a/samples/cloudbroker/vins/data_vins/main.tf b/samples/cloudbroker/vins/data_vins/main.tf
index 68a0f8d..7e348f9 100644
--- a/samples/cloudbroker/vins/data_vins/main.tf
+++ b/samples/cloudbroker/vins/data_vins/main.tf
@@ -31,11 +31,6 @@ data "decort_cb_vins" "vins" {
#обязательный параметр
#тип - целое число
vins_id = 10101
-
- #причина запроса
- #опциональный параметр
- #тип - строка
- #reason = "report"
}
output "test" {
diff --git a/samples/cloudbroker/vins/data_vins_list_deleted/main.tf b/samples/cloudbroker/vins/data_vins_list_deleted/main.tf
index 9730d25..d2c2fc4 100644
--- a/samples/cloudbroker/vins/data_vins_list_deleted/main.tf
+++ b/samples/cloudbroker/vins/data_vins_list_deleted/main.tf
@@ -52,6 +52,11 @@ data "decort_cb_vins_list_deleted" "vins_list_deleted" {
#тип - строка
#ext_ip = "test"
+ #фильтр по VNF Device id
+ #опциональный параметр
+ #тип - целое число
+ #vnf_dev_id = 14
+
#сортировка по одному из поддерживаемых полей
#опциональный параметр
#тип - строка
diff --git a/samples/cloudbroker/vins/data_vins_nat_rule_list/main.tf b/samples/cloudbroker/vins/data_vins_nat_rule_list/main.tf
index c99bb20..def5d91 100644
--- a/samples/cloudbroker/vins/data_vins_nat_rule_list/main.tf
+++ b/samples/cloudbroker/vins/data_vins_nat_rule_list/main.tf
@@ -31,11 +31,6 @@ data "decort_cb_vins_nat_rule_list" "vins_nat_rule_list" {
#обязательный параметр
#тип - целое число
vins_id = 10101
-
- #причина вызова
- #опциональный параметр
- #тип - строка
- #reason = "test"
}
output "test" {
diff --git a/samples/cloudbroker/vins/resource_vins/main.tf b/samples/cloudbroker/vins/resource_vins/main.tf
index 7cb082e..16b5fcb 100644
--- a/samples/cloudbroker/vins/resource_vins/main.tf
+++ b/samples/cloudbroker/vins/resource_vins/main.tf
@@ -83,11 +83,6 @@ resource "decort_cb_vins" "vins" {
#тип - строка
#description = "Description"
- #причина запроса
- #опциональный параметр
- #тип - строка
- #reason = "test"
-
#блок для указания списка routes
#опциональный параметр
#тип - список routes
@@ -167,11 +162,6 @@ resource "decort_cb_vins" "vins" {
#опциональный параметр
#тип - целое число
#compute_id = 1234
-
- #причина запроса
- #опциональный параметр
- #тип - строка
- #reason = "one more reason"
#}
#блок для добавления natRule
diff --git a/wiki/4.7.0/01.-Введение.md b/wiki/4.7.0/01.-Введение.md
new file mode 100644
index 0000000..e1aa752
--- /dev/null
+++ b/wiki/4.7.0/01.-Введение.md
@@ -0,0 +1,7 @@
+DECORT Terraform Provider версии 4.7.x позволяет управлять облачными ресурсами на платформе Digital Energy Cloud Orchestration Technology (DECORT) версии 4.1.x и выше посредством Terraform.
+
+С помощью данного провайдера можно организовать программное управление вычислительными ресурсами (_compute_), ресурсными группами, сетевыми и дисковыми ресурсами, образами дисков, кластером, а также другими параметрами облачной платформы DECORT.
+
+Если вы хорошо знакомы с инструментом Terraform и хотите максимально быстро начать использовать платформу DECORT в своих Terraform-проектах, то можете сразу перейти к разделу [Пример работы](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.0/02.-Пример-работы.md), где приведён подробно откомментированный пример работы с основными видами ресурсов платформы. Если у вас всё же возникнут вопросы по облачной платформе DECORT и порядку авторизации в ней, то обратитесь к главе [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.0/03.-Обзор-облачной-платформы-DECORT.md). Также может оказаться полезной глава [«Инициализация Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.0/04.02-Инициализация-Terraform-провайдера-DECORT.md).
+
+Если вы только начинаете использовать инструмент Terraform и облачную платформу DECORT, то рекомендуем вам начать с главы [«Обзор облачной платформы DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.0/03.-Обзор-облачной-платформы-DECORT.md), после чего изучить главы [«_Data source_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.0/06.-Data-source-функции-Terraform-провайдера-DECORT.md) и [«_Resource_ функции Terraform провайдера DECORT»](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.0/07.-Resource-функции-Terraform-провайдера-DECORT.md). Примеры, приведенные в этих разделах, помогут вам быстро освоить базовые приёмы работы с инструментом Terraform и провайдером DECORT.
diff --git a/wiki/4.7.0/02.-Пример-работы.md b/wiki/4.7.0/02.-Пример-работы.md
new file mode 100644
index 0000000..4d3f5d2
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/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.7.0/03.-Обзор-облачной-платформы-DECORT.md b/wiki/4.7.0/03.-Обзор-облачной-платформы-DECORT.md
new file mode 100644
index 0000000..938223a
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/04.-Начало-работы-с-terraform-провайдером-DECORT.md b/wiki/4.7.0/04.-Начало-работы-с-terraform-провайдером-DECORT.md
new file mode 100644
index 0000000..edaa664
--- /dev/null
+++ b/wiki/4.7.0/04.-Начало-работы-с-terraform-провайдером-DECORT.md
@@ -0,0 +1,6 @@
+Данный раздел описывает:
+- Системные требования
+- Установку провайдера
+- Инициализацию провайдера
+- Переключение режима работы между разными группами API
+- Получение gid/grid_id площадки
diff --git a/wiki/4.7.0/04.01-Установка-Terraform-провайдера-DECORT.md b/wiki/4.7.0/04.01-Установка-Terraform-провайдера-DECORT.md
new file mode 100644
index 0000000..f6fe4be
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/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.7.0/04.02-Инициализация-Terraform-провайдера-DECORT.md b/wiki/4.7.0/04.02-Инициализация-Terraform-провайдера-DECORT.md
new file mode 100644
index 0000000..f20597d
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/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.7.0/04.03-Переключение-между-группами-API.md b/wiki/4.7.0/04.03-Переключение-между-группами-API.md
new file mode 100644
index 0000000..fb722ac
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/04.04-Получение-gid-или-grid_id.md b/wiki/4.7.0/04.04-Получение-gid-или-grid_id.md
new file mode 100644
index 0000000..4b316ac
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/04.05-Сборка-terraform-провайдера-в-образ.md b/wiki/4.7.0/04.05-Сборка-terraform-провайдера-в-образ.md
new file mode 100644
index 0000000..02bc8b7
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/05.-Работа-с-terraform.md b/wiki/4.7.0/05.-Работа-с-terraform.md
new file mode 100644
index 0000000..675f2ea
--- /dev/null
+++ b/wiki/4.7.0/05.-Работа-с-terraform.md
@@ -0,0 +1,4 @@
+Раздел описывает некоторые практики работы с terraform, которые могут быть полезны пользователю.
+Раздел включает в себя следующие статьи:
+- Импортирование ресурсов
+- Работа с таймаутами
diff --git a/wiki/4.7.0/05.01-Импортирование-ресурсов.md b/wiki/4.7.0/05.01-Импортирование-ресурсов.md
new file mode 100644
index 0000000..8a419d3
--- /dev/null
+++ b/wiki/4.7.0/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.7.0/05.02-Работа-с-таймаутами.md b/wiki/4.7.0/05.02-Работа-с-таймаутами.md
new file mode 100644
index 0000000..9a739b4
--- /dev/null
+++ b/wiki/4.7.0/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