diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..8fa7d62d
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,93 @@
+## Version 4.13.0
+
+### Добавлено
+
+#### grid
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1311 | Вычисляемые поля `cpu_allocation_ratio_vm`, `cpu_allocation_ratio`, `custom_backup_path`, `interface_generation_scheme`, `mac_address_prefix`, `node_self_stop_timer_uptime_monitor` и `node_self_stop_uptime_monitor` в datasource `decort_cb_grid_get_settings` в cloudbroker/grid |
+| BATF-1311 | Вычисляемое поле `zero_access_enabled` в datasource `decort_cb_grid` в cloudbroker/grid |
+| BATF-1311 | Вычисляемое поле `policies` в datasource `decort_cb_grid_get_consumption` в cloudbroker/grid |
+
+#### extnet
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1302 | Вычисляемое поле `free_ips` в datasource `decort_extnet_list` в cloudapi/extnet |
+
+#### node
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1306 | Вычисляемое поле `pci_devices` в datasource `decort_cb_node_list` в cloudbroker/node |
+| BATF-1294 | Вычисляемые поля `one_g_free`, `one_g_reserved`, `one_g_available`, `one_g_used`, `one_g_dpdk_reserved`, `two_m_free`, `two_m_reserved`, `two_m_available` и `two_m_used` в блоке `memory` в datasources `decort_cb_node` и `decort_cb_node_list` в cloudbroker/node |
+| BATF-1305 | Datasources `decort_cb_node_network_info` и `decort_cb_node_pci_devices` в cloudbroker/node |
+
+#### kvmvm
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1303 | Опциональное поле `clock` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
+| BATF-1303 | Опциональное поле `clock` в resource `decort_kvmvm` в cloudapi/kvmvm |
+| BATF-1303 | Вычисляемое поле `clock` в datasources `decort_cb_kvmvm`, `decort_cb_kvmvm_list` и `decort_cb_kvmvm_list_deleted` в cloudbroker/kvmvm |
+| BATF-1303 | Вычисляемое поле `clock` в datasources `decort_kvmvm`, `decort_kvmvm_list` и `decort_kvmvm_list_deleted` в cloudapi/kvmvm |
+| BATF-1297 | Datasource `decort_cb_kvmvm_cpu_alignment_profile` в cloudbroker/kvmvm |
+| BATF-1297 | Datasource `decort_kvmvm_cpu_alignment_profile` в cloudapi/kvmvm |
+| BATF-1297 | Опциональное поле `cpu_alignment_profile` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm и |
+| BATF-1297 | Опциональное поле `cpu_alignment_profile` в resource `decort_kvmvm` в cloudapi/kvmvm |
+| BATF-1297 | Вычисляемое поле `cpu_alignment_profiles` в datasources `decort_cb_kvmvm`, `decort_cb_kvmvm_list` и `decort_cb_kvmvm_list_deleted` в cloudbroker/kvmvm |
+| BATF-1297 | Вычисляемое поле `cpu_alignment_profiles` в datasources `decort_kvmvm`, `decort_kvmvm_list` и `decort_kvmvm_list_deleted` в cloudapi/kvmvm |
+
+#### zone
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1295 | Опциональное поле `hypervisor_similarity_in_percentage` и вычисляемое поле `cpu_alignment_profiles` в resource `decort_cb_zone` в cloudbroker/zone |
+| BATF-1295 | Datasources `decort_cb_zone_cpu_alignment_profile`, `decort_cb_zone_cpu_alignment_profile_list` и `decort_cb_zone_cpu_alignment_profile_test` в cloudbroker/zone |
+
+### Изменено
+
+#### image
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1304 | Тип опционального поля `type_image` с `string` на `[]string` в datasource `decort_image_list` в cloudapi/image |
+| BATF-1304 | Тип опционального поля `type_image` с `string` на `[]string` в datasource `decort_cb_image_list` в cloudbroker/image |
+
+#### kvmvm
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1300 | Тип вычисляемого поля `blk_discard` с `bool` на `string` и переименование в `discard` в блоке `disks` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
+| BATF-1300 | Тип опционального поля `blk_discard` с `bool` на `string` и переименование в `discard` в блоке `disks` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
+| BATF-1300 | Тип опционального поля `boot_disk_blk_discard` с `bool` на `string` и переименование в `boot_disk_discard` в resource `decort_cb_kvmvm` в cloudbroker/kvmvm |
+| BATF-1300 | Тип вычисляемого поля `blk_discard` с `bool` на `string` и переименование в `discard` в блоке `disks` в datasource `decort_cb_kvmvm` в cloudbroker/kvmvm |
+| BATF-1300 | Тип вычисляемого поля `blk_discard` с `bool` на `string` и переименование в `discard` в блоке `disks` в resource `decort_kvmvm` и datasource `decort_kvmvm` в cloudapi/kvmvm |
+
+#### disks
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1300 | Тип опционального поля `blk_discard` с `bool` на `string` и переименование в `discard` в resource `decort_cb_disk` в cloudbroker/disks |
+| BATF-1300 | Тип вычисляемого поля `blk_discard` с `bool` на `string` и переименование в `discard` в datasources `decort_cb_disk`, `decort_cb_disk_list`, `decort_cb_disk_list_unattached` и `decort_cb_disk_list_deleted` в cloudbroker/disks |
+| BATF-1300 | Тип вычисляемого поля `blk_discard` с `bool` на `string` и переименование в `discard` в resource `decort_disk` и datasources `decort_disk`, `decort_disk_list`, `decort_disk_list_unattached` и `decort_disk_list_deleted` в cloudapi/disks |
+
+#### user
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1293 | Тип поля `password` с опционального на обязательный в resource `decort_cb_user` в cloudbroker/user |
+
+#### image
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1299 | Тип поля `account_id` c опционального на обязательное в resource `decort_image_virtual` в cloudapi/image |
+
+
+### Исправлено
+
+
+### Удалено
+
+#### grid
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1311 | Вычисляемые поля `ckey` и `meta` в datasource `decort_cb_grid` в cloudbroker/grid |
+
+#### user
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BATF-1293 | Вычисляемое поле `password` в datasources `decort_cb_user` и `decort_cb_user_list` в cloudbroker/user |
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..36cfecbd
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ 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.
+ 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.
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..d5e4de5e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,85 @@
+TEST?=$$(go list ./... | grep -v 'vendor')
+HOSTNAME=basis
+NAMESPACE=decort
+NAME=terraform-provider-decort
+BINDIR = ./bin
+ZIPDIR = ./zip
+BINARY=${NAME}
+WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
+MAINPATH = ./cmd/decort/
+VERSION=4.13.0
+OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
+
+FILES = ${BINARY}_${VERSION}_darwin_amd64\
+ ${BINARY}_${VERSION}_darwin_arm64\
+ ${BINARY}_${VERSION}_freebsd_386\
+ ${BINARY}_${VERSION}_freebsd_amd64\
+ ${BINARY}_${VERSION}_freebsd_arm\
+ ${BINARY}_${VERSION}_linux_386\
+ ${BINARY}_${VERSION}_linux_amd64\
+ ${BINARY}_${VERSION}_linux_arm\
+ ${BINARY}_${VERSION}_linux_arm64\
+ ${BINARY}_${VERSION}_openbsd_386\
+ ${BINARY}_${VERSION}_openbsd_amd64\
+ ${BINARY}_${VERSION}_solaris_amd64\
+ ${BINARY}_${VERSION}_windows_386.exe\
+ ${BINARY}_${VERSION}_windows_amd64.exe\
+
+BINS = $(addprefix bin/, $(FILES))
+
+default: install
+
+image:
+ GOOS=linux GOARCH=amd64 go build -o terraform-provider-decort ./cmd/decort/
+ docker build . -t rudecs/tf:3.2.2
+ rm terraform-provider-decort
+
+lint:
+ golangci-lint run --timeout 600s
+
+st:
+ go build -o ${BINARY} ${MAINPATH}
+ cp ${BINARY} ${WORKPATH}
+ rm ${BINARY}
+
+build:
+ go build -o ${BINARY} ${MAINPATH}
+
+release: $(FILES)
+
+$(FILES) : $(BINDIR) $(ZIPDIR) $(BINS)
+ zip -r $(ZIPDIR)/$@.zip $(BINDIR)/$@
+ zip -rj $(ZIPDIR)/$@.zip scripts/install.bat scripts/install.sh
+
+$(BINDIR):
+ mkdir $@
+
+$(ZIPDIR):
+ mkdir $@
+
+$(BINS):
+ GOOS=darwin GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_darwin_amd64 $(MAINPATH)
+ GOOS=darwin GOARCH=arm64 go build -o ./bin/${BINARY}_${VERSION}_darwin_arm64 $(MAINPATH)
+ GOOS=freebsd GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_freebsd_386 $(MAINPATH)
+ GOOS=freebsd GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_freebsd_amd64 $(MAINPATH)
+ GOOS=freebsd GOARCH=arm go build -o ./bin/${BINARY}_${VERSION}_freebsd_arm $(MAINPATH)
+ GOOS=linux GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_linux_386 $(MAINPATH)
+ GOOS=linux GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_linux_amd64 $(MAINPATH)
+ GOOS=linux GOARCH=arm go build -o ./bin/${BINARY}_${VERSION}_linux_arm $(MAINPATH)
+ GOOS=linux GOARCH=arm64 go build -o ./bin/${BINARY}_${VERSION}_linux_arm64 ${MAINPATH}
+ GOOS=openbsd GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_openbsd_386 $(MAINPATH)
+ GOOS=openbsd GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_openbsd_amd64 $(MAINPATH)
+ GOOS=solaris GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_solaris_amd64 $(MAINPATH)
+ GOOS=windows GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_windows_386.exe $(MAINPATH)
+ GOOS=windows GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_windows_amd64.exe $(MAINPATH)
+
+install: build
+ mkdir -p ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
+ mv ${BINARY} ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
+
+test:
+ go test -i $(TEST) || exit 1
+ echo $(TEST) | xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4
+
+testacc:
+ TF_ACC=1 go test $(TEST) -v $(TESTARGS) -timeout 120m
diff --git a/README.md b/README.md
new file mode 100644
index 00000000..f379f63d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,244 @@
+# terraform-provider-decort
+
+Terraform provider для платформы Digital Energy Cloud Orchestration Technology (DECORT)
+
+## Соответсвие версий платформы версиям провайдера
+
+| Версия DECORT API | Версия провайдера Terraform |
+| ------ | ------ |
+| 4.6.0 | 4.12.x |
+| 4.5.0 | 4.11.x |
+| 4.4.0 | 4.10.x |
+| 4.3.0 | 4.9.x |
+| 4.2.0 | 4.8.x |
+| 4.1.0 | 4.7.x |
+| 4.0.0 | 4.6.x |
+| 3.8.9 | 4.5.x |
+| 3.8.8 | 4.4.x |
+| 3.8.7 | 4.3.x |
+| 3.8.6 | 4.0.x, 4.1.x, 4.2.x |
+| 3.8.5 | 3.4.x |
+| 3.8.0 - 3.8.4 | 3.3.1 |
+| 3.7.x | rc-1.25 |
+| 3.6.x | rc-1.10 |
+| до 3.6.0 | [terraform-provider-decs](https://github.com/rudecs/terraform-provider-decs) |
+
+## Режимы работы
+
+Провайдер позволяет работать в трех режимах:
+
+- Режим пользователя,
+- Режим администратора.
+ Используйте ресурсы `decort_cb_` для администрирования.
+- Режим SDN.
+ Используйте ресурсы `decort_sdn_` для работы с группой sdn.
+ Вики проекта: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+
+## Возможности провайдера
+
+- Режим пользователя:
+ - Работа с accounts,
+ - Работа с audit,
+ - Работа с bservice,
+ - Работа с disks,
+ - Работа с dpdk,
+ - Работа с extnets,
+ - Работа с flipgroups,
+ - Работа с image,
+ - Работа с k8s,
+ - Работа с Compute instances,
+ - Работа с load balancer,
+ - Работа с locations,
+ - Работа с pfw,
+ - Работа с resource groups,
+ - Работа с security groups,
+ - Работа с snapshots,
+ - Работа с trunk,
+ - Работа с VINS,
+ - Работа с SEPs,
+ - Работа с Zone.
+
+- Режим администратора:
+ - Работа с accounts,
+ - Работа с audit,
+ - Работа с disks,
+ - Работа с dpdk,
+ - Работа с extnets,
+ - Работа с flipgroups,
+ - Работа с grids,
+ - Работа с images,
+ - Работа с k8ci,
+ - Работа с k8s,
+ - Работа с Compute instances,
+ - Работа с load balancer,
+ - Работа с pci device,
+ - Работа с resource groups,
+ - Работа с seps,
+ - Работа с user,
+ - Работа с security groups,
+ - Работа с trunk,
+ - Работа с VINS,
+ - Работа с Zone.
+
+- Режим SDN:
+ - Работа с access groups,
+ - Работа с default security policies,
+ - Работа с hypervisors,
+ - Работа с segments,
+ - Работа с network object groups
+
+Со списком и описанием функционала всех групп можно ознамоиться на Вики проекта: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+
+## Установка
+Начиная с версии провайдера `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.12.0 has been successfully installed
+
+Copy this provider configuration to main.tf file:
+terraform {
+ required_providers {
+ decort = {
+ version = "4.12.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.10.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.12.0
+- target - архитектура операционной системы, например windows_amd64
+
+В примере ниже используется путь до провайдера на машине с ОС Linux:
+
+```bash
+~/.terraform.d/plugins/basis/decort/decort/4.12.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.12.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 инициализирует провайдер и будет готов к дальнейшей работе.
+
+## Примеры работы
+
+Примеры работы можно найти:
+
+- На вики проекта: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+- В папке `samples`
+
+Хорошей работы!
diff --git a/cmd/decort/main.go b/cmd/decort/main.go
new file mode 100644
index 00000000..61730323
--- /dev/null
+++ b/cmd/decort/main.go
@@ -0,0 +1,56 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+Tim Tkachev,
+
+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 main
+
+import (
+ log "github.com/sirupsen/logrus"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/plugin"
+
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/provider"
+)
+
+//go:generate go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs
+
+func main() {
+ log.SetLevel(log.DebugLevel)
+ log.Debug("Debug logging enabled")
+
+ plugin.Serve(&plugin.ServeOpts{
+ ProviderFunc: func() *schema.Provider {
+ return provider.Provider()
+ },
+ })
+}
diff --git a/debug.txt b/debug.txt
deleted file mode 100644
index b2b5d0d0..00000000
--- a/debug.txt
+++ /dev/null
@@ -1 +0,0 @@
-debug
\ No newline at end of file
diff --git a/docs/data-sources/account.md b/docs/data-sources/account.md
new file mode 100644
index 00000000..30f6939f
--- /dev/null
+++ b/docs/data-sources/account.md
@@ -0,0 +1,130 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `company` (String)
+- `companyurl` (String)
+- `compute_features` (List of String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `dc_location` (String)
+- `deactivation_time` (Number)
+- `default_zone_id` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `displayname` (String)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `machines` (List of Object) (see [below for nested schema](#nestedatt--machines))
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+- `send_access_emails` (Boolean)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `version` (Number)
+- `vins` (List of Number)
+- `vinses` (Number)
+- `zone_ids` (List of Object) (see [below for nested schema](#nestedatt--zone_ids))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `can_be_deleted` (Boolean)
+- `emails` (List of String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `started` (Number)
+- `stopped` (Number)
+
+
+
+### Nested Schema for `machines`
+
+Read-Only:
+
+- `halted` (Number)
+- `running` (Number)
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (List of Object) (see [below for nested schema](#nestedobjatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
+
+
+
+
+### Nested Schema for `zone_ids`
+
+Read-Only:
+
+- `id` (Number)
+- `name` (String)
diff --git a/docs/data-sources/account_audits_list.md b/docs/data-sources/account_audits_list.md
new file mode 100644
index 00000000..a897a5aa
--- /dev/null
+++ b/docs/data-sources/account_audits_list.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_audits_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_audits_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `call` (String)
+- `responsetime` (Number)
+- `statuscode` (Number)
+- `timestamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/account_computes_list.md b/docs/data-sources/account_computes_list.md
new file mode 100644
index 00000000..063535c2
--- /dev/null
+++ b/docs/data-sources/account_computes_list.md
@@ -0,0 +1,76 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_computes_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_computes_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `compute_id` (Number) Filter by compute ID
+- `extnet_id` (Number) Filter by extnet ID
+- `extnet_name` (String) Filter by extnet name
+- `ip_address` (String) Filter by IP address
+- `name` (String) Filter by compute name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `rg_name` (String) Filter by RG name
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Filter by tech. 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) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `account_name` (String)
+- `compute_id` (Number)
+- `compute_name` (String)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `ram` (Number)
+- `registered` (Boolean)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `total_disks_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_connected` (Number)
diff --git a/docs/data-sources/account_consumed_units.md b/docs/data-sources/account_consumed_units.md
new file mode 100644
index 00000000..9f1a35e3
--- /dev/null
+++ b/docs/data-sources/account_consumed_units.md
@@ -0,0 +1,42 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_consumed_units Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_consumed_units (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/account_consumed_units_by_type.md b/docs/data-sources/account_consumed_units_by_type.md
new file mode 100644
index 00000000..94818412
--- /dev/null
+++ b/docs/data-sources/account_consumed_units_by_type.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_consumed_units_by_type Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_consumed_units_by_type (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+- `cu_type` (String) cloud unit resource type
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `cu_result` (Number)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/account_deleted_list.md b/docs/data-sources/account_deleted_list.md
new file mode 100644
index 00000000..0adab393
--- /dev/null
+++ b/docs/data-sources/account_deleted_list.md
@@ -0,0 +1,72 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_deleted_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_deleted_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `acl` (String) Filter by ACL
+- `by_id` (Number) Filter by ID
+- `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))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `compute_features` (List of String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `zone_ids` (List of Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
diff --git a/docs/data-sources/account_disks_list.md b/docs/data-sources/account_disks_list.md
new file mode 100644
index 00000000..3e88c5f9
--- /dev/null
+++ b/docs/data-sources/account_disks_list.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_disks_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_disks_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `disk_id` (Number) Filter by disk ID
+- `disk_max_size` (Number) Filter by disk max size
+- `name` (String) Filter by disk 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))
+- `type` (String) Filter by disk type
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `disk_name` (String)
+- `pool` (String)
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `size_max` (Number)
+- `type` (String)
diff --git a/docs/data-sources/account_flipgroups_list.md b/docs/data-sources/account_flipgroups_list.md
new file mode 100644
index 00000000..ebf3b14b
--- /dev/null
+++ b/docs/data-sources/account_flipgroups_list.md
@@ -0,0 +1,75 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_flipgroups_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_flipgroups_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `by_ip` (String) Filter by IP
+- `extnet_id` (Number) Filter by extnet ID
+- `flipgroup_id` (Number) Filter by flipgroup ID
+- `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
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `conn_type` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `fg_id` (Number)
+- `fg_name` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `ip` (String)
+- `milestones` (Number)
+- `net_id` (Number)
+- `net_type` (String)
+- `netmask` (Number)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
diff --git a/docs/data-sources/account_list.md b/docs/data-sources/account_list.md
new file mode 100644
index 00000000..509348ae
--- /dev/null
+++ b/docs/data-sources/account_list.md
@@ -0,0 +1,73 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `acl` (String) Filter by ACL
+- `by_id` (Number) Filter by ID
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `compute_features` (List of String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `zone_ids` (List of Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
diff --git a/docs/data-sources/account_reserved_units.md b/docs/data-sources/account_reserved_units.md
new file mode 100644
index 00000000..6e78cc85
--- /dev/null
+++ b/docs/data-sources/account_reserved_units.md
@@ -0,0 +1,42 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_reserved_units Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_reserved_units (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/account_resource_consumption_get.md b/docs/data-sources/account_resource_consumption_get.md
new file mode 100644
index 00000000..05e74f75
--- /dev/null
+++ b/docs/data-sources/account_resource_consumption_get.md
@@ -0,0 +1,157 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_resource_consumption_get Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_resource_consumption_get (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedatt--consumed))
+- `id` (String) The ID of this resource.
+- `reserved` (List of Object) (see [below for nested schema](#nestedatt--reserved))
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--seps))
+
+
+### Nested Schema for `consumed.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--policies--seps))
+
+
+### Nested Schema for `consumed.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--seps))
+
+
+### Nested Schema for `reserved.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--policies--seps))
+
+
+### Nested Schema for `reserved.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (List of Object) (see [below for nested schema](#nestedobjatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/account_resource_consumption_list.md b/docs/data-sources/account_resource_consumption_list.md
new file mode 100644
index 00000000..c23520ad
--- /dev/null
+++ b/docs/data-sources/account_resource_consumption_list.md
@@ -0,0 +1,138 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_resource_consumption_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_resource_consumption_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `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_id` (Number)
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed))
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved))
+
+
+### Nested Schema for `items.consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--seps))
+
+
+### Nested Schema for `items.consumed.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--policies--seps))
+
+
+### Nested Schema for `items.consumed.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--seps))
+
+
+### Nested Schema for `items.reserved.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--policies--seps))
+
+
+### Nested Schema for `items.reserved.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
diff --git a/docs/data-sources/account_rg_list.md b/docs/data-sources/account_rg_list.md
new file mode 100644
index 00000000..f2b23e08
--- /dev/null
+++ b/docs/data-sources/account_rg_list.md
@@ -0,0 +1,120 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_rg_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_rg_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) Filter by ViNS ID
+- `vm_id` (Number) Filter by VM ID
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `computes` (List of Object) (see [below for nested schema](#nestedobjatt--items--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `milestones` (Number)
+- `resources` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources))
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vinses` (Number)
+
+
+### Nested Schema for `items.computes`
+
+Read-Only:
+
+- `started` (Number)
+- `stopped` (Number)
+
+
+
+### Nested Schema for `items.resources`
+
+Read-Only:
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--consumed))
+- `limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--limits))
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--reserved))
+
+
+### Nested Schema for `items.resources.consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+
+
+
+### Nested Schema for `items.resources.limits`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+
+
+
+### Nested Schema for `items.resources.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
diff --git a/docs/data-sources/account_templates_list.md b/docs/data-sources/account_templates_list.md
new file mode 100644
index 00000000..d359d441
--- /dev/null
+++ b/docs/data-sources/account_templates_list.md
@@ -0,0 +1,62 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_templates_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_templates_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `image_id` (Number) Find by image id
+- `include_deleted` (Boolean)
+- `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))
+- `type` (String) Filter by type
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `desc` (String)
+- `public` (Boolean)
+- `size` (Number)
+- `status` (String)
+- `template_id` (Number)
+- `template_name` (String)
+- `type` (String)
+- `unc_path` (String)
+- `username` (String)
diff --git a/docs/data-sources/account_vins_list.md b/docs/data-sources/account_vins_list.md
new file mode 100644
index 00000000..e2e9e957
--- /dev/null
+++ b/docs/data-sources/account_vins_list.md
@@ -0,0 +1,71 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account_vins_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account_vins_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `ext_ip` (String) Filter by external IP
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `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
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `account_name` (String)
+- `computes` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `external_ip` (String)
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `network` (String)
+- `pri_vnf_dev_id` (Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vin_id` (Number)
+- `vin_name` (String)
diff --git a/docs/data-sources/audit.md b/docs/data-sources/audit.md
new file mode 100644
index 00000000..94b9bdea
--- /dev/null
+++ b/docs/data-sources/audit.md
@@ -0,0 +1,49 @@
+---
+# 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)
+- `correlation_id` (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/audit_list.md b/docs/data-sources/audit_list.md
new file mode 100644
index 00000000..2044c20b
--- /dev/null
+++ b/docs/data-sources/audit_list.md
@@ -0,0 +1,77 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_audit_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_audit_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number)
+- `call` (String) find by api endpoint (Mongo RegExp supported)
+- `compute_id` (Number)
+- `exclude_audit_lines` (Boolean)
+- `flipgroup_id` (Number)
+- `k8s_id` (Number)
+- `lb_id` (Number)
+- `max_status_code` (Number) find by HTTP max status code
+- `min_status_code` (Number) find by HTTP min status code
+- `page` (Number) page number
+- `request_id` (String) request id
+- `resgroup_id` (Number)
+- `sep_id` (Number)
+- `service_id` (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))
+- `timestamp_at` (Number) find all audits after point in time (unixtime)
+- `timestamp_to` (Number) find all audits before point in time (unixtime)
+- `user` (String) find by user (Mongo RegExp supported)
+- `vins_id` (Number)
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `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_id` (Number)
+- `args` (String)
+- `call` (String)
+- `compute_id` (Number)
+- `correlation_id` (String)
+- `guid` (String)
+- `kwargs` (String)
+- `remote_addr` (String)
+- `resgroup_id` (Number)
+- `responsetime` (Number)
+- `result` (String)
+- `status_code` (Number)
+- `timestamp` (Number)
+- `timestamp_end` (Number)
+- `ttl` (String)
+- `user` (String)
diff --git a/docs/data-sources/bservice.md b/docs/data-sources/bservice.md
new file mode 100644
index 00000000..9d192895
--- /dev/null
+++ b/docs/data-sources/bservice.md
@@ -0,0 +1,107 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_bservice Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_bservice (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `service_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `base_domain` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `cpu_total` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `disk_total` (Number)
+- `gid` (Number)
+- `groups` (List of Object) (see [below for nested schema](#nestedatt--groups))
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `milestones` (Number)
+- `parent_srv_id` (Number)
+- `parent_srv_type` (String)
+- `ram_total` (Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_name` (String)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedatt--snapshots))
+- `ssh_key` (String)
+- `ssh_user` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `account_id` (Number)
+- `architecture` (String)
+- `compgroup_id` (Number)
+- `compgroup_name` (String)
+- `compgroup_role` (String)
+- `id` (Number)
+- `name` (String)
+- `node_id` (Number)
+- `rg_id` (Number)
+- `status` (String)
+- `tech_status` (String)
+
+
+
+### Nested Schema for `groups`
+
+Read-Only:
+
+- `computes` (Number)
+- `consistency` (Boolean)
+- `id` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+
+### Nested Schema for `snapshots`
+
+Read-Only:
+
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+- `valid` (Boolean)
diff --git a/docs/data-sources/bservice_deleted_list.md b/docs/data-sources/bservice_deleted_list.md
new file mode 100644
index 00000000..45d16113
--- /dev/null
+++ b/docs/data-sources/bservice_deleted_list.md
@@ -0,0 +1,70 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_bservice_deleted_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_bservice_deleted_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account to query for BasicService instances
+- `page` (Number) Page number
+- `rg_id` (Number) ID of the resource group to query for BasicService instances
+- `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))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `base_domain` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `groups` (List of Number)
+- `guid` (Number)
+- `parent_srv_id` (Number)
+- `parent_srv_type` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_id` (Number)
+- `service_name` (String)
+- `ssh_user` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `zone_id` (Number)
diff --git a/docs/data-sources/bservice_group.md b/docs/data-sources/bservice_group.md
new file mode 100644
index 00000000..d7af6b53
--- /dev/null
+++ b/docs/data-sources/bservice_group.md
@@ -0,0 +1,87 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_bservice_group Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_bservice_group (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compgroup_id` (Number)
+- `service_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `compgroup_name` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `consistency` (Boolean)
+- `cpu` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `disk` (Number)
+- `driver` (String)
+- `extnets` (List of Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `milestones` (Number)
+- `parents` (List of Number)
+- `ram` (Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `seq_no` (Number)
+- `status` (String)
+- `tech_status` (String)
+- `timeout_start` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vinses` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `chipset` (String)
+- `id` (Number)
+- `ip_addresses` (List of String)
+- `name` (String)
+- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--computes--os_users))
+
+
+### Nested Schema for `computes.os_users`
+
+Read-Only:
+
+- `login` (String)
+- `password` (String)
diff --git a/docs/data-sources/bservice_list.md b/docs/data-sources/bservice_list.md
new file mode 100644
index 00000000..aae578db
--- /dev/null
+++ b/docs/data-sources/bservice_list.md
@@ -0,0 +1,76 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_bservice_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_bservice_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account to query for BasicService instances
+- `account_name` (String) Filter by account name
+- `by_id` (Number) Filter by ID
+- `name` (String) Filter by bservice name
+- `page` (Number) Page number
+- `rg_id` (Number) ID of the resource group to query for BasicService instances
+- `rg_name` (String) Filter by resource group name
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `tech_status` (String) Filter by tech status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `base_domain` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `groups` (List of Number)
+- `guid` (Number)
+- `parent_srv_id` (Number)
+- `parent_srv_type` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_id` (Number)
+- `service_name` (String)
+- `ssh_user` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `zone_id` (Number)
diff --git a/docs/data-sources/bservice_snapshot_list.md b/docs/data-sources/bservice_snapshot_list.md
new file mode 100644
index 00000000..c2a590e3
--- /dev/null
+++ b/docs/data-sources/bservice_snapshot_list.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_bservice_snapshot_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_bservice_snapshot_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `service_id` (Number) ID of the BasicService instance
+
+### Optional
+
+- `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:
+
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+- `valid` (Boolean)
diff --git a/docs/data-sources/cb_account.md b/docs/data-sources/cb_account.md
new file mode 100644
index 00000000..c3a9dff7
--- /dev/null
+++ b/docs/data-sources/cb_account.md
@@ -0,0 +1,110 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `company` (String)
+- `companyurl` (String)
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `dc_location` (String)
+- `deactivation_time` (Number)
+- `default_zone_id` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `displayname` (String)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+- `resource_types` (List of String)
+- `send_access_emails` (Boolean)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `version` (Number)
+- `vins` (List of Number)
+- `zone_ids` (Set of Object) (see [below for nested schema](#nestedatt--zone_ids))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `emails` (List of String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (List of Object) (see [below for nested schema](#nestedobjatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
+
+
+
+
+### Nested Schema for `zone_ids`
+
+Read-Only:
+
+- `id` (Number)
+- `name` (String)
diff --git a/docs/data-sources/cb_account_audits_list.md b/docs/data-sources/cb_account_audits_list.md
new file mode 100644
index 00000000..dc89e9af
--- /dev/null
+++ b/docs/data-sources/cb_account_audits_list.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_audits_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_audits_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `call` (String)
+- `responsetime` (Number)
+- `statuscode` (Number)
+- `timestamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/cb_account_available_templates_list.md b/docs/data-sources/cb_account_available_templates_list.md
new file mode 100644
index 00000000..553e4870
--- /dev/null
+++ b/docs/data-sources/cb_account_available_templates_list.md
@@ -0,0 +1,37 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_available_templates_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_available_templates_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_account_computes_list.md b/docs/data-sources/cb_account_computes_list.md
new file mode 100644
index 00000000..bcfb9687
--- /dev/null
+++ b/docs/data-sources/cb_account_computes_list.md
@@ -0,0 +1,76 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_computes_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_computes_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `compute_id` (Number) Filter by compute ID
+- `extnet_id` (Number) Filter by extnet ID
+- `extnet_name` (String) Filter by extnet name
+- `ip_address` (String) Filter by IP address
+- `name` (String) Filter by compute name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `rg_name` (String) Filter by RG name
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Filter by tech. 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) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `account_name` (String)
+- `compute_id` (Number)
+- `compute_name` (String)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `ram` (Number)
+- `registered` (Boolean)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `total_disks_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_connected` (Number)
diff --git a/docs/data-sources/cb_account_disks_list.md b/docs/data-sources/cb_account_disks_list.md
new file mode 100644
index 00000000..0ad3d74a
--- /dev/null
+++ b/docs/data-sources/cb_account_disks_list.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_disks_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_disks_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `disk_id` (Number) Filter by disk ID
+- `disk_max_size` (Number) Filter by disk max size
+- `name` (String) Filter by disk 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))
+- `type` (String) Filter by disk type
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `disk_name` (String)
+- `pool_name` (String)
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `size_max` (Number)
+- `type` (String)
diff --git a/docs/data-sources/cb_account_flipgroups_list.md b/docs/data-sources/cb_account_flipgroups_list.md
new file mode 100644
index 00000000..3e5227af
--- /dev/null
+++ b/docs/data-sources/cb_account_flipgroups_list.md
@@ -0,0 +1,75 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_flipgroups_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_flipgroups_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `by_ip` (String) Filter by IP
+- `extnet_id` (Number) Filter by extnet ID
+- `flipgroup_id` (Number) Filter by flipgroup ID
+- `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
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `conn_type` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `fg_id` (Number)
+- `fg_name` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `ip` (String)
+- `milestones` (Number)
+- `net_id` (Number)
+- `net_type` (String)
+- `netmask` (Number)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
diff --git a/docs/data-sources/cb_account_list.md b/docs/data-sources/cb_account_list.md
new file mode 100644
index 00000000..1d5725c2
--- /dev/null
+++ b/docs/data-sources/cb_account_list.md
@@ -0,0 +1,112 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `acl` (String) Filter by ACL
+- `by_id` (Number) Filter by ID
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `company` (String)
+- `companyurl` (String)
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `dc_location` (String)
+- `deactivation_time` (Number)
+- `default_zone_id` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `displayname` (String)
+- `guid` (Number)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `resource_types` (List of String)
+- `send_access_emails` (Boolean)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `version` (Number)
+- `vins` (List of Number)
+- `zone_ids` (List of Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits--storage_policy))
+
+
+### Nested Schema for `items.resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/cb_account_list_deleted.md b/docs/data-sources/cb_account_list_deleted.md
new file mode 100644
index 00000000..76dc470e
--- /dev/null
+++ b/docs/data-sources/cb_account_list_deleted.md
@@ -0,0 +1,110 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `acl` (String) Filter by ACL
+- `by_id` (Number) Filter by ID
+- `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))
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `company` (String)
+- `companyurl` (String)
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `dc_location` (String)
+- `deactivation_time` (Number)
+- `default_zone_id` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `displayname` (String)
+- `guid` (Number)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `resource_types` (List of String)
+- `send_access_emails` (Boolean)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `version` (Number)
+- `vins` (List of Number)
+- `zone_ids` (List of Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits--storage_policy))
+
+
+### Nested Schema for `items.resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/cb_account_resource_consumption_get.md b/docs/data-sources/cb_account_resource_consumption_get.md
new file mode 100644
index 00000000..646de1d4
--- /dev/null
+++ b/docs/data-sources/cb_account_resource_consumption_get.md
@@ -0,0 +1,148 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_resource_consumption_get Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_resource_consumption_get (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedatt--consumed))
+- `id` (String) The ID of this resource.
+- `reserved` (List of Object) (see [below for nested schema](#nestedatt--reserved))
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `disksizemax` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--seps))
+
+
+### Nested Schema for `consumed.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--policies--seps))
+
+
+### Nested Schema for `consumed.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `disksizemax` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--seps))
+
+
+### Nested Schema for `reserved.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--policies--seps))
+
+
+### Nested Schema for `reserved.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
diff --git a/docs/data-sources/cb_account_resource_consumption_list.md b/docs/data-sources/cb_account_resource_consumption_list.md
new file mode 100644
index 00000000..9484727c
--- /dev/null
+++ b/docs/data-sources/cb_account_resource_consumption_list.md
@@ -0,0 +1,138 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_resource_consumption_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_resource_consumption_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `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_id` (Number)
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed))
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved))
+
+
+### Nested Schema for `items.consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `disksizemax` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--seps))
+
+
+### Nested Schema for `items.consumed.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--policies--seps))
+
+
+### Nested Schema for `items.consumed.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `disksizemax` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--policies))
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--seps))
+
+
+### Nested Schema for `items.reserved.policies`
+
+Read-Only:
+
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `id` (String)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--policies--seps))
+
+
+### Nested Schema for `items.reserved.policies.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
diff --git a/docs/data-sources/cb_account_rg_list.md b/docs/data-sources/cb_account_rg_list.md
new file mode 100644
index 00000000..150e4a1a
--- /dev/null
+++ b/docs/data-sources/cb_account_rg_list.md
@@ -0,0 +1,147 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_rg_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_rg_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `entry_count` (Number)
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) Filter by ViNS ID
+- `vm_id` (Number) Filter by VM ID
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `computes` (List of Object) (see [below for nested schema](#nestedobjatt--items--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `milestones` (Number)
+- `resources` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources))
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vinses` (Number)
+
+
+### Nested Schema for `items.computes`
+
+Read-Only:
+
+- `started` (Number)
+- `stopped` (Number)
+
+
+
+### Nested Schema for `items.resources`
+
+Read-Only:
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--consumed))
+- `limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--limits))
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--reserved))
+
+
+### Nested Schema for `items.resources.consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `disksizemax` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--consumed--seps))
+
+
+### Nested Schema for `items.resources.consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.resources.limits`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `disksizemax` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (Number)
+
+
+
+### Nested Schema for `items.resources.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disksize` (Number)
+- `disksizemax` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--reserved--seps))
+
+
+### Nested Schema for `items.resources.reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
diff --git a/docs/data-sources/cb_account_vins_list.md b/docs/data-sources/cb_account_vins_list.md
new file mode 100644
index 00000000..2b9798fa
--- /dev/null
+++ b/docs/data-sources/cb_account_vins_list.md
@@ -0,0 +1,71 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account_vins_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account_vins_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) ID of the account
+
+### Optional
+
+- `ext_ip` (String) Filter by external IP
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `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
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Search Result (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `account_name` (String)
+- `computes` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `external_ip` (String)
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `network` (String)
+- `pri_vnf_dev_id` (Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vin_id` (Number)
+- `vin_name` (String)
diff --git a/docs/data-sources/cb_audit.md b/docs/data-sources/cb_audit.md
new file mode 100644
index 00000000..ab7c61ca
--- /dev/null
+++ b/docs/data-sources/cb_audit.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_audit Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_audit (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `audit_guid` (String) audit guid
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `args` (String)
+- `call` (String)
+- `compute_id` (Number)
+- `correlation_id` (String)
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `kwargs` (String)
+- `remote_addr` (String)
+- `resgroup_id` (Number)
+- `responsetime` (Number)
+- `result` (String)
+- `status_code` (Number)
+- `timestamp` (Number)
+- `timestamp_end` (Number)
+- `ttl` (String)
+- `user` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_audit_linked_jobs.md b/docs/data-sources/cb_audit_linked_jobs.md
new file mode 100644
index 00000000..c2c4f401
--- /dev/null
+++ b/docs/data-sources/cb_audit_linked_jobs.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_audit_linked_jobs Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_audit_linked_jobs (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `audit_guid` (String) audit guid
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `cmd` (String)
+- `guid` (String)
+- `nid` (Number)
+- `physical_node` (Boolean)
+- `state` (String)
+- `time_create` (Number)
+- `time_start` (Number)
+- `time_stop` (Number)
+- `timeout` (Number)
diff --git a/docs/data-sources/cb_audit_list.md b/docs/data-sources/cb_audit_list.md
new file mode 100644
index 00000000..80caa82c
--- /dev/null
+++ b/docs/data-sources/cb_audit_list.md
@@ -0,0 +1,75 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_audit_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_audit_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number)
+- `call` (String) find by api endpoint (Mongo RegExp supported)
+- `compute_id` (Number)
+- `exclude_audit_lines` (Boolean)
+- `flipgroup_id` (Number)
+- `k8s_id` (Number)
+- `lb_id` (Number)
+- `max_status_code` (Number) find by HTTP max status code
+- `min_status_code` (Number) find by HTTP min status code
+- `node_id` (Number)
+- `page` (Number) page number
+- `request_id` (String) request id
+- `resgroup_id` (Number)
+- `sep_id` (Number)
+- `service_id` (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))
+- `timestamp_at` (Number) find all audits after point in time (unixtime)
+- `timestamp_to` (Number) find all audits before point in time (unixtime)
+- `user` (String) find by user (Mongo RegExp supported)
+- `vins_id` (Number)
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `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:
+
+- `args` (String)
+- `call` (String)
+- `correlation_id` (String)
+- `guid` (String)
+- `kwargs` (String)
+- `remote_addr` (String)
+- `responsetime` (Number)
+- `result` (String)
+- `status_code` (Number)
+- `timestamp` (Number)
+- `timestamp_end` (Number)
+- `ttl` (String)
+- `user` (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 00000000..4ed2c274
--- /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_disk.md b/docs/data-sources/cb_disk.md
new file mode 100644
index 00000000..28751371
--- /dev/null
+++ b/docs/data-sources/cb_disk.md
@@ -0,0 +1,150 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `boot_partition` (Number)
+- `cache` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_name` (String)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedatt--iotune))
+- `iqn` (String)
+- `login` (String)
+- `machine_id` (Number)
+- `machine_name` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `replication` (List of Object) Replication status (see [below for nested schema](#nestedatt--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `sep_type` (String)
+- `shareable` (Boolean)
+- `size_available` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedatt--snapshots))
+- `status` (String)
+- `storage_policy_id` (Number) Storage policy ID
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (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/data-sources/cb_disk_list.md b/docs/data-sources/cb_disk_list.md
new file mode 100644
index 00000000..505986f6
--- /dev/null
+++ b/docs/data-sources/cb_disk_list.md
@@ -0,0 +1,170 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account the disks belong to
+- `account_name` (String) Find by account name
+- `by_id` (Number) Find by ID
+- `compute_id` (Number) Find by compute id
+- `disk_max_size` (Number) Find by max disk size
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `pool` (String) Find by pool name
+- `rg_id` (Number) Find by rg id
+- `sep_id` (Number) Find by sep id
+- `shared` (Boolean) Find by shared field
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `storage_policy_id` (Number) storage policy ID
+- `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_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `boot_partition` (Number)
+- `cache` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedobjatt--items--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_name` (String)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `image_id` (Number)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--items--iotune))
+- `iqn` (String)
+- `login` (String)
+- `machine_id` (Number)
+- `machine_name` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `replication` (List of Object) (see [below for nested schema](#nestedobjatt--items--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `sep_type` (String)
+- `shareable` (Boolean)
+- `size_available` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--items--snapshots))
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number)
+
+
+### Nested Schema for `items.computes`
+
+Read-Only:
+
+- `compute_id` (String)
+- `compute_name` (String)
+
+
+
+### Nested Schema for `items.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 `items.replication`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `pool_id` (String)
+- `role` (String)
+- `self_volume_id` (String)
+- `storage_id` (String)
+- `volume_id` (String)
+
+
+
+### Nested Schema for `items.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/data-sources/cb_disk_list_deleted.md b/docs/data-sources/cb_disk_list_deleted.md
new file mode 100644
index 00000000..86318a6c
--- /dev/null
+++ b/docs/data-sources/cb_disk_list_deleted.md
@@ -0,0 +1,164 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account the disks belong to
+- `account_name` (String) Find by account name
+- `by_id` (Number) Find by ID
+- `disk_max_size` (Number) Find by max disk size
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `shared` (Boolean) Find by shared field
+- `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))
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `boot_partition` (Number)
+- `cache` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedobjatt--items--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_name` (String)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `image_id` (Number)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--items--iotune))
+- `iqn` (String)
+- `login` (String)
+- `machine_id` (Number)
+- `machine_name` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `replication` (List of Object) (see [below for nested schema](#nestedobjatt--items--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `sep_type` (String)
+- `shareable` (Boolean)
+- `size_available` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--items--snapshots))
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number)
+
+
+### Nested Schema for `items.computes`
+
+Read-Only:
+
+- `compute_id` (String)
+- `compute_name` (String)
+
+
+
+### Nested Schema for `items.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 `items.replication`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `pool_id` (String)
+- `role` (String)
+- `self_volume_id` (String)
+- `storage_id` (String)
+- `volume_id` (String)
+
+
+
+### Nested Schema for `items.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/data-sources/cb_disk_list_unattached.md b/docs/data-sources/cb_disk_list_unattached.md
new file mode 100644
index 00000000..01bde6cb
--- /dev/null
+++ b/docs/data-sources/cb_disk_list_unattached.md
@@ -0,0 +1,132 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk_list_unattached Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk_list_unattached (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account the disks belong to
+- `account_name` (String) Find by account name
+- `by_id` (Number) Find by ID
+- `disk_max_size` (Number) Find by max disk size
+- `page` (Number) Page number
+- `pool` (String)
+- `sep_id` (Number) ID of SEP
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `storage_policy_id` (Number) storage policy ID
+- `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:
+
+- `_meta` (List of String)
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `boot_partition` (Number)
+- `cache` (String)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `disk_id` (Number)
+- `disk_name` (String)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `image_id` (Number)
+- `images` (List of Number)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--items--iotune))
+- `iqn` (String)
+- `login` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--items--snapshots))
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `vmid` (Number)
+
+
+### Nested Schema for `items.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 `items.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/data-sources/cb_disk_replication.md b/docs/data-sources/cb_disk_replication.md
new file mode 100644
index 00000000..15cff809
--- /dev/null
+++ b/docs/data-sources/cb_disk_replication.md
@@ -0,0 +1,140 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk_replication Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk_replication (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) Id of primary disk
+- `replica_disk_id` (Number) Id of secondary disk
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `boot_partition` (Number)
+- `cache` (String)
+- `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_name` (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)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `replication` (List of Object) Replication status (see [below for nested schema](#nestedatt--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `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:
+
+- `default` (String)
+- `read` (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/data-sources/cb_disk_snapshot.md b/docs/data-sources/cb_disk_snapshot.md
new file mode 100644
index 00000000..d64d8fce
--- /dev/null
+++ b/docs/data-sources/cb_disk_snapshot.md
@@ -0,0 +1,43 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk_snapshot Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk_snapshot (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) The unique ID of the subscriber-owner of the disk
+- `label` (String) Name of the snapshot
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `guid` (String) ID of the snapshot
+- `id` (String) The ID of this resource.
+- `reference_id` (String)
+- `res_id` (String) Reference to the snapshot
+- `snap_set_guid` (String) The set snapshot ID
+- `snap_set_time` (Number) The set time of the snapshot
+- `timestamp` (Number) Snapshot time
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_disk_snapshot_list.md b/docs/data-sources/cb_disk_snapshot_list.md
new file mode 100644
index 00000000..196bae0b
--- /dev/null
+++ b/docs/data-sources/cb_disk_snapshot_list.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk_snapshot_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk_snapshot_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) The unique ID of the subscriber-owner of the disk
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+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/data-sources/cb_dpdknet.md b/docs/data-sources/cb_dpdknet.md
new file mode 100644
index 00000000..90665e76
--- /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 00000000..c1e00ce2
--- /dev/null
+++ b/docs/data-sources/cb_dpdknet_list.md
@@ -0,0 +1,64 @@
+---
+# 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)
+- `enable_secgroups` (Boolean)
+- `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_extnet.md b/docs/data-sources/cb_extnet.md
new file mode 100644
index 00000000..ac985f5c
--- /dev/null
+++ b/docs/data-sources/cb_extnet.md
@@ -0,0 +1,143 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `extnet_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `check_ips` (List of String)
+- `ckey` (String)
+- `default` (Boolean)
+- `default_qos` (List of Object) (see [below for nested schema](#nestedatt--default_qos))
+- `desc` (String)
+- `dns` (List of String)
+- `excluded` (List of Object) (see [below for nested schema](#nestedatt--excluded))
+- `free_ips` (Number)
+- `gateway` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `ipcidr` (String)
+- `meta` (List of String) meta
+- `milestones` (Number)
+- `mtu` (Number)
+- `name` (String)
+- `network` (String)
+- `network_ids` (List of Object) (see [below for nested schema](#nestedatt--network_ids))
+- `ntp` (List of String)
+- `ovs_bridge` (String)
+- `pre_reservations` (List of Object) (see [below for nested schema](#nestedatt--pre_reservations))
+- `pre_reservations_num` (Number)
+- `prefix` (Number)
+- `pri_vnfdev_id` (Number)
+- `redundant` (Boolean)
+- `reservations` (List of Object) (see [below for nested schema](#nestedatt--reservations))
+- `sec_vnfdev_id` (Number)
+- `shared_with` (List of Number)
+- `status` (String)
+- `vlan_id` (Number)
+- `vnfs` (List of Object) (see [below for nested schema](#nestedatt--vnfs))
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `default_qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `excluded`
+
+Read-Only:
+
+- `client_type` (String)
+- `desc` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `network_ids`
+
+Read-Only:
+
+- `primary` (Number)
+- `secondary` (Number)
+
+
+
+### Nested Schema for `pre_reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `desc` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `desc` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `vnfs`
+
+Read-Only:
+
+- `dhcp` (Number)
diff --git a/docs/data-sources/cb_extnet_default.md b/docs/data-sources/cb_extnet_default.md
new file mode 100644
index 00000000..5fab2972
--- /dev/null
+++ b/docs/data-sources/cb_extnet_default.md
@@ -0,0 +1,33 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet_default Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet_default (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `extnet_id` (Number)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_extnet_list.md b/docs/data-sources/cb_extnet_list.md
new file mode 100644
index 00000000..44f7c27b
--- /dev/null
+++ b/docs/data-sources/cb_extnet_list.md
@@ -0,0 +1,105 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by account ID
+- `by_id` (Number) Find by ID
+- `name` (String) Find by name
+- `network` (String)
+- `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))
+- `vlan_id` (Number) Find by VLAN ID
+- `vnfdev_id` (Number) Find by VnfDEV ID
+- `zone_id` (Number) Zone ID
+
+### 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:
+
+- `check_ips` (List of String)
+- `ckey` (String)
+- `default` (Boolean)
+- `default_qos` (List of Object) (see [below for nested schema](#nestedobjatt--items--default_qos))
+- `desc` (String)
+- `enable_secgroups` (Boolean)
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `ipcidr` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `mtu` (Number)
+- `name` (String)
+- `network_ids` (List of Object) (see [below for nested schema](#nestedobjatt--items--network_ids))
+- `ovs_bridge` (String)
+- `pre_reservations_num` (Number)
+- `pri_vnfdev_id` (Number)
+- `redundant` (Boolean)
+- `sec_vnfdev_id` (Number)
+- `shared_with` (List of Number)
+- `status` (String)
+- `vlan_id` (Number)
+- `vnfs` (List of Object) (see [below for nested schema](#nestedobjatt--items--vnfs))
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.default_qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `items.network_ids`
+
+Read-Only:
+
+- `primary` (Number)
+- `secondary` (Number)
+
+
+
+### Nested Schema for `items.vnfs`
+
+Read-Only:
+
+- `dhcp` (Number)
diff --git a/docs/data-sources/cb_extnet_reserved_ip_list.md b/docs/data-sources/cb_extnet_reserved_ip_list.md
new file mode 100644
index 00000000..ea3e22ab
--- /dev/null
+++ b/docs/data-sources/cb_extnet_reserved_ip_list.md
@@ -0,0 +1,61 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet_reserved_ip_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet_reserved_ip_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+
+### Optional
+
+- `extnet_id` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `extnet_id` (Number)
+- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--items--reservations))
+
+
+### Nested Schema for `items.reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
diff --git a/docs/data-sources/cb_extnet_static_route.md b/docs/data-sources/cb_extnet_static_route.md
new file mode 100644
index 00000000..4b3385d3
--- /dev/null
+++ b/docs/data-sources/cb_extnet_static_route.md
@@ -0,0 +1,42 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet_static_route Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet_static_route (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `extnet_id` (Number) Unique ID of the ExtNet
+- `route_id` (Number) Unique ID of the static route
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `netmask` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_extnet_static_route_list.md b/docs/data-sources/cb_extnet_static_route_list.md
new file mode 100644
index 00000000..afe3958a
--- /dev/null
+++ b/docs/data-sources/cb_extnet_static_route_list.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet_static_route_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet_static_route_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `extnet_id` (Number) ID of ExtNet
+
+### Optional
+
+- `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:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
diff --git a/docs/data-sources/cb_flipgroup.md b/docs/data-sources/cb_flipgroup.md
new file mode 100644
index 00000000..e4fc7c24
--- /dev/null
+++ b/docs/data-sources/cb_flipgroup.md
@@ -0,0 +1,60 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_flipgroup Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_flipgroup (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `flipgroup_id` (Number) flipgroup_id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number) account_id
+- `account_name` (String) account_name
+- `client_ids` (List of Number) client_ids
+- `client_names` (List of String) client_names
+- `client_type` (String) client_type
+- `conn_id` (Number) conn_id
+- `conn_type` (String) conn_type
+- `created_by` (String) created_by
+- `created_time` (Number) created_time
+- `default_gw` (String) default_gw
+- `deleted_by` (String) deleted_by
+- `deleted_time` (Number) deleted_time
+- `description` (String) description
+- `gid` (Number) gid
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `ip` (String) ip
+- `milestones` (Number) milestones
+- `name` (String) name
+- `net_id` (Number) net_id
+- `net_type` (String) net_type
+- `network` (String) network
+- `status` (String) status
+- `updated_by` (String) updated_by
+- `updated_time` (Number) updated_time
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_flipgroup_list.md b/docs/data-sources/cb_flipgroup_list.md
new file mode 100644
index 00000000..bcde1626
--- /dev/null
+++ b/docs/data-sources/cb_flipgroup_list.md
@@ -0,0 +1,73 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_flipgroup_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_flipgroup_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Account id
+- `by_id` (Number) by_id
+- `by_ip` (String) by_ip
+- `client_ids` (List of Number) client_ids
+- `conn_id` (Number) Conn id
+- `extnet_id` (Number) extnet_id
+- `name` (String) name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) vins_id
+- `vins_name` (String) vins_name
+
+### Read-Only
+
+- `entry_count` (Number) entry_count
+- `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_id` (Number)
+- `ckey` (String)
+- `client_ids` (List of Number)
+- `client_type` (String)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `default_gw` (String)
+- `description` (String)
+- `flipgroup_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `ip` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `name` (String)
+- `net_id` (Number)
+- `net_mask` (Number)
+- `net_type` (String)
+- `status` (String)
diff --git a/docs/data-sources/cb_grid.md b/docs/data-sources/cb_grid.md
new file mode 100644
index 00000000..caaf7925
--- /dev/null
+++ b/docs/data-sources/cb_grid.md
@@ -0,0 +1,46 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `grid_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### 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)
+- `network_modes` (List of String)
+- `sdn_support` (Boolean)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_grid_get_consumption.md b/docs/data-sources/cb_grid_get_consumption.md
new file mode 100644
index 00000000..77c0622d
--- /dev/null
+++ b/docs/data-sources/cb_grid_get_consumption.md
@@ -0,0 +1,87 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_get_consumption Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_get_consumption (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `grid_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedatt--consumed))
+- `id` (String) The ID of this resource.
+- `reserved` (List of Object) (see [below for nested schema](#nestedatt--reserved))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--seps))
+
+
+### Nested Schema for `consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--seps))
+
+
+### Nested Schema for `reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
diff --git a/docs/data-sources/cb_grid_get_diagnosis.md b/docs/data-sources/cb_grid_get_diagnosis.md
new file mode 100644
index 00000000..22cad6b3
--- /dev/null
+++ b/docs/data-sources/cb_grid_get_diagnosis.md
@@ -0,0 +1,37 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_get_diagnosis Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_get_diagnosis (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `file_path` (String)
+- `gid` (Number)
+
+### Optional
+
+- `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_grid_get_settings.md b/docs/data-sources/cb_grid_get_settings.md
new file mode 100644
index 00000000..824faafe
--- /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_grid_get_status.md b/docs/data-sources/cb_grid_get_status.md
new file mode 100644
index 00000000..a42f5a22
--- /dev/null
+++ b/docs/data-sources/cb_grid_get_status.md
@@ -0,0 +1,33 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_get_status Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_get_status (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `status` (Boolean)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_grid_list.md b/docs/data-sources/cb_grid_list.md
new file mode 100644
index 00000000..3287f132
--- /dev/null
+++ b/docs/data-sources/cb_grid_list.md
@@ -0,0 +1,113 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) by id
+- `name` (String) 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))
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `id` (String) The ID of this resource.
+- `items` (List of Object) grid list (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `auth_broker` (List of String)
+- `flag` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `location_code` (String)
+- `name` (String)
+- `network_modes` (List of String)
+- `resources` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources))
+- `sdn_support` (Boolean)
+- `zero_access_enabled` (Boolean)
+
+
+### Nested Schema for `items.resources`
+
+Read-Only:
+
+- `current` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--current))
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--reserved))
+
+
+### Nested Schema for `items.resources.current`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--current--seps))
+
+
+### Nested Schema for `items.resources.current.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.resources.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--resources--reserved--seps))
+
+
+### Nested Schema for `items.resources.reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
diff --git a/docs/data-sources/cb_grid_list_consumption.md b/docs/data-sources/cb_grid_list_consumption.md
new file mode 100644
index 00000000..d495c2bf
--- /dev/null
+++ b/docs/data-sources/cb_grid_list_consumption.md
@@ -0,0 +1,92 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_list_consumption Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_list_consumption (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `id` (String) The ID of this resource.
+- `items` (List of Object) grid list consumption (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed))
+- `id` (Number)
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved))
+
+
+### Nested Schema for `items.consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--seps))
+
+
+### Nested Schema for `items.consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `ext_ips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--seps))
+
+
+### Nested Schema for `items.reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
diff --git a/docs/data-sources/cb_grid_list_emails.md b/docs/data-sources/cb_grid_list_emails.md
new file mode 100644
index 00000000..a82a3ac4
--- /dev/null
+++ b/docs/data-sources/cb_grid_list_emails.md
@@ -0,0 +1,36 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_list_emails Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_list_emails (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `page` (Number) page number
+- `size` (Number) page size
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `id` (String) The ID of this resource.
+- `items` (List of String) grid list emails
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_grid_post_status.md b/docs/data-sources/cb_grid_post_status.md
new file mode 100644
index 00000000..44099940
--- /dev/null
+++ b/docs/data-sources/cb_grid_post_status.md
@@ -0,0 +1,33 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_grid_post_status Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_grid_post_status (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `status` (Boolean)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_image.md b/docs/data-sources/cb_image.md
new file mode 100644
index 00000000..e2cee173
--- /dev/null
+++ b/docs/data-sources/cb_image.md
@@ -0,0 +1,103 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_image Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_image (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `image_id` (Number) image id
+
+### Optional
+
+- `shared_with` (List of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `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
+- `boot_type` (String) Boot type of image bios or uefi
+- `bootable` (Boolean) Does this image boot OS
+- `cd_presented_to` (String)
+- `computeci_id` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String) List of types of compute suitable for image. Example: [ "KVM_X86" ]
+- `enabled` (Boolean)
+- `gid` (Number) grid (platform) ID where this template should be create in
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `hot_resize` (Boolean) Does this machine supports hot resize
+- `id` (String) The ID of this resource.
+- `image_type` (String) Image type linux, windows or other
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `name` (String) Name of the rescue disk
+- `network_interface_naming` (String)
+- `password` (String) Optional password for the image
+- `pool_name` (String) pool for image create
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number) storage endpoint provider ID
+- `size` (Number) image size
+- `snapshot_id` (String) snapshot id
+- `status` (String) status
+- `storage_policy_id` (Number)
+- `tech_status` (String) tech status
+- `to_clean` (Boolean)
+- `unc_path` (String) unc path
+- `url` (String) URL where to download media from
+- `username` (String) Optional username for the image
+- `version` (String) version
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/cb_image_list.md b/docs/data-sources/cb_image_list.md
new file mode 100644
index 00000000..e5266720
--- /dev/null
+++ b/docs/data-sources/cb_image_list.md
@@ -0,0 +1,126 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_image_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_image_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `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
+- `page` (Number) page number
+- `pool` (String) find by pool
+- `public` (Boolean) find by public True or False
+- `sep_id` (Number) find by storage endpoint provider ID
+- `sep_name` (String) find by SEP name
+- `size` (Number) page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) find by status
+- `storage_policy_id` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `type_image` (String) find by type
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `id` (String) The ID of this resource.
+- `items` (List of Object) image list (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `architecture` (String)
+- `boot_type` (String)
+- `bootable` (Boolean)
+- `cd_presented_to` (String)
+- `computeci_id` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `enabled` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedobjatt--items--history))
+- `hot_resize` (Boolean)
+- `image_id` (Number)
+- `image_type` (String)
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `name` (String)
+- `network_interface_naming` (String)
+- `password` (String)
+- `pool_name` (String)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number)
+- `shared_with` (List of Number)
+- `size` (Number)
+- `snapshot_id` (String)
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `unc_path` (String)
+- `url` (String)
+- `username` (String)
+- `version` (String)
+- `virtual` (Boolean)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/cb_k8ci.md b/docs/data-sources/cb_k8ci.md
new file mode 100644
index 00000000..55711315
--- /dev/null
+++ b/docs/data-sources/cb_k8ci.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8ci Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8ci (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8ci_id` (Number) K8CI ID
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `desc` (String)
+- `gid` (Number) gid
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `lb_image_id` (Number) LB Image ID
+- `master_image_id` (Number)
+- `max_master_count` (Number)
+- `max_worker_count` (Number)
+- `milestones` (Number)
+- `name` (String) K8CI name
+- `network_plugins` (List of String)
+- `shared_with` (List of Number)
+- `status` (String) K8CI Status
+- `version` (String)
+- `worker_driver` (String)
+- `worker_image_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_k8ci_list.md b/docs/data-sources/cb_k8ci_list.md
new file mode 100644
index 00000000..ea244e37
--- /dev/null
+++ b/docs/data-sources/cb_k8ci_list.md
@@ -0,0 +1,63 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8ci_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8ci_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Filter by ID
+- `include_disabled` (Boolean) Include deleted k8cis in result
+- `name` (String) Filter by name
+- `network_plugin` (String) Filter by network plugin
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter 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:
+
+- `created_time` (Number)
+- `desc` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `k8ci_id` (Number)
+- `lb_image_id` (Number)
+- `master_image_id` (Number)
+- `max_master_count` (Number)
+- `max_worker_count` (Number)
+- `name` (String)
+- `shared_with` (List of Number)
+- `status` (String)
+- `version` (String)
+- `worker_image_id` (Number)
diff --git a/docs/data-sources/cb_k8ci_list_deleted.md b/docs/data-sources/cb_k8ci_list_deleted.md
new file mode 100644
index 00000000..a13cf68b
--- /dev/null
+++ b/docs/data-sources/cb_k8ci_list_deleted.md
@@ -0,0 +1,61 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8ci_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8ci_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Filter by ID
+- `name` (String) Filter by name
+- `network_plugin` (String) Filter by network plugin
+- `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))
+
+### 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:
+
+- `created_time` (Number)
+- `desc` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `k8ci_id` (Number)
+- `lb_image_id` (Number)
+- `master_image_id` (Number)
+- `max_master_count` (Number)
+- `max_worker_count` (Number)
+- `name` (String)
+- `shared_with` (List of Number)
+- `status` (String)
+- `version` (String)
+- `worker_image_id` (Number)
diff --git a/docs/data-sources/cb_k8s.md b/docs/data-sources/cb_k8s.md
new file mode 100644
index 00000000..6a66b649
--- /dev/null
+++ b/docs/data-sources/cb_k8s.md
@@ -0,0 +1,211 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `bservice_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `extnet_id` (Number) ID of the external network to connect workers to. If omitted network will be chosen by the platfom.
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `k8s_ci_name` (String)
+- `k8s_groups` (List of Object) (see [below for nested schema](#nestedatt--k8s_groups))
+- `k8sci_id` (Number)
+- `kubeconfig` (String) Kubeconfig for cluster access.
+- `lb_id` (Number)
+- `lb_ip` (String) IP address of default load balancer.
+- `milestones` (Number)
+- `name` (String)
+- `network_plugin` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_account` (List of Object) (see [below for nested schema](#nestedatt--service_account))
+- `ssh_key` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--account_acl))
+- `k8s_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--k8s_acl))
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--rg_acl))
+
+
+### Nested Schema for `acl.account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.k8s_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+
+### Nested Schema for `k8s_groups`
+
+Read-Only:
+
+- `masters` (List of Object) (see [below for nested schema](#nestedobjatt--k8s_groups--masters))
+- `workers` (List of Object) (see [below for nested schema](#nestedobjatt--k8s_groups--workers))
+
+
+### Nested Schema for `k8s_groups.masters`
+
+Read-Only:
+
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--k8s_groups--masters--detailed_info))
+- `disk` (Number)
+- `master_id` (Number)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+
+
+### Nested Schema for `k8s_groups.masters.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `external_ip` (String)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--k8s_groups--masters--detailed_info--interfaces))
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `k8s_groups.masters.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
+
+
+
+
+
+### Nested Schema for `k8s_groups.workers`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--k8s_groups--workers--detailed_info))
+- `disk` (Number)
+- `guid` (String)
+- `id` (Number)
+- `labels` (List of String)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+- `taints` (List of String)
+
+
+### Nested Schema for `k8s_groups.workers.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `external_ip` (String)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--k8s_groups--workers--detailed_info--interfaces))
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `k8s_groups.workers.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
+
+
+
+
+
+
+### Nested Schema for `service_account`
+
+Read-Only:
+
+- `guid` (String)
+- `password` (String)
+- `username` (String)
diff --git a/docs/data-sources/cb_k8s_computes.md b/docs/data-sources/cb_k8s_computes.md
new file mode 100644
index 00000000..16db778c
--- /dev/null
+++ b/docs/data-sources/cb_k8s_computes.md
@@ -0,0 +1,62 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_computes Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_computes (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `masters` (List of Object) (see [below for nested schema](#nestedatt--masters))
+- `workers` (List of Object) (see [below for nested schema](#nestedatt--workers))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `masters`
+
+Read-Only:
+
+- `group_name` (String)
+- `id` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+
+### Nested Schema for `workers`
+
+Read-Only:
+
+- `group_name` (String)
+- `id` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
diff --git a/docs/data-sources/cb_k8s_list.md b/docs/data-sources/cb_k8s_list.md
new file mode 100644
index 00000000..befc4cb1
--- /dev/null
+++ b/docs/data-sources/cb_k8s_list.md
@@ -0,0 +1,105 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `basic_service_id` (Number) Filter by BasicServiceID
+- `by_id` (Number) Filter by ID
+- `include_deleted` (Boolean) Include deleted k8s in result
+- `ip_address` (String) Filter by ipAddress
+- `lb_id` (Number) Filter by LBID
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RGID
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `tech_status` (String) Filter by Tech Status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of String)
+- `bservice_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `extnet_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `k8s_id` (Number)
+- `k8s_name` (String)
+- `k8sci_id` (Number)
+- `kubeconfig` (String)
+- `lb_id` (Number)
+- `milestones` (Number)
+- `network_plugin` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_account` (List of Object) (see [below for nested schema](#nestedobjatt--items--service_account))
+- `ssh_key` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `workers_groups` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups))
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.service_account`
+
+Read-Only:
+
+- `guid` (String)
+- `password` (String)
+- `username` (String)
+
+
+
+### Nested Schema for `items.workers_groups`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `guid` (String)
+- `id` (Number)
+- `labels` (List of String)
+- `taints` (List of String)
diff --git a/docs/data-sources/cb_k8s_list_deleted.md b/docs/data-sources/cb_k8s_list_deleted.md
new file mode 100644
index 00000000..476d36ff
--- /dev/null
+++ b/docs/data-sources/cb_k8s_list_deleted.md
@@ -0,0 +1,128 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `basic_service_id` (Number) Filter by BasicServiceID
+- `by_id` (Number) Filter by ID
+- `ip_address` (String) Filter by ipAddress
+- `lb_id` (Number) Filter by LBID
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RGID
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Filter by Tech 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of String)
+- `bservice_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `extnet_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `k8s_id` (Number)
+- `k8s_name` (String)
+- `k8sci_id` (Number)
+- `kubeconfig` (String)
+- `lb_id` (Number)
+- `milestones` (Number)
+- `network_plugin` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_account` (List of Object) (see [below for nested schema](#nestedobjatt--items--service_account))
+- `ssh_key` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `workers_groups` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups))
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.service_account`
+
+Read-Only:
+
+- `guid` (String)
+- `password` (String)
+- `username` (String)
+
+
+
+### Nested Schema for `items.workers_groups`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups--detailed_info))
+- `disk` (Number)
+- `guid` (String)
+- `id` (Number)
+- `labels` (List of String)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+- `taints` (List of String)
+
+
+### Nested Schema for `items.workers_groups.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `external_ip` (String)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups--detailed_info--interfaces))
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `items.workers_groups.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/cb_k8s_wg.md b/docs/data-sources/cb_k8s_wg.md
new file mode 100644
index 00000000..55ea8ed9
--- /dev/null
+++ b/docs/data-sources/cb_k8s_wg.md
@@ -0,0 +1,68 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_wg Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_wg (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number) ID of k8s instance.
+- `wg_id` (Number) ID of k8s worker Group.
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `annotations` (List of String)
+- `cpu` (Number) Worker node CPU count.
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--detailed_info))
+- `disk` (Number) Worker node boot disk size. If unspecified or 0, size is defined by OS image size.
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `labels` (List of String)
+- `name` (String) Name of the worker group.
+- `num` (Number) Number of worker nodes to create.
+- `ram` (Number) Worker node RAM in MB.
+- `taints` (List of String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `external_ip` (String)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--detailed_info--interfaces))
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/cb_k8s_wg_cloud_init.md b/docs/data-sources/cb_k8s_wg_cloud_init.md
new file mode 100644
index 00000000..d41d2e77
--- /dev/null
+++ b/docs/data-sources/cb_k8s_wg_cloud_init.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_wg_cloud_init Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_wg_cloud_init (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number) Kubernetes cluster ID
+- `wg_id` (Number) ID of the workers compute group
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `cloud_init` (String) Worker group Cloud init
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_k8s_wg_list.md b/docs/data-sources/cb_k8s_wg_list.md
new file mode 100644
index 00000000..0bca899d
--- /dev/null
+++ b/docs/data-sources/cb_k8s_wg_list.md
@@ -0,0 +1,75 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_wg_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_wg_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--detailed_info))
+- `disk` (Number)
+- `guid` (String)
+- `labels` (List of String)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+- `taints` (List of String)
+- `wg_id` (Number)
+
+
+### Nested Schema for `items.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `external_ip` (String)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--detailed_info--interfaces))
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `items.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/cb_kvmvm.md b/docs/data-sources/cb_kvmvm.md
new file mode 100644
index 00000000..3dfc8f3e
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm.md
@@ -0,0 +1,406 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number) Get compute by id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number) ID of the account this compute instance belongs to.
+- `account_name` (String) Name of the account this compute instance belongs to.
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--affinity_rules))
+- `affinity_weight` (Number)
+- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--anti_affinity_rules))
+- `arch` (String)
+- `auto_start_w_node` (Boolean)
+- `boot_disk_id` (Number)
+- `boot_disk_size` (Number)
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `boot_type` (String)
+- `cd_image_id` (Number)
+- `chipset` (String)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `computeci_id` (Number)
+- `cpu_pin` (Boolean)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `custom_fields` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `devices` (String)
+- `disks` (List of Object) (see [below for nested schema](#nestedatt--disks))
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `hot_resize` (Boolean)
+- `hp_backed` (Boolean)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `image_name` (String)
+- `independent` (Boolean)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
+- `live_migration_job_id` (Number)
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
+- `loader_type` (String)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `natable_vins_id` (Number)
+- `natable_vins_ip` (String)
+- `natable_vins_name` (String)
+- `natable_vins_network` (String)
+- `natable_vins_network_name` (String)
+- `need_reboot` (Boolean)
+- `network_interface_naming` (String)
+- `node_id` (Number)
+- `node_name` (String)
+- `numa_affinity` (String)
+- `numa_node_id` (Number)
+- `os_users` (List of Object) (see [below for nested schema](#nestedatt--os_users))
+- `os_version` (String)
+- `pci_devices` (List of Number)
+- `pinned` (Number)
+- `pool` (String)
+- `preferred_cpu` (List of Number)
+- `qemu_guest` (List of Object) (see [below for nested schema](#nestedatt--qemu_guest))
+- `ram` (Number)
+- `read_only` (Boolean) Shows if compute is locked to read-only operations.
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `sep_id` (Number)
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedatt--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tags` (List of Object) (see [below for nested schema](#nestedatt--tags))
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_data` (String)
+- `user_managed` (Boolean)
+- `vgpus` (List of Object) List of virtual GPUs (see [below for nested schema](#nestedatt--vgpus))
+- `vnc_password` (String)
+- `weight` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `anti_affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `disks`
+
+Read-Only:
+
+- `account_id` (Number)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `boot_partition` (Number)
+- `bus_number` (Number)
+- `cache` (String)
+- `ckey` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `image_id` (Number)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--disks--iotune))
+- `iqn` (String)
+- `login` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `name` (String)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `replication` (List of Object) (see [below for nested schema](#nestedobjatt--disks--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `size_available` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--disks--snapshots))
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `type` (String)
+- `updated_time` (Number)
+
+
+### Nested Schema for `disks.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 `disks.replication`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `pool_id` (String)
+- `role` (String)
+- `self_volume_id` (String)
+- `storage_id` (String)
+- `volume_id` (String)
+
+
+
+### Nested Schema for `disks.snapshots`
+
+Read-Only:
+
+- `guid` (String)
+- `label` (String)
+- `res_id` (String)
+- `snap_set_guid` (String)
+- `snap_set_time` (Number)
+- `timestamp` (Number)
+
+
+
+
+### Nested Schema for `interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
+
+### Nested Schema for `os_users`
+
+Read-Only:
+
+- `guid` (String)
+- `login` (String)
+- `password` (String)
+- `public_key` (String)
+
+
+
+### Nested Schema for `qemu_guest`
+
+Read-Only:
+
+- `enabled` (Boolean)
+- `enabled_agent_features` (List of String)
+- `guid` (String)
+- `last_update` (Number)
+- `user` (String)
+
+
+
+### Nested Schema for `snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `tags`
+
+Read-Only:
+
+- `key` (String)
+- `val` (String)
+
+
+
+### Nested Schema for `vgpus`
+
+Read-Only:
+
+- `account_id` (Number)
+- `bus_number` (Number)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `last_claimed_by` (Number)
+- `last_update_time` (Number)
+- `mode` (String)
+- `pci_slot` (Number)
+- `pgpuid` (Number)
+- `profile_id` (Number)
+- `ram` (Number)
+- `reference_id` (String)
+- `rg_id` (Number)
+- `status` (String)
+- `type` (String)
+- `vmid` (Number)
diff --git a/docs/data-sources/cb_kvmvm_affinity_relations.md b/docs/data-sources/cb_kvmvm_affinity_relations.md
new file mode 100644
index 00000000..e0bd7d0f
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_affinity_relations.md
@@ -0,0 +1,42 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_affinity_relations Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_affinity_relations (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `other_node` (List of String)
+- `other_node_indirect` (List of String)
+- `other_node_indirect_soft` (List of String)
+- `other_node_soft` (List of String)
+- `same_node` (List of String)
+- `same_node_soft` (List of String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_kvmvm_audits.md b/docs/data-sources/cb_kvmvm_audits.md
new file mode 100644
index 00000000..215b63ef
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_audits.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `call` (String)
+- `max_status_code` (Number)
+- `min_status_code` (Number)
+- `page` (Number)
+- `size` (Number)
+- `sort_by` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `timestamp_at` (Number)
+- `timestamp_to` (Number)
+- `user` (String)
+
+### 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:
+
+- `call` (String)
+- `responsetime` (Number)
+- `statuscode` (Number)
+- `timestamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/cb_kvmvm_boot_order_get.md b/docs/data-sources/cb_kvmvm_boot_order_get.md
new file mode 100644
index 00000000..26f6a6d9
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_boot_order_get.md
@@ -0,0 +1,37 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_boot_order_get Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_boot_order_get (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `boot_order` (List of String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_kvmvm_get_audits.md b/docs/data-sources/cb_kvmvm_get_audits.md
new file mode 100644
index 00000000..6e6cfa92
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_get_audits.md
@@ -0,0 +1,46 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_get_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_get_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `epoch` (Number)
+- `message` (String)
diff --git a/docs/data-sources/cb_kvmvm_get_console_url.md b/docs/data-sources/cb_kvmvm_get_console_url.md
new file mode 100644
index 00000000..c764a672
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_get_console_url.md
@@ -0,0 +1,37 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_get_console_url Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_get_console_url (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `console_url` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_kvmvm_get_log.md b/docs/data-sources/cb_kvmvm_get_log.md
new file mode 100644
index 00000000..b46b39df
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_get_log.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_get_log Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_get_log (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+- `path` (String)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `log` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_kvmvm_list.md b/docs/data-sources/cb_kvmvm_list.md
new file mode 100644
index 00000000..429d0375
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_list.md
@@ -0,0 +1,288 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by AccountID
+- `by_id` (Number) Find by ID
+- `cd_image_id` (Number) Find by CD image ID
+- `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
+- `includedeleted` (Boolean)
+- `ip_address` (String) Find by IP address
+- `name` (String) Find by name
+- `node_id` (Number) Find by node ID
+- `node_name` (String) Find by node name.
+- `page` (Number)
+- `rg_id` (Number) Find by RGID
+- `rg_name` (String) Find by resgroup name
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `tech_status` (String) Find by tech status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--affinity_rules))
+- `affinity_weight` (Number)
+- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
+- `arch` (String)
+- `auto_start_w_node` (Boolean)
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `boot_type` (String)
+- `bootdisk_size` (Number)
+- `cd_image_id` (Number)
+- `chipset` (String)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `compute_id` (Number)
+- `computeci_id` (Number)
+- `cpu_pin` (Boolean)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `custom_fields` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `devices` (String)
+- `disks` (List of Object) (see [below for nested schema](#nestedobjatt--items--disks))
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `hot_resize` (Boolean)
+- `hp_backed` (Boolean)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces))
+- `live_migration_job_id` (Number)
+- `loader_type` (String)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `need_reboot` (Boolean)
+- `network_interface_naming` (String)
+- `nid` (Number)
+- `node_id` (Number)
+- `node_name` (String)
+- `numa_affinity` (String)
+- `numa_node_id` (Number)
+- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--items--os_users))
+- `os_version` (String)
+- `pinned` (Number)
+- `preferred_cpu` (List of Number)
+- `qemu_guest` (List of Object) (see [below for nested schema](#nestedobjatt--items--qemu_guest))
+- `ram` (Number)
+- `read_only` (Boolean)
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedobjatt--items--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tags` (List of Object) (see [below for nested schema](#nestedobjatt--items--tags))
+- `tech_status` (String)
+- `total_disk_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_data` (String)
+- `user_managed` (Boolean)
+- `vgpus` (List of Number)
+- `vins_connected` (Number)
+- `weight` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.anti_affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.disks`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `disk_id` (Number)
+- `pci_slot` (Number)
+- `sep_id` (Number)
+
+
+
+### Nested Schema for `items.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `items.os_users`
+
+Read-Only:
+
+- `guid` (String)
+- `login` (String)
+- `password` (String)
+- `public_key` (String)
+
+
+
+### Nested Schema for `items.qemu_guest`
+
+Read-Only:
+
+- `enabled` (Boolean)
+- `enabled_agent_features` (List of String)
+- `guid` (String)
+- `last_update` (Number)
+- `user` (String)
+
+
+
+### Nested Schema for `items.snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `items.tags`
+
+Read-Only:
+
+- `key` (String)
+- `val` (String)
diff --git a/docs/data-sources/cb_kvmvm_list_deleted.md b/docs/data-sources/cb_kvmvm_list_deleted.md
new file mode 100644
index 00000000..5138f95b
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_list_deleted.md
@@ -0,0 +1,265 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by AccountID
+- `by_id` (Number) Find by ID
+- `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
+- `ip_address` (String) Find by IP address
+- `name` (String) Find by name
+- `page` (Number)
+- `rg_id` (Number) Find by RGID
+- `rg_name` (String) Find by resgroup name
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Find by tech 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--affinity_rules))
+- `affinity_weight` (Number)
+- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
+- `arch` (String)
+- `auto_start_w_node` (Boolean)
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `boot_type` (String)
+- `bootdisk_size` (Number)
+- `cd_image_id` (Number)
+- `chipset` (String)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `compute_id` (Number)
+- `computeci_id` (Number)
+- `cpu_pin` (Boolean)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `custom_fields` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `devices` (String)
+- `disks` (List of Object) (see [below for nested schema](#nestedobjatt--items--disks))
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `hot_resize` (Boolean)
+- `hp_backed` (Boolean)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces))
+- `loader_type` (String)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `need_reboot` (Boolean)
+- `network_interface_naming` (String)
+- `node_id` (Number)
+- `node_name` (String)
+- `numa_affinity` (String)
+- `numa_node_id` (Number)
+- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--items--os_users))
+- `os_version` (String)
+- `pinned` (Number)
+- `preferred_cpu` (List of Number)
+- `ram` (Number)
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedobjatt--items--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tags` (List of Object) (see [below for nested schema](#nestedobjatt--items--tags))
+- `tech_status` (String)
+- `total_disk_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_data` (String)
+- `user_managed` (Boolean)
+- `vgpus` (List of Number)
+- `vins_connected` (Number)
+- `weight` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.anti_affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.disks`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `pci_slot` (Number)
+- `sep_id` (Number)
+
+
+
+### Nested Schema for `items.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `items.os_users`
+
+Read-Only:
+
+- `guid` (String)
+- `login` (String)
+- `password` (String)
+- `public_key` (String)
+
+
+
+### Nested Schema for `items.snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `items.tags`
+
+Read-Only:
+
+- `key` (String)
+- `val` (String)
diff --git a/docs/data-sources/cb_kvmvm_migrate_storage_info.md b/docs/data-sources/cb_kvmvm_migrate_storage_info.md
new file mode 100644
index 00000000..c149bec8
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_migrate_storage_info.md
@@ -0,0 +1,37 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_migrate_storage_info Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_migrate_storage_info (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `migrate_storage_info` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_kvmvm_pci_device_list.md b/docs/data-sources/cb_kvmvm_pci_device_list.md
new file mode 100644
index 00000000..a1156af2
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_pci_device_list.md
@@ -0,0 +1,64 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_pci_device_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_pci_device_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `device_id` (Number) Find by device id
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `rg_id` (Number) Find by RG id
+- `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:
+
+- `ckey` (String)
+- `compute_id` (Number)
+- `description` (String)
+- `device_id` (Number)
+- `guid` (Number)
+- `hwpath` (String)
+- `meta` (List of String)
+- `name` (String)
+- `node_id` (Number)
+- `rg_id` (Number)
+- `status` (String)
+- `system_name` (String)
diff --git a/docs/data-sources/cb_kvmvm_pfw_list.md b/docs/data-sources/cb_kvmvm_pfw_list.md
new file mode 100644
index 00000000..e73d39c8
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_pfw_list.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_pfw_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_pfw_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `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:
+
+- `local_ip` (String)
+- `local_port` (Number)
+- `pfw_id` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/cb_kvmvm_snapshot_list.md b/docs/data-sources/cb_kvmvm_snapshot_list.md
new file mode 100644
index 00000000..27780435
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_snapshot_list.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_snapshot_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_snapshot_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `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:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
diff --git a/docs/data-sources/cb_kvmvm_snapshot_usage.md b/docs/data-sources/cb_kvmvm_snapshot_usage.md
new file mode 100644
index 00000000..5d89b37f
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_snapshot_usage.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_snapshot_usage Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_snapshot_usage (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `label` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `count` (Number)
+- `label` (String)
+- `stored` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/cb_kvmvm_user_list.md b/docs/data-sources/cb_kvmvm_user_list.md
new file mode 100644
index 00000000..019465bc
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_user_list.md
@@ -0,0 +1,78 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_user_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_user_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedatt--account_acl))
+- `compute_acl` (List of Object) (see [below for nested schema](#nestedatt--compute_acl))
+- `id` (String) The ID of this resource.
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedatt--rg_acl))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `compute_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
diff --git a/docs/data-sources/cb_kvmvm_vgpu_list.md b/docs/data-sources/cb_kvmvm_vgpu_list.md
new file mode 100644
index 00000000..0d55b233
--- /dev/null
+++ b/docs/data-sources/cb_kvmvm_vgpu_list.md
@@ -0,0 +1,70 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm_vgpu_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm_vgpu_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `gpu_id` (Number) Find by GPU id
+- `includedeleted` (Boolean) Include deleted computes. If using field 'status', then includedeleted will be ignored
+- `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))
+- `type` (String) Find by type
+
+### 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_id` (Number)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `last_claimed_by` (Number)
+- `last_update_time` (Number)
+- `mode` (String)
+- `pci_slot` (Number)
+- `pgpuid` (Number)
+- `profile_id` (Number)
+- `ram` (Number)
+- `reference_id` (String)
+- `rg_id` (Number)
+- `status` (String)
+- `type` (String)
+- `vgpu_id` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/cb_lb.md b/docs/data-sources/cb_lb.md
new file mode 100644
index 00000000..a37845ce
--- /dev/null
+++ b/docs/data-sources/cb_lb.md
@@ -0,0 +1,170 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `lb_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number)
+
+### Read-Only
+
+- `account_id` (Number)
+- `acl` (String)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedatt--backends))
+- `ckey` (String)
+- `desc` (String)
+- `dp_api_password` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedatt--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `name` (String)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedatt--primary_node))
+- `rg_id` (Number)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedatt--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers))
+
+
+### Nested Schema for `backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers--server_settings))
+
+
+### Nested Schema for `backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/cb_lb_list.md b/docs/data-sources/cb_lb_list.md
new file mode 100644
index 00000000..0771be13
--- /dev/null
+++ b/docs/data-sources/cb_lb_list.md
@@ -0,0 +1,191 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by Account ID
+- `back_ip` (String) Filter by BackIP
+- `by_id` (Number) Filter by ID
+- `front_ip` (String) Filter by FrontIP
+- `includedeleted` (Boolean)
+- `name` (String) Filter by name
+- `page` (Number)
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by Status
+- `tech_status` (String) Filter by TechStatus
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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:
+
+- `acl` (String)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dp_api_password` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `lb_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--primary_node))
+- `rg_id` (Number)
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers))
+
+
+### Nested Schema for `items.backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `items.backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers--server_settings))
+
+
+### Nested Schema for `items.backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `items.frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `items.frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `items.primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `items.secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/cb_lb_list_deleted.md b/docs/data-sources/cb_lb_list_deleted.md
new file mode 100644
index 00000000..80afc2bc
--- /dev/null
+++ b/docs/data-sources/cb_lb_list_deleted.md
@@ -0,0 +1,189 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by Account ID
+- `back_ip` (String) Filter by BackIP
+- `by_id` (Number) Filter by ID
+- `front_ip` (String) Filter by FrontIP
+- `name` (String) Filter by name
+- `page` (Number)
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Filter by TechStatus
+- `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:
+
+- `acl` (String)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dp_api_password` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `lb_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--primary_node))
+- `rg_id` (Number)
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers))
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `items.backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers--server_settings))
+
+
+### Nested Schema for `items.backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `items.frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `items.frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `items.primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `items.secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/cb_node.md b/docs/data-sources/cb_node.md
new file mode 100644
index 00000000..73d30862
--- /dev/null
+++ b/docs/data-sources/cb_node.md
@@ -0,0 +1,254 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_node Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_node (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `node_id` (Number) node id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `auto_start` (Boolean)
+- `auto_start_count` (Number)
+- `consumption` (List of Object) (see [below for nested schema](#nestedatt--consumption))
+- `cpu_allocation_ratio` (Number)
+- `cpu_info` (List of Object) (see [below for nested schema](#nestedatt--cpu_info))
+- `description` (String)
+- `dpdk` (List of Object) (see [below for nested schema](#nestedatt--dpdk))
+- `gid` (Number)
+- `id` (String) The ID of this resource.
+- `ipaddr` (List of String)
+- `isolated_cpus` (List of String)
+- `mem_allocation_ratio` (Number)
+- `name` (String)
+- `need_reboot` (Boolean)
+- `net_addr` (List of Object) (see [below for nested schema](#nestedatt--net_addr))
+- `network_mode` (String)
+- `nic_info` (List of Object) (see [below for nested schema](#nestedatt--nic_info))
+- `numa_topology` (List of Object) (see [below for nested schema](#nestedatt--numa_topology))
+- `openvswitch_bridges` (List of String)
+- `reserved_cpus` (List of String)
+- `roles` (List of String)
+- `sdn_hypervisor_name` (String)
+- `sriov_enabled` (Boolean)
+- `status` (String)
+- `to_active` (List of Object) (see [below for nested schema](#nestedatt--to_active))
+- `to_installing` (List of Object) (see [below for nested schema](#nestedatt--to_installing))
+- `to_maintenance` (List of Object) (see [below for nested schema](#nestedatt--to_maintenance))
+- `to_restricted` (List of Object) (see [below for nested schema](#nestedatt--to_restricted))
+- `usable_cpus` (List of String)
+- `version` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `consumption`
+
+Read-Only:
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--consumption--consumed))
+- `free` (List of Object) (see [below for nested schema](#nestedobjatt--consumption--free))
+- `hostname` (String)
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--consumption--reserved))
+- `total` (List of Object) (see [below for nested schema](#nestedobjatt--consumption--total))
+
+
+### Nested Schema for `consumption.consumed`
+
+Read-Only:
+
+- `computes` (Number)
+- `ram` (Number)
+- `routers` (Number)
+- `vcpu` (Number)
+
+
+
+### Nested Schema for `consumption.free`
+
+Read-Only:
+
+- `ram` (Number)
+- `vcpu` (Number)
+
+
+
+### Nested Schema for `consumption.reserved`
+
+Read-Only:
+
+- `ram` (Number)
+
+
+
+### Nested Schema for `consumption.total`
+
+Read-Only:
+
+- `ram` (Number)
+
+
+
+
+### Nested Schema for `cpu_info`
+
+Read-Only:
+
+- `clock_speed` (Number)
+- `core_count` (Number)
+- `flags` (List of String)
+- `model_name` (String)
+- `phys_count` (Number)
+- `thread_count` (Number)
+
+
+
+### Nested Schema for `dpdk`
+
+Read-Only:
+
+- `bridges` (List of Object) (see [below for nested schema](#nestedobjatt--dpdk--bridges))
+- `hp_memory` (Map of Number)
+- `pmd_cpu` (List of Number)
+
+
+### Nested Schema for `dpdk.bridges`
+
+Read-Only:
+
+- `backplane1` (List of Object) (see [below for nested schema](#nestedobjatt--dpdk--bridges--backplane1))
+
+
+### Nested Schema for `dpdk.bridges.backplane1`
+
+Read-Only:
+
+- `interfaces` (List of String)
+- `numa_node` (Number)
+
+
+
+
+
+### Nested Schema for `net_addr`
+
+Read-Only:
+
+- `ip` (List of String)
+- `name` (String)
+
+
+
+### Nested Schema for `nic_info`
+
+Read-Only:
+
+- `driver` (String)
+- `max_vfs` (Number)
+- `num_vfs` (Number)
+- `numa_node` (Number)
+- `os_name` (String)
+- `pci_slot` (String)
+- `vf_list` (List of Object) (see [below for nested schema](#nestedobjatt--nic_info--vf_list))
+
+
+### Nested Schema for `nic_info.vf_list`
+
+Read-Only:
+
+- `fn_id` (Number)
+- `pci_slot` (String)
+
+
+
+
+### Nested Schema for `numa_topology`
+
+Read-Only:
+
+- `node_num` (Number)
+- `nodes` (List of Object) (see [below for nested schema](#nestedobjatt--numa_topology--nodes))
+
+
+### Nested Schema for `numa_topology.nodes`
+
+Read-Only:
+
+- `cpu_list` (List of Number)
+- `memory` (List of Object) (see [below for nested schema](#nestedobjatt--numa_topology--nodes--memory))
+
+
+### Nested Schema for `numa_topology.nodes.memory`
+
+Read-Only:
+
+- `one_g` (Number)
+- `total` (Number)
+- `two_m` (Number)
+
+
+
+
+
+### Nested Schema for `to_active`
+
+Read-Only:
+
+- `actor` (String)
+- `reason` (String)
+- `time` (Number)
+
+
+
+### Nested Schema for `to_installing`
+
+Read-Only:
+
+- `actor` (String)
+- `reason` (String)
+- `time` (Number)
+
+
+
+### Nested Schema for `to_maintenance`
+
+Read-Only:
+
+- `actor` (String)
+- `reason` (String)
+- `time` (Number)
+
+
+
+### Nested Schema for `to_restricted`
+
+Read-Only:
+
+- `actor` (String)
+- `reason` (String)
+- `time` (Number)
diff --git a/docs/data-sources/cb_node_list.md b/docs/data-sources/cb_node_list.md
new file mode 100644
index 00000000..ba7b78bf
--- /dev/null
+++ b/docs/data-sources/cb_node_list.md
@@ -0,0 +1,215 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_node_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_node_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) find node by id
+- `name` (String) find node by name
+- `page` (Number) page number
+- `release` (String) find node by release
+- `role` (String) find node by role
+- `sep_id` (Number) find node by sepId
+- `size` (Number) page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) find node by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `version` (String) find node by version
+- `zone_id` (Number) find node by zone id
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `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:
+
+- `additional_pkgs` (List of String)
+- `api_url` (String)
+- `auto_start` (Boolean)
+- `auto_start_count` (Number)
+- `cpu_allocation_ratio` (Number)
+- `cpu_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--cpu_info))
+- `description` (String)
+- `dpdk` (List of Object) (see [below for nested schema](#nestedobjatt--items--dpdk))
+- `drivers` (List of String)
+- `gid` (Number)
+- `guid` (String)
+- `hostkey` (String)
+- `ipaddr` (List of String)
+- `isolated_cpus` (List of String)
+- `lastcheck` (Number)
+- `machine_guid` (String)
+- `mainboard_sn` (String)
+- `mem_allocation_ratio` (Number)
+- `memory` (Number)
+- `milestones` (Number)
+- `model` (String)
+- `name` (String)
+- `need_reboot` (Boolean)
+- `net_addr` (List of Object) (see [below for nested schema](#nestedobjatt--items--net_addr))
+- `network_mode` (String)
+- `nic_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--nic_info))
+- `node_id` (Number)
+- `node_uuid` (String)
+- `numa_topology` (List of Object) (see [below for nested schema](#nestedobjatt--items--numa_topology))
+- `old_compat_lvm_id` (Number)
+- `openvswitch_bridges` (List of String)
+- `packages` (List of Object) (see [below for nested schema](#nestedobjatt--items--packages))
+- `peer_backup` (Number)
+- `peer_log` (Number)
+- `peer_stats` (Number)
+- `pgpus` (List of Number)
+- `public_keys` (List of String)
+- `release` (String)
+- `reserved_cpus` (List of String)
+- `roles` (List of String)
+- `sdn_hypervisor_name` (String)
+- `seps` (List of Number)
+- `serial_num` (String)
+- `sriov_enabled` (Boolean)
+- `status` (String)
+- `tags` (List of String)
+- `type` (String)
+- `uefi_firmware_file` (String)
+- `usable_cpus` (List of String)
+- `version` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.cpu_info`
+
+Read-Only:
+
+- `clock_speed` (Number)
+- `core_count` (Number)
+- `flags` (List of String)
+- `model_name` (String)
+- `phys_count` (Number)
+- `thread_count` (Number)
+
+
+
+### Nested Schema for `items.dpdk`
+
+Read-Only:
+
+- `bridges` (List of Object) (see [below for nested schema](#nestedobjatt--items--dpdk--bridges))
+- `hp_memory` (Map of Number)
+- `pmd_cpu` (List of Number)
+
+
+### Nested Schema for `items.dpdk.bridges`
+
+Read-Only:
+
+- `backplane1` (List of Object) (see [below for nested schema](#nestedobjatt--items--dpdk--bridges--backplane1))
+
+
+### Nested Schema for `items.dpdk.bridges.backplane1`
+
+Read-Only:
+
+- `interfaces` (List of String)
+- `numa_node` (Number)
+
+
+
+
+
+### Nested Schema for `items.net_addr`
+
+Read-Only:
+
+- `cidr` (List of String)
+- `index` (Number)
+- `ip` (List of String)
+- `mac` (String)
+- `mtu` (Number)
+- `name` (String)
+
+
+
+### Nested Schema for `items.nic_info`
+
+Read-Only:
+
+- `driver` (String)
+- `max_vfs` (Number)
+- `num_vfs` (Number)
+- `numa_node` (Number)
+- `os_name` (String)
+- `pci_slot` (String)
+- `vf_list` (List of Object) (see [below for nested schema](#nestedobjatt--items--nic_info--vf_list))
+
+
+### Nested Schema for `items.nic_info.vf_list`
+
+Read-Only:
+
+- `fn_id` (Number)
+- `pci_slot` (String)
+
+
+
+
+### Nested Schema for `items.numa_topology`
+
+Read-Only:
+
+- `node_num` (Number)
+- `nodes` (List of Object) (see [below for nested schema](#nestedobjatt--items--numa_topology--nodes))
+
+
+### Nested Schema for `items.numa_topology.nodes`
+
+Read-Only:
+
+- `cpu_list` (List of Number)
+- `memory` (List of Object) (see [below for nested schema](#nestedobjatt--items--numa_topology--nodes--memory))
+
+
+### Nested Schema for `items.numa_topology.nodes.memory`
+
+Read-Only:
+
+- `one_g` (Number)
+- `total` (Number)
+- `two_m` (Number)
+
+
+
+
+
+### Nested Schema for `items.packages`
+
+Read-Only:
+
+- `size` (String)
+- `ver` (String)
diff --git a/docs/data-sources/cb_pcidevice.md b/docs/data-sources/cb_pcidevice.md
new file mode 100644
index 00000000..f83bd306
--- /dev/null
+++ b/docs/data-sources/cb_pcidevice.md
@@ -0,0 +1,45 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_pcidevice Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_pcidevice (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `device_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `compute_id` (Number)
+- `description` (String)
+- `guid` (Number)
+- `hw_path` (String)
+- `id` (String) The ID of this resource.
+- `name` (String)
+- `node_id` (Number)
+- `rg_id` (Number)
+- `status` (String)
+- `system_name` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_pcidevice_list.md b/docs/data-sources/cb_pcidevice_list.md
new file mode 100644
index 00000000..4731a8cf
--- /dev/null
+++ b/docs/data-sources/cb_pcidevice_list.md
@@ -0,0 +1,58 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_pcidevice_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_pcidevice_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) by_id
+- `compute_id` (Number) compute_id
+- `name` (String) name
+- `page` (Number) page number
+- `rg_id` (Number) rg_id
+- `size` (Number) page size
+- `status` (String) status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `id` (String) The ID of this resource.
+- `items` (List of Object) pcidevice list (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `description` (String)
+- `device_id` (Number)
+- `guid` (Number)
+- `hw_path` (String)
+- `name` (String)
+- `node_id` (Number)
+- `rg_id` (Number)
+- `status` (String)
+- `system_name` (String)
diff --git a/docs/data-sources/cb_rg.md b/docs/data-sources/cb_rg.md
new file mode 100644
index 00000000..7df682b7
--- /dev/null
+++ b/docs/data-sources/cb_rg.md
@@ -0,0 +1,102 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `compute_features` (List of String)
+- `computes` (List of Number)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number)
+- `def_net_type` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dirty` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `lock_status` (String)
+- `milestones` (Number)
+- `name` (String)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+- `resource_types` (List of String)
+- `sdn_access_group_id` (String)
+- `secret` (String)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `email` (String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedobjatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/cb_rg_affinity_group_computes.md b/docs/data-sources/cb_rg_affinity_group_computes.md
new file mode 100644
index 00000000..570df398
--- /dev/null
+++ b/docs/data-sources/cb_rg_affinity_group_computes.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_affinity_group_computes Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_affinity_group_computes (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `affinity_group` (String) Affinity group label
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `other_node` (List of Number)
+- `other_node_indirect` (List of Number)
+- `other_node_indirect_soft` (List of Number)
+- `other_node_soft` (List of Number)
+- `same_node` (List of Number)
+- `same_node_soft` (List of Number)
diff --git a/docs/data-sources/cb_rg_affinity_groups_get.md b/docs/data-sources/cb_rg_affinity_groups_get.md
new file mode 100644
index 00000000..2850f7fc
--- /dev/null
+++ b/docs/data-sources/cb_rg_affinity_groups_get.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_affinity_groups_get Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_affinity_groups_get (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `affinity_group` (String) Affinity group label
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `ids` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_rg_affinity_groups_list.md b/docs/data-sources/cb_rg_affinity_groups_list.md
new file mode 100644
index 00000000..0c1160b3
--- /dev/null
+++ b/docs/data-sources/cb_rg_affinity_groups_list.md
@@ -0,0 +1,50 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_affinity_groups_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_affinity_groups_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `affinity_groups` (List of Object) (see [below for nested schema](#nestedatt--affinity_groups))
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `affinity_groups`
+
+Read-Only:
+
+- `id` (Number)
+- `label` (String)
+- `node_id` (Number)
diff --git a/docs/data-sources/cb_rg_audits.md b/docs/data-sources/cb_rg_audits.md
new file mode 100644
index 00000000..ce4b372e
--- /dev/null
+++ b/docs/data-sources/cb_rg_audits.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `call` (String)
+- `responsetime` (Number)
+- `statuscode` (Number)
+- `timestamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/cb_rg_list.md b/docs/data-sources/cb_rg_list.md
new file mode 100644
index 00000000..b0b1cb4f
--- /dev/null
+++ b/docs/data-sources/cb_rg_list.md
@@ -0,0 +1,118 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `account_name` (String) Filter by account name
+- `by_id` (Number) Filter by ID
+- `created_after` (Number) Filter RGs created after certain point in time (unix timestamp)
+- `created_before` (Number) Filter RGs created before certain point in time (unix timestamp)
+- `includedeleted` (Boolean) Include deleted
+- `lock_status` (String) Filter by lock status
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number)
+- `def_net_type` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dirty` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `name` (String)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `resource_types` (List of String)
+- `rg_id` (Number)
+- `sdn_access_group_id` (String)
+- `secret` (String)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number)
+- `vms` (List of Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits--storage_policy))
+
+
+### Nested Schema for `items.resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/cb_rg_list_computes.md b/docs/data-sources/cb_rg_list_computes.md
new file mode 100644
index 00000000..100f05a6
--- /dev/null
+++ b/docs/data-sources/cb_rg_list_computes.md
@@ -0,0 +1,105 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_list_computes Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_list_computes (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `compute_id` (Number) Filter by compute ID
+- `extnet_id` (Number) Filter by extnet ID
+- `extnet_name` (String) Filter by extnet name
+- `ip_address` (String) FIlter by IP address
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `tech_status` (String) Filter by tech. 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_id` (Number)
+- `account_name` (String)
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--affinity_rules))
+- `affinity_weight` (Number)
+- `antiaffinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--antiaffinity_rules))
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `id` (Number)
+- `name` (String)
+- `ram` (Number)
+- `registered` (Boolean)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `total_disks_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_connected` (Number)
+
+
+### Nested Schema for `items.affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.antiaffinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
diff --git a/docs/data-sources/cb_rg_list_deleted.md b/docs/data-sources/cb_rg_list_deleted.md
new file mode 100644
index 00000000..1d2e05e2
--- /dev/null
+++ b/docs/data-sources/cb_rg_list_deleted.md
@@ -0,0 +1,116 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `account_name` (String) Filter by account name
+- `by_id` (Number) Filter by ID
+- `created_after` (Number) Filter RGs created after certain point in time (unix timestamp)
+- `created_before` (Number) Filter RGs created before certain point in time (unix timestamp)
+- `lock_status` (String) Filter by lock status
+- `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))
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number)
+- `def_net_type` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dirty` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `name` (String)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `resource_types` (List of String)
+- `rg_id` (Number)
+- `sdn_access_group_id` (String)
+- `secret` (String)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number)
+- `vms` (List of Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits--storage_policy))
+
+
+### Nested Schema for `items.resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/cb_rg_list_lb.md b/docs/data-sources/cb_rg_list_lb.md
new file mode 100644
index 00000000..734bf619
--- /dev/null
+++ b/docs/data-sources/cb_rg_list_lb.md
@@ -0,0 +1,196 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_list_lb Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_list_lb (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `back_ip` (String) Filter by backend IP
+- `by_id` (Number) Filter by ID
+- `front_ip` (String) Filter by frontend IP
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `tech_status` (String) Filter by tech. 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:
+
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `backends` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontends` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `id` (Number)
+- `image_id` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--primary_node))
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers))
+
+
+### Nested Schema for `items.backends.server_default_settings`
+
+Read-Only:
+
+- `down_inter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `max_conn` (Number)
+- `max_queue` (Number)
+- `rise` (Number)
+- `slow_start` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `items.backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers--server_settings))
+
+
+### Nested Schema for `items.backends.servers.server_settings`
+
+Read-Only:
+
+- `down_inter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `max_conn` (Number)
+- `max_queue` (Number)
+- `rise` (Number)
+- `slow_start` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `items.frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `items.frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `items.primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `items.secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/cb_rg_list_pfw.md b/docs/data-sources/cb_rg_list_pfw.md
new file mode 100644
index 00000000..5cb2b5a7
--- /dev/null
+++ b/docs/data-sources/cb_rg_list_pfw.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_list_pfw Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_list_pfw (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `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:
+
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `vins_id` (Number)
+- `vins_name` (String)
+- `vm_id` (Number)
+- `vm_ip` (String)
+- `vm_name` (String)
+- `vm_port` (Number)
diff --git a/docs/data-sources/cb_rg_list_vins.md b/docs/data-sources/cb_rg_list_vins.md
new file mode 100644
index 00000000..1bacd221
--- /dev/null
+++ b/docs/data-sources/cb_rg_list_vins.md
@@ -0,0 +1,71 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_list_vins Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_list_vins (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `ext_ip` (String) Filter by external IP
+- `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
+
+### 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_id` (Number)
+- `account_name` (String)
+- `computes` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `external_ip` (String)
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `id` (Number)
+- `name` (String)
+- `network` (String)
+- `pri_vnf_dev_id` (Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
diff --git a/docs/data-sources/cb_rg_resource_consumption_get.md b/docs/data-sources/cb_rg_resource_consumption_get.md
new file mode 100644
index 00000000..9ea6ed40
--- /dev/null
+++ b/docs/data-sources/cb_rg_resource_consumption_get.md
@@ -0,0 +1,102 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_resource_consumption_get Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_resource_consumption_get (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedatt--consumed))
+- `id` (String) The ID of this resource.
+- `reserved` (List of Object) (see [below for nested schema](#nestedatt--reserved))
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--seps))
+
+
+### Nested Schema for `consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--seps))
+
+
+### Nested Schema for `reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
diff --git a/docs/data-sources/cb_rg_resource_consumption_list.md b/docs/data-sources/cb_rg_resource_consumption_list.md
new file mode 100644
index 00000000..698d0c77
--- /dev/null
+++ b/docs/data-sources/cb_rg_resource_consumption_list.md
@@ -0,0 +1,107 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_resource_consumption_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_resource_consumption_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `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:
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed))
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved))
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `rg_id` (Number)
+
+
+### Nested Schema for `items.consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--seps))
+
+
+### Nested Schema for `items.consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--seps))
+
+
+### Nested Schema for `items.reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
diff --git a/docs/data-sources/cb_rg_usage.md b/docs/data-sources/cb_rg_usage.md
new file mode 100644
index 00000000..c0756945
--- /dev/null
+++ b/docs/data-sources/cb_rg_usage.md
@@ -0,0 +1,54 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg_usage Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg_usage (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `id` (String) The ID of this resource.
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedatt--seps))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
diff --git a/docs/data-sources/cb_security_group.md b/docs/data-sources/cb_security_group.md
new file mode 100644
index 00000000..992605b1
--- /dev/null
+++ b/docs/data-sources/cb_security_group.md
@@ -0,0 +1,58 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_security_group Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_security_group (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `security_group_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `created_at` (Number)
+- `created_by` (String)
+- `description` (String)
+- `id` (String) The ID of this resource.
+- `name` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedatt--rules))
+- `updated_at` (Number)
+- `updated_by` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `rules`
+
+Read-Only:
+
+- `direction` (String)
+- `ethertype` (String)
+- `id` (Number)
+- `port_range_max` (Number)
+- `port_range_min` (Number)
+- `protocol` (String)
+- `remote_ip_prefix` (String)
diff --git a/docs/data-sources/cb_security_group_list.md b/docs/data-sources/cb_security_group_list.md
new file mode 100644
index 00000000..f0e90bcc
--- /dev/null
+++ b/docs/data-sources/cb_security_group_list.md
@@ -0,0 +1,74 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_security_group_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_security_group_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number)
+- `by_id` (Number)
+- `created_max` (Number)
+- `created_min` (Number)
+- `desc` (String)
+- `name` (String)
+- `page` (Number)
+- `size` (Number)
+- `sort_by` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `updated_max` (Number)
+- `updated_min` (Number)
+
+### 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_id` (Number)
+- `created_at` (Number)
+- `created_by` (String)
+- `description` (String)
+- `name` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--rules))
+- `security_group_id` (Number)
+- `updated_at` (Number)
+- `updated_by` (String)
+
+
+### Nested Schema for `items.rules`
+
+Read-Only:
+
+- `direction` (String)
+- `ethertype` (String)
+- `id` (Number)
+- `port_range_max` (Number)
+- `port_range_min` (Number)
+- `protocol` (String)
+- `remote_ip_prefix` (String)
diff --git a/docs/data-sources/cb_sep.md b/docs/data-sources/cb_sep.md
new file mode 100644
index 00000000..d4fb73e5
--- /dev/null
+++ b/docs/data-sources/cb_sep.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `sep_id` (Number) sep type des id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `config` (String) config
+- `consumed_by` (Set of Number) consumed by
+- `desc` (String) description
+- `gid` (Number) gid
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `milestones` (Number) milestones
+- `multipath_num` (Number) multipath_num
+- `name` (String) name
+- `obj_status` (String) object status
+- `provided_by` (List of Number) provided by
+- `shared_with` (List of Number) shared with
+- `tech_status` (String) tech status
+- `type` (String) type
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_sep_and_pools_available_list.md b/docs/data-sources/cb_sep_and_pools_available_list.md
new file mode 100644
index 00000000..b6c4f0b6
--- /dev/null
+++ b/docs/data-sources/cb_sep_and_pools_available_list.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_and_pools_available_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_and_pools_available_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) Account ID
+
+### Optional
+
+- `rg_id` (Number) Resource group ID
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `entry_count` (Number) Number of available SEP entries
+- `id` (String) The ID of this resource.
+- `items` (List of Object) List of available SEPs (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `pools` (List of Object) (see [below for nested schema](#nestedobjatt--items--pools))
+- `sep_id` (Number)
+- `sep_name` (String)
+- `sep_type` (String)
+
+
+### Nested Schema for `items.pools`
+
+Read-Only:
+
+- `name` (String)
+- `system` (Boolean)
+- `types` (List of String)
diff --git a/docs/data-sources/cb_sep_config.md b/docs/data-sources/cb_sep_config.md
new file mode 100644
index 00000000..8ffb9a35
--- /dev/null
+++ b/docs/data-sources/cb_sep_config.md
@@ -0,0 +1,37 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_config Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_config (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `sep_id` (Number) storage endpoint provider ID
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `config` (String) sep config json string
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_sep_consumption.md b/docs/data-sources/cb_sep_consumption.md
new file mode 100644
index 00000000..2341a8e3
--- /dev/null
+++ b/docs/data-sources/cb_sep_consumption.md
@@ -0,0 +1,67 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_consumption Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_consumption (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `sep_id` (Number) sep id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `by_pool` (List of Object) consumption divided by pool (see [below for nested schema](#nestedatt--by_pool))
+- `id` (String) The ID of this resource.
+- `total` (List of Object) total consumption (see [below for nested schema](#nestedatt--total))
+- `type` (String) sep type
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `by_pool`
+
+Read-Only:
+
+- `disk_count` (Number)
+- `disk_usage` (Number)
+- `name` (String)
+- `snapshot_count` (Number)
+- `snapshot_usage` (Number)
+- `usage` (Number)
+- `usage_limit` (Number)
+
+
+
+### Nested Schema for `total`
+
+Read-Only:
+
+- `capacity_limit` (Number)
+- `disk_count` (Number)
+- `disk_usage` (Number)
+- `snapshot_count` (Number)
+- `snapshot_usage` (Number)
+- `usage` (Number)
+- `usage_limit` (Number)
diff --git a/docs/data-sources/cb_sep_disk_list.md b/docs/data-sources/cb_sep_disk_list.md
new file mode 100644
index 00000000..00427b18
--- /dev/null
+++ b/docs/data-sources/cb_sep_disk_list.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_disk_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_disk_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `sep_id` (Number) storage endpoint provider ID
+
+### Optional
+
+- `pool_name` (String) pool name
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Number) sep disk list
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_sep_list.md b/docs/data-sources/cb_sep_list.md
new file mode 100644
index 00000000..0a31bc1b
--- /dev/null
+++ b/docs/data-sources/cb_sep_list.md
@@ -0,0 +1,66 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) find by id
+- `consumed_by` (Number) find by consumed physical node id
+- `gid` (Number) find by gid
+- `name` (String) find by name
+- `page` (Number) page number
+- `provided_by` (Number) find by provided physical node id
+- `sep_ids` (List of Number) sort by list of SEP identifiers
+- `size` (Number) page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) find by techStatus
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `type` (String) find by sep type
+
+### Read-Only
+
+- `entry_count` (Number) entryCount
+- `id` (String) The ID of this resource.
+- `items` (List of Object) sep list (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `config` (String)
+- `consumed_by` (Set of Number)
+- `desc` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `milestones` (Number)
+- `multipath_num` (Number)
+- `name` (String)
+- `obj_status` (String)
+- `provided_by` (List of Number)
+- `sep_id` (Number)
+- `shared_with` (List of Number)
+- `tech_status` (String)
+- `type` (String)
diff --git a/docs/data-sources/cb_sep_pool.md b/docs/data-sources/cb_sep_pool.md
new file mode 100644
index 00000000..bb3cfece
--- /dev/null
+++ b/docs/data-sources/cb_sep_pool.md
@@ -0,0 +1,61 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_pool Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_pool (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `pool_name` (String) pool name
+- `sep_id` (Number) storage endpoint provider ID
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `pool` (List of Object) pool (see [below for nested schema](#nestedatt--pool))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `pool`
+
+Read-Only:
+
+- `access_account_ids` (List of Number)
+- `access_res_group_ids` (List of Number)
+- `name` (String)
+- `pagecache_ratio` (Number)
+- `reference_id` (String)
+- `types` (List of String)
+- `uris` (Set of Object) (see [below for nested schema](#nestedobjatt--pool--uris))
+- `usage_limit` (Number)
+
+
+### Nested Schema for `pool.uris`
+
+Read-Only:
+
+- `ip` (String)
+- `port` (Number)
diff --git a/docs/data-sources/cb_sep_template.md b/docs/data-sources/cb_sep_template.md
new file mode 100644
index 00000000..3870ed3b
--- /dev/null
+++ b/docs/data-sources/cb_sep_template.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_template Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_template (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `lang` (String) language
+- `sep_type` (String) type of sep
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `sep_template` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_storage_policy.md b/docs/data-sources/cb_storage_policy.md
new file mode 100644
index 00000000..aa82291c
--- /dev/null
+++ b/docs/data-sources/cb_storage_policy.md
@@ -0,0 +1,63 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_storage_policy Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_storage_policy (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `storage_policy_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `access_seps_pools` (List of Object) (see [below for nested schema](#nestedatt--access_seps_pools))
+- `description` (String)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `limit_iops` (Number)
+- `name` (String)
+- `status` (String)
+- `usage` (List of Object) (see [below for nested schema](#nestedatt--usage))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `access_seps_pools`
+
+Read-Only:
+
+- `pool_names` (List of String)
+- `sep_id` (Number)
+- `sep_name` (String)
+- `sep_tech_status` (String)
+
+
+
+### Nested Schema for `usage`
+
+Read-Only:
+
+- `accounts` (List of Number)
+- `resgroups` (List of Number)
diff --git a/docs/data-sources/cb_storage_policy_list.md b/docs/data-sources/cb_storage_policy_list.md
new file mode 100644
index 00000000..0129b2ca
--- /dev/null
+++ b/docs/data-sources/cb_storage_policy_list.md
@@ -0,0 +1,81 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_storage_policy_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_storage_policy_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number)
+- `by_id` (Number)
+- `desc` (String)
+- `limit_iops` (Number)
+- `name` (String)
+- `page` (Number)
+- `pool_name` (String)
+- `resgroup_id` (Number)
+- `sep_id` (Number)
+- `sep_tech_status` (String)
+- `size` (Number)
+- `sort_by` (String)
+- `status` (String)
+- `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:
+
+- `access_seps_pools` (List of Object) (see [below for nested schema](#nestedobjatt--items--access_seps_pools))
+- `description` (String)
+- `guid` (Number)
+- `limit_iops` (Number)
+- `name` (String)
+- `status` (String)
+- `storage_policy_id` (Number)
+- `usage` (List of Object) (see [below for nested schema](#nestedobjatt--items--usage))
+
+
+### Nested Schema for `items.access_seps_pools`
+
+Read-Only:
+
+- `pool_names` (List of String)
+- `sep_id` (Number)
+- `sep_name` (String)
+- `sep_tech_status` (String)
+
+
+
+### Nested Schema for `items.usage`
+
+Read-Only:
+
+- `accounts` (List of Number)
+- `resgroups` (List of Number)
diff --git a/docs/data-sources/cb_trunk.md b/docs/data-sources/cb_trunk.md
new file mode 100644
index 00000000..a99c9e54
--- /dev/null
+++ b/docs/data-sources/cb_trunk.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_trunk Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_trunk (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `trunk_id` (Number) trunk id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_ids` (Set of Number) List of account IDs with access to this trunk
+- `created_at` (Number) when the trunk was created
+- `created_by` (String) who created the trunk
+- `deleted_at` (Number) when the trunk was updated
+- `deleted_by` (String) who updated the trunk
+- `description` (String) Description of the trunk
+- `guid` (Number) GUID
+- `id` (String) The ID of this resource.
+- `mac` (String) MAC address
+- `mtu` (Number) Maximum Transmission Unit
+- `name` (String) Name of the trunk
+- `native_vlan_id` (Number) Native VLAN ID
+- `ovs_bridge` (String) OVS bridge name
+- `status` (String) if the trunk is enabled
+- `trunk_tags` (String) List of trunk tags (values between 1-4095)
+- `updated_at` (Number) when the trunk was updated
+- `updated_by` (String) who updated the trunk
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_trunk_list.md b/docs/data-sources/cb_trunk_list.md
new file mode 100644
index 00000000..db9fb404
--- /dev/null
+++ b/docs/data-sources/cb_trunk_list.md
@@ -0,0 +1,65 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_trunk_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_trunk_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_ids` (List of Number) Account access ID(s) to filter by
+- `page` (Number) Page number.
+- `size` (Number) Page size.
+- `sort_by` (String) Sort by one of supported fields, format ±
+- `status` (String) find by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `trunk_ids` (List of Number) ID of the trunk(s) to filter by
+- `trunk_tags` (String) Trunk tags to filter by (value between 1-4095)
+
+### 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_ids` (Set of Number)
+- `created_at` (Number)
+- `created_by` (String)
+- `deleted_at` (Number)
+- `deleted_by` (String)
+- `description` (String)
+- `guid` (Number)
+- `id` (Number)
+- `mac` (String)
+- `mtu` (Number)
+- `name` (String)
+- `native_vlan_id` (Number)
+- `ovs_bridge` (String)
+- `status` (String)
+- `trunk_tags` (String)
+- `updated_at` (Number)
+- `updated_by` (String)
diff --git a/docs/data-sources/cb_user.md b/docs/data-sources/cb_user.md
new file mode 100644
index 00000000..161328cd
--- /dev/null
+++ b/docs/data-sources/cb_user.md
@@ -0,0 +1,57 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_user Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_user (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `user_id` (String) user_id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `active` (Boolean) active
+- `api_access` (Map of String) api_access
+- `authkey` (String) authkey
+- `authkeys` (List of String) authkeys
+- `blocked` (Boolean) is the user blocked
+- `ckey` (String) ckey
+- `data` (String) data
+- `description` (String) description
+- `domain` (String) domain
+- `emails` (List of String) emails
+- `gid` (Number) gid
+- `groups` (List of String) groups
+- `guid` (String) guid
+- `id` (String) The ID of this resource.
+- `last_check` (Number) last_check
+- `meta` (List of String) meta
+- `mobile` (List of String) mobile
+- `password` (String) password
+- `protected` (Boolean) protected
+- `roles` (List of String) roles
+- `service_account` (Boolean) service_account
+- `xmpp` (List of String) xmpp
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_user_get_audit.md b/docs/data-sources/cb_user_get_audit.md
new file mode 100644
index 00000000..1a5b1478
--- /dev/null
+++ b/docs/data-sources/cb_user_get_audit.md
@@ -0,0 +1,54 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_user_get_audit Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_user_get_audit (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `call` (String) find by api call
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format ±
+- `status_code` (Number) find by status code
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `timestamp_at` (Number) find all audits after point in time (unixtime)
+- `timestamp_to` (Number) find all audits before point in time (unixtime)
+- `username` (String) name of user (get audits for current user if set to empty)
+
+### Read-Only
+
+- `entry_count` (Number) entry_count
+- `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:
+
+- `call` (String)
+- `guid` (String)
+- `response_time` (Number)
+- `status_code` (Number)
+- `time` (Number)
diff --git a/docs/data-sources/cb_user_list.md b/docs/data-sources/cb_user_list.md
new file mode 100644
index 00000000..b0e84aa8
--- /dev/null
+++ b/docs/data-sources/cb_user_list.md
@@ -0,0 +1,70 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_user_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_user_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `active` (Boolean) find by active. True or False
+- `by_id` (String) find by id
+- `email` (String) find by email
+- `page` (Number) Page number
+- `service_account` (Boolean) find by service account. True or False
+- `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))
+
+### Read-Only
+
+- `entry_count` (Number) entry_count
+- `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:
+
+- `active` (Boolean)
+- `apiaccess` (Map of String)
+- `authkey` (String)
+- `authkeys` (List of String)
+- `blocked` (Boolean)
+- `ckey` (String)
+- `data` (String)
+- `description` (String)
+- `domain` (String)
+- `emails` (List of String)
+- `gid` (Number)
+- `groups` (List of String)
+- `guid` (String)
+- `last_check` (Number)
+- `meta` (List of String)
+- `mobile` (List of String)
+- `password` (String)
+- `protected` (Boolean)
+- `roles` (List of String)
+- `service_account` (Boolean)
+- `user_id` (String)
+- `xmpp` (List of String)
diff --git a/docs/data-sources/cb_vfpool.md b/docs/data-sources/cb_vfpool.md
new file mode 100644
index 00000000..1cef8a10
--- /dev/null
+++ b/docs/data-sources/cb_vfpool.md
@@ -0,0 +1,72 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vfpool Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vfpool (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vfpool_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_access` (List of Number)
+- `created_time` (Number)
+- `description` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `name` (String)
+- `rg_access` (List of Number)
+- `status` (String)
+- `updated_time` (Number)
+- `vfs` (List of Object) (see [below for nested schema](#nestedatt--vfs))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `vfs`
+
+Read-Only:
+
+- `node_id` (Number)
+- `vf_list` (List of Object) (see [below for nested schema](#nestedobjatt--vfs--vf_list))
+
+
+### Nested Schema for `vfs.vf_list`
+
+Read-Only:
+
+- `nic_name` (String)
+- `vfs_info` (List of Object) (see [below for nested schema](#nestedobjatt--vfs--vf_list--vfs_info))
+
+
+### Nested Schema for `vfs.vf_list.vfs_info`
+
+Read-Only:
+
+- `claimed` (Boolean)
+- `id` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/cb_vfpool_list.md b/docs/data-sources/cb_vfpool_list.md
new file mode 100644
index 00000000..29bf9a1f
--- /dev/null
+++ b/docs/data-sources/cb_vfpool_list.md
@@ -0,0 +1,87 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vfpool_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vfpool_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_access` (Number) Find by accountAccess
+- `by_id` (Number) Find by ID
+- `description` (String) Find by description
+- `gid` (Number) Find by Grid ID
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `rg_access` (Number) Find by rgAccess
+- `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)
+- `created_time` (Number)
+- `description` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `name` (String)
+- `rg_access` (List of Number)
+- `status` (String)
+- `updated_time` (Number)
+- `vfpool_id` (Number)
+- `vfs` (List of Object) (see [below for nested schema](#nestedobjatt--items--vfs))
+
+
+### Nested Schema for `items.vfs`
+
+Read-Only:
+
+- `node_id` (Number)
+- `vf_list` (List of Object) (see [below for nested schema](#nestedobjatt--items--vfs--vf_list))
+
+
+### Nested Schema for `items.vfs.vf_list`
+
+Read-Only:
+
+- `nic_name` (String)
+- `vfs_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--vfs--vf_list--vfs_info))
+
+
+### Nested Schema for `items.vfs.vf_list.vfs_info`
+
+Read-Only:
+
+- `claimed` (Boolean)
+- `id` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/cb_vins.md b/docs/data-sources/cb_vins.md
new file mode 100644
index 00000000..7b47ec6d
--- /dev/null
+++ b/docs/data-sources/cb_vins.md
@@ -0,0 +1,449 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) vins id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number) account id
+- `account_name` (String) account name
+- `created_by` (String) created by
+- `created_time` (Number) created time
+- `default_gw` (String) default gw
+- `default_qos` (List of Object) default qoa (see [below for nested schema](#nestedatt--default_qos))
+- `deleted_by` (String) deleted by
+- `deleted_time` (Number) deleted time
+- `description` (String) description
+- `gid` (Number) gid
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `lock_status` (String) lock status
+- `manager_id` (Number) manager id
+- `manager_type` (String) manager type
+- `milestones` (Number) milestones
+- `name` (String) name
+- `netmask` (Number) net mask
+- `network` (String) network
+- `pre_reservations_num` (Number) pre reservations num
+- `redundant` (Boolean) redundant
+- `rg_id` (Number) resource group id
+- `rg_name` (String) resource group name
+- `sec_vnf_dev_id` (Number)
+- `status` (String) status
+- `updated_by` (String) updated by
+- `updated_time` (Number) updated time
+- `user_managed` (Boolean) user managed
+- `vnf_dev` (List of Object) vnf dev (see [below for nested schema](#nestedatt--vnf_dev))
+- `vnfs` (List of Object) vnfs (see [below for nested schema](#nestedatt--vnfs))
+- `vxlan_id` (Number) vxlan id
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `default_qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `vnf_dev`
+
+Read-Only:
+
+- `account_id` (Number)
+- `capabilities` (List of String)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config))
+- `config_saved` (Boolean)
+- `custom_precfg` (Boolean)
+- `description` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces))
+- `live_migration_job_id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `vins` (List of Number)
+- `vnc_password` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnf_dev.config`
+
+Read-Only:
+
+- `mgmt` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--mgmt))
+- `resources` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--resources))
+
+
+### Nested Schema for `vnf_dev.config.mgmt`
+
+Read-Only:
+
+- `ip_addr` (String)
+- `password` (String)
+- `ssh_key` (String)
+- `user` (String)
+
+
+
+### Nested Schema for `vnf_dev.config.resources`
+
+Read-Only:
+
+- `cpu` (Number)
+- `node_id` (Number)
+- `ram` (Number)
+- `uuid` (String)
+
+
+
+
+### Nested Schema for `vnf_dev.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `net_type` (String)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+
+
+### Nested Schema for `vnfs`
+
+Read-Only:
+
+- `dhcp` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp))
+- `gw` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw))
+- `nat` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat))
+
+
+### Nested Schema for `vnfs.dhcp`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.dhcp.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `dns` (List of String)
+- `ip_end` (String)
+- `ip_start` (String)
+- `lease` (Number)
+- `net_mask` (Number)
+- `network` (String)
+- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config--reservations))
+
+
+### Nested Schema for `vnfs.dhcp.config.reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices--primary))
+
+
+### Nested Schema for `vnfs.dhcp.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.gw.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `ext_net_id` (Number)
+- `ext_net_ip` (String)
+- `ext_netmask` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config--qos))
+
+
+### Nested Schema for `vnfs.gw.config.qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices--primary))
+
+
+### Nested Schema for `vnfs.gw.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.gw.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.nat`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.nat.config`
+
+Read-Only:
+
+- `net_mask` (Number)
+- `network` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config--rules))
+
+
+### Nested Schema for `vnfs.nat.config.rules`
+
+Read-Only:
+
+- `local_ip` (String)
+- `local_port` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `rule_id` (Number)
+- `vm_id` (Number)
+- `vm_name` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices--primary))
+
+
+### Nested Schema for `vnfs.nat.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
diff --git a/docs/data-sources/cb_vins_audits.md b/docs/data-sources/cb_vins_audits.md
new file mode 100644
index 00000000..5221568f
--- /dev/null
+++ b/docs/data-sources/cb_vins_audits.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `call` (String)
+- `response_time` (Number)
+- `status_code` (Number)
+- `time_stamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/cb_vins_ext_net_list.md b/docs/data-sources/cb_vins_ext_net_list.md
new file mode 100644
index 00000000..5b7cb1ef
--- /dev/null
+++ b/docs/data-sources/cb_vins_ext_net_list.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_ext_net_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_ext_net_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+
+### Optional
+
+- `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:
+
+- `default_gw` (String)
+- `ext_net_id` (Number)
+- `ip` (String)
+- `prefix_len` (Number)
+- `status` (String)
+- `tech_status` (String)
diff --git a/docs/data-sources/cb_vins_ip_list.md b/docs/data-sources/cb_vins_ip_list.md
new file mode 100644
index 00000000..5717585a
--- /dev/null
+++ b/docs/data-sources/cb_vins_ip_list.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_ip_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_ip_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS
+
+### Optional
+
+- `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:
+
+- `client_type` (String)
+- `domain_name` (String)
+- `host_name` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
diff --git a/docs/data-sources/cb_vins_list.md b/docs/data-sources/cb_vins_list.md
new file mode 100644
index 00000000..c9b1b50a
--- /dev/null
+++ b/docs/data-sources/cb_vins_list.md
@@ -0,0 +1,112 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by account id
+- `by_id` (Number) Find by id
+- `ext_ip` (String) Find by ext ip
+- `include_deleted` (Boolean) include deleted computes
+- `name` (String) Name
+- `page` (Number) Page number
+- `rg_id` (Number) Find by rg id
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) sort by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vnfdev_id` (Number) find by VNF Device id
+- `zone_id` (Number) Zone ID
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `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_id` (Number)
+- `account_name` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `default_qos` (List of Object) (see [below for nested schema](#nestedobjatt--items--default_qos))
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `description` (String)
+- `enable_secgroups` (Boolean)
+- `external_ip` (String)
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `netmask` (Number)
+- `network` (String)
+- `pre_reservations_num` (Number)
+- `pri_vnf_dev_id` (Number)
+- `redundant` (Boolean)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `sec_vnf_dev_id` (Number)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+- `vnfs` (List of Object) (see [below for nested schema](#nestedobjatt--items--vnfs))
+- `vxlan_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.default_qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `items.vnfs`
+
+Read-Only:
+
+- `dhcp` (Number)
+- `dns` (Number)
+- `fw` (Number)
+- `gw` (Number)
+- `nat` (Number)
+- `vpn` (Number)
diff --git a/docs/data-sources/cb_vins_list_deleted.md b/docs/data-sources/cb_vins_list_deleted.md
new file mode 100644
index 00000000..8a915845
--- /dev/null
+++ b/docs/data-sources/cb_vins_list_deleted.md
@@ -0,0 +1,106 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `by_id` (Number) Filter by ID
+- `ext_ip` (String) Filter by external IP
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by resgroup ID
+- `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
+
+- `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_id` (Number)
+- `account_name` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `default_qos` (List of Object) (see [below for nested schema](#nestedobjatt--items--default_qos))
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `description` (String)
+- `external_ip` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `netmask` (Number)
+- `network` (String)
+- `pre_reservations_num` (Number)
+- `pri_vnf_dev_id` (Number)
+- `redundant` (Boolean)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `sec_vnf_dev_id` (Number)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+- `vnfs` (List of Object) (see [below for nested schema](#nestedobjatt--items--vnfs))
+- `vxlan_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.default_qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `items.vnfs`
+
+Read-Only:
+
+- `dhcp` (Number)
+- `dns` (Number)
+- `fw` (Number)
+- `gw` (Number)
+- `nat` (Number)
+- `vpn` (Number)
diff --git a/docs/data-sources/cb_vins_nat_rule_list.md b/docs/data-sources/cb_vins_nat_rule_list.md
new file mode 100644
index 00000000..c803517d
--- /dev/null
+++ b/docs/data-sources/cb_vins_nat_rule_list.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_nat_rule_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_nat_rule_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+
+### Optional
+
+- `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:
+
+- `id` (Number)
+- `local_ip` (String)
+- `local_port` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `vm_id` (Number)
+- `vm_name` (String)
diff --git a/docs/data-sources/cb_vins_static_route.md b/docs/data-sources/cb_vins_static_route.md
new file mode 100644
index 00000000..39eed779
--- /dev/null
+++ b/docs/data-sources/cb_vins_static_route.md
@@ -0,0 +1,42 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_static_route Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_static_route (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `route_id` (Number) Unique ID of the static route
+- `vins_id` (Number) Unique ID of the ViNS
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `netmask` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_vins_static_route_list.md b/docs/data-sources/cb_vins_static_route_list.md
new file mode 100644
index 00000000..6af2d6d2
--- /dev/null
+++ b/docs/data-sources/cb_vins_static_route_list.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_static_route_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_static_route_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) ID of VINS
+
+### Optional
+
+- `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:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
diff --git a/docs/data-sources/cb_zone.md b/docs/data-sources/cb_zone.md
new file mode 100644
index 00000000..cc0d3989
--- /dev/null
+++ b/docs/data-sources/cb_zone.md
@@ -0,0 +1,64 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_zone Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_zone (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `zone_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_ids` (List of Number)
+- `app_id` (String)
+- `auto_start` (Boolean)
+- `broadcast_addr` (String)
+- `bservice_ids` (List of Number)
+- `compute_ids` (List of Number)
+- `created_time` (Number)
+- `decort_url` (String)
+- `deletable` (Boolean)
+- `description` (String)
+- `domain` (String)
+- `drs` (Boolean)
+- `drs_name` (String)
+- `drs_uid` (String)
+- `extnet_ids` (List of Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `k8s_ids` (List of Number)
+- `lb_ids` (List of Number)
+- `name` (String)
+- `node_ids` (List of Number)
+- `ping_addr` (String)
+- `ssl_skip_verify` (Boolean)
+- `sso_type` (String)
+- `sso_url` (String)
+- `status` (String)
+- `updated_time` (Number)
+- `vins_ids` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/cb_zone_list.md b/docs/data-sources/cb_zone_list.md
new file mode 100644
index 00000000..7fab8233
--- /dev/null
+++ b/docs/data-sources/cb_zone_list.md
@@ -0,0 +1,73 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_zone_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_zone_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Find by ID
+- `deletable` (Boolean) Find by deletable
+- `description` (String) Find by description
+- `gid` (Number) Find by Grid ID
+- `name` (String) Find by name
+- `node_id` (Number) Find by nodeId
+- `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:
+
+- `app_id` (String)
+- `auto_start` (Boolean)
+- `broadcast_addr` (String)
+- `created_time` (Number)
+- `decort_url` (String)
+- `deletable` (Boolean)
+- `description` (String)
+- `domain` (String)
+- `drs` (Boolean)
+- `drs_name` (String)
+- `drs_uid` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `name` (String)
+- `node_ids` (List of Number)
+- `ping_addr` (String)
+- `ssl_skip_verify` (Boolean)
+- `sso_type` (String)
+- `sso_url` (String)
+- `status` (String)
+- `updated_time` (Number)
+- `zone_id` (Number)
diff --git a/docs/data-sources/disk.md b/docs/data-sources/disk.md
new file mode 100644
index 00000000..f280ec60
--- /dev/null
+++ b/docs/data-sources/disk.md
@@ -0,0 +1,140 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) The unique ID of the subscriber-owner of the disk
+
+### Optional
+
+- `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)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `cache` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `created_by` (String)
+- `created_time` (Number) Created time
+- `deleted_by` (String)
+- `deleted_time` (Number) Deleted time
+- `desc` (String) Description of disk
+- `destruction_time` (Number) Time of final deletion
+- `devicename` (String) Name of the device
+- `disk_name` (String) Name of disk
+- `gid` (Number) ID of the grid (platform)
+- `id` (String) The ID of this resource.
+- `image_id` (Number) Image ID
+- `images` (List of Number) IDs of images using the disk
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedatt--iotune))
+- `machine_id` (Number)
+- `machine_name` (String)
+- `milestones` (Number) Milestones
+- `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
+- `pool` (String) Pool for disk location
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_time` (Number) Time of the last deletion attempt
+- `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_id` (Number) Storage endpoint provider ID to create disk
+- `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_available` (Number)
+- `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
+- `storage_policy_id` (Number) Storage policy ID
+- `tech_status` (String) Technical status of the disk
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number) Virtual Machine ID (Deprecated)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (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/data-sources/disk_list.md b/docs/data-sources/disk_list.md
new file mode 100644
index 00000000..aa1acbf0
--- /dev/null
+++ b/docs/data-sources/disk_list.md
@@ -0,0 +1,160 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account the disks belong to
+- `account_name` (String) Find by account name
+- `by_id` (Number) Find by ID
+- `compute_id` (Number) Find by compute ID
+- `disk_max_size` (Number) Find by max disk size
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `pool_name` (String) find by pool name
+- `rg_id` (Number) Find by rg ID
+- `sep_id` (Number) find by sep ID
+- `shared` (Boolean) Find by shared field
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `storage_policy_id` (Number) storage policy ID
+- `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_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `cache` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedobjatt--items--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_name` (String)
+- `gid` (Number)
+- `image_id` (Number)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--items--iotune))
+- `machine_id` (Number)
+- `machine_name` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_time` (Number)
+- `replication` (List of Object) (see [below for nested schema](#nestedobjatt--items--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `sep_type` (String)
+- `shareable` (Boolean)
+- `size_available` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--items--snapshots))
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number)
+
+
+### Nested Schema for `items.computes`
+
+Read-Only:
+
+- `compute_id` (String)
+- `compute_name` (String)
+
+
+
+### Nested Schema for `items.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 `items.replication`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `pool_id` (String)
+- `role` (String)
+- `self_volume_id` (String)
+- `storage_id` (String)
+- `volume_id` (String)
+
+
+
+### Nested Schema for `items.snapshots`
+
+Read-Only:
+
+- `guid` (String)
+- `label` (String)
+- `res_id` (String)
+- `snap_set_guid` (String)
+- `snap_set_time` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/disk_list_deleted.md b/docs/data-sources/disk_list_deleted.md
new file mode 100644
index 00000000..afdaec8c
--- /dev/null
+++ b/docs/data-sources/disk_list_deleted.md
@@ -0,0 +1,154 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account the disks belong to
+- `account_name` (String) Filter by account name
+- `by_id` (Number) Filter by disk ID
+- `disk_max_size` (Number) Filter by max disk size
+- `name` (String) Filter by disk name
+- `page` (Number) Page number
+- `shared` (Boolean) Find shared disks
+- `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))
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `cache` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedobjatt--items--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_name` (String)
+- `gid` (Number)
+- `image_id` (Number)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--items--iotune))
+- `machine_id` (Number)
+- `machine_name` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_time` (Number)
+- `replication` (List of Object) (see [below for nested schema](#nestedobjatt--items--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `sep_type` (String)
+- `shareable` (Boolean)
+- `size_available` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--items--snapshots))
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number)
+
+
+### Nested Schema for `items.computes`
+
+Read-Only:
+
+- `compute_id` (String)
+- `compute_name` (String)
+
+
+
+### Nested Schema for `items.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 `items.replication`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `pool_id` (String)
+- `role` (String)
+- `self_volume_id` (String)
+- `storage_id` (String)
+- `volume_id` (String)
+
+
+
+### Nested Schema for `items.snapshots`
+
+Read-Only:
+
+- `guid` (String)
+- `label` (String)
+- `res_id` (String)
+- `snap_set_guid` (String)
+- `snap_set_time` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/disk_list_unattached.md b/docs/data-sources/disk_list_unattached.md
new file mode 100644
index 00000000..c21236b1
--- /dev/null
+++ b/docs/data-sources/disk_list_unattached.md
@@ -0,0 +1,131 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk_list_unattached Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk_list_unattached (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) ID of the account the disks belong to
+- `account_name` (String) Find by account name
+- `by_id` (Number) Find by ID
+- `disk_max_size` (Number) Find by max disk size
+- `page` (Number) Page number
+- `pool_name` (String) find by pool name
+- `sep_id` (Number) find by sep ID
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `storage_policy_id` (Number) storage policy ID
+- `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:
+
+- `_meta` (List of String)
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `boot_partition` (Number)
+- `cache` (String)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `destruction_time` (Number)
+- `disk_id` (Number)
+- `disk_name` (String)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `image_id` (Number)
+- `images` (List of Number)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--items--iotune))
+- `iqn` (String)
+- `login` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--items--snapshots))
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `vmid` (Number)
+
+
+### Nested Schema for `items.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 `items.snapshots`
+
+Read-Only:
+
+- `guid` (String)
+- `label` (String)
+- `res_id` (String)
+- `snap_set_guid` (String)
+- `snap_set_time` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/disk_replication.md b/docs/data-sources/disk_replication.md
new file mode 100644
index 00000000..2d83f8eb
--- /dev/null
+++ b/docs/data-sources/disk_replication.md
@@ -0,0 +1,127 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk_replication Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk_replication (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) Id of primary disk
+- `replica_disk_id` (Number) Id of secondary disk
+
+### Optional
+
+- `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
+- `disk_name` (String) Name of disk
+- `gid` (Number) ID of the grid (platform)
+- `id` (String) The ID of this resource.
+- `image_id` (Number) Image ID
+- `images` (List of Number) 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
+- `pool` (String) Pool for disk location
+- `present_to` (Map of Number)
+- `purge_time` (Number) Time of the last deletion attempt
+- `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_id` (Number) Storage endpoint provider ID to create disk
+- `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
+- `vmid` (Number) Virtual Machine ID (Deprecated)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (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/data-sources/disk_snapshot.md b/docs/data-sources/disk_snapshot.md
new file mode 100644
index 00000000..92467bfd
--- /dev/null
+++ b/docs/data-sources/disk_snapshot.md
@@ -0,0 +1,42 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk_snapshot Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk_snapshot (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) The unique ID of the subscriber-owner of the disk
+- `label` (String) Name of the snapshot
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `guid` (String) ID of the snapshot
+- `id` (String) The ID of this resource.
+- `res_id` (String) Reference to the snapshot
+- `snap_set_guid` (String) The set snapshot ID
+- `snap_set_time` (Number) The set time of the snapshot
+- `timestamp` (Number) Snapshot time
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/disk_snapshot_list.md b/docs/data-sources/disk_snapshot_list.md
new file mode 100644
index 00000000..1f1e43ec
--- /dev/null
+++ b/docs/data-sources/disk_snapshot_list.md
@@ -0,0 +1,50 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk_snapshot_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk_snapshot_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) The unique ID of the subscriber-owner of the disk
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `guid` (String)
+- `label` (String)
+- `res_id` (String)
+- `snap_set_guid` (String)
+- `snap_set_time` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/dpdknet.md b/docs/data-sources/dpdknet.md
new file mode 100644
index 00000000..6e7655f5
--- /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 00000000..c71c1b64
--- /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/extnet.md b/docs/data-sources/extnet.md
new file mode 100644
index 00000000..11d0d7bf
--- /dev/null
+++ b/docs/data-sources/extnet.md
@@ -0,0 +1,140 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_extnet Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_extnet (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `net_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `check_ips` (List of String)
+- `ckey` (String)
+- `default` (Boolean)
+- `default_qos` (List of Object) (see [below for nested schema](#nestedatt--default_qos))
+- `desc` (String)
+- `dns` (List of String)
+- `excluded` (List of Object) (see [below for nested schema](#nestedatt--excluded))
+- `free_ips` (Number)
+- `gateway` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `ipcidr` (String)
+- `meta` (List of String) meta
+- `milestones` (Number)
+- `mtu` (Number)
+- `net_name` (String)
+- `network` (String)
+- `network_ids` (List of Object) (see [below for nested schema](#nestedatt--network_ids))
+- `ntp` (List of String)
+- `pre_reservations` (List of Object) (see [below for nested schema](#nestedatt--pre_reservations))
+- `pre_reservations_num` (Number)
+- `prefix` (Number)
+- `pri_vnf_dev_id` (Number)
+- `redundant` (Boolean)
+- `reservations` (List of Object) (see [below for nested schema](#nestedatt--reservations))
+- `sec_vnfdev_id` (Number)
+- `shared_with` (List of Number)
+- `status` (String)
+- `vlan_id` (Number)
+- `vnfs` (List of Object) (see [below for nested schema](#nestedatt--vnfs))
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `default_qos`
+
+Read-Only:
+
+- `e_burst` (Number)
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `excluded`
+
+Read-Only:
+
+- `client_type` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `network_ids`
+
+Read-Only:
+
+- `primary` (Number)
+- `secondary` (Number)
+
+
+
+### Nested Schema for `pre_reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `desc` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `desc` (String)
+- `domainname` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `vnfs`
+
+Read-Only:
+
+- `dhcp` (Number)
diff --git a/docs/data-sources/extnet_computes_list.md b/docs/data-sources/extnet_computes_list.md
new file mode 100644
index 00000000..624ed5c6
--- /dev/null
+++ b/docs/data-sources/extnet_computes_list.md
@@ -0,0 +1,67 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_extnet_computes_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_extnet_computes_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) filter by account ID
+
+### Optional
+
+- `compute_id` (Number) Filter by compute ID
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `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))
+
+### 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_id` (Number)
+- `account_name` (String)
+- `extnets` (List of Object) (see [below for nested schema](#nestedobjatt--items--extnets))
+- `id` (Number)
+- `name` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+
+
+### Nested Schema for `items.extnets`
+
+Read-Only:
+
+- `ipaddr` (String)
+- `ipcidr` (String)
+- `name` (String)
+- `net_id` (Number)
diff --git a/docs/data-sources/extnet_default.md b/docs/data-sources/extnet_default.md
new file mode 100644
index 00000000..22eae05b
--- /dev/null
+++ b/docs/data-sources/extnet_default.md
@@ -0,0 +1,33 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_extnet_default Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_extnet_default (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `net_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/extnet_list.md b/docs/data-sources/extnet_list.md
new file mode 100644
index 00000000..bcdf894e
--- /dev/null
+++ b/docs/data-sources/extnet_list.md
@@ -0,0 +1,57 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_extnet_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_extnet_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by account ID
+- `by_id` (Number) Find by ID
+- `name` (String) Find by name
+- `network` (String)
+- `ovs_bridge` (String) Name of the openVswitch bridge
+- `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))
+- `vlan_id` (Number) Find by VLAN ID
+- `vnfdev_id` (Number) Find by VnfDEV ID
+- `zone_id` (Number) Zone ID
+
+### 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:
+
+- `ipcidr` (String)
+- `name` (String)
+- `net_id` (Number)
+- `status` (String)
diff --git a/docs/data-sources/extnet_reserved_ip_list.md b/docs/data-sources/extnet_reserved_ip_list.md
new file mode 100644
index 00000000..4a798179
--- /dev/null
+++ b/docs/data-sources/extnet_reserved_ip_list.md
@@ -0,0 +1,61 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_extnet_reserved_ip_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_extnet_reserved_ip_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+
+### Optional
+
+- `extnet_id` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `extnet_id` (Number)
+- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--items--reservations))
+
+
+### Nested Schema for `items.reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
diff --git a/docs/data-sources/flipgroup.md b/docs/data-sources/flipgroup.md
new file mode 100644
index 00000000..f007c9b8
--- /dev/null
+++ b/docs/data-sources/flipgroup.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_flipgroup Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_flipgroup (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `flipgroup_id` (Number) Flipgroupd ID
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `client_ids` (List of Number)
+- `client_type` (String)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `ip` (String)
+- `milestones` (Number)
+- `name` (String)
+- `net_id` (Number)
+- `net_type` (String)
+- `network` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/flipgroup_list.md b/docs/data-sources/flipgroup_list.md
new file mode 100644
index 00000000..36599a54
--- /dev/null
+++ b/docs/data-sources/flipgroup_list.md
@@ -0,0 +1,73 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_flipgroup_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_flipgroup_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `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
+- `conn_id` (Number) Conn id
+- `extnet_id` (Number) Filter by ExtNetID
+- `name` (String) Filter by Name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) Filter by ViNS ID
+- `vins_name` (String) Filter by ViNS name
+
+### 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_id` (Number)
+- `ckey` (String)
+- `client_ids` (List of Number)
+- `client_type` (String)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `default_gw` (String)
+- `desc` (String)
+- `flipgroup_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `ip` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `name` (String)
+- `net_id` (Number)
+- `net_mask` (Number)
+- `net_type` (String)
+- `status` (String)
diff --git a/docs/data-sources/image.md b/docs/data-sources/image.md
new file mode 100644
index 00000000..cfa72fea
--- /dev/null
+++ b/docs/data-sources/image.md
@@ -0,0 +1,88 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_image Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_image (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `image_id` (Number)
+
+### Optional
+
+- `show_all` (Boolean)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `acl` (String)
+- `architecture` (String)
+- `boot_type` (String)
+- `bootable` (Boolean)
+- `cd_presented_to` (String)
+- `compute_ci_id` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `enabled` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `hot_resize` (Boolean)
+- `id` (String) The ID of this resource.
+- `image_name` (String)
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `network_interface_naming` (String)
+- `password` (String)
+- `pool_name` (String)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `res_id` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number)
+- `shared_with` (List of Number)
+- `size` (Number)
+- `snapshot_id` (String)
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `type` (String)
+- `unc_path` (String)
+- `username` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/image_list.md b/docs/data-sources/image_list.md
new file mode 100644
index 00000000..1b41ae20
--- /dev/null
+++ b/docs/data-sources/image_list.md
@@ -0,0 +1,79 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_image_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_image_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `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
+- `page` (Number) page number
+- `pool` (String) Filter by pool
+- `public` (Boolean) Find public/private images
+- `sep_id` (Number) Filter by Storage Endpoint ID
+- `sep_name` (String) Filter by SEP name
+- `size` (Number) page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `storage_policy_id` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `type_image` (String) Filter by image type
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) image list (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `architecture` (String)
+- `boot_type` (String)
+- `bootable` (Boolean)
+- `cdrom` (Boolean)
+- `desc` (String)
+- `drivers` (List of String)
+- `hot_resize` (Boolean)
+- `image_id` (Number)
+- `image_name` (String)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `network_interface_naming` (String)
+- `pool_name` (String)
+- `sep_id` (Number)
+- `size` (Number)
+- `status` (String)
+- `storage_policy_id` (Number)
+- `type` (String)
+- `username` (String)
+- `virtual` (Boolean)
diff --git a/docs/data-sources/k8ci_list.md b/docs/data-sources/k8ci_list.md
new file mode 100644
index 00000000..fd6fd8d1
--- /dev/null
+++ b/docs/data-sources/k8ci_list.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8ci_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8ci_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Filter by ID
+- `include_disabled` (Boolean) Include deleted k8cis in result
+- `master_driver` (String) Filter by master driver
+- `name` (String) Filter by name
+- `network_plugin` (String) Filter by network plugin
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `worker_driver` (String) Filter by worker driver
+
+### 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:
+
+- `created_time` (Number)
+- `desc` (String)
+- `k8ci_id` (Number)
+- `lb_image_id` (Number)
+- `name` (String)
+- `network_plugins` (List of String)
+- `status` (String)
+- `version` (String)
diff --git a/docs/data-sources/k8s.md b/docs/data-sources/k8s.md
new file mode 100644
index 00000000..b4531170
--- /dev/null
+++ b/docs/data-sources/k8s.md
@@ -0,0 +1,188 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `bservice_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `extnet_id` (Number) ID of the external network to connect workers to. If omitted network will be chosen by the platfom.
+- `id` (String) The ID of this resource.
+- `k8s_ci_name` (String)
+- `k8sci_id` (Number)
+- `kubeconfig` (String) Kubeconfig for cluster access.
+- `lb_id` (Number)
+- `lb_ip` (String) IP address of default load balancer.
+- `masters` (List of Object) (see [below for nested schema](#nestedatt--masters))
+- `name` (String)
+- `network_plugin` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `workers` (List of Object) (see [below for nested schema](#nestedatt--workers))
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--account_acl))
+- `k8s_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--k8s_acl))
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--rg_acl))
+
+
+### Nested Schema for `acl.account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.k8s_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+
+### Nested Schema for `masters`
+
+Read-Only:
+
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--masters--detailed_info))
+- `disk` (Number)
+- `master_id` (Number)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+
+
+### Nested Schema for `masters.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--masters--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `masters.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
+
+
+
+
+
+### Nested Schema for `workers`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--workers--detailed_info))
+- `disk` (Number)
+- `guid` (String)
+- `id` (Number)
+- `labels` (List of String)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+- `taints` (List of String)
+
+
+### Nested Schema for `workers.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--workers--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `workers.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/k8s_computes.md b/docs/data-sources/k8s_computes.md
new file mode 100644
index 00000000..7ef0849e
--- /dev/null
+++ b/docs/data-sources/k8s_computes.md
@@ -0,0 +1,62 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_computes Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_computes (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `masters` (List of Object) (see [below for nested schema](#nestedatt--masters))
+- `workers` (List of Object) (see [below for nested schema](#nestedatt--workers))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `masters`
+
+Read-Only:
+
+- `group_name` (String)
+- `id` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+
+### Nested Schema for `workers`
+
+Read-Only:
+
+- `group_name` (String)
+- `id` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
diff --git a/docs/data-sources/k8s_list.md b/docs/data-sources/k8s_list.md
new file mode 100644
index 00000000..73ad1290
--- /dev/null
+++ b/docs/data-sources/k8s_list.md
@@ -0,0 +1,131 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `bservice_id` (Number) Filter by BService ID
+- `by_id` (Number) Filter by ID
+- `includedeleted` (Boolean)
+- `ip_address` (String) Filter by IP address
+- `lb_id` (Number) Filter by LB ID
+- `name` (String) Filter by name
+- `page` (Number)
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `tech_status` (String) Filter by tech. status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of String)
+- `bservice_id` (Number)
+- `ci_id` (Number)
+- `config` (List of String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `extnet_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `k8s_id` (Number)
+- `k8s_name` (String)
+- `lb_id` (Number)
+- `milestones` (Number)
+- `network_plugin` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_account` (List of Object) (see [below for nested schema](#nestedobjatt--items--service_account))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `workers_groups` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups))
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.service_account`
+
+Read-Only:
+
+- `guid` (String)
+- `password` (String)
+- `username` (String)
+
+
+
+### Nested Schema for `items.workers_groups`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups--detailed_info))
+- `detailed_info_id` (Number)
+- `disk` (Number)
+- `guid` (String)
+- `labels` (List of String)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+- `taints` (List of String)
+
+
+### Nested Schema for `items.workers_groups.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `items.workers_groups.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/k8s_list_deleted.md b/docs/data-sources/k8s_list_deleted.md
new file mode 100644
index 00000000..d4ac8ab2
--- /dev/null
+++ b/docs/data-sources/k8s_list_deleted.md
@@ -0,0 +1,129 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `bservice_id` (Number) Filter by BService ID
+- `by_id` (Number) Filter by ID
+- `ip_address` (String) Filter by IP address
+- `lb_id` (Number) Filter by LB ID
+- `name` (String) Filter by name
+- `page` (Number)
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Filter by tech. status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of String)
+- `bservice_id` (Number)
+- `ci_id` (Number)
+- `config` (List of String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `extnet_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `k8s_id` (Number)
+- `k8s_name` (String)
+- `lb_id` (Number)
+- `milestones` (Number)
+- `network_plugin` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `service_account` (List of Object) (see [below for nested schema](#nestedobjatt--items--service_account))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `workers_groups` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups))
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.service_account`
+
+Read-Only:
+
+- `guid` (String)
+- `password` (String)
+- `username` (String)
+
+
+
+### Nested Schema for `items.workers_groups`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups--detailed_info))
+- `detailed_info_id` (Number)
+- `disk` (Number)
+- `guid` (String)
+- `labels` (List of String)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+- `taints` (List of String)
+
+
+### Nested Schema for `items.workers_groups.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--workers_groups--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `items.workers_groups.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/k8s_wg.md b/docs/data-sources/k8s_wg.md
new file mode 100644
index 00000000..1bcf6e45
--- /dev/null
+++ b/docs/data-sources/k8s_wg.md
@@ -0,0 +1,69 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_wg Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_wg (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number) ID of k8s instance.
+- `wg_id` (Number) ID of k8s worker Group.
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `annotations` (List of String)
+- `cpu` (Number) Worker node CPU count.
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--detailed_info))
+- `disk` (Number) Worker node boot disk size. If unspecified or 0, size is defined by OS image size.
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `labels` (List of String)
+- `name` (String) Name of the worker group.
+- `num` (Number) Number of worker nodes to create.
+- `ram` (Number) Worker node RAM in MB.
+- `taints` (List of String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/k8s_wg_cloud_init.md b/docs/data-sources/k8s_wg_cloud_init.md
new file mode 100644
index 00000000..7062753b
--- /dev/null
+++ b/docs/data-sources/k8s_wg_cloud_init.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_wg_cloud_init Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_wg_cloud_init (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number) Kubernetes cluster ID
+- `wg_id` (Number) ID of the workers compute group
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `cloud_init` (String) Worker group Cloud init
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/k8s_wg_list.md b/docs/data-sources/k8s_wg_list.md
new file mode 100644
index 00000000..ebe5012f
--- /dev/null
+++ b/docs/data-sources/k8s_wg_list.md
@@ -0,0 +1,76 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_wg_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_wg_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `annotations` (List of String)
+- `cpu` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--detailed_info))
+- `disk` (Number)
+- `guid` (String)
+- `labels` (List of String)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+- `taints` (List of String)
+- `wg_id` (Number)
+
+
+### Nested Schema for `items.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `items.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/data-sources/kvmvm.md b/docs/data-sources/kvmvm.md
new file mode 100644
index 00000000..9088d505
--- /dev/null
+++ b/docs/data-sources/kvmvm.md
@@ -0,0 +1,424 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--affinity_rules))
+- `affinity_weight` (Number)
+- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedatt--anti_affinity_rules))
+- `arch` (String)
+- `auto_start_w_node` (Boolean)
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `boot_type` (String)
+- `bootdisk_size` (Number)
+- `cd_image_id` (Number)
+- `chipset` (String)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `computeci_id` (Number)
+- `cpu_pin` (Boolean)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `custom_fields` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `devices` (String)
+- `disks` (List of Object) (see [below for nested schema](#nestedatt--disks))
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `hot_resize` (Boolean)
+- `hp_backed` (Boolean)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
+- `live_migration_job_id` (Number)
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
+- `loader_type` (String)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `natable_vins_id` (Number)
+- `natable_vins_ip` (String)
+- `natable_vins_name` (String)
+- `natable_vins_network` (String)
+- `natable_vins_network_name` (String)
+- `need_reboot` (Boolean)
+- `network_interface_naming` (String)
+- `numa_affinity` (String)
+- `numa_node_id` (Number)
+- `os_users` (List of Object) (see [below for nested schema](#nestedatt--os_users))
+- `os_version` (String)
+- `pci_devices` (List of Number)
+- `pinned` (Boolean)
+- `preferred_cpu` (List of Number)
+- `qemu_guest` (List of Object) (see [below for nested schema](#nestedatt--qemu_guest))
+- `ram` (Number)
+- `read_only` (Boolean) Shows if compute is in read-only mode.
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedatt--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tags` (Map of String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `userdata` (String)
+- `vgpus` (List of Object) List of virtual GPUs (see [below for nested schema](#nestedatt--vgpus))
+- `vnc_password` (String)
+- `weight` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--account_acl))
+- `compute_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--compute_acl))
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--rg_acl))
+
+
+### Nested Schema for `acl.account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.compute_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+
+### Nested Schema for `affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `anti_affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `disks`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `acl` (String)
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `boot_partition` (Number)
+- `bus_number` (Number)
+- `cache` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `description` (String)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `image_id` (Number)
+- `image_name` (String)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--disks--iotune))
+- `iqn` (String)
+- `login` (String)
+- `milestones` (Number)
+- `name` (String)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `replication` (List of Object) (see [below for nested schema](#nestedobjatt--disks--replication))
+- `res_id` (String)
+- `role` (String)
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `size_available` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedobjatt--disks--snapshots))
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `updated_time` (Number)
+
+
+### Nested Schema for `disks.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 `disks.replication`
+
+Read-Only:
+
+- `disk_id` (Number)
+- `pool_id` (String)
+- `role` (String)
+- `self_volume_id` (String)
+- `storage_id` (String)
+- `volume_id` (String)
+
+
+
+### Nested Schema for `disks.snapshots`
+
+Read-Only:
+
+- `guid` (String)
+- `label` (String)
+- `reference_id` (Number)
+- `res_id` (String)
+- `snap_set_guid` (String)
+- `snap_set_time` (Number)
+- `timestamp` (Number)
+
+
+
+
+### Nested Schema for `interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
+
+### Nested Schema for `os_users`
+
+Read-Only:
+
+- `guid` (String)
+- `login` (String)
+- `password` (String)
+- `public_key` (String)
+
+
+
+### Nested Schema for `qemu_guest`
+
+Read-Only:
+
+- `enabled` (Boolean)
+- `enabled_agent_features` (List of String)
+- `guid` (String)
+- `last_update` (Number)
+- `user` (String)
+
+
+
+### Nested Schema for `snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `vgpus`
+
+Read-Only:
+
+- `account_id` (Number)
+- `bus_number` (Number)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `last_claimed_by` (Number)
+- `last_update_time` (Number)
+- `mode` (String)
+- `pci_slot` (Number)
+- `pgpuid` (Number)
+- `profile_id` (Number)
+- `ram` (Number)
+- `reference_id` (String)
+- `rg_id` (Number)
+- `status` (String)
+- `type` (String)
+- `vmid` (Number)
diff --git a/docs/data-sources/kvmvm_audits.md b/docs/data-sources/kvmvm_audits.md
new file mode 100644
index 00000000..12f77bf7
--- /dev/null
+++ b/docs/data-sources/kvmvm_audits.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `call` (String)
+- `max_status_code` (Number)
+- `min_status_code` (Number)
+- `page` (Number)
+- `size` (Number)
+- `sort_by` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `timestamp_at` (Number)
+- `timestamp_to` (Number)
+- `user` (String)
+
+### 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:
+
+- `call` (String)
+- `responsetime` (Number)
+- `statuscode` (Number)
+- `timestamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/kvmvm_get_audits.md b/docs/data-sources/kvmvm_get_audits.md
new file mode 100644
index 00000000..3957959a
--- /dev/null
+++ b/docs/data-sources/kvmvm_get_audits.md
@@ -0,0 +1,46 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_get_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_get_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `epoch` (Number)
+- `message` (String)
diff --git a/docs/data-sources/kvmvm_get_console_url.md b/docs/data-sources/kvmvm_get_console_url.md
new file mode 100644
index 00000000..696dd7bb
--- /dev/null
+++ b/docs/data-sources/kvmvm_get_console_url.md
@@ -0,0 +1,37 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_get_console_url Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_get_console_url (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `console_url` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/kvmvm_get_log.md b/docs/data-sources/kvmvm_get_log.md
new file mode 100644
index 00000000..0b5f4ff5
--- /dev/null
+++ b/docs/data-sources/kvmvm_get_log.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_get_log Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_get_log (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+- `path` (String)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `log` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/kvmvm_list.md b/docs/data-sources/kvmvm_list.md
new file mode 100644
index 00000000..c6c5589d
--- /dev/null
+++ b/docs/data-sources/kvmvm_list.md
@@ -0,0 +1,269 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by AccountID
+- `by_id` (Number) Find by ID
+- `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
+- `includedeleted` (Boolean)
+- `ip_address` (String) Find by IP address
+- `name` (String) Find by name
+- `page` (Number)
+- `rg_id` (Number) Find by RGID
+- `rg_name` (String) Find by resgroup name
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Find by status
+- `tech_status` (String) Find by tech status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--affinity_rules))
+- `affinity_weight` (Number)
+- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
+- `arch` (String)
+- `auto_start_w_node` (Boolean)
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `boot_type` (String)
+- `bootdisk_size` (Number)
+- `cd_image_id` (Number)
+- `chipset` (String)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `compute_id` (Number)
+- `computeci_id` (Number)
+- `cpu_pin` (Boolean)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `custom_fields` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `devices` (String)
+- `disks` (List of Object) (see [below for nested schema](#nestedobjatt--items--disks))
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `hot_resize` (Boolean)
+- `hp_backed` (Boolean)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces))
+- `live_migration_job_id` (Number)
+- `loader_type` (String)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `need_reboot` (Boolean)
+- `network_interface_naming` (String)
+- `numa_affinity` (String)
+- `numa_node_id` (Number)
+- `os_version` (String)
+- `pinned` (Boolean)
+- `preferred_cpu` (List of Number)
+- `qemu_guest` (List of Object) (see [below for nested schema](#nestedobjatt--items--qemu_guest))
+- `ram` (Number)
+- `read_only` (Boolean)
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedobjatt--items--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tags` (List of Object) (see [below for nested schema](#nestedobjatt--items--tags))
+- `tech_status` (String)
+- `total_disk_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vgpus` (List of Number)
+- `vins_connected` (Number)
+- `weight` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.anti_affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.disks`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `disk_id` (Number)
+- `pci_slot` (Number)
+- `sep_id` (Number)
+
+
+
+### Nested Schema for `items.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `items.qemu_guest`
+
+Read-Only:
+
+- `enabled` (Boolean)
+- `enabled_agent_features` (List of String)
+- `guid` (String)
+- `last_update` (Number)
+- `user` (String)
+
+
+
+### Nested Schema for `items.snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `items.tags`
+
+Read-Only:
+
+- `key` (String)
+- `val` (String)
diff --git a/docs/data-sources/kvmvm_list_deleted.md b/docs/data-sources/kvmvm_list_deleted.md
new file mode 100644
index 00000000..dade17cf
--- /dev/null
+++ b/docs/data-sources/kvmvm_list_deleted.md
@@ -0,0 +1,266 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by AccountID
+- `by_id` (Number) Find by ID
+- `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
+- `ip_address` (String) Find by IP address
+- `name` (String) Find by name
+- `page` (Number)
+- `rg_id` (Number) Find by RGID
+- `rg_name` (String) Find by resgroup name
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Find by tech 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_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--affinity_rules))
+- `affinity_weight` (Number)
+- `anti_affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--anti_affinity_rules))
+- `arch` (String)
+- `auto_start_w_node` (Boolean)
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `boot_type` (String)
+- `bootdisk_size` (Number)
+- `cd_image_id` (Number)
+- `chipset` (String)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `compute_id` (Number)
+- `computeci_id` (Number)
+- `cpu_pin` (Boolean)
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `custom_fields` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `devices` (String)
+- `disks` (List of Object) (see [below for nested schema](#nestedobjatt--items--disks))
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `hot_resize` (Boolean)
+- `hp_backed` (Boolean)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces))
+- `live_migration_job_id` (Number)
+- `loader_type` (String)
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `need_reboot` (Boolean)
+- `network_interface_naming` (String)
+- `numa_affinity` (String)
+- `numa_node_id` (Number)
+- `os_version` (String)
+- `pinned` (Boolean)
+- `preferred_cpu` (List of Number)
+- `qemu_guest` (List of Object) (see [below for nested schema](#nestedobjatt--items--qemu_guest))
+- `ram` (Number)
+- `read_only` (Boolean)
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedobjatt--items--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tags` (List of Object) (see [below for nested schema](#nestedobjatt--items--tags))
+- `tech_status` (String)
+- `total_disk_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vgpus` (List of Number)
+- `vins_connected` (Number)
+- `weight` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.anti_affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.disks`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `disk_id` (Number)
+- `pci_slot` (Number)
+- `sep_id` (Number)
+
+
+
+### Nested Schema for `items.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--items--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `items.qemu_guest`
+
+Read-Only:
+
+- `enabled` (Boolean)
+- `enabled_agent_features` (List of String)
+- `guid` (String)
+- `last_update` (Number)
+- `user` (String)
+
+
+
+### Nested Schema for `items.snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `items.tags`
+
+Read-Only:
+
+- `key` (String)
+- `val` (String)
diff --git a/docs/data-sources/kvmvm_pci_device_list.md b/docs/data-sources/kvmvm_pci_device_list.md
new file mode 100644
index 00000000..7e5bd7d4
--- /dev/null
+++ b/docs/data-sources/kvmvm_pci_device_list.md
@@ -0,0 +1,62 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_pci_device_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_pci_device_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `device_id` (Number) Find by device id
+- `page` (Number) Page number
+- `rg_id` (Number) Find by RG id
+- `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))
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+- `name` (String) Find by name
+- `status` (String) Find by status
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `description` (String)
+- `device_id` (Number)
+- `guid` (Number)
+- `hwpath` (String)
+- `name` (String)
+- `node_id` (Number)
+- `rg_id` (Number)
+- `status` (String)
+- `system_name` (String)
diff --git a/docs/data-sources/kvmvm_pfw_list.md b/docs/data-sources/kvmvm_pfw_list.md
new file mode 100644
index 00000000..5bcbd4d7
--- /dev/null
+++ b/docs/data-sources/kvmvm_pfw_list.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_pfw_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_pfw_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `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:
+
+- `local_ip` (String)
+- `local_port` (Number)
+- `pfw_id` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/kvmvm_snapshot_usage.md b/docs/data-sources/kvmvm_snapshot_usage.md
new file mode 100644
index 00000000..eb4fc4a5
--- /dev/null
+++ b/docs/data-sources/kvmvm_snapshot_usage.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_snapshot_usage Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_snapshot_usage (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `label` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `count` (Number)
+- `label` (String)
+- `stored` (Number)
+- `timestamp` (Number)
diff --git a/docs/data-sources/kvmvm_user_list.md b/docs/data-sources/kvmvm_user_list.md
new file mode 100644
index 00000000..a1eedb57
--- /dev/null
+++ b/docs/data-sources/kvmvm_user_list.md
@@ -0,0 +1,78 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_user_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_user_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedatt--account_acl))
+- `compute_acl` (List of Object) (see [below for nested schema](#nestedatt--compute_acl))
+- `id` (String) The ID of this resource.
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedatt--rg_acl))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `compute_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
diff --git a/docs/data-sources/kvmvm_vgpu_list.md b/docs/data-sources/kvmvm_vgpu_list.md
new file mode 100644
index 00000000..b74996ca
--- /dev/null
+++ b/docs/data-sources/kvmvm_vgpu_list.md
@@ -0,0 +1,70 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm_vgpu_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm_vgpu_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number)
+
+### Optional
+
+- `gpu_id` (Number) Find by GPU id
+- `includedeleted` (Boolean) Include deleted computes. If using field 'status', then includedeleted will be ignored
+- `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))
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+- `status` (String) Find by status
+- `type` (String) Find by type
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `account_id` (Number)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `last_claimed_by` (Number)
+- `last_update_time` (Number)
+- `mode` (String)
+- `pci_slot` (Number)
+- `pgpuid` (Number)
+- `profile_id` (Number)
+- `ram` (Number)
+- `reference_id` (String)
+- `rg_id` (Number)
+- `status` (String)
+- `type` (String)
+- `vgpu_id` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/lb.md b/docs/data-sources/lb.md
new file mode 100644
index 00000000..f60c32b6
--- /dev/null
+++ b/docs/data-sources/lb.md
@@ -0,0 +1,173 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `lb_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number)
+
+### Read-Only
+
+- `account_id` (Number)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedatt--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedatt--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedatt--primary_node))
+- `rg_id` (Number)
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedatt--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers))
+
+
+### Nested Schema for `backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers--server_settings))
+
+
+### Nested Schema for `backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/lb_list.md b/docs/data-sources/lb_list.md
new file mode 100644
index 00000000..8c24a5d7
--- /dev/null
+++ b/docs/data-sources/lb_list.md
@@ -0,0 +1,192 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by Account ID
+- `back_ip` (String) Filter by BackIP
+- `by_id` (Number) Filter by ID
+- `front_ip` (String) Filter by FrontIP
+- `includedeleted` (Boolean)
+- `name` (String) Filter by name
+- `page` (Number)
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by Status
+- `tech_status` (String) Filter by TechStatus
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dp_api_password` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `image_id` (Number)
+- `lb_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--primary_node))
+- `rg_id` (Number)
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers))
+
+
+### Nested Schema for `items.backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `items.backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers--server_settings))
+
+
+### Nested Schema for `items.backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `items.frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `items.frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `items.primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `items.secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/lb_list_deleted.md b/docs/data-sources/lb_list_deleted.md
new file mode 100644
index 00000000..be7badea
--- /dev/null
+++ b/docs/data-sources/lb_list_deleted.md
@@ -0,0 +1,189 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by Account ID
+- `back_ip` (String) Filter by BackIP
+- `by_id` (Number) Filter by ID
+- `front_ip` (String) Filter by FrontIP
+- `name` (String) Filter by name
+- `page` (Number)
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number)
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `tech_status` (String) Filter by TechStatus
+- `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_id` (Number)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dp_api_password` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `image_id` (Number)
+- `lb_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--primary_node))
+- `rg_id` (Number)
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `items.backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers))
+
+
+### Nested Schema for `items.backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `items.backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers--server_settings))
+
+
+### Nested Schema for `items.backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `items.frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `items.frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `items.primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `items.secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/location_url.md b/docs/data-sources/location_url.md
new file mode 100644
index 00000000..cb66c393
--- /dev/null
+++ b/docs/data-sources/location_url.md
@@ -0,0 +1,33 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_location_url Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_location_url (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `url` (String) Location url
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/locations_list.md b/docs/data-sources/locations_list.md
new file mode 100644
index 00000000..531d26f3
--- /dev/null
+++ b/docs/data-sources/locations_list.md
@@ -0,0 +1,61 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_locations_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_locations_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Filter by ID
+- `flag` (String) Filter by flag
+- `location_code` (String) Filter by location code
+- `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))
+
+### Read-Only
+
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+- `items` (List of Object) Locations list (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `auth_broker` (List of String)
+- `bro_enabled` (Boolean)
+- `ckey` (String)
+- `flag` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `location_code` (String)
+- `meta` (List of String)
+- `name` (String)
+- `network_modes` (List of String)
+- `sdn_support` (Boolean)
+- `zero_access_enabled` (Boolean)
diff --git a/docs/data-sources/resgroup.md b/docs/data-sources/resgroup.md
new file mode 100644
index 00000000..1380ade5
--- /dev/null
+++ b/docs/data-sources/resgroup.md
@@ -0,0 +1,102 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_resgroup Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_resgroup (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `compute_features` (List of String)
+- `computes` (List of Number)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number)
+- `def_net_type` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dirty` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `lock_status` (String)
+- `milestones` (Number)
+- `name` (String)
+- `res_types` (List of String)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+- `sdn_access_group_id` (String)
+- `secret` (String)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `email` (String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedobjatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/rg_affinity_group_computes.md b/docs/data-sources/rg_affinity_group_computes.md
new file mode 100644
index 00000000..c7bb6fc3
--- /dev/null
+++ b/docs/data-sources/rg_affinity_group_computes.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_affinity_group_computes Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_affinity_group_computes (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `affinity_group` (String) Affinity group label
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `other_node` (List of Number)
+- `other_node_indirect` (List of Number)
+- `other_node_indirect_soft` (List of Number)
+- `other_node_soft` (List of Number)
+- `same_node` (List of Number)
+- `same_node_soft` (List of Number)
diff --git a/docs/data-sources/rg_affinity_groups_get.md b/docs/data-sources/rg_affinity_groups_get.md
new file mode 100644
index 00000000..bef8ad57
--- /dev/null
+++ b/docs/data-sources/rg_affinity_groups_get.md
@@ -0,0 +1,38 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_affinity_groups_get Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_affinity_groups_get (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `affinity_group` (String) Affinity group label
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `ids` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/rg_affinity_groups_list.md b/docs/data-sources/rg_affinity_groups_list.md
new file mode 100644
index 00000000..e5d64e2a
--- /dev/null
+++ b/docs/data-sources/rg_affinity_groups_list.md
@@ -0,0 +1,57 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_affinity_groups_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_affinity_groups_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `affinity_groups` (List of Object) (see [below for nested schema](#nestedatt--affinity_groups))
+- `entry_count` (Number)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `affinity_groups`
+
+Read-Only:
+
+- `ids` (List of Object) (see [below for nested schema](#nestedobjatt--affinity_groups--ids))
+- `label` (String)
+
+
+### Nested Schema for `affinity_groups.ids`
+
+Read-Only:
+
+- `id` (Number)
+- `node_id` (Number)
diff --git a/docs/data-sources/rg_audits.md b/docs/data-sources/rg_audits.md
new file mode 100644
index 00000000..c2513630
--- /dev/null
+++ b/docs/data-sources/rg_audits.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `call` (String)
+- `responsetime` (Number)
+- `statuscode` (Number)
+- `timestamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/rg_list.md b/docs/data-sources/rg_list.md
new file mode 100644
index 00000000..d99f2e00
--- /dev/null
+++ b/docs/data-sources/rg_list.md
@@ -0,0 +1,119 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Find by account ID
+- `account_name` (String) Find by account name
+- `by_id` (Number) Find by ID
+- `created_after` (Number) Find RGs created after specific time (unix timestamp)
+- `created_before` (Number) Find RGs created before specific time (unix timestamp)
+- `includedeleted` (Boolean) included deleted resource groups
+- `lock_status` (String) Find by lock status
+- `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_acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--account_acl))
+- `account_id` (Number)
+- `account_name` (String)
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number)
+- `def_net_type` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dirty` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `name` (String)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `resource_types` (List of String)
+- `rg_id` (Number)
+- `sdn_access_group_id` (String)
+- `secret` (String)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number)
+- `vms` (List of Number)
+
+
+### Nested Schema for `items.account_acl`
+
+Read-Only:
+
+- `email` (String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits--storage_policy))
+
+
+### Nested Schema for `items.resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/rg_list_computes.md b/docs/data-sources/rg_list_computes.md
new file mode 100644
index 00000000..84360f36
--- /dev/null
+++ b/docs/data-sources/rg_list_computes.md
@@ -0,0 +1,104 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_list_computes Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_list_computes (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `compute_id` (Number) Filter by compute ID
+- `extnet_id` (Number) Filter by extnet ID
+- `extnet_name` (String) Filter by extnet name
+- `ip_address` (String) FIlter by IP address
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `tech_status` (String) Filter by tech. 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_id` (Number)
+- `account_name` (String)
+- `affinity_label` (String)
+- `affinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--affinity_rules))
+- `affinity_weight` (Number)
+- `antiaffinity_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--antiaffinity_rules))
+- `cpus` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `id` (Number)
+- `name` (String)
+- `ram` (Number)
+- `registered` (Boolean)
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `total_disks_size` (Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_connected` (Number)
+
+
+### Nested Schema for `items.affinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `items.antiaffinity_rules`
+
+Read-Only:
+
+- `guid` (String)
+- `key` (String)
+- `mode` (String)
+- `policy` (String)
+- `topology` (String)
+- `value` (String)
diff --git a/docs/data-sources/rg_list_deleted.md b/docs/data-sources/rg_list_deleted.md
new file mode 100644
index 00000000..1e95e851
--- /dev/null
+++ b/docs/data-sources/rg_list_deleted.md
@@ -0,0 +1,117 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `account_name` (String) Filter by account name
+- `by_id` (Number) Filter by ID
+- `created_after` (Number) Filter RGs created after certain point in time (unix timestamp)
+- `created_before` (Number) Filter RGs created before certain point in time (unix timestamp)
+- `lock_status` (String) Filter by lock status
+- `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))
+
+### 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_acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--account_acl))
+- `account_id` (Number)
+- `account_name` (String)
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number)
+- `def_net_type` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dirty` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `name` (String)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `resource_types` (List of String)
+- `rg_id` (Number)
+- `sdn_access_group_id` (String)
+- `secret` (String)
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `uniq_pools` (List of String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number)
+- `vms` (List of Number)
+
+
+### Nested Schema for `items.account_acl`
+
+Read-Only:
+
+- `email` (String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits--storage_policy))
+
+
+### Nested Schema for `items.resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/data-sources/rg_list_lb.md b/docs/data-sources/rg_list_lb.md
new file mode 100644
index 00000000..3083c698
--- /dev/null
+++ b/docs/data-sources/rg_list_lb.md
@@ -0,0 +1,199 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_list_lb Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_list_lb (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `back_ip` (String) Filter by backend IP
+- `by_id` (Number) Filter by ID
+- `front_ip` (String) Filter by frontend IP
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) Filter by status
+- `tech_status` (String) Filter by tech. 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:
+
+- `acl` (List of Object) (see [below for nested schema](#nestedobjatt--items--acl))
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `dp_api_user` (String)
+- `extnet_id` (Number)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `ha_mode` (Boolean)
+- `id` (Number)
+- `image_id` (Number)
+- `milestones` (Number)
+- `name` (String)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--primary_node))
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedobjatt--items--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+
+
+### Nested Schema for `items.acl`
+
+Read-Only:
+
+- `email` (String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `items.backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers))
+
+
+### Nested Schema for `items.backends.server_default_settings`
+
+Read-Only:
+
+- `down_inter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `max_conn` (Number)
+- `max_queue` (Number)
+- `rise` (Number)
+- `slow_start` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `items.backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--items--backends--servers--server_settings))
+
+
+### Nested Schema for `items.backends.servers.server_settings`
+
+Read-Only:
+
+- `down_inter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `max_conn` (Number)
+- `max_queue` (Number)
+- `rise` (Number)
+- `slow_start` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `items.frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `items.frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `items.primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `items.secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/data-sources/rg_list_pfw.md b/docs/data-sources/rg_list_pfw.md
new file mode 100644
index 00000000..0917fab1
--- /dev/null
+++ b/docs/data-sources/rg_list_pfw.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_list_pfw Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_list_pfw (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `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:
+
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `vins_id` (Number)
+- `vins_name` (String)
+- `vm_id` (Number)
+- `vm_ip` (String)
+- `vm_name` (String)
+- `vm_port` (Number)
diff --git a/docs/data-sources/rg_list_vins.md b/docs/data-sources/rg_list_vins.md
new file mode 100644
index 00000000..51b808a0
--- /dev/null
+++ b/docs/data-sources/rg_list_vins.md
@@ -0,0 +1,70 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_list_vins Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_list_vins (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the RG
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `ext_ip` (String) Filter by external IP
+- `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
+
+### 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_id` (Number)
+- `account_name` (String)
+- `computes` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `external_ip` (String)
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `id` (Number)
+- `name` (String)
+- `network` (String)
+- `pri_vnf_dev_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
diff --git a/docs/data-sources/rg_resource_consumption_get.md b/docs/data-sources/rg_resource_consumption_get.md
new file mode 100644
index 00000000..c6abdc79
--- /dev/null
+++ b/docs/data-sources/rg_resource_consumption_get.md
@@ -0,0 +1,102 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_resource_consumption_get Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_resource_consumption_get (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedatt--consumed))
+- `id` (String) The ID of this resource.
+- `reserved` (List of Object) (see [below for nested schema](#nestedatt--reserved))
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--consumed--seps))
+
+
+### Nested Schema for `consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--reserved--seps))
+
+
+### Nested Schema for `reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
diff --git a/docs/data-sources/rg_resource_consumption_list.md b/docs/data-sources/rg_resource_consumption_list.md
new file mode 100644
index 00000000..02c645c3
--- /dev/null
+++ b/docs/data-sources/rg_resource_consumption_list.md
@@ -0,0 +1,107 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_resource_consumption_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_resource_consumption_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `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:
+
+- `consumed` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed))
+- `reserved` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved))
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedobjatt--items--resource_limits))
+- `rg_id` (Number)
+
+
+### Nested Schema for `items.consumed`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--consumed--seps))
+
+
+### Nested Schema for `items.consumed.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.reserved`
+
+Read-Only:
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `ram` (Number)
+- `seps` (List of Object) (see [below for nested schema](#nestedobjatt--items--reserved--seps))
+
+
+### Nested Schema for `items.reserved.seps`
+
+Read-Only:
+
+- `data_name` (String)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `sep_id` (String)
+
+
+
+
+### Nested Schema for `items.resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
diff --git a/docs/data-sources/rg_usage.md b/docs/data-sources/rg_usage.md
new file mode 100644
index 00000000..c321a8f7
--- /dev/null
+++ b/docs/data-sources/rg_usage.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_rg_usage Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_rg_usage (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `cpu` (Number)
+- `disk_size` (Number)
+- `disk_size_max` (Number)
+- `extips` (Number)
+- `gpu` (Number)
+- `id` (String) The ID of this resource.
+- `ram` (Number)
+- `seps` (Set of Object) (see [below for nested schema](#nestedatt--seps))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `seps`
+
+Read-Only:
+
+- `map` (Map of String)
+- `sep_id` (String)
diff --git a/docs/data-sources/sdn_access_group.md b/docs/data-sources/sdn_access_group.md
new file mode 100644
index 00000000..56398685
--- /dev/null
+++ b/docs/data-sources/sdn_access_group.md
@@ -0,0 +1,50 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_access_group Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_access_group (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `access_group_id` (String) The unique access group ID
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `comment` (String) Comment description
+- `created_at` (String) Creation timestamp
+- `display_name` (String) Display name
+- `id` (String) The ID of this resource.
+- `net_object_access_group` (List of Object) Net object access group configuration (see [below for nested schema](#nestedatt--net_object_access_group))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `net_object_access_group`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `id` (String)
+- `version_id` (Number)
diff --git a/docs/data-sources/sdn_access_group_list.md b/docs/data-sources/sdn_access_group_list.md
new file mode 100644
index 00000000..55ca1171
--- /dev/null
+++ b/docs/data-sources/sdn_access_group_list.md
@@ -0,0 +1,79 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_access_group_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_access_group_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `created_from` (String) filter by the lower limit of the creation date
+- `created_to` (String) filter by the upper limit of the creation date
+- `deleted` (Boolean) filter by deleted/not deleted group
+- `display_name` (String) filter by display name
+- `enabled` (Boolean) filter by enabled/disabled group
+- `owner_display_name` (String)
+- `page` (Number) Page number
+- `per_page` (Number) Items per page
+- `sort_by` (String) sort by one of supported fields
+- `sort_order` (String) sort order
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) List of access groups (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `comment` (String)
+- `created_at` (String)
+- `default_security_policy` (List of Object) (see [below for nested schema](#nestedobjatt--items--default_security_policy))
+- `display_name` (String)
+- `id` (String)
+- `net_object_access_group` (List of Object) (see [below for nested schema](#nestedobjatt--items--net_object_access_group))
+
+
+### Nested Schema for `items.default_security_policy`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `default_acl_drop` (String)
+- `default_open_session_drop` (Boolean)
+- `description` (String)
+- `display_name` (String)
+- `id` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `items.net_object_access_group`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `id` (String)
+- `version_id` (Number)
diff --git a/docs/data-sources/sdn_access_group_user_list.md b/docs/data-sources/sdn_access_group_user_list.md
new file mode 100644
index 00000000..3381f5ad
--- /dev/null
+++ b/docs/data-sources/sdn_access_group_user_list.md
@@ -0,0 +1,63 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_access_group_user_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_access_group_user_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `access_group_id` (String) filter by access group id
+
+### Optional
+
+- `access_group_role` (String) filter by access group role
+- `created_by` (String) who created the user
+- `created_from` (String) filter by the lower limit of the creation date
+- `created_to` (String) filter by the upper limit of the creation date
+- `deleted` (Boolean) delete filter
+- `deleted_by` (String) who deleted the user
+- `disabled_by` (String) who disabled the user
+- `display_name` (String) filter by display name
+- `enabled` (Boolean) filter by inclusion
+- `global_role` (String) filter by global role
+- `login` (String) filter by user login
+- `page` (Number) result page number
+- `per_page` (Number) number of results per page
+- `sort_by` (String) sort by one of supported fields
+- `sort_order` (String) sorting order
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) List of users (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+- `login` (String)
+- `role_id` (String)
diff --git a/docs/data-sources/sdn_default_security_policy_list.md b/docs/data-sources/sdn_default_security_policy_list.md
new file mode 100644
index 00000000..35addcc1
--- /dev/null
+++ b/docs/data-sources/sdn_default_security_policy_list.md
@@ -0,0 +1,149 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_default_security_policy_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_default_security_policy_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `access_group_id` (String) id of the access group
+- `page` (Number) result page number
+- `per_page` (Number) number of results per page
+- `sort_by` (String) sort by one of the supported fields
+- `sort_order` (String) sorting order
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) List of default security policies (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `created_at` (String)
+- `default_acl_drop` (String)
+- `default_open_session_drop` (Boolean)
+- `description` (String)
+- `display_name` (String)
+- `id` (String)
+- `locked_at` (String)
+- `security_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_rules))
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--status))
+- `version_id` (Number)
+
+
+### Nested Schema for `items.security_rules`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `action` (String)
+- `description` (String)
+- `destination_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_rules--destination_net_object))
+- `direction` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `filter` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_rules--filter))
+- `id` (String)
+- `log_enabled` (Boolean)
+- `log_name` (String)
+- `log_severity` (String)
+- `priority` (Number)
+- `security_policy_id` (String)
+- `source_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_rules--source_net_object))
+- `statistics_enabled` (Boolean)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.security_rules.destination_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+### Nested Schema for `items.security_rules.filter`
+
+Read-Only:
+
+- `filters` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_rules--filter--filters))
+- `name` (String)
+
+
+### Nested Schema for `items.security_rules.filter.filters`
+
+Read-Only:
+
+- `all` (Boolean)
+- `arp` (Boolean)
+- `dhcp` (Boolean)
+- `expression` (String)
+- `icmp` (Boolean)
+- `ip` (Boolean)
+- `ip_v4` (Boolean)
+- `ip_v6` (Boolean)
+- `keep_opened_sessions` (Boolean)
+- `nd` (Boolean)
+- `tcp` (Boolean)
+- `tcp_dst_ports` (List of String)
+- `udp` (Boolean)
+- `udp_dst_ports` (List of String)
+
+
+
+
+### Nested Schema for `items.security_rules.source_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+
+### Nested Schema for `items.status`
+
+Read-Only:
+
+- `common` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--status--hypervisors))
+
+
+### Nested Schema for `items.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/sdn_hypervisor.md b/docs/data-sources/sdn_hypervisor.md
new file mode 100644
index 00000000..d139e2b8
--- /dev/null
+++ b/docs/data-sources/sdn_hypervisor.md
@@ -0,0 +1,72 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_hypervisor Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_hypervisor (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String)
+
+### Optional
+
+- `port_info` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `created_at` (String)
+- `display_name` (String)
+- `hostname` (String)
+- `id` (String) The ID of this resource.
+- `ip` (String)
+- `ports` (List of Object) (see [below for nested schema](#nestedatt--ports))
+- `status` (String)
+- `synced_at` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `ports`
+
+Read-Only:
+
+- `data` (List of Object) (see [below for nested schema](#nestedobjatt--ports--data))
+- `info` (List of Object) (see [below for nested schema](#nestedobjatt--ports--info))
+
+
+### Nested Schema for `ports.data`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+- `unique_identifier` (String)
+- `up` (Boolean)
+
+
+
+### Nested Schema for `ports.info`
+
+Read-Only:
+
+- `active_ports` (Number)
+- `total_ports` (Number)
diff --git a/docs/data-sources/sdn_hypervisor_list.md b/docs/data-sources/sdn_hypervisor_list.md
new file mode 100644
index 00000000..a40e0b43
--- /dev/null
+++ b/docs/data-sources/sdn_hypervisor_list.md
@@ -0,0 +1,87 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_hypervisor_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_hypervisor_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `created_from` (String)
+- `created_to` (String)
+- `display_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `page` (Number)
+- `per_page` (Number)
+- `port_info` (String)
+- `sort_by` (String)
+- `sort_order` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `updated_from` (String)
+- `updated_to` (String)
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) List of hypervisors (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `created_at` (String)
+- `display_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `name` (String)
+- `ports` (List of Object) (see [below for nested schema](#nestedobjatt--items--ports))
+- `status` (String)
+- `synced_at` (String)
+
+
+### Nested Schema for `items.ports`
+
+Read-Only:
+
+- `data` (List of Object) (see [below for nested schema](#nestedobjatt--items--ports--data))
+- `info` (List of Object) (see [below for nested schema](#nestedobjatt--items--ports--info))
+
+
+### Nested Schema for `items.ports.data`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+- `unique_identifier` (String)
+- `up` (Boolean)
+
+
+
+### Nested Schema for `items.ports.info`
+
+Read-Only:
+
+- `active_ports` (Number)
+- `total_ports` (Number)
diff --git a/docs/data-sources/sdn_logical_port.md b/docs/data-sources/sdn_logical_port.md
new file mode 100644
index 00000000..137e5434
--- /dev/null
+++ b/docs/data-sources/sdn_logical_port.md
@@ -0,0 +1,115 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_logical_port Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_logical_port (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `logical_port_id` (String) ID of the logical port to use
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `access_group_id` (String) ID of the access group
+- `access_group_name` (String) Name of the access group
+- `adapter_mac` (String) MAC address of the adapter
+- `address_detection` (Boolean) If the adapter address detection is enabled
+- `bindings` (List of Object) (see [below for nested schema](#nestedatt--bindings))
+- `created_at` (String) Creation time of the logical port
+- `description` (String) Description of the logical port
+- `display_name` (String) Display name of the logical port
+- `enabled` (Boolean) If the logical port is enabled
+- `external_network_id` (String)
+- `hypervisor` (String) ID of the hypervisor
+- `hypervisor_display_name` (String) Display name of the hypervisor
+- `id` (String) The ID of this resource.
+- `labels` (List of Object) Labels (see [below for nested schema](#nestedatt--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedatt--status))
+- `unique_identifier` (String) Unique identifier of the logical port
+- `updated_at` (String) Update time the logical port
+- `version_id` (Number) Version ID of the logical port
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/sdn_logical_port_get_by_unique_identifier.md b/docs/data-sources/sdn_logical_port_get_by_unique_identifier.md
new file mode 100644
index 00000000..9911ecb8
--- /dev/null
+++ b/docs/data-sources/sdn_logical_port_get_by_unique_identifier.md
@@ -0,0 +1,114 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_logical_port_get_by_unique_identifier Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_logical_port_get_by_unique_identifier (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `unique_identifier` (String) Unique ID of the logical port to use
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `access_group_id` (String) ID of the access group
+- `access_group_name` (String) Name of the access group
+- `adapter_mac` (String) MAC address of the adapter
+- `address_detection` (Boolean) If the adapter address detection is enabled
+- `bindings` (List of Object) (see [below for nested schema](#nestedatt--bindings))
+- `created_at` (String) Creation time of the logical port
+- `description` (String) Description of the logical port
+- `display_name` (String) Display name of the logical port
+- `enabled` (Boolean) If the logical port is enabled
+- `external_network_id` (String)
+- `hypervisor` (String) ID of the hypervisor
+- `hypervisor_display_name` (String) Display name of the hypervisor
+- `id` (String) The ID of this resource.
+- `labels` (List of Object) Labels (see [below for nested schema](#nestedatt--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedatt--status))
+- `updated_at` (String) Update time the logical port
+- `version_id` (Number) Version ID of the logical port
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/sdn_logical_port_list.md b/docs/data-sources/sdn_logical_port_list.md
new file mode 100644
index 00000000..948a9d0a
--- /dev/null
+++ b/docs/data-sources/sdn_logical_port_list.md
@@ -0,0 +1,140 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_logical_port_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_logical_port_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `access_group_id` (String) Access Group ID
+- `adapter_mac` (String) Adapter mac
+- `address_detection` (Boolean)
+- `created_from` (String)
+- `created_to` (String)
+- `display_name` (String) Display name
+- `enabled` (Boolean)
+- `external_network_id` (String) External Network ID
+- `hypervisor` (String) Hypervisor
+- `hypervisor_display_name` (String) Hypervisor display name
+- `hypervisor_status` (String) Filter by hypervisor status
+- `live_migration_target_hv` (String) Live migration target HV
+- `operation_status` (String) Filter by operation status
+- `page` (Number)
+- `per_page` (Number)
+- `port_security` (Boolean)
+- `segment_display_name` (String) Segment display name
+- `segment_id` (String) Segment ID
+- `sort_by` (String)
+- `sort_order` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `unique_identifier` (String) Unique identifier
+
+### Read-Only
+
+- `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:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `adapter_mac` (String)
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--bindings))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `external_network_id` (String)
+- `hypervisor` (String)
+- `hypervisor_display_name` (String)
+- `id` (String)
+- `labels` (List of Object) (see [below for nested schema](#nestedobjatt--items--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--status))
+- `unique_identifier` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--items--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `items.labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `items.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/sdn_network_object_group.md b/docs/data-sources/sdn_network_object_group.md
new file mode 100644
index 00000000..6bb5a7b4
--- /dev/null
+++ b/docs/data-sources/sdn_network_object_group.md
@@ -0,0 +1,705 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_network_object_group Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_network_object_group (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `net_object_group_id` (String)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `addresses` (List of Object) (see [below for nested schema](#nestedatt--addresses))
+- `counters` (List of Object) (see [below for nested schema](#nestedatt--counters))
+- `created_at` (String)
+- `description` (String)
+- `external_network_ports` (List of Object) (see [below for nested schema](#nestedatt--external_network_ports))
+- `id` (String) The ID of this resource.
+- `l2_connection_ports` (List of Object) (see [below for nested schema](#nestedatt--l2_connection_ports))
+- `logical_ports` (List of Object) (see [below for nested schema](#nestedatt--logical_ports))
+- `name` (String)
+- `purpose` (String)
+- `security_policies` (List of Object) (see [below for nested schema](#nestedatt--security_policies))
+- `type` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `addresses`
+
+Read-Only:
+
+- `id` (String)
+- `ip_addr` (String)
+- `ip_addr_range_end` (String)
+- `ip_prefix` (String)
+- `mac_addr` (String)
+- `net_address_type` (String)
+
+
+
+### Nested Schema for `counters`
+
+Read-Only:
+
+- `addresses_count` (Number)
+- `l2_connection_ports_count` (Number)
+- `logical_ports_count` (Number)
+- `security_policies_count` (Number)
+- `security_rules_count` (Number)
+
+
+
+### Nested Schema for `external_network_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `bridge_network_name` (String)
+- `comment` (String)
+- `created_at` (String)
+- `default_gateway_ipv4` (String)
+- `default_gateway_ipv6` (String)
+- `description` (String)
+- `enabled` (Boolean)
+- `external_network_ports` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports))
+- `hypervisors` (List of String)
+- `id` (String)
+- `ipv4` (String)
+- `mac` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--status))
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `comment` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `floating_ip` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip))
+- `ipv4` (String)
+- `ipv6` (String)
+- `ipv6_config` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--ipv6_config))
+- `mac` (String)
+- `router_gateaway_port` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--router_gateaway_port))
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `logical_port` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port))
+- `router` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `adapter_mac` (String)
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--bindings))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `exclude_firewall` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--exclude_firewall))
+- `external_network_id` (String)
+- `hypervisor` (String)
+- `hypervisor_display_name` (String)
+- `id` (String)
+- `labels` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--status))
+- `unique_identifier` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.exclude_firewall`
+
+Read-Only:
+
+- `exclusion_reason` (String)
+- `logical_port_addresses_excluded` (Boolean)
+- `logical_port_excluded` (Boolean)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `gateaway_ports` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports))
+- `id` (String)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--policies))
+- `ports` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports))
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.gateaway_ports`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `external_l4_port_max` (Number)
+- `external_l4_port_min` (Number)
+- `id` (String)
+- `snat_enabled` (Boolean)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.gateaway_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.gateaway_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.policies`
+
+Read-Only:
+
+- `action` (String)
+- `created_at` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `match` (String)
+- `next_ipv4_address` (List of String)
+- `next_ipv6_address` (List of String)
+- `priority` (Number)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `ipv4_address` (String)
+- `ipv6_address` (String)
+- `ipv6_config` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--ipv6_config))
+- `mac` (String)
+- `segment` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--segment))
+- `segment_id` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.ipv6_config`
+
+Read-Only:
+
+- `address_mode` (String)
+- `enable_periodic_ra` (Boolean)
+- `interval_ra` (Number)
+- `router_preference` (String)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.segment`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.ipv6_config`
+
+Read-Only:
+
+- `address_mode` (String)
+- `enable_periodic_ra` (Boolean)
+- `interval_ra` (Number)
+- `router_preference` (String)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.router_gateaway_port`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `id` (String)
+- `router_display_name` (String)
+- `router_id` (String)
+- `snat_enabled` (Boolean)
+- `updated_at` (String)
+
+
+
+
+### Nested Schema for `external_network_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `l2_connection_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `created_at` (String)
+- `id` (String)
+- `l2_external_network` (List of Object) (see [below for nested schema](#nestedobjatt--l2_connection_ports--l2_external_network))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `l2_connection_ports.l2_external_network`
+
+Read-Only:
+
+- `bridge_network_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `hypervisors` (List of String)
+- `id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+
+
+### Nested Schema for `logical_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `adapter_mac` (String)
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--bindings))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `exclude_firewall` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--exclude_firewall))
+- `external_network_id` (String)
+- `hypervisor` (String)
+- `hypervisor_display_name` (String)
+- `id` (String)
+- `labels` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--status))
+- `unique_identifier` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `logical_ports.bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `logical_ports.bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `logical_ports.exclude_firewall`
+
+Read-Only:
+
+- `exclusion_reason` (String)
+- `logical_port_addresses_excluded` (Boolean)
+- `logical_port_excluded` (Boolean)
+
+
+
+### Nested Schema for `logical_ports.labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `logical_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `logical_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `security_policies`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `applied_net_object_groups` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--applied_net_object_groups))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `end_priority` (Number)
+- `id` (String)
+- `security_rules` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules))
+- `start_priority` (Number)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--status))
+- `type` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `security_policies.applied_net_object_groups`
+
+Read-Only:
+
+- `id` (String)
+- `name` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `security_policies.security_rules`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `action` (String)
+- `description` (String)
+- `destination_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--destination_net_object))
+- `direction` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `filter` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--filter))
+- `id` (String)
+- `log_enabled` (Boolean)
+- `log_name` (String)
+- `log_severity` (String)
+- `priority` (Number)
+- `security_policy_id` (String)
+- `source_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--source_net_object))
+- `statistics_enabled` (Boolean)
+- `type` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `security_policies.security_rules.destination_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+### Nested Schema for `security_policies.security_rules.filter`
+
+Read-Only:
+
+- `filters` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--filter--filters))
+- `name` (String)
+
+
+### Nested Schema for `security_policies.security_rules.filter.filters`
+
+Read-Only:
+
+- `all` (Boolean)
+- `arp` (Boolean)
+- `dhcp` (Boolean)
+- `expression` (String)
+- `icmp` (Boolean)
+- `ip` (Boolean)
+- `ip_v4` (Boolean)
+- `ip_v6` (Boolean)
+- `keep_opened_sessions` (Boolean)
+- `nd` (Boolean)
+- `tcp` (Boolean)
+- `tcp_dst_ports` (List of String)
+- `udp` (Boolean)
+- `udp_dst_ports` (List of String)
+
+
+
+
+### Nested Schema for `security_policies.security_rules.source_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+
+### Nested Schema for `security_policies.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `security_policies.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/sdn_network_object_group_list.md b/docs/data-sources/sdn_network_object_group_list.md
new file mode 100644
index 00000000..a0b0a83d
--- /dev/null
+++ b/docs/data-sources/sdn_network_object_group_list.md
@@ -0,0 +1,720 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_network_object_group_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_network_object_group_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `access_group_id` (String)
+- `created_from` (String)
+- `created_to` (String)
+- `name` (String)
+- `page` (Number)
+- `per_page` (Number)
+- `sort_by` (String)
+- `sort_order` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `updated_from` (String)
+- `updated_to` (String)
+
+### 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:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `addresses` (List of Object) (see [below for nested schema](#nestedobjatt--items--addresses))
+- `counters` (List of Object) (see [below for nested schema](#nestedobjatt--items--counters))
+- `created_at` (String)
+- `description` (String)
+- `external_network_ports` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports))
+- `id` (String)
+- `l2_connection_ports` (List of Object) (see [below for nested schema](#nestedobjatt--items--l2_connection_ports))
+- `logical_ports` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports))
+- `name` (String)
+- `purpose` (String)
+- `security_policies` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies))
+- `type` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.addresses`
+
+Read-Only:
+
+- `id` (String)
+- `ip_addr` (String)
+- `ip_addr_range_end` (String)
+- `ip_prefix` (String)
+- `mac_addr` (String)
+- `net_address_type` (String)
+
+
+
+### Nested Schema for `items.counters`
+
+Read-Only:
+
+- `addresses_count` (Number)
+- `l2_connection_ports_count` (Number)
+- `logical_ports_count` (Number)
+- `security_policies_count` (Number)
+- `security_rules_count` (Number)
+
+
+
+### Nested Schema for `items.external_network_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `bridge_network_name` (String)
+- `comment` (String)
+- `created_at` (String)
+- `default_gateway_ipv4` (String)
+- `default_gateway_ipv6` (String)
+- `description` (String)
+- `enabled` (Boolean)
+- `external_network_ports` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports))
+- `hypervisors` (List of String)
+- `id` (String)
+- `ipv4` (String)
+- `mac` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--status))
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `comment` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `floating_ip` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip))
+- `ipv4` (String)
+- `ipv6` (String)
+- `ipv6_config` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--ipv6_config))
+- `mac` (String)
+- `router_gateaway_port` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--router_gateaway_port))
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `logical_port` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--logical_port))
+- `router` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.logical_port`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `adapter_mac` (String)
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--logical_port--bindings))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `exclude_firewall` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--logical_port--exclude_firewall))
+- `external_network_id` (String)
+- `hypervisor` (String)
+- `hypervisor_display_name` (String)
+- `id` (String)
+- `labels` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--logical_port--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--logical_port--status))
+- `unique_identifier` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.logical_port.bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--logical_port--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.logical_port.bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.logical_port.exclude_firewall`
+
+Read-Only:
+
+- `exclusion_reason` (String)
+- `logical_port_addresses_excluded` (Boolean)
+- `logical_port_excluded` (Boolean)
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.logical_port.labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.logical_port.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--logical_port--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.logical_port.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `gateaway_ports` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports))
+- `id` (String)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--policies))
+- `ports` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--ports))
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.gateaway_ports`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `external_l4_port_max` (Number)
+- `external_l4_port_min` (Number)
+- `id` (String)
+- `snat_enabled` (Boolean)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.gateaway_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.gateaway_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.policies`
+
+Read-Only:
+
+- `action` (String)
+- `created_at` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `match` (String)
+- `next_ipv4_address` (List of String)
+- `next_ipv6_address` (List of String)
+- `priority` (Number)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.ports`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `ipv4_address` (String)
+- `ipv6_address` (String)
+- `ipv6_config` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--ports--ipv6_config))
+- `mac` (String)
+- `segment` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--ports--segment))
+- `segment_id` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--ports--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.ports.ipv6_config`
+
+Read-Only:
+
+- `address_mode` (String)
+- `enable_periodic_ra` (Boolean)
+- `interval_ra` (Number)
+- `router_preference` (String)
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.ports.segment`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--external_network_ports--floating_ip--router--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.floating_ip.router.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.ipv6_config`
+
+Read-Only:
+
+- `address_mode` (String)
+- `enable_periodic_ra` (Boolean)
+- `interval_ra` (Number)
+- `router_preference` (String)
+
+
+
+### Nested Schema for `items.external_network_ports.external_network_ports.router_gateaway_port`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `id` (String)
+- `router_display_name` (String)
+- `router_id` (String)
+- `snat_enabled` (Boolean)
+- `updated_at` (String)
+
+
+
+
+### Nested Schema for `items.external_network_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--external_network_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.external_network_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `items.l2_connection_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `created_at` (String)
+- `id` (String)
+- `l2_external_network` (List of Object) (see [below for nested schema](#nestedobjatt--items--l2_connection_ports--l2_external_network))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.l2_connection_ports.l2_external_network`
+
+Read-Only:
+
+- `bridge_network_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `hypervisors` (List of String)
+- `id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+
+
+### Nested Schema for `items.logical_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `adapter_mac` (String)
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports--bindings))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `exclude_firewall` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports--exclude_firewall))
+- `external_network_id` (String)
+- `hypervisor` (String)
+- `hypervisor_display_name` (String)
+- `id` (String)
+- `labels` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports--status))
+- `unique_identifier` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.logical_ports.bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.logical_ports.bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `items.logical_ports.exclude_firewall`
+
+Read-Only:
+
+- `exclusion_reason` (String)
+- `logical_port_addresses_excluded` (Boolean)
+- `logical_port_excluded` (Boolean)
+
+
+
+### Nested Schema for `items.logical_ports.labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `items.logical_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.logical_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `items.security_policies`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `applied_net_object_groups` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--applied_net_object_groups))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `end_priority` (Number)
+- `id` (String)
+- `security_rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--security_rules))
+- `start_priority` (Number)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--status))
+- `type` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.security_policies.applied_net_object_groups`
+
+Read-Only:
+
+- `id` (String)
+- `name` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `items.security_policies.security_rules`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `action` (String)
+- `description` (String)
+- `destination_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--security_rules--destination_net_object))
+- `direction` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `filter` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--security_rules--filter))
+- `id` (String)
+- `log_enabled` (Boolean)
+- `log_name` (String)
+- `log_severity` (String)
+- `priority` (Number)
+- `security_policy_id` (String)
+- `source_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--security_rules--source_net_object))
+- `statistics_enabled` (Boolean)
+- `type` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.security_policies.security_rules.destination_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+### Nested Schema for `items.security_policies.security_rules.filter`
+
+Read-Only:
+
+- `filters` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--security_rules--filter--filters))
+- `name` (String)
+
+
+### Nested Schema for `items.security_policies.security_rules.filter.filters`
+
+Read-Only:
+
+- `all` (Boolean)
+- `arp` (Boolean)
+- `dhcp` (Boolean)
+- `expression` (String)
+- `icmp` (Boolean)
+- `ip` (Boolean)
+- `ip_v4` (Boolean)
+- `ip_v6` (Boolean)
+- `keep_opened_sessions` (Boolean)
+- `nd` (Boolean)
+- `tcp` (Boolean)
+- `tcp_dst_ports` (List of String)
+- `udp` (Boolean)
+- `udp_dst_ports` (List of String)
+
+
+
+
+### Nested Schema for `items.security_policies.security_rules.source_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+
+### Nested Schema for `items.security_policies.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--security_policies--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.security_policies.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/sdn_segment.md b/docs/data-sources/sdn_segment.md
new file mode 100644
index 00000000..c96de7d2
--- /dev/null
+++ b/docs/data-sources/sdn_segment.md
@@ -0,0 +1,152 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_segment Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_segment (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `segment_id` (String)
+
+### Optional
+
+- `access_group_id` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `dhcp_v4` (List of Object) (see [below for nested schema](#nestedatt--dhcp_v4))
+- `dhcp_v6` (List of Object) (see [below for nested schema](#nestedatt--dhcp_v6))
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String) The ID of this resource.
+- `l2_connection_port` (List of Object) (see [below for nested schema](#nestedatt--l2_connection_port))
+- `logical_ports_info` (List of Object) (see [below for nested schema](#nestedatt--logical_ports_info))
+- `routers_info` (List of Object) (see [below for nested schema](#nestedatt--routers_info))
+- `status` (List of Object) (see [below for nested schema](#nestedatt--status))
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `type` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `dhcp_v4`
+
+Read-Only:
+
+- `dns` (List of String)
+- `enabled` (Boolean)
+- `excluded_address_ranges` (List of String)
+- `gateway` (String)
+- `id` (String)
+- `lease_time` (Number)
+- `server_ip` (String)
+- `server_mac` (String)
+
+
+
+### Nested Schema for `dhcp_v6`
+
+Read-Only:
+
+- `address_prefix` (String)
+- `dns` (List of String)
+- `enabled` (Boolean)
+- `id` (String)
+- `lease_time` (Number)
+- `server_mac` (String)
+
+
+
+### Nested Schema for `l2_connection_port`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `created_at` (String)
+- `created_by` (String)
+- `id` (String)
+- `l2_external_network` (List of Object) (see [below for nested schema](#nestedobjatt--l2_connection_port--l2_external_network))
+- `updated_at` (String)
+- `updated_by` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `l2_connection_port.l2_external_network`
+
+Read-Only:
+
+- `bridge_network_name` (String)
+- `created_at` (String)
+- `created_by` (String)
+- `description` (String)
+- `display_name` (String)
+- `hypervisors` (List of String)
+- `id` (String)
+- `updated_at` (String)
+- `updated_by` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+
+
+### Nested Schema for `logical_ports_info`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+
+
+
+### Nested Schema for `routers_info`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+
+
+
+### Nested Schema for `status`
+
+Read-Only:
+
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/sdn_segment_list.md b/docs/data-sources/sdn_segment_list.md
new file mode 100644
index 00000000..aed9963a
--- /dev/null
+++ b/docs/data-sources/sdn_segment_list.md
@@ -0,0 +1,171 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_segment_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_segment_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `access_group_id` (String) find by access group id
+- `created_from` (String) find by created date
+- `created_to` (String) find by created date
+- `display_name` (String) find by display name
+- `enabled` (Boolean) find by enabled status
+- `is_synced` (Boolean) does core currently believe that its data is synchronized with the data in the OVN?
+- `operation_status` (String) filter by operation status
+- `page` (Number) Page number
+- `per_page` (Number) Items per page
+- `sort_by` (String) sort by one of supported fields
+- `sort_order` (String) sort order
+- `subnet` (String) IPv4 or IPv6 subnet for the current segment
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `updated_from` (String) find by updated date
+- `updated_to` (String) find by updated date
+
+### Read-Only
+
+- `entry_count` (Number) entry count
+- `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:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `dhcp_v4` (List of Object) (see [below for nested schema](#nestedobjatt--items--dhcp_v4))
+- `dhcp_v6` (List of Object) (see [below for nested schema](#nestedobjatt--items--dhcp_v6))
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `l2_connection_port` (List of Object) (see [below for nested schema](#nestedobjatt--items--l2_connection_port))
+- `logical_ports_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--logical_ports_info))
+- `routers_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--routers_info))
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--items--status))
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `type` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.dhcp_v4`
+
+Read-Only:
+
+- `dns` (List of String)
+- `enabled` (Boolean)
+- `excluded_address_ranges` (List of String)
+- `gateway` (String)
+- `id` (String)
+- `lease_time` (Number)
+- `server_ip` (String)
+- `server_mac` (String)
+
+
+
+### Nested Schema for `items.dhcp_v6`
+
+Read-Only:
+
+- `address_prefix` (String)
+- `dns` (List of String)
+- `enabled` (Boolean)
+- `id` (String)
+- `lease_time` (Number)
+- `server_mac` (String)
+
+
+
+### Nested Schema for `items.l2_connection_port`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `created_at` (String)
+- `created_by` (String)
+- `id` (String)
+- `l2_external_network` (List of Object) (see [below for nested schema](#nestedobjatt--items--l2_connection_port--l2_external_network))
+- `updated_at` (String)
+- `updated_by` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `items.l2_connection_port.l2_external_network`
+
+Read-Only:
+
+- `bridge_network_name` (String)
+- `created_at` (String)
+- `created_by` (String)
+- `description` (String)
+- `display_name` (String)
+- `hypervisors` (List of String)
+- `id` (String)
+- `updated_at` (String)
+- `updated_by` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+
+
+### Nested Schema for `items.logical_ports_info`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+
+
+
+### Nested Schema for `items.routers_info`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+
+
+
+### Nested Schema for `items.status`
+
+Read-Only:
+
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--items--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `items.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/data-sources/security_group.md b/docs/data-sources/security_group.md
new file mode 100644
index 00000000..c4c9e224
--- /dev/null
+++ b/docs/data-sources/security_group.md
@@ -0,0 +1,58 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_security_group Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_security_group (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `security_group_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number)
+- `created_at` (Number)
+- `created_by` (String)
+- `description` (String)
+- `id` (String) The ID of this resource.
+- `name` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedatt--rules))
+- `updated_at` (Number)
+- `updated_by` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `rules`
+
+Read-Only:
+
+- `direction` (String)
+- `ethertype` (String)
+- `id` (Number)
+- `port_range_max` (Number)
+- `port_range_min` (Number)
+- `protocol` (String)
+- `remote_ip_prefix` (String)
diff --git a/docs/data-sources/security_group_list.md b/docs/data-sources/security_group_list.md
new file mode 100644
index 00000000..1f7bd583
--- /dev/null
+++ b/docs/data-sources/security_group_list.md
@@ -0,0 +1,74 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_security_group_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_security_group_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number)
+- `by_id` (Number)
+- `created_max` (Number)
+- `created_min` (Number)
+- `desc` (String)
+- `name` (String)
+- `page` (Number)
+- `size` (Number)
+- `sort_by` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `updated_max` (Number)
+- `updated_min` (Number)
+
+### 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_id` (Number)
+- `created_at` (Number)
+- `created_by` (String)
+- `description` (String)
+- `name` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedobjatt--items--rules))
+- `security_group_id` (Number)
+- `updated_at` (Number)
+- `updated_by` (String)
+
+
+### Nested Schema for `items.rules`
+
+Read-Only:
+
+- `direction` (String)
+- `ethertype` (String)
+- `id` (Number)
+- `port_range_max` (Number)
+- `port_range_min` (Number)
+- `protocol` (String)
+- `remote_ip_prefix` (String)
diff --git a/docs/data-sources/sep_and_pools_available_list.md b/docs/data-sources/sep_and_pools_available_list.md
new file mode 100644
index 00000000..e5e07793
--- /dev/null
+++ b/docs/data-sources/sep_and_pools_available_list.md
@@ -0,0 +1,59 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sep_and_pools_available_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sep_and_pools_available_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) Account ID
+
+### Optional
+
+- `rg_id` (Number) Resource group ID
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `entry_count` (Number) Number of available SEP entries
+- `id` (String) The ID of this resource.
+- `items` (List of Object) List of available SEPs (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `pools` (List of Object) (see [below for nested schema](#nestedobjatt--items--pools))
+- `sep_id` (Number)
+- `sep_name` (String)
+- `sep_type` (String)
+
+
+### Nested Schema for `items.pools`
+
+Read-Only:
+
+- `name` (String)
+- `system` (Boolean)
+- `types` (List of String)
diff --git a/docs/data-sources/snapshot_list.md b/docs/data-sources/snapshot_list.md
new file mode 100644
index 00000000..b1f9e5bd
--- /dev/null
+++ b/docs/data-sources/snapshot_list.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_snapshot_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_snapshot_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number) ID of the compute instance to create snapshot for.
+
+### Optional
+
+- `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) snapshot list (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
diff --git a/docs/data-sources/storage_policy.md b/docs/data-sources/storage_policy.md
new file mode 100644
index 00000000..d2bd5104
--- /dev/null
+++ b/docs/data-sources/storage_policy.md
@@ -0,0 +1,63 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_storage_policy Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_storage_policy (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `storage_policy_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `access_seps_pools` (List of Object) (see [below for nested schema](#nestedatt--access_seps_pools))
+- `description` (String)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `limit_iops` (Number)
+- `name` (String)
+- `status` (String)
+- `usage` (List of Object) (see [below for nested schema](#nestedatt--usage))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `access_seps_pools`
+
+Read-Only:
+
+- `pool_names` (List of String)
+- `sep_id` (Number)
+- `sep_name` (String)
+- `sep_tech_status` (String)
+
+
+
+### Nested Schema for `usage`
+
+Read-Only:
+
+- `accounts` (List of Number)
+- `resgroups` (List of Number)
diff --git a/docs/data-sources/storage_policy_list.md b/docs/data-sources/storage_policy_list.md
new file mode 100644
index 00000000..3b7cf09e
--- /dev/null
+++ b/docs/data-sources/storage_policy_list.md
@@ -0,0 +1,81 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_storage_policy_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_storage_policy_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number)
+- `by_id` (Number)
+- `desc` (String)
+- `limit_iops` (Number)
+- `name` (String)
+- `page` (Number)
+- `pool_name` (String)
+- `resgroup_id` (Number)
+- `sep_id` (Number)
+- `sep_tech_status` (String)
+- `size` (Number)
+- `sort_by` (String)
+- `status` (String)
+- `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:
+
+- `access_seps_pools` (List of Object) (see [below for nested schema](#nestedobjatt--items--access_seps_pools))
+- `description` (String)
+- `guid` (Number)
+- `limit_iops` (Number)
+- `name` (String)
+- `status` (String)
+- `storage_policy_id` (Number)
+- `usage` (List of Object) (see [below for nested schema](#nestedobjatt--items--usage))
+
+
+### Nested Schema for `items.access_seps_pools`
+
+Read-Only:
+
+- `pool_names` (List of String)
+- `sep_id` (Number)
+- `sep_name` (String)
+- `sep_tech_status` (String)
+
+
+
+### Nested Schema for `items.usage`
+
+Read-Only:
+
+- `accounts` (List of Number)
+- `resgroups` (List of Number)
diff --git a/docs/data-sources/trunk.md b/docs/data-sources/trunk.md
new file mode 100644
index 00000000..a4e223e8
--- /dev/null
+++ b/docs/data-sources/trunk.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_trunk Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_trunk (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `trunk_id` (Number) trunk id
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_ids` (Set of Number) List of account IDs with access to this trunk
+- `created_at` (Number) when the trunk was created
+- `created_by` (String) who created the trunk
+- `deleted_at` (Number) when the trunk was updated
+- `deleted_by` (String) who updated the trunk
+- `description` (String) Description of the trunk
+- `guid` (Number) GUID
+- `id` (String) The ID of this resource.
+- `mac` (String) MAC address
+- `mtu` (Number) Maximum Transmission Unit
+- `name` (String) Name of the trunk
+- `native_vlan_id` (Number) Native VLAN ID
+- `ovs_bridge` (String) OVS bridge name
+- `status` (String) if the trunk is enabled
+- `trunk_tags` (String) List of trunk tags (values between 1-4095)
+- `updated_at` (Number) when the trunk was updated
+- `updated_by` (String) who updated the trunk
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/trunk_list.md b/docs/data-sources/trunk_list.md
new file mode 100644
index 00000000..49fe9f43
--- /dev/null
+++ b/docs/data-sources/trunk_list.md
@@ -0,0 +1,65 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_trunk_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_trunk_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_ids` (List of Number) Account access ID(s) to filter by
+- `page` (Number) Page number.
+- `size` (Number) Page size.
+- `sort_by` (String) Sort by one of supported fields, format ±
+- `status` (String) find by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `trunk_ids` (List of Number) ID of the trunk(s) to filter by
+- `trunk_tags` (String) Trunk tags to filter by (value between 1-4095)
+
+### 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_ids` (Set of Number)
+- `created_at` (Number)
+- `created_by` (String)
+- `deleted_at` (Number)
+- `deleted_by` (String)
+- `description` (String)
+- `guid` (Number)
+- `id` (Number)
+- `mac` (String)
+- `mtu` (Number)
+- `name` (String)
+- `native_vlan_id` (Number)
+- `ovs_bridge` (String)
+- `status` (String)
+- `trunk_tags` (String)
+- `updated_at` (Number)
+- `updated_by` (String)
diff --git a/docs/data-sources/vfpool.md b/docs/data-sources/vfpool.md
new file mode 100644
index 00000000..36ee4f80
--- /dev/null
+++ b/docs/data-sources/vfpool.md
@@ -0,0 +1,72 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vfpool Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vfpool (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vfpool_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_access` (List of Number)
+- `created_time` (Number)
+- `description` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `name` (String)
+- `rg_access` (List of Number)
+- `status` (String)
+- `updated_time` (Number)
+- `vfs` (List of Object) (see [below for nested schema](#nestedatt--vfs))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `vfs`
+
+Read-Only:
+
+- `node_id` (Number)
+- `vf_list` (List of Object) (see [below for nested schema](#nestedobjatt--vfs--vf_list))
+
+
+### Nested Schema for `vfs.vf_list`
+
+Read-Only:
+
+- `nic_name` (String)
+- `vfs_info` (List of Object) (see [below for nested schema](#nestedobjatt--vfs--vf_list--vfs_info))
+
+
+### Nested Schema for `vfs.vf_list.vfs_info`
+
+Read-Only:
+
+- `claimed` (Boolean)
+- `id` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/vfpool_list.md b/docs/data-sources/vfpool_list.md
new file mode 100644
index 00000000..bbf2ac4d
--- /dev/null
+++ b/docs/data-sources/vfpool_list.md
@@ -0,0 +1,87 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vfpool_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vfpool_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_access` (Number) Find by accountAccess
+- `by_id` (Number) Find by ID
+- `description` (String) Find by description
+- `gid` (Number) Find by Grid ID
+- `name` (String) Find by name
+- `page` (Number) Page number
+- `rg_access` (Number) Find by rgAccess
+- `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)
+- `created_time` (Number)
+- `description` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `name` (String)
+- `rg_access` (List of Number)
+- `status` (String)
+- `updated_time` (Number)
+- `vfpool_id` (Number)
+- `vfs` (List of Object) (see [below for nested schema](#nestedobjatt--items--vfs))
+
+
+### Nested Schema for `items.vfs`
+
+Read-Only:
+
+- `node_id` (Number)
+- `vf_list` (List of Object) (see [below for nested schema](#nestedobjatt--items--vfs--vf_list))
+
+
+### Nested Schema for `items.vfs.vf_list`
+
+Read-Only:
+
+- `nic_name` (String)
+- `vfs_info` (List of Object) (see [below for nested schema](#nestedobjatt--items--vfs--vf_list--vfs_info))
+
+
+### Nested Schema for `items.vfs.vf_list.vfs_info`
+
+Read-Only:
+
+- `claimed` (Boolean)
+- `id` (Number)
+- `vm_id` (Number)
diff --git a/docs/data-sources/vins.md b/docs/data-sources/vins.md
new file mode 100644
index 00000000..3c1bd87c
--- /dev/null
+++ b/docs/data-sources/vins.md
@@ -0,0 +1,455 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_id` (Number) Unique ID of the account, which this ViNS belongs to.
+- `account_name` (String) Name of the account, which this ViNS belongs to.
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `default_qos` (List of Object) (see [below for nested schema](#nestedatt--default_qos))
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String) User-defined text description of this ViNS.
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `name` (String)
+- `net_mask` (Number)
+- `network` (String)
+- `pre_reservations_num` (Number)
+- `redundant` (Boolean)
+- `rg_id` (Number) Unique ID of the resource group, where this ViNS is belongs to (for ViNS created at resource group level, 0 otherwise).
+- `rg_name` (String)
+- `sec_vnf_dev_id` (Number)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vnf_dev` (List of Object) (see [below for nested schema](#nestedatt--vnf_dev))
+- `vnfs` (List of Object) (see [below for nested schema](#nestedatt--vnfs))
+- `vxlan_id` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `compute_name` (String)
+
+
+
+### Nested Schema for `default_qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `vnf_dev`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `capabilities` (List of String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config))
+- `config_saved` (Boolean)
+- `custom_pre_cfg` (Boolean)
+- `desc` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces))
+- `live_migration_job_id` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `vins` (List of Number)
+- `vnc_password` (String)
+- `vnf_id` (Number)
+- `vnf_name` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnf_dev.config`
+
+Read-Only:
+
+- `mgmt` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--mgmt))
+- `resources` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--resources))
+
+
+### Nested Schema for `vnf_dev.config.mgmt`
+
+Read-Only:
+
+- `ip_addr` (String)
+- `password` (String)
+- `ssh_key` (String)
+- `user` (String)
+
+
+
+### Nested Schema for `vnf_dev.config.resources`
+
+Read-Only:
+
+- `cpu` (Number)
+- `node_id` (Number)
+- `ram` (Number)
+- `uuid` (String)
+
+
+
+
+### Nested Schema for `vnf_dev.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `net_type` (String)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+
+### Nested Schema for `vnfs`
+
+Read-Only:
+
+- `dhcp` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp))
+- `gw` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw))
+- `nat` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat))
+
+
+### Nested Schema for `vnfs.dhcp`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices))
+- `dhcp_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.dhcp.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `dns` (List of String)
+- `ip_end` (String)
+- `ip_start` (String)
+- `lease` (Number)
+- `netmask` (Number)
+- `network` (String)
+- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config--reservations))
+
+
+### Nested Schema for `vnfs.dhcp.config.reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices--primary))
+
+
+### Nested Schema for `vnfs.dhcp.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `gw_id` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.gw.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `ext_net_id` (Number)
+- `ext_net_ip` (String)
+- `ext_netmask` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config--qos))
+
+
+### Nested Schema for `vnfs.gw.config.qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices--primary))
+
+
+### Nested Schema for `vnfs.gw.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.gw.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.nat`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `nat_id` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.nat.config`
+
+Read-Only:
+
+- `net_mask` (Number)
+- `network` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config--rules))
+
+
+### Nested Schema for `vnfs.nat.config.rules`
+
+Read-Only:
+
+- `local_ip` (String)
+- `local_port` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `rule_id` (Number)
+- `vm_id` (Number)
+- `vm_name` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices--primary))
+
+
+### Nested Schema for `vnfs.nat.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
diff --git a/docs/data-sources/vins_audits.md b/docs/data-sources/vins_audits.md
new file mode 100644
index 00000000..afcab17e
--- /dev/null
+++ b/docs/data-sources/vins_audits.md
@@ -0,0 +1,49 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_audits Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_audits (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `items` (List of Object) (see [below for nested schema](#nestedatt--items))
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
+
+
+
+### Nested Schema for `items`
+
+Read-Only:
+
+- `call` (String)
+- `response_time` (Number)
+- `statuscode` (Number)
+- `timestamp` (Number)
+- `user` (String)
diff --git a/docs/data-sources/vins_ext_net_list.md b/docs/data-sources/vins_ext_net_list.md
new file mode 100644
index 00000000..2f445bb0
--- /dev/null
+++ b/docs/data-sources/vins_ext_net_list.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_ext_net_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_ext_net_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+
+### Optional
+
+- `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:
+
+- `default_gw` (String)
+- `ext_net_id` (Number)
+- `ip` (String)
+- `prefix_len` (Number)
+- `status` (String)
+- `tech_status` (String)
diff --git a/docs/data-sources/vins_ip_list.md b/docs/data-sources/vins_ip_list.md
new file mode 100644
index 00000000..b99c334f
--- /dev/null
+++ b/docs/data-sources/vins_ip_list.md
@@ -0,0 +1,52 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_ip_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_ip_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS
+
+### Optional
+
+- `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:
+
+- `client_type` (String)
+- `domainname` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
diff --git a/docs/data-sources/vins_list.md b/docs/data-sources/vins_list.md
new file mode 100644
index 00000000..f1a81a0e
--- /dev/null
+++ b/docs/data-sources/vins_list.md
@@ -0,0 +1,71 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by Account ID
+- `by_id` (Number) Filter by ID
+- `ext_ip` (String) Filter by external IP address
+- `include_deleted` (Boolean) Include deleted computes
+- `name` (String) Filter by Name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by RG ID
+- `size` (Number) Page size
+- `sort_by` (String) sort by one of supported fields, format +|-(field)
+- `status` (String) sort by status
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vnf_dev_id` (Number) Filter by VNF Device id
+- `zone_id` (Number) Zone ID
+
+### 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_id` (Number)
+- `account_name` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `external_ip` (String)
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `network` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `vins_name` (String)
+- `vxlan_id` (Number)
diff --git a/docs/data-sources/vins_list_deleted.md b/docs/data-sources/vins_list_deleted.md
new file mode 100644
index 00000000..65c194dc
--- /dev/null
+++ b/docs/data-sources/vins_list_deleted.md
@@ -0,0 +1,66 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_list_deleted Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_list_deleted (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `account_id` (Number) Filter by account ID
+- `by_id` (Number) Filter by ID
+- `ext_ip` (String) Filter by external IP
+- `name` (String) Filter by name
+- `page` (Number) Page number
+- `rg_id` (Number) Filter by resgroup ID
+- `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))
+- `vnfdev_id` (Number) find by VNF Device id
+
+### 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_id` (Number)
+- `account_name` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `external_ip` (String)
+- `network` (String)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins_id` (Number)
+- `vins_name` (String)
+- `vxlan_id` (Number)
diff --git a/docs/data-sources/vins_nat_rule_list.md b/docs/data-sources/vins_nat_rule_list.md
new file mode 100644
index 00000000..048d8503
--- /dev/null
+++ b/docs/data-sources/vins_nat_rule_list.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_nat_rule_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_nat_rule_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+
+### Optional
+
+- `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:
+
+- `id` (Number)
+- `local_ip` (String)
+- `local_port` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `vm_id` (Number)
+- `vm_name` (String)
diff --git a/docs/data-sources/vins_static_route.md b/docs/data-sources/vins_static_route.md
new file mode 100644
index 00000000..591a0015
--- /dev/null
+++ b/docs/data-sources/vins_static_route.md
@@ -0,0 +1,42 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_static_route Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_static_route (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `route_id` (Number) Unique ID of the static route
+- `vins_id` (Number) Unique ID of the ViNS
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `netmask` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/vins_static_route_list.md b/docs/data-sources/vins_static_route_list.md
new file mode 100644
index 00000000..cdbbae15
--- /dev/null
+++ b/docs/data-sources/vins_static_route_list.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_static_route_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_static_route_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `vins_id` (Number) ID of VINS
+
+### Optional
+
+- `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:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
diff --git a/docs/data-sources/zone.md b/docs/data-sources/zone.md
new file mode 100644
index 00000000..9413e542
--- /dev/null
+++ b/docs/data-sources/zone.md
@@ -0,0 +1,64 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_zone Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_zone (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `zone_id` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_ids` (List of Number)
+- `app_id` (String)
+- `auto_start` (Boolean)
+- `broadcast_addr` (String)
+- `bservice_ids` (List of Number)
+- `compute_ids` (List of Number)
+- `created_time` (Number)
+- `decort_url` (String)
+- `deletable` (Boolean)
+- `description` (String)
+- `domain` (String)
+- `drs` (Boolean)
+- `drs_name` (String)
+- `drs_uid` (String)
+- `extnet_ids` (List of Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `k8s_ids` (List of Number)
+- `lbs_ids` (List of Number)
+- `name` (String)
+- `node_ids` (List of Number)
+- `ping_addr` (String)
+- `ssl_skip_verify` (Boolean)
+- `sso_type` (String)
+- `sso_url` (String)
+- `status` (String)
+- `updated_time` (Number)
+- `vins_ids` (List of Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `default` (String)
+- `read` (String)
diff --git a/docs/data-sources/zone_list.md b/docs/data-sources/zone_list.md
new file mode 100644
index 00000000..99f8d5ec
--- /dev/null
+++ b/docs/data-sources/zone_list.md
@@ -0,0 +1,73 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_zone_list Data Source - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_zone_list (Data Source)
+
+
+
+
+
+
+## Schema
+
+### Optional
+
+- `by_id` (Number) Find by ID
+- `deletable` (Boolean) Find by deletable
+- `description` (String) Find by description
+- `gid` (Number) Find by Grid ID
+- `name` (String) Find by name
+- `node_id` (Number) Find by nodeId
+- `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:
+
+- `app_id` (String)
+- `auto_start` (Boolean)
+- `broadcast_addr` (String)
+- `created_time` (Number)
+- `decort_url` (String)
+- `deletable` (Boolean)
+- `description` (String)
+- `domain` (String)
+- `drs` (Boolean)
+- `drs_name` (String)
+- `drs_uid` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `name` (String)
+- `node_ids` (List of Number)
+- `ping_addr` (String)
+- `ssl_skip_verify` (Boolean)
+- `sso_type` (String)
+- `sso_url` (String)
+- `status` (String)
+- `updated_time` (Number)
+- `zone_id` (Number)
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 00000000..4df9c205
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,36 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort Provider"
+description: |-
+
+---
+
+# decort Provider
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `authenticator` (String) Authentication mode to use when connecting to DECORT cloud API. Should be one of 'decs3o', 'legacy', 'jwt' or 'bvs'.
+- `controller_url` (String) URL of DECORT Cloud controller to use. API calls will be directed to this URL.
+
+### Optional
+
+- `allow_unverified_ssl` (Boolean) If true, DECORT API will not verify SSL certificates. Use this with caution and in trusted environments only!
+- `app_id` (String) Application ID to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode.
+- `app_secret` (String) Application secret to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode.
+- `bvs_password` (String) User password for DECORT cloud API operations in 'bvs' authentication mode.
+- `bvs_user` (String) User name for DECORT cloud API operations in 'bvs' authentication mode.
+- `domain` (String) User password for DECORT cloud API operations in 'bvs' authentication mode.
+- `jwt` (String) JWT to access DECORT cloud API in 'jwt' authentication mode.
+- `oauth2_url` (String) OAuth2 application URL in 'decs3o' and 'bvs' authentication mode.
+- `password` (String) User password for DECORT cloud API operations in 'legacy' authentication mode.
+- `path_cfg` (String) The path of the configuration file entry
+- `path_token` (String) The path of the token file entry
+- `time_to_refresh` (Number) The number of minutes before the expiration of the token, a refresh will be made
+- `user` (String) User name for DECORT cloud API operations in 'legacy' authentication mode.
diff --git a/docs/resources/account.md b/docs/resources/account.md
new file mode 100644
index 00000000..c5da744b
--- /dev/null
+++ b/docs/resources/account.md
@@ -0,0 +1,141 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_account Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_account (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_name` (String) account name
+
+### Optional
+
+- `default_zone_id` (Number) email
+- `desc` (String) description
+- `emailaddress` (String) email
+- `enable` (Boolean) enable/disable account
+- `permanently` (Boolean) whether to completely delete the account
+- `resource_limits` (Block List, Max: 1) (see [below for nested schema](#nestedblock--resource_limits))
+- `restore` (Boolean) restore a deleted account
+- `send_access_emails` (Boolean) if true send emails when a user is granted access to resources
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `users` (Block List) (see [below for nested schema](#nestedblock--users))
+
+### Read-Only
+
+- `account_id` (Number)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `company` (String)
+- `companyurl` (String)
+- `compute_features` (List of String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `dc_location` (String)
+- `deactivation_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `displayname` (String)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `machines` (List of Object) (see [below for nested schema](#nestedatt--machines))
+- `status` (String)
+- `storage_policy_ids` (List of Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `version` (Number)
+- `vins` (List of Number)
+- `vinses` (Number)
+- `zone_ids` (List of Number)
+
+
+### Nested Schema for `resource_limits`
+
+Optional:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+
+Read-Only:
+
+- `cu_dm` (Number)
+- `storage_policy` (List of Object) (see [below for nested schema](#nestedatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
+
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `users`
+
+Required:
+
+- `access_type` (String)
+- `user_id` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `can_be_deleted` (Boolean)
+- `emails` (List of String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `started` (Number)
+- `stopped` (Number)
+
+
+
+### Nested Schema for `machines`
+
+Read-Only:
+
+- `halted` (Number)
+- `running` (Number)
diff --git a/docs/resources/bservice.md b/docs/resources/bservice.md
new file mode 100644
index 00000000..cdb85559
--- /dev/null
+++ b/docs/resources/bservice.md
@@ -0,0 +1,118 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_bservice Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_bservice (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `rg_id` (Number) ID of the Resource Group where this service will be placed
+- `service_name` (String) Name of the service
+
+### Optional
+
+- `enable` (Boolean) Enable service. Enabling a service technically means setting model status of all computes and service itself to ENABLED. It does not start computes.
+- `permanently` (Boolean) if set to False, Basic service will be deleted to recycle bin. Otherwise destroyed immediately
+- `restore` (Boolean) Restores BasicService instance
+- `service_id` (Number)
+- `snapshots` (Block List) (see [below for nested schema](#nestedblock--snapshots))
+- `ssh_key` (String) SSH key to deploy for the specified user. Same key will be deployed to all computes of the service.
+- `ssh_user` (String) name of the user to deploy SSH key for. Pass empty string if no SSH key deployment is required
+- `start` (Boolean) Start service. Starting a service technically means starting computes from all service groups according to group relations
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `zone_id` (Number) ID of the zone where this service will be placed
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `base_domain` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `cpu_total` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `disk_total` (Number)
+- `gid` (Number)
+- `groups` (List of Object) (see [below for nested schema](#nestedatt--groups))
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `milestones` (Number)
+- `parent_srv_id` (Number)
+- `parent_srv_type` (String)
+- `ram_total` (Number)
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+
+
+### Nested Schema for `snapshots`
+
+Optional:
+
+- `label` (String)
+- `rollback` (Boolean)
+
+Read-Only:
+
+- `guid` (String)
+- `timestamp` (Number)
+- `valid` (Boolean)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `account_id` (Number)
+- `architecture` (String)
+- `compgroup_id` (Number)
+- `compgroup_name` (String)
+- `compgroup_role` (String)
+- `id` (Number)
+- `name` (String)
+- `node_id` (Number)
+- `rg_id` (Number)
+- `status` (String)
+- `tech_status` (String)
+
+
+
+### Nested Schema for `groups`
+
+Read-Only:
+
+- `computes` (Number)
+- `consistency` (Boolean)
+- `id` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
diff --git a/docs/resources/bservice_group.md b/docs/resources/bservice_group.md
new file mode 100644
index 00000000..4d002d0e
--- /dev/null
+++ b/docs/resources/bservice_group.md
@@ -0,0 +1,100 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_bservice_group Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_bservice_group (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `comp_count` (Number) computes number. Defines how many computes must be there in the group
+- `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
+- `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
+- `storage_policy_id` (Number) storage policy id of compute. The rules of the specified storage policy will be used.
+
+### Optional
+
+- `chipset` (String) Chipset for virtual machines.
+- `cloud_init` (String) Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.
+- `compgroup_id` (Number)
+- `extnets` (List of Number) list of external networks to connect computes to
+- `force_stop` (Boolean) force stop Compute Group
+- `force_update` (Boolean) force resize Compute Group
+- `mode` (String) (RELATIVE;ABSOLUTE) either delta or absolute value of computes
+- `parents` (List of Number)
+- `remove_computes` (List of Number)
+- `role` (String) group role tag. Can be empty string, does not have to be unique
+- `sep_id` (Number) storage endpoint provider ID
+- `sep_pool` (String) pool to use if sepId is set, can be also empty if needed to be chosen by system
+- `start` (Boolean) Start the specified Compute Group within BasicService
+- `timeout_start` (Number) time of Compute Group readiness
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vinses` (List of Number) list of ViNSes to connect computes to
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `consistency` (Boolean)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `milestones` (Number)
+- `rg_id` (Number)
+- `rg_name` (String)
+- `seq_no` (Number)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `chipset` (String)
+- `id` (Number)
+- `ip_addresses` (List of String)
+- `name` (String)
+- `os_users` (List of Object) (see [below for nested schema](#nestedobjatt--computes--os_users))
+
+
+### Nested Schema for `computes.os_users`
+
+Read-Only:
+
+- `login` (String)
+- `password` (String)
diff --git a/docs/resources/cb_account.md b/docs/resources/cb_account.md
new file mode 100644
index 00000000..33fecb24
--- /dev/null
+++ b/docs/resources/cb_account.md
@@ -0,0 +1,132 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_account Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_account (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_name` (String) account name
+- `username` (String) username of owner the account
+
+### Optional
+
+- `account_id` (Number)
+- `available_templates` (Set of Number) Share images with account
+- `compute_features` (Set of String)
+- `cpu_allocation_parameter` (String) set cpu allocation parameter
+- `cpu_allocation_ratio` (Number) set cpu allocation ratio
+- `default_zone_id` (Number) email
+- `desc` (String) description
+- `emailaddress` (String) email
+- `enable` (Boolean) enable/disable account
+- `permanently` (Boolean) whether to completely delete the account
+- `resource_limits` (Block List, Max: 1) (see [below for nested schema](#nestedblock--resource_limits))
+- `restore` (Boolean) restore a deleted account
+- `send_access_emails` (Boolean) if true send emails when a user is granted access to resources
+- `storage_policy` (Block Set) (see [below for nested schema](#nestedblock--storage_policy))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `uniq_pools` (List of String)
+- `users` (Block List) (see [below for nested schema](#nestedblock--users))
+- `zone_ids` (Set of Number)
+
+### Read-Only
+
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `company` (String)
+- `companyurl` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `dc_location` (String)
+- `deactivation_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `displayname` (String)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `resource_types` (List of String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `version` (Number)
+- `vins` (List of Number)
+
+
+### Nested Schema for `resource_limits`
+
+Optional:
+
+- `cu_c` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+
+Read-Only:
+
+- `cu_d` (Number)
+- `storage_policy` (List of Object) (see [below for nested schema](#nestedatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
+
+
+
+
+### Nested Schema for `storage_policy`
+
+Required:
+
+- `id` (Number)
+- `limit` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `users`
+
+Required:
+
+- `access_type` (String)
+- `user_id` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `emails` (List of String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
diff --git a/docs/resources/cb_cdrom_image.md b/docs/resources/cb_cdrom_image.md
new file mode 100644
index 00000000..97e34348
--- /dev/null
+++ b/docs/resources/cb_cdrom_image.md
@@ -0,0 +1,102 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_cdrom_image Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_cdrom_image (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String) Name of the rescue disk
+- `storage_policy_id` (Number) ID of the storage policy
+- `url` (String) URL where to download ISO from
+
+### Optional
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `architecture` (String) binary architecture of this image, one of X86_64
+- `bootable` (Boolean) Does this image boot OS
+- `computeci_id` (Number)
+- `enabled` (Boolean)
+- `hot_resize` (Boolean) Does this machine supports hot resize
+- `password_dl` (String) password for upload binary media
+- `pool_name` (String) pool for image create
+- `sep_id` (Number) storage endpoint provider ID
+- `shared_with` (List of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username_dl` (String) username for upload binary media
+
+### Read-Only
+
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `boot_type` (String) Boot type of image bios or uefi
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number) image id
+- `image_type` (String) Image type linux, windows or other
+- `last_modified` (Number)
+- `link_to` (Number)
+- `milestones` (Number)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `size` (Number) image size
+- `snapshot_id` (String) snapshot id
+- `status` (String) status
+- `tech_status` (String) tech atatus
+- `to_clean` (Boolean)
+- `unc_path` (String) unc path
+- `version` (String) version
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/cb_disk.md b/docs/resources/cb_disk.md
new file mode 100644
index 00000000..d557e3d1
--- /dev/null
+++ b/docs/resources/cb_disk.md
@@ -0,0 +1,156 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+- `disk_name` (String)
+- `size_max` (Number)
+- `storage_policy_id` (Number)
+
+### Optional
+
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `cache` (String) Cache mode for the disk
+- `desc` (String)
+- `detach` (Boolean) detach disk from machine first
+- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--iotune))
+- `node_ids` (Set of Number)
+- `permanently` (Boolean) whether to completely delete the disk, works only with non attached disks
+- `pool` (String)
+- `restore` (Boolean) restore deleting disk
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_name` (String)
+- `acl` (String)
+- `boot_partition` (Number)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `destruction_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_path` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `images` (List of Number)
+- `independent` (Boolean)
+- `iqn` (String)
+- `login` (String)
+- `machine_id` (Number)
+- `machine_name` (String)
+- `milestones` (Number)
+- `order` (Number)
+- `params` (String)
+- `parent_id` (Number)
+- `passwd` (String)
+- `pci_slot` (Number)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `purge_attempts` (Number)
+- `purge_time` (Number)
+- `reality_device_number` (Number)
+- `reference_id` (String)
+- `replication` (List of Object) Replication status (see [below for nested schema](#nestedatt--replication))
+- `res_id` (String)
+- `res_name` (String)
+- `role` (String)
+- `sep_type` (String)
+- `size_used` (Number)
+- `snapshots` (List of Object) (see [below for nested schema](#nestedatt--snapshots))
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number)
+
+
+### Nested Schema for `iotune`
+
+Optional:
+
+- `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 `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 `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_disk_snapshot.md b/docs/resources/cb_disk_snapshot.md
new file mode 100644
index 00000000..d90b8679
--- /dev/null
+++ b/docs/resources/cb_disk_snapshot.md
@@ -0,0 +1,47 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_disk_snapshot Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_disk_snapshot (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) The unique ID of the subscriber-owner of the disk
+- `label` (String) Name of the snapshot
+
+### Optional
+
+- `rollback` (Boolean) Needed in order to make a snapshot rollback
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `timestamp` (Number) Snapshot time
+
+### Read-Only
+
+- `guid` (String) ID of the snapshot
+- `id` (String) The ID of this resource.
+- `reference_id` (String)
+- `res_id` (String) Reference to the snapshot
+- `snap_set_guid` (String) The set snapshot ID
+- `snap_set_time` (Number) The set time of the snapshot
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_dpdknet.md b/docs/resources/cb_dpdknet.md
new file mode 100644
index 00000000..d6a162d7
--- /dev/null
+++ b/docs/resources/cb_dpdknet.md
@@ -0,0 +1,53 @@
+---
+# 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
+- `enable_secgroups` (Boolean) enable security groups
+- `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_extnet.md b/docs/resources/cb_extnet.md
new file mode 100644
index 00000000..84bdb25d
--- /dev/null
+++ b/docs/resources/cb_extnet.md
@@ -0,0 +1,179 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `gid` (Number) Grid (platform) ID
+- `ipcidr` (String) IP network CIDR
+- `name` (String) External network name
+- `vlan_id` (Number) VLAN ID
+
+### Optional
+
+- `check_ips` (List of String) IPs to check network availability
+- `default_qos` (Block List, Max: 1) (see [below for nested schema](#nestedblock--default_qos))
+- `desc` (String) Optional description
+- `dns` (List of String) List of DNS addresses
+- `enable` (Boolean) Disable/Enable extnet
+- `enable_secgroups` (Boolean) enable security groups
+- `end_ip` (String) End of IP range to be explicitly included
+- `excluded_ips` (Set of String) IPs to exclude in current extnet pool
+- `excluded_ips_range` (Block Set) Range of IPs to exclude in current extnet pool (see [below for nested schema](#nestedblock--excluded_ips_range))
+- `gateway` (String) External network gateway IP address
+- `highly_available` (Boolean)
+- `migrate` (Number)
+- `mtu` (Number)
+- `ntp` (List of String) List of NTP addresses
+- `ovs_bridge` (String) OpenvSwith bridge name for ExtNet connection
+- `pre_reservations_num` (Number) Number of pre created reservations
+- `reserved_ip` (Block Set) (see [below for nested schema](#nestedblock--reserved_ip))
+- `restart` (Boolean) restart extnet vnf device
+- `sec_vnfdev_ip` (String)
+- `set_default` (Boolean) Set current extnet as default (can not be undone)
+- `shared_with` (Set of Number)
+- `start_ip` (String) Start of IP range to be explicitly included
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `virtual` (Boolean) If true - platform DHCP server will not be created
+- `vnfdev_ip` (String) IP to create VNFDev with
+- `zone_id` (Number)
+
+### Read-Only
+
+- `ckey` (String)
+- `default` (Boolean)
+- `excluded` (List of Object) (see [below for nested schema](#nestedatt--excluded))
+- `extnet_id` (Number)
+- `free_ips` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `meta` (List of String) meta
+- `milestones` (Number)
+- `network` (String)
+- `network_ids` (List of Object) (see [below for nested schema](#nestedatt--network_ids))
+- `prefix` (Number)
+- `pri_vnfdev_id` (Number)
+- `reservations` (List of Object) (see [below for nested schema](#nestedatt--reservations))
+- `routes` (List of Object) (see [below for nested schema](#nestedatt--routes))
+- `status` (String)
+- `vnfs` (List of Object) (see [below for nested schema](#nestedatt--vnfs))
+
+
+### Nested Schema for `default_qos`
+
+Optional:
+
+- `e_rate` (Number)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+Read-Only:
+
+- `guid` (String)
+
+
+
+### Nested Schema for `excluded_ips_range`
+
+Required:
+
+- `ip_end` (String)
+- `ip_start` (String)
+
+
+
+### Nested Schema for `reserved_ip`
+
+Required:
+
+- `account_id` (Number)
+
+Optional:
+
+- `ip_count` (Number)
+- `ips` (Set of String)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `excluded`
+
+Read-Only:
+
+- `client_type` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `network_ids`
+
+Read-Only:
+
+- `primary` (Number)
+- `secondary` (Number)
+
+
+
+### Nested Schema for `reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `client_type` (String)
+- `desc` (String)
+- `domain_name` (String)
+- `hostname` (String)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+### Nested Schema for `routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+### Nested Schema for `vnfs`
+
+Read-Only:
+
+- `dhcp` (Number)
diff --git a/docs/resources/cb_extnet_static_route.md b/docs/resources/cb_extnet_static_route.md
new file mode 100644
index 00000000..390931b5
--- /dev/null
+++ b/docs/resources/cb_extnet_static_route.md
@@ -0,0 +1,45 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_extnet_static_route Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_extnet_static_route (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `destination` (String)
+- `extnet_id` (Number) Unique ID of the ExtNet
+- `gateway` (String)
+- `netmask` (String)
+
+### Optional
+
+- `compute_ids` (Set of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `route_id` (Number) Unique ID of the static route
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_flipgroup.md b/docs/resources/cb_flipgroup.md
new file mode 100644
index 00000000..6754c2ca
--- /dev/null
+++ b/docs/resources/cb_flipgroup.md
@@ -0,0 +1,65 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_flipgroup Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_flipgroup (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) Account ID
+- `name` (String) Flipgroup name
+- `net_id` (Number) EXTNET or ViNS ID
+- `net_type` (String) Network type, EXTNET or VINS
+
+### Optional
+
+- `client_ids` (List of Number) List of clients attached to this Flipgroup instance
+- `client_type` (String) Type of client, 'compute' ('vins' will be later)
+- `desc` (String) Text description of this Flipgroup instance
+- `ip` (String) IP address to associate with this group. If empty, the platform will autoselect IP address
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_name` (String) account_name
+- `ckey` (String)
+- `client_names` (List of String) client_names
+- `conn_id` (Number)
+- `conn_type` (String)
+- `created_by` (String) created_by
+- `created_time` (Number) created_time
+- `default_gw` (String)
+- `deleted_by` (String) deleted_by
+- `deleted_time` (Number) deleted_time
+- `flipgroup_id` (Number)
+- `gid` (Number) gid
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `milestones` (Number) milestones
+- `net_mask` (Number)
+- `network` (String) network
+- `status` (String)
+- `updated_by` (String) updated_by
+- `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
new file mode 100644
index 00000000..db5a07b8
--- /dev/null
+++ b/docs/resources/cb_image.md
@@ -0,0 +1,109 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_image Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_image (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `boot_type` (String) Boot type of image bios or uefi
+- `image_type` (String) Image type linux, windows or other
+- `name` (String) Name of the rescue disk
+- `storage_policy_id` (Number) ID of the storage policy
+- `url` (String) URL where to download media from
+
+### Optional
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `bootable` (Boolean) Does this image boot OS
+- `computeci_id` (Number)
+- `enabled` (Boolean)
+- `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
+- `password_dl` (String) password for upload binary media
+- `pool_name` (String) pool for image create
+- `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)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+- `username_dl` (String) username for upload binary media
+
+### Read-Only
+
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `architecture` (String) binary architecture of this image, one of X86_64
+- `cd_presented_to` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number) image id
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `size` (Number) image size
+- `snapshot_id` (String) snapshot id
+- `status` (String) status
+- `tech_status` (String) tech atatus
+- `to_clean` (Boolean)
+- `unc_path` (String) unc path
+- `version` (String) version
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/cb_image_from_blank_compute.md b/docs/resources/cb_image_from_blank_compute.md
new file mode 100644
index 00000000..f28f3dfb
--- /dev/null
+++ b/docs/resources/cb_image_from_blank_compute.md
@@ -0,0 +1,107 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_image_from_blank_compute Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_image_from_blank_compute (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `boot_type` (String) Boot type of image BIOS or UEFI
+- `compute_id` (Number) Compute Id
+- `image_type` (String) Image type linux, windows or unknown
+- `name` (String) Name of the rescue disk
+- `storage_policy_id` (Number) Storage policy ID
+
+### Optional
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `async_mode` (Boolean) create an image in async/sync mode
+- `bootable` (Boolean) Does this image boot OS
+- `computeci_id` (Number)
+- `enabled` (Boolean)
+- `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
+- `pool_name` (String) pool for image create
+- `shared_with` (List of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+
+### Read-Only
+
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `architecture` (String)
+- `cd_presented_to` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number) storage endpoint provider ID
+- `size` (Number)
+- `snapshot_id` (String) snapshot id
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `unc_path` (String)
+- `url` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/cb_image_from_platform_disk.md b/docs/resources/cb_image_from_platform_disk.md
new file mode 100644
index 00000000..666de83d
--- /dev/null
+++ b/docs/resources/cb_image_from_platform_disk.md
@@ -0,0 +1,106 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_image_from_platform_disk Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_image_from_platform_disk (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `boot_type` (String) Boot type of image BIOS or UEFI
+- `disk_id` (Number) Disk Id
+- `image_type` (String) Image type linux, windows or unknown
+- `name` (String) Name of the rescue disk
+
+### Optional
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `async_mode` (Boolean) create an image in async/sync mode
+- `bootable` (Boolean) Does this image boot OS
+- `computeci_id` (Number)
+- `enabled` (Boolean)
+- `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
+- `pool_name` (String) pool for image create
+- `shared_with` (List of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+
+### Read-Only
+
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `architecture` (String)
+- `cd_presented_to` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number) storage endpoint provider ID
+- `size` (Number)
+- `snapshot_id` (String) snapshot id
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `unc_path` (String)
+- `url` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/cb_k8ci.md b/docs/resources/cb_k8ci.md
new file mode 100644
index 00000000..f2013736
--- /dev/null
+++ b/docs/resources/cb_k8ci.md
@@ -0,0 +1,55 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8ci Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8ci (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `master_image_id` (Number)
+- `max_master_count` (Number)
+- `max_worker_count` (Number)
+- `name` (String) K8CI name
+- `network_plugins` (List of String)
+- `version` (String)
+- `worker_image_id` (Number)
+
+### Optional
+
+- `desc` (String)
+- `enabled` (Boolean)
+- `permanently` (Boolean)
+- `shared_with` (Set of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `gid` (Number) gid
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `k8ci_id` (Number) K8CI ID
+- `lb_image_id` (Number) LB Image ID
+- `milestones` (Number)
+- `status` (String) K8CI Status
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_k8s_cp.md b/docs/resources/cb_k8s_cp.md
new file mode 100644
index 00000000..abf8faea
--- /dev/null
+++ b/docs/resources/cb_k8s_cp.md
@@ -0,0 +1,164 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_cp Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_cp (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8sci_id` (Number) ID of the k8s catalog item to base this instance on.
+- `name` (String) Name of the cluster.
+- `network_plugin` (String) Network plugin to be used
+- `rg_id` (Number) Resource group ID that this instance belongs to.
+- `storage_policy_id` (Number) ID of the storage policy
+
+### 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. Possible values: i440fx, Q35. Default: Q35
+- `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.
+- `disk` (Number) Node boot disk size in GB.
+- `enabled` (Boolean) Enable k8s cluster
+- `extnet_id` (Number) ID of the external network to connect workers to. If omitted network will be chosen by the platfom.
+- `extnet_only` (Boolean) Use only selected ExtNet for infrastructure connections
+- `ha_mode` (Boolean) Use Highly Available schema for LB deploy
+- `init_config` (String) is used to define settings and actions that should be performed before any other component in the cluster starts. It allows you to configure things like node registration, network setup, and other initialization tasks. insert a valid JSON string with all levels of nesting.
+- `join_config` (String) is used to configure the behavior and settings for joining a node to a cluster. It includes parameters such as the cluster's control plane endpoint, token, and certificate key. insert a valid JSON string with all levels of nesting.
+- `kube_proxy_config` (String) is used to configure the behavior and settings of the Kube-proxy, which is responsible for network proxying and load balancing within the cluster. It includes parameters such as proxy mode, cluster IP ranges, and other Kube-proxy specific configurations. insert a valid JSON string with all levels of nesting.
+- `kubelet_config` (String) is used to configure the behavior and settings of the Kubelet, which is the primary node agent that runs on each node in the cluster. It includes parameters such as node IP address, resource allocation, pod eviction policies, and other Kubelet-specific configurations. insert a valid JSON string with all levels of nesting.
+- `lb_sysctl_params` (List of Map of String) Custom sysctl values for Load Balancer instance. Applied on boot.
+- `num` (Number) Number of VMs to create. Can be either 1 or 3 or 5
+- `oidc_cert` (String) insert ssl certificate in x509 pem format
+- `permanently` (Boolean) whether to completely delete the account
+- `ram` (Number) Node RAM in MB.
+- `restore` (Boolean)
+- `sep_id` (Number) Storage Endpoint ID
+- `sep_pool` (String) Storage Endpoint Pool
+- `start` (Boolean) Start k8s cluster.
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) ID of default vins for this instace.
+- `with_lb` (Boolean) Create k8s with load balancer if true.
+- `zone_id` (Number)
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `bservice_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_wg_id` (Number) ID of default workers group for this instace.
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--detailed_info))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `k8s_ci_name` (String)
+- `k8s_id` (Number)
+- `kubeconfig` (String) Kubeconfig for cluster access.
+- `lb_id` (Number)
+- `lb_ip` (String) IP address of default load balancer.
+- `master_id` (Number) Master group ID.
+- `master_name` (String) Master group name.
+- `milestones` (Number)
+- `rg_name` (String)
+- `ssh_key` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--account_acl))
+- `k8s_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--k8s_acl))
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--rg_acl))
+
+
+### Nested Schema for `acl.account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.k8s_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+
+### Nested Schema for `detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--detailed_info--interfaces))
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/resources/cb_k8s_wg.md b/docs/resources/cb_k8s_wg.md
new file mode 100644
index 00000000..ffa5ff39
--- /dev/null
+++ b/docs/resources/cb_k8s_wg.md
@@ -0,0 +1,75 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_k8s_wg Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_k8s_wg (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number) ID of k8s instance.
+- `name` (String) Name of the worker group.
+- `storage_policy_id` (Number) ID of the storage policy
+
+### Optional
+
+- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system. Possible values: i440fx, Q35. Default: Q35
+- `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.
+- `labels` (List of String)
+- `num` (Number) Number of worker nodes to create.
+- `ram` (Number) Node RAM in MB.
+- `taints` (List of String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `worker_sep_id` (Number)
+- `worker_sep_pool` (String)
+
+### Read-Only
+
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--detailed_info))
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `wg_id` (Number) ID of k8s worker Group.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--detailed_info--interfaces))
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/resources/cb_kvmvm.md b/docs/resources/cb_kvmvm.md
new file mode 100644
index 00000000..0bcd2fe7
--- /dev/null
+++ b/docs/resources/cb_kvmvm.md
@@ -0,0 +1,477 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_kvmvm Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_kvmvm (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `cpu` (Number) Number of CPUs to allocate to this compute instance.
+- `name` (String) Name of this compute. Compute names are case sensitive and must be unique in the resource group.
+- `ram` (Number) Amount of RAM in MB to allocate to this compute instance.
+- `rg_id` (Number) ID of the resource group where this compute should be deployed.
+- `storage_policy_id` (Number) Storage policy id of compute. The rules of the specified storage policy will be used.
+
+### Optional
+
+- `affinity_label` (String) Set affinity label for compute
+- `affinity_rules` (Block List) (see [below for nested schema](#nestedblock--affinity_rules))
+- `alt_boot_id` (Number) ID of CD-ROM live image to boot
+- `anti_affinity_rules` (Block List) (see [below for nested schema](#nestedblock--anti_affinity_rules))
+- `auto_start_w_node` (Boolean)
+- `boot_disk_blk_discard` (Boolean)
+- `boot_disk_cache` (String) Setting the boot disk caching mode
+- `boot_disk_size` (Number) This compute instance boot disk size in GB. Make sure it is large enough to accomodate selected OS image.
+- `boot_type` (String) Type of image upload.
+- `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.
+- `create_blank` (Boolean) If True, the compute is created via kvmx86/createBlank endpoint (without OS image). The image_id field is not required in this case.
+- `custom_fields` (String)
+- `description` (String) Optional text description of this compute instance.
+- `detach_disks` (Boolean)
+- `disks` (Block List) (see [below for nested schema](#nestedblock--disks))
+- `enabled` (Boolean) If true - enable compute, else - disable
+- `extra_disks` (Set of Number) Optional list of IDs of extra disks to attach to this compute. You may specify several extra disks.
+- `force_pin` (Boolean)
+- `force_resize` (Boolean) Flag for resize compute
+- `force_stop` (Boolean) Flag for redeploy compute
+- `hot_resize` (Boolean) Type of image vm.
+- `hp_backed` (Boolean) Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.
+- `image_id` (Number) ID of the OS image to base this compute instance on.
+- `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))
+- `loader_type` (String) Type of image vm.
+- `network` (Block Set) Optional network connection(s) for this compute. You may specify several network blocks, one for each connection. (see [below for nested schema](#nestedblock--network))
+- `network_interface_naming` (String) Name of netfowrk interface.
+- `node_id` (Number) ID of node to start compute
+- `numa_affinity` (String) Rule for VM placement with NUMA affinity.
+- `os_version` (String) the OS version installed on the VM
+- `pause` (Boolean)
+- `pci_devices` (Set of Number) ID of the connected pci devices
+- `permanently` (Boolean)
+- `pin_to_node` (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))
+- `preferred_cpu` (List of Number) Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
+- `read_only` (Boolean) Sets read-only mode for this compute. Only data operations allowed when enabled.
+- `reset` (Boolean)
+- `restore` (Boolean)
+- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
+- `security_groups` (Block Set) list of security group IDs to apply to this interface (see [below for nested schema](#nestedblock--security_groups))
+- `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))
+- `started` (Boolean) Is compute started.
+- `tags` (Block Set) (see [below for nested schema](#nestedblock--tags))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `user_access` (Block Set) (see [below for nested schema](#nestedblock--user_access))
+- `weight` (Number) Priority weight of the compute. Higher value means higher priority and later migration.
+- `without_boot_disk` (Boolean) If True, the imageId, bootDisk, sepId, pool parameters are ignored and the compute is created without a boot disk in the stopped state.
+- `zone_id` (Number)
+
+### Read-Only
+
+- `account_id` (Number) ID of the account this compute instance belongs to.
+- `account_name` (String) Name of the account this compute instance belongs to.
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `affinity_weight` (Number)
+- `arch` (String)
+- `boot_disk_id` (Number) This compute instance boot disk ID.
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `cd_image_id` (Number)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `compute_id` (Number)
+- `computeci_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `delete_async_mode` (Boolean) async mode
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `devices` (String)
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `image_name` (String)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `natable_vins_id` (Number)
+- `natable_vins_ip` (String)
+- `natable_vins_name` (String)
+- `natable_vins_network` (String)
+- `natable_vins_network_name` (String)
+- `need_reboot` (Boolean)
+- `node_name` (String) Name of the node, on which VM started
+- `numa_node_id` (Number)
+- `os_users` (List of Object) Guest OS users provisioned on this compute instance. (see [below for nested schema](#nestedatt--os_users))
+- `pinned` (Number)
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_name` (String) Name of the resource group where this compute instance is located.
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedatt--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vgpus` (List of Object) List of virtual GPUs (see [below for nested schema](#nestedatt--vgpus))
+- `virtual_image_name` (String)
+- `vnc_password` (String)
+
+
+### Nested Schema for `affinity_rules`
+
+Required:
+
+- `key` (String) key that are taken into account when analyzing this rule will be identified
+- `mode` (String) EQ or NE or ANY - the comparison mode is 'value', recorded by the specified 'key'
+- `policy` (String) RECOMMENDED or REQUIRED, the degree of 'strictness' of this rule
+- `topology` (String) compute or node, for whom rule applies
+- `value` (String) value that must match the key to be taken into account when analyzing this rule
+
+
+
+### Nested Schema for `anti_affinity_rules`
+
+Required:
+
+- `key` (String) key that are taken into account when analyzing this rule will be identified
+- `mode` (String) EQ or NE or ANY - the comparison mode is 'value', recorded by the specified 'key'
+- `policy` (String) RECOMMENDED or REQUIRED, the degree of 'strictness' of this rule
+- `topology` (String) compute or node, for whom rule applies
+- `value` (String) value that must match the key to be taken into account when analyzing this rule
+
+
+
+### Nested Schema for `cd`
+
+Required:
+
+- `cdrom_id` (Number)
+
+
+
+### Nested Schema for `disks`
+
+Required:
+
+- `disk_name` (String) Name for disk
+- `size` (Number) Disk size in GiB
+- `storage_policy_id` (Number) Storage policy id of disk. The rules of the specified storage policy will be used.
+
+Optional:
+
+- `blk_discard` (Boolean)
+- `block_size` (String) Disk block size
+- `cache` (String) Setting the disk caching mode
+- `desc` (String) Optional description
+- `image_id` (Number) Specify image id for create disk from template
+- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--disks--iotune))
+- `node_ids` (Set of Number)
+- `permanently` (Boolean) Disk deletion status
+- `pool` (String) Pool name; by default will be chosen automatically
+- `sep_id` (Number) Storage endpoint provider ID; by default the same with boot disk
+
+Read-Only:
+
+- `bus_number` (Number) Bus number of the disk on virtual bus (6 = boot disk)
+- `create_by` (String)
+- `create_time` (Number)
+- `delete_by` (String)
+- `delete_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number) Disk ID
+- `independent` (Boolean)
+- `pci_slot` (Number) PCI slot number of the disk
+- `present_to` (Map of Number)
+- `provision` (String)
+- `shareable` (Boolean)
+- `size_max` (Number)
+- `size_used` (Number)
+- `to_clean` (Boolean)
+- `update_time` (Number)
+
+
+### Nested Schema for `disks.iotune`
+
+Optional:
+
+- `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 `libvirt_settings`
+
+Required:
+
+- `net_id` (Number) ID of the network
+- `net_type` (String) Type of the network
+
+Optional:
+
+- `event_idx` (String)
+- `ioeventfd` (String)
+- `queues` (Number)
+- `rx_queue_size` (Number)
+- `tx_queue_size` (Number)
+- `txmode` (String)
+
+
+
+### Nested Schema for `network`
+
+Required:
+
+- `net_id` (Number) ID of the network for this connection.
+- `net_type` (String) Type of the network for this connection
+
+Optional:
+
+- `enabled` (Boolean) network enable flag
+- `ip_address` (String) Optional IP address to assign to this connection. This IP should belong to the selected network and free for use.
+- `mac` (String) MAC address associated with this connection. MAC address is assigned automatically.
+- `mtu` (Number) Maximum transmission unit, used only for DPDK type, must be 1500-9216
+- `net_mask` (Number) Subnet mask, used only for DPDK and VFNIC network types
+- `sdn_interface_id` (String) unique_identifier of LogicalPort on SDN side
+- `weight` (Number) weight the network if you need to sort network list, the smallest attach first. zero or null weight attach last
+
+
+
+### Nested Schema for `port_forwarding`
+
+Required:
+
+- `proto` (String)
+- `public_port_start` (Number)
+
+Optional:
+
+- `local_port` (Number)
+- `public_port_end` (Number)
+
+Read-Only:
+
+- `rule_id` (Number)
+
+
+
+### Nested Schema for `rollback`
+
+Required:
+
+- `label` (String)
+
+
+
+### Nested Schema for `security_groups`
+
+Required:
+
+- `net_id` (Number) ID of the network
+- `net_type` (String) Type of the network
+- `security_groups` (Set of Number)
+
+Optional:
+
+- `enable_secgroups` (Boolean)
+
+
+
+### Nested Schema for `snapshot`
+
+Required:
+
+- `label` (String)
+
+
+
+### Nested Schema for `tags`
+
+Required:
+
+- `key` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `user_access`
+
+Required:
+
+- `access_type` (String)
+- `username` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
+
+### Nested Schema for `os_users`
+
+Read-Only:
+
+- `guid` (String)
+- `login` (String)
+- `password` (String)
+- `public_key` (String)
+
+
+
+### Nested Schema for `snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `vgpus`
+
+Read-Only:
+
+- `account_id` (Number)
+- `bus_number` (Number)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `last_claimed_by` (Number)
+- `last_update_time` (Number)
+- `mode` (String)
+- `pci_slot` (Number)
+- `pgpuid` (Number)
+- `profile_id` (Number)
+- `ram` (Number)
+- `reference_id` (String)
+- `rg_id` (Number)
+- `status` (String)
+- `type` (String)
+- `vmid` (Number)
diff --git a/docs/resources/cb_lb.md b/docs/resources/cb_lb.md
new file mode 100644
index 00000000..ab6da12b
--- /dev/null
+++ b/docs/resources/cb_lb.md
@@ -0,0 +1,180 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String)
+- `rg_id` (Number)
+
+### Optional
+
+- `config_reset` (Boolean)
+- `desc` (String)
+- `enable` (Boolean)
+- `extnet_id` (Number)
+- `ha_mode` (Boolean)
+- `permanently` (Boolean)
+- `restart` (Boolean)
+- `restore` (Boolean)
+- `safe` (Boolean)
+- `start` (Boolean)
+- `sysctl_params` (List of Map of String) Custom sysctl values for Load Balancer instance. Applied on boot
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number)
+- `zone_id` (Number)
+
+### Read-Only
+
+- `acl` (String)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedatt--backends))
+- `ckey` (String)
+- `dp_api_password` (String)
+- `dp_api_user` (String)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedatt--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `lb_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedatt--primary_node))
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedatt--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `user_managed` (Boolean)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers))
+
+
+### Nested Schema for `backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers--server_settings))
+
+
+### Nested Schema for `backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/resources/cb_lb_backend.md b/docs/resources/cb_lb_backend.md
new file mode 100644
index 00000000..afe7d7fc
--- /dev/null
+++ b/docs/resources/cb_lb_backend.md
@@ -0,0 +1,86 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb_backend Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb_backend (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String) Must be unique among all backends of this LB - name of the new backend to create
+
+### Optional
+
+- `algorithm` (String)
+- `downinter` (Number)
+- `fall` (Number)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `servers` (Block List) (see [below for nested schema](#nestedblock--servers))
+- `slowstart` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `weight` (Number)
+
+### Read-Only
+
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `servers`
+
+Optional:
+
+- `address` (String)
+- `check` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (Block List) (see [below for nested schema](#nestedblock--servers--server_settings))
+
+Read-Only:
+
+- `guid` (String)
+
+
+### Nested Schema for `servers.server_settings`
+
+Optional:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+Read-Only:
+
+- `guid` (String)
+
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_lb_backend_server.md b/docs/resources/cb_lb_backend_server.md
new file mode 100644
index 00000000..e1a52ce1
--- /dev/null
+++ b/docs/resources/cb_lb_backend_server.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb_backend_server Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb_backend_server (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `address` (String) IP address of the server.
+- `backend_name` (String) Must be unique among all backends of this LB - name of the new backend to create
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String) Must be unique among all servers defined for this backend - name of the server definition to add.
+- `port` (Number) Port number on the server
+
+### Optional
+
+- `check` (String) set to disabled if this server should be used regardless of its state.
+- `downinter` (Number)
+- `fall` (Number)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `weight` (Number)
+
+### Read-Only
+
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_lb_frontend.md b/docs/resources/cb_lb_frontend.md
new file mode 100644
index 00000000..a5e83acf
--- /dev/null
+++ b/docs/resources/cb_lb_frontend.md
@@ -0,0 +1,54 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb_frontend Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb_frontend (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `backend_name` (String)
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `bindings` (List of Object) (see [below for nested schema](#nestedatt--bindings))
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
diff --git a/docs/resources/cb_lb_frontend_bind.md b/docs/resources/cb_lb_frontend_bind.md
new file mode 100644
index 00000000..2b473902
--- /dev/null
+++ b/docs/resources/cb_lb_frontend_bind.md
@@ -0,0 +1,44 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_lb_frontend_bind Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_lb_frontend_bind (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `address` (String)
+- `frontend_name` (String) Must be unique among all backends of this LB - name of the new backend to create
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String)
+- `port` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_multi_image.md b/docs/resources/cb_multi_image.md
new file mode 100644
index 00000000..78dded85
--- /dev/null
+++ b/docs/resources/cb_multi_image.md
@@ -0,0 +1,104 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_multi_image Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_multi_image (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String) Name of the multi image
+- `target_ids` (List of Number) IDs of real images to link this multi image to
+
+### Optional
+
+- `account_id` (Number) Account id to make the image exclusive
+- `bootable` (Boolean) Does this image boot OS
+- `computeci_id` (Number)
+- `enabled` (Boolean)
+- `hot_resize` (Boolean) Does this machine supports hot resize
+- `password` (String) Optional password for the image
+- `shared_with` (List of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+
+### Read-Only
+
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `architecture` (String)
+- `boot_type` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `image_type` (String)
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `pool_name` (String)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number)
+- `size` (Number)
+- `snapshot_id` (String)
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `unc_path` (String) unc path
+- `url` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/cb_pcidevice.md b/docs/resources/cb_pcidevice.md
new file mode 100644
index 00000000..5509840e
--- /dev/null
+++ b/docs/resources/cb_pcidevice.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_pcidevice Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_pcidevice (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `hw_path` (String) PCI address of the device
+- `name` (String) Name of Device
+- `node_id` (Number) Node ID
+- `rg_id` (Number) Resource GROUP
+
+### Optional
+
+- `description` (String) description, just for information
+- `device_id` (Number)
+- `enable` (Boolean) Enable pci device
+- `force_delete` (Boolean) Force delete
+- `force_disable` (Boolean) Force disable
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `ckey` (String)
+- `compute_id` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `meta` (List of String)
+- `status` (String)
+- `system_name` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_rg.md b/docs/resources/cb_rg.md
new file mode 100644
index 00000000..172b8a1a
--- /dev/null
+++ b/docs/resources/cb_rg.md
@@ -0,0 +1,152 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_rg Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_rg (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) Unique ID of the account, which this resource group belongs to.
+- `gid` (Number) Unique ID of the grid, where this resource group is deployed.
+- `rg_name` (String) Name of this resource group. Names are case sensitive and unique within the context of a account.
+
+### Optional
+
+- `access` (Block Set) (see [below for nested schema](#nestedblock--access))
+- `compute_features` (Set of String)
+- `cpu_allocation_parameter` (String) set cpu allocation parameter
+- `cpu_allocation_ratio` (Number) set cpu allocation ratio
+- `def_net` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--def_net))
+- `def_net_type` (String) Type of the network, which this resource group will use as default for its computes - PRIVATE or PUBLIC or NONE.
+- `description` (String) User-defined text description of this resource group.
+- `enable` (Boolean) enable/disable rg
+- `ext_ip` (String) IP address on the external netowrk to request when def_net_type=PRIVATE and ext_net_id is not 0
+- `ext_net_id` (Number) ID of the external network for default ViNS. Pass 0 if def_net_type=PUBLIC or no external connection required for the defult ViNS when def_net_type=PRIVATE
+- `force` (Boolean) flag to force deleting resource group
+- `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
+- `resource_limits` (Block List, Max: 1) (see [below for nested schema](#nestedblock--resource_limits))
+- `restore` (Boolean) restore deleted rg
+- `sdn_access_group_id` (String) ID of the SDN access group
+- `storage_policy` (Block Set) (see [below for nested schema](#nestedblock--storage_policy))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `uniq_pools` (List of String)
+
+### Read-Only
+
+- `account_name` (String) Name of the account, which this resource group belongs to.
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number) ID of the default network for this resource group (if any).
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `lock_status` (String)
+- `milestones` (Number)
+- `resource_types` (List of String)
+- `rg_id` (Number)
+- `secret` (String)
+- `status` (String) Current status of this resource group.
+- `storage_policy_ids` (List of Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number) List of VINs deployed in this resource group.
+- `vms` (List of Number) List of VM ids in this resource group.
+
+
+### Nested Schema for `access`
+
+Required:
+
+- `right` (String) Access rights to set, one of 'R', 'RCX' or 'ARCXDU'
+- `user` (String) User or group name to grant access
+
+
+
+### Nested Schema for `def_net`
+
+Required:
+
+- `net_type` (String) Network type to set. Must be on of 'PRIVATE' or 'PUBLIC'.
+
+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.
+
+
+
+### Nested Schema for `resource_limits`
+
+Optional:
+
+- `cu_c` (Number) MaxCPUCapacity
+- `cu_dm` (Number) MaxVDiskCapacity
+- `cu_i` (Number) MaxNumPublicIP
+- `cu_m` (Number) MaxMemoryCapacity
+
+Read-Only:
+
+- `cu_d` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
+
+
+
+
+### Nested Schema for `storage_policy`
+
+Required:
+
+- `id` (Number)
+
+Optional:
+
+- `limit` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `email` (String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
diff --git a/docs/resources/cb_security_group.md b/docs/resources/cb_security_group.md
new file mode 100644
index 00000000..119b871b
--- /dev/null
+++ b/docs/resources/cb_security_group.md
@@ -0,0 +1,67 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_security_group Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_security_group (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+- `name` (String)
+
+### Optional
+
+- `description` (String)
+- `rules` (Block Set) (see [below for nested schema](#nestedblock--rules))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `created_at` (Number)
+- `created_by` (String)
+- `id` (String) The ID of this resource.
+- `security_group_id` (Number)
+- `updated_at` (Number)
+- `updated_by` (String)
+
+
+### Nested Schema for `rules`
+
+Required:
+
+- `direction` (String)
+
+Optional:
+
+- `ethertype` (String)
+- `port_range_max` (Number)
+- `port_range_min` (Number)
+- `protocol` (String)
+- `remote_ip_prefix` (String)
+
+Read-Only:
+
+- `id` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_sep.md b/docs/resources/cb_sep.md
new file mode 100644
index 00000000..cd5f86c3
--- /dev/null
+++ b/docs/resources/cb_sep.md
@@ -0,0 +1,94 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `config` (String) sep config string
+- `gid` (Number) grid (platform) ID
+- `name` (String) SEP name
+- `type` (String) type of storage
+
+### Optional
+
+- `access_to_pool` (Block Set, Max: 1) grant or revoke access to pool (see [below for nested schema](#nestedblock--access_to_pool))
+- `account_ids` (Set of Number) lift of account ids to have access to sep
+- `consumed_by` (Set of Number) list of consumer nodes IDs
+- `desc` (String) sep description
+- `enable` (Boolean) enable SEP after creation
+- `pools` (Block Set) add/delete pools to/from sep (see [below for nested schema](#nestedblock--pools))
+- `provided_by` (List of Number) list of provider nodes IDs
+- `sep_id` (Number) sep type des id
+- `shared_with` (List of Number) list of shared with ids
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `milestones` (Number) milestones
+- `multipath_num` (Number) multipath_num
+- `obj_status` (String) object status
+- `tech_status` (String) tech status
+
+
+### Nested Schema for `access_to_pool`
+
+Required:
+
+- `pool_name` (String) pool name
+- `rg_id` (Number) resource group id to grant/revoke access to the specified pool sep
+
+Optional:
+
+- `account_id_pool` (Number) account id to grant/revoke access to the specified pool sep
+
+
+
+### Nested Schema for `pools`
+
+Required:
+
+- `access_account_ids` (List of Number) access account ids
+- `access_res_group_ids` (List of Number) access res group ids
+- `usage_limit` (Number) usage limit
+
+Optional:
+
+- `name` (String) name
+- `types` (List of String) types
+- `uris` (Block Set) uris (see [below for nested schema](#nestedblock--pools--uris))
+
+
+### Nested Schema for `pools.uris`
+
+Required:
+
+- `ip` (String) ip
+- `port` (Number) port
+
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_sep_config.md b/docs/resources/cb_sep_config.md
new file mode 100644
index 00000000..05ad8b71
--- /dev/null
+++ b/docs/resources/cb_sep_config.md
@@ -0,0 +1,51 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_sep_config Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_sep_config (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `sep_id` (Number) sep id
+
+### Optional
+
+- `config` (String) config json string
+- `field_edit` (Block List, Max: 1) (see [below for nested schema](#nestedblock--field_edit))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `field_edit`
+
+Required:
+
+- `field_name` (String) field name
+- `field_type` (String) field type
+- `field_value` (String) field value
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_storage_policy.md b/docs/resources/cb_storage_policy.md
new file mode 100644
index 00000000..9a7e83d2
--- /dev/null
+++ b/docs/resources/cb_storage_policy.md
@@ -0,0 +1,69 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_storage_policy Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_storage_policy (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `access_seps_pools` (Block Set, Min: 1) (see [below for nested schema](#nestedblock--access_seps_pools))
+- `name` (String)
+
+### Optional
+
+- `description` (String)
+- `enabled` (Boolean)
+- `limit_iops` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `status` (String)
+- `usage` (List of Object) (see [below for nested schema](#nestedatt--usage))
+
+
+### Nested Schema for `access_seps_pools`
+
+Required:
+
+- `pool_name` (String)
+- `sep_id` (Number)
+
+Read-Only:
+
+- `sep_name` (String)
+- `sep_tech_status` (String)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `usage`
+
+Read-Only:
+
+- `accounts` (List of Number)
+- `resgroups` (List of Number)
diff --git a/docs/resources/cb_trunk.md b/docs/resources/cb_trunk.md
new file mode 100644
index 00000000..efedbab2
--- /dev/null
+++ b/docs/resources/cb_trunk.md
@@ -0,0 +1,56 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_trunk Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_trunk (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String) Name of the trunk
+- `ovs_bridge` (String) OVS bridge name
+- `trunk_tags` (String) List of trunk tags (values between 1-4095)
+
+### Optional
+
+- `account_ids` (Set of Number) List of account IDs with access to this trunk
+- `description` (String) Description of the trunk
+- `enable` (Boolean) Whether the trunk should be enabled
+- `mtu` (Number) Maximum Transmission Unit
+- `native_vlan_id` (Number) Native VLAN ID
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `created_at` (Number) when the trunk was created
+- `created_by` (String) who created the trunk
+- `deleted_at` (Number) when the trunk was updated
+- `deleted_by` (String) who updated the trunk
+- `guid` (Number) GUID
+- `id` (String) The ID of this resource.
+- `mac` (String) MAC address
+- `status` (String) if the trunk is enabled
+- `trunk_id` (Number) trunk id
+- `updated_at` (Number) when the trunk was updated
+- `updated_by` (String) who updated the trunk
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_user.md b/docs/resources/cb_user.md
new file mode 100644
index 00000000..6ea73466
--- /dev/null
+++ b/docs/resources/cb_user.md
@@ -0,0 +1,61 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_user Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_user (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `emailaddress` (String) email address of the user
+- `username` (String) ID of user
+
+### Optional
+
+- `apiaccess` (Set of Number) list of apiaccess groups this user belongs to
+- `blocked` (Boolean) is the user blocked
+- `password` (String) password of user
+- `provider_name` (String) provider
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `active` (Boolean) active
+- `auth_keys` (List of String) authkeys
+- `authkey` (String) authkey
+- `ckey` (String) ckey
+- `data` (String) data
+- `description` (String) description
+- `domain` (String) domain
+- `gid` (Number) gid
+- `groups` (List of String) list of groups this user belongs to
+- `guid` (String) guid
+- `id` (String) The ID of this resource.
+- `last_check` (Number) last_check
+- `meta` (List of String) meta
+- `mobile` (List of String) mobile
+- `protected` (Boolean) protected
+- `roles` (List of String) roles
+- `service_account` (Boolean) service_account
+- `xmpp` (List of String) xmpp
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_vfpool.md b/docs/resources/cb_vfpool.md
new file mode 100644
index 00000000..dcdeb787
--- /dev/null
+++ b/docs/resources/cb_vfpool.md
@@ -0,0 +1,87 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vfpool Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vfpool (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String) Name of device
+
+### Optional
+
+- `account_access` (Set of Number) List of account IDs
+- `config` (Block Set) List of dict describing configuration data (see [below for nested schema](#nestedblock--config))
+- `description` (String) Description
+- `enable` (Boolean)
+- `rg_access` (Set of Number) List of RG IDs
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `created_time` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `status` (String)
+- `updated_time` (Number)
+- `vfpool_id` (Number)
+- `vfs` (List of Object) (see [below for nested schema](#nestedatt--vfs))
+
+
+### Nested Schema for `config`
+
+Required:
+
+- `nic_name` (String)
+- `node_id` (Number)
+- `vf_ids` (List of Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `vfs`
+
+Read-Only:
+
+- `node_id` (Number)
+- `vf_list` (List of Object) (see [below for nested schema](#nestedobjatt--vfs--vf_list))
+
+
+### Nested Schema for `vfs.vf_list`
+
+Read-Only:
+
+- `nic_name` (String)
+- `vfs_info` (List of Object) (see [below for nested schema](#nestedobjatt--vfs--vf_list--vfs_info))
+
+
+### Nested Schema for `vfs.vf_list.vfs_info`
+
+Read-Only:
+
+- `claimed` (Boolean)
+- `id` (Number)
+- `vm_id` (Number)
diff --git a/docs/resources/cb_vins.md b/docs/resources/cb_vins.md
new file mode 100644
index 00000000..def08bee
--- /dev/null
+++ b/docs/resources/cb_vins.md
@@ -0,0 +1,516 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String) name
+
+### Optional
+
+- `account_id` (Number)
+- `default_qos` (Block List) default qoa (see [below for nested schema](#nestedblock--default_qos))
+- `description` (String) Optional user-defined text description of this ViNS.
+- `dns` (Set of String)
+- `enable` (Boolean) enable for enable/disable requests
+- `enable_secgroups` (Boolean) enable security groups
+- `ext_ip` (String)
+- `ext_net_id` (Number)
+- `force` (Boolean) force for delete request
+- `gid` (Number)
+- `ip` (Block List) (see [below for nested schema](#nestedblock--ip))
+- `ipcidr` (String)
+- `nat_rule` (Block List) (see [below for nested schema](#nestedblock--nat_rule))
+- `permanently` (Boolean) permanently for delete request
+- `pre_reservations_num` (Number)
+- `rg_id` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) vins id
+- `vnfdev_redeploy` (Boolean)
+- `vnfdev_reset` (Boolean)
+- `vnfdev_restart` (Boolean)
+- `vnfdev_start` (Boolean) true to start vnfdev, false to stop vnfdev
+- `zone_id` (Number) zone id
+
+### Read-Only
+
+- `account_name` (String) account name
+- `created_by` (String) created by
+- `created_time` (Number) created time
+- `default_gw` (String) default gw
+- `deleted_by` (String) deleted by
+- `deleted_time` (Number) deleted time
+- `guid` (Number) guid
+- `id` (String) The ID of this resource.
+- `lock_status` (String) lock status
+- `manager_id` (Number) manager id
+- `manager_type` (String) manager type
+- `milestones` (Number) milestones
+- `netmask` (Number) net mask
+- `network` (String) network
+- `redundant` (Boolean) redundant
+- `rg_name` (String) resource group name
+- `routes` (Block List) (see [below for nested schema](#nestedblock--routes))
+- `sec_vnf_dev_id` (Number)
+- `status` (String) status
+- `updated_by` (String) updated by
+- `updated_time` (Number) updated time
+- `user_managed` (Boolean) user managed
+- `vnf_dev` (List of Object) vnf dev (see [below for nested schema](#nestedatt--vnf_dev))
+- `vnfs` (List of Object) vnfs (see [below for nested schema](#nestedatt--vnfs))
+- `vxlan_id` (Number) vxlan id
+
+
+### Nested Schema for `default_qos`
+
+Optional:
+
+- `e_rate` (Number)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+Read-Only:
+
+- `guid` (String)
+
+
+
+### Nested Schema for `ip`
+
+Required:
+
+- `type` (String)
+
+Optional:
+
+- `compute_id` (Number)
+- `ip_addr` (String)
+- `mac` (String)
+
+
+
+### Nested Schema for `nat_rule`
+
+Required:
+
+- `ext_port_start` (Number)
+- `int_ip` (String)
+
+Optional:
+
+- `ext_port_end` (Number)
+- `int_port` (Number)
+- `proto` (String)
+
+Read-Only:
+
+- `rule_id` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+### Nested Schema for `vnf_dev`
+
+Read-Only:
+
+- `account_id` (Number)
+- `capabilities` (List of String)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config))
+- `config_saved` (Boolean)
+- `custom_precfg` (Boolean)
+- `description` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces))
+- `live_migration_job_id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `vins` (List of Number)
+- `vnc_password` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnf_dev.config`
+
+Read-Only:
+
+- `mgmt` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--mgmt))
+- `resources` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--resources))
+
+
+### Nested Schema for `vnf_dev.config.mgmt`
+
+Read-Only:
+
+- `ip_addr` (String)
+- `password` (String)
+- `ssh_key` (String)
+- `user` (String)
+
+
+
+### Nested Schema for `vnf_dev.config.resources`
+
+Read-Only:
+
+- `cpu` (Number)
+- `node_id` (Number)
+- `ram` (Number)
+- `uuid` (String)
+
+
+
+
+### Nested Schema for `vnf_dev.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `net_type` (String)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+
+
+### Nested Schema for `vnfs`
+
+Read-Only:
+
+- `dhcp` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp))
+- `gw` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw))
+- `nat` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat))
+
+
+### Nested Schema for `vnfs.dhcp`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.dhcp.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `dns` (List of String)
+- `ip_end` (String)
+- `ip_start` (String)
+- `lease` (Number)
+- `net_mask` (Number)
+- `network` (String)
+- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config--reservations))
+
+
+### Nested Schema for `vnfs.dhcp.config.reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices--primary))
+
+
+### Nested Schema for `vnfs.dhcp.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.gw.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `ext_net_id` (Number)
+- `ext_net_ip` (String)
+- `ext_netmask` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config--qos))
+
+
+### Nested Schema for `vnfs.gw.config.qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_burst` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices--primary))
+
+
+### Nested Schema for `vnfs.gw.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.gw.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.nat`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ckey` (String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `lock_status` (String)
+- `meta` (List of String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.nat.config`
+
+Read-Only:
+
+- `net_mask` (Number)
+- `network` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config--rules))
+
+
+### Nested Schema for `vnfs.nat.config.rules`
+
+Read-Only:
+
+- `local_ip` (String)
+- `local_port` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `rule_id` (Number)
+- `vm_id` (Number)
+- `vm_name` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices--primary))
+
+
+### Nested Schema for `vnfs.nat.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
diff --git a/docs/resources/cb_vins_static_route.md b/docs/resources/cb_vins_static_route.md
new file mode 100644
index 00000000..287722e3
--- /dev/null
+++ b/docs/resources/cb_vins_static_route.md
@@ -0,0 +1,45 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_vins_static_route Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_vins_static_route (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `destination` (String)
+- `gateway` (String)
+- `netmask` (String)
+- `vins_id` (Number) Unique ID of the ViNS
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `compute_ids` (List of Number)
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `route_id` (Number) Unique ID of the static route
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/cb_virtual_image.md b/docs/resources/cb_virtual_image.md
new file mode 100644
index 00000000..75f5e637
--- /dev/null
+++ b/docs/resources/cb_virtual_image.md
@@ -0,0 +1,102 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_virtual_image Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_virtual_image (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `link_to` (Number) ID of real image to link this virtual image to upon creation
+- `name` (String) Name of the rescue disk
+
+### Optional
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `bootable` (Boolean) Does this image boot OS
+- `computeci_id` (Number)
+- `enabled` (Boolean)
+- `hot_resize` (Boolean) Does this machine supports hot resize
+- `password` (String) Optional password for the image
+- `shared_with` (List of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+
+### Read-Only
+
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `architecture` (String) binary architecture of this image, one of X86_64
+- `boot_type` (String) Boot type of image bios or uefi
+- `deleted_time` (Number)
+- `desc` (String)
+- `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
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number) Image id
+- `image_type` (String) Image type linux, windows or other
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `milestones` (Number)
+- `pool_name` (String) pool for image create
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `reference_id` (String)
+- `res_id` (String)
+- `res_name` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number) storage endpoint provider ID
+- `size` (Number) image size
+- `snapshot_id` (String) snapshot id
+- `status` (String) status
+- `tech_status` (String) tech atatus
+- `to_clean` (Boolean)
+- `unc_path` (String) unc path
+- `url` (String) URL where to download media from
+- `version` (String) version
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/cb_zone.md b/docs/resources/cb_zone.md
new file mode 100644
index 00000000..cbef45f7
--- /dev/null
+++ b/docs/resources/cb_zone.md
@@ -0,0 +1,60 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_cb_zone Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_cb_zone (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String)
+
+### Optional
+
+- `auto_start` (Boolean)
+- `description` (String)
+- `drs` (Boolean)
+- `node_ids` (List of Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `app_id` (String)
+- `broadcast_addr` (String)
+- `created_time` (Number)
+- `decort_url` (String)
+- `deletable` (Boolean)
+- `domain` (String)
+- `drs_name` (String)
+- `drs_uid` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `ping_addr` (String)
+- `ssl_skip_verify` (Boolean)
+- `sso_type` (String)
+- `sso_url` (String)
+- `status` (String)
+- `updated_time` (Number)
+- `zone_id` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/disk.md b/docs/resources/disk.md
new file mode 100644
index 00000000..e270e66f
--- /dev/null
+++ b/docs/resources/disk.md
@@ -0,0 +1,143 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) The unique ID of the subscriber-owner of the disk
+- `disk_name` (String) Name of disk
+- `size_max` (Number) Size in GB
+- `storage_policy_id` (Number) ID storage policy under which the disk will be created
+
+### Optional
+
+- `desc` (String) Description of disk
+- `detach` (Boolean) Detaching the disk from compute
+- `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
+- `sep_id` (Number) Storage endpoint provider ID to create disk
+- `shareable` (Boolean)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_name` (String) The name of the subscriber '(account') to whom this disk belongs
+- `acl` (String)
+- `blk_discard` (Boolean) Flag indicating whether blk-discard is enabled for the disk
+- `block_size` (String)
+- `cache` (String)
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `created_by` (String)
+- `created_time` (Number) Created time
+- `deleted_by` (String)
+- `deleted_time` (Number) Deleted time
+- `destruction_time` (Number) Time of final deletion
+- `devicename` (String) Name of the device
+- `disk_id` (Number) Disk ID. Duplicates the value of the ID parameter
+- `gid` (Number) ID of the grid (platform)
+- `id` (String) The ID of this resource.
+- `image_id` (Number) Image ID
+- `images` (List of Number) IDs of images using the disk
+- `independent` (Boolean)
+- `machine_id` (Number)
+- `machine_name` (String)
+- `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` (Map of Number)
+- `provision` (String)
+- `purge_time` (Number) Time of the last deletion attempt
+- `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
+- `size_used` (Number) Number of used space, in GB
+- `snapshots` (List of Object) (see [below for nested schema](#nestedatt--snapshots))
+- `status` (String) Disk status
+- `tech_status` (String) Technical status of the disk
+- `to_clean` (Boolean)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vmid` (Number) Virtual Machine ID (Deprecated)
+
+
+### Nested Schema for `iotune`
+
+Optional:
+
+- `read_bytes_sec` (Number) Number of bytes to read per second
+- `read_bytes_sec_max` (Number) Maximum number of bytes to read
+- `read_iops_sec` (Number) Number of io read operations per second
+- `read_iops_sec_max` (Number) Maximum number of io read operations
+- `size_iops_sec` (Number) Size of io operations
+- `total_bytes_sec` (Number) Total size bytes per second
+- `total_bytes_sec_max` (Number) Maximum total size of bytes per second
+- `total_iops_sec` (Number) Total number of io operations per second
+- `total_iops_sec_max` (Number) Maximum total number of io operations per second
+- `write_bytes_sec` (Number) Number of bytes to write per second
+- `write_bytes_sec_max` (Number) Maximum number of bytes to write per second
+- `write_iops_sec` (Number) Number of write operations per second
+- `write_iops_sec_max` (Number) Maximum number of write operations per second
+
+
+
+### 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 `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/disk_snapshot.md b/docs/resources/disk_snapshot.md
new file mode 100644
index 00000000..5d34737d
--- /dev/null
+++ b/docs/resources/disk_snapshot.md
@@ -0,0 +1,46 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_disk_snapshot Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_disk_snapshot (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `disk_id` (Number) The unique ID of the subscriber-owner of the disk
+- `label` (String) Name of the snapshot
+
+### Optional
+
+- `rollback` (Boolean) Needed in order to make a snapshot rollback
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `timestamp` (Number) Snapshot time
+
+### Read-Only
+
+- `guid` (String) ID of the snapshot
+- `id` (String) The ID of this resource.
+- `res_id` (String) Reference to the snapshot
+- `snap_set_guid` (String) The set snapshot ID
+- `snap_set_time` (Number) The set time of the snapshot
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/flipgroup.md b/docs/resources/flipgroup.md
new file mode 100644
index 00000000..cb297ce8
--- /dev/null
+++ b/docs/resources/flipgroup.md
@@ -0,0 +1,62 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_flipgroup Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_flipgroup (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) Account ID
+- `name` (String) Flipgroup name
+- `net_id` (Number) EXTNET or ViNS ID
+- `net_type` (String) Network type, EXTNET or VINS
+
+### Optional
+
+- `client_ids` (List of Number) List of clients attached to this Flipgroup instance
+- `client_type` (String) Type of client, 'compute' ('vins' will be later)
+- `desc` (String) Text description of this Flipgroup instance
+- `ip` (String) IP address to associate with this group. If empty, the platform will autoselect IP address
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `account_name` (String)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `flipgroup_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `milestones` (Number)
+- `network` (String)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/image.md b/docs/resources/image.md
new file mode 100644
index 00000000..2e8ef282
--- /dev/null
+++ b/docs/resources/image.md
@@ -0,0 +1,95 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_image Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_image (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `boot_type` (String) Boot type of image bios or uefi
+- `name` (String) Name of the rescue disk
+- `storage_policy_id` (Number) ID of the storage policy
+- `type` (String) Image type linux, windows or unknown
+- `url` (String) URL where to download media from
+
+### Optional
+
+- `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
+- `pool_name` (String) pool for image create
+- `sep_id` (Number) storage endpoint provider ID
+- `sync_mode` (Boolean) Create image from a media identified by URL (in synchronous mode)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+- `username_dl` (String) username for upload binary media
+
+### Read-Only
+
+- `acl` (String)
+- `architecture` (String)
+- `bootable` (Boolean)
+- `cd_presented_to` (String)
+- `compute_ci_id` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `enabled` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_name` (String)
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `res_id` (String)
+- `rescuecd` (Boolean)
+- `shared_with` (List of Number)
+- `size` (Number)
+- `snapshot_id` (String)
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `unc_path` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/image_from_blank_compute.md b/docs/resources/image_from_blank_compute.md
new file mode 100644
index 00000000..f6063b52
--- /dev/null
+++ b/docs/resources/image_from_blank_compute.md
@@ -0,0 +1,93 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_image_from_blank_compute Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_image_from_blank_compute (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `boot_type` (String) Boot type of image BIOS or UEFI
+- `compute_id` (Number) Compute Id
+- `name` (String) Name of the rescue disk
+- `storage_policy_id` (Number) Storage policy ID
+- `type` (String) Image type linux, windows or unknown
+
+### Optional
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `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
+- `pool_name` (String) pool for image create
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+
+### Read-Only
+
+- `acl` (String)
+- `architecture` (String)
+- `bootable` (Boolean)
+- `cd_presented_to` (String)
+- `ckey` (String)
+- `compute_ci_id` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `enabled` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `image_name` (String)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `network_interface_naming` (String)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `res_id` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number) storage endpoint provider ID
+- `shared_with` (List of Number)
+- `size` (Number)
+- `snapshot_id` (String)
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `unc_path` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/image_from_platform_disk.md b/docs/resources/image_from_platform_disk.md
new file mode 100644
index 00000000..4b73410b
--- /dev/null
+++ b/docs/resources/image_from_platform_disk.md
@@ -0,0 +1,92 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_image_from_platform_disk Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_image_from_platform_disk (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `boot_type` (String) Boot type of image BIOS or UEFI
+- `disk_id` (Number) Disk Id
+- `name` (String) Name of the rescue disk
+- `type` (String) Image type linux, windows or unknown
+
+### Optional
+
+- `account_id` (Number) AccountId to make the image exclusive
+- `async_mode` (Boolean) create an image in async/sync mode
+- `bootable` (Boolean) bootable image
+- `hot_resize` (Boolean) Does this machine supports hot resize
+- `password` (String) Optional password for the image
+- `pool_name` (String) pool for image create
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `username` (String) Optional username for the image
+
+### Read-Only
+
+- `acl` (String)
+- `architecture` (String)
+- `cd_presented_to` (String)
+- `ckey` (String)
+- `compute_ci_id` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `enabled` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `image_name` (String)
+- `last_modified` (Number)
+- `link_to` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `network_interface_naming` (String)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `res_id` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number) storage endpoint provider ID
+- `shared_with` (List of Number)
+- `size` (Number)
+- `snapshot_id` (String)
+- `status` (String)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `unc_path` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/image_virtual.md b/docs/resources/image_virtual.md
new file mode 100644
index 00000000..e29ce402
--- /dev/null
+++ b/docs/resources/image_virtual.md
@@ -0,0 +1,91 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_image_virtual Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_image_virtual (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `link_to` (Number) ID of real image to link this virtual image to upon creation
+- `name` (String) Name of the rescue disk
+
+### Optional
+
+- `account_id` (Number) account_id
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `acl` (String)
+- `architecture` (String)
+- `boot_type` (String)
+- `bootable` (Boolean)
+- `cd_presented_to` (String)
+- `compute_ci_id` (Number)
+- `deleted_time` (Number)
+- `desc` (String)
+- `drivers` (List of String)
+- `enabled` (Boolean)
+- `gid` (Number)
+- `guid` (Number)
+- `history` (List of Object) (see [below for nested schema](#nestedatt--history))
+- `hot_resize` (Boolean)
+- `id` (String) The ID of this resource.
+- `image_id` (Number) Image id
+- `image_name` (String)
+- `independent` (Boolean)
+- `last_modified` (Number)
+- `links_to` (List of Number)
+- `milestones` (Number)
+- `network_interface_naming` (String)
+- `password` (String)
+- `pool_name` (String)
+- `present_to` (Map of Number)
+- `provider_name` (String)
+- `purge_attempts` (Number)
+- `res_id` (String)
+- `rescuecd` (Boolean)
+- `sep_id` (Number)
+- `shared_with` (List of Number)
+- `size` (Number)
+- `snapshot_id` (String)
+- `status` (String)
+- `storage_policy_id` (Number)
+- `tech_status` (String)
+- `to_clean` (Boolean)
+- `type` (String)
+- `unc_path` (String)
+- `username` (String)
+- `version` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `history`
+
+Read-Only:
+
+- `guid` (String)
+- `id` (Number)
+- `timestamp` (Number)
diff --git a/docs/resources/k8s.md b/docs/resources/k8s.md
new file mode 100644
index 00000000..bc0d595e
--- /dev/null
+++ b/docs/resources/k8s.md
@@ -0,0 +1,229 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8sci_id` (Number) ID of the k8s catalog item to base this instance on.
+- `name` (String) Name of the cluster.
+- `network_plugin` (String) Network plugin to be used
+- `rg_id` (Number) Resource group ID that this instance belongs to.
+- `storage_policy_id` (Number) ID of the storage policy
+- `wg_name` (String) Name for first worker group created with cluster.
+
+### 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
+- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system. Possible values: i440fx, Q35. Default: Q35
+- `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.
+- `extnet_id` (Number) ID of the external network to connect workers to. If omitted network will be chosen by the platfom.
+- `extnet_only` (Boolean) Use only selected ExtNet for infrastructure connections
+- `ha_mode` (Boolean) Use Highly Available schema for LB deploy
+- `init_config` (String) is used to define settings and actions that should be performed before any other component in the cluster starts. It allows you to configure things like node registration, network setup, and other initialization tasks. insert a valid JSON string with all levels of nesting.
+- `join_config` (String) is used to configure the behavior and settings for joining a node to a cluster. It includes parameters such as the cluster's control plane endpoint, token, and certificate key. insert a valid JSON string with all levels of nesting.
+- `kube_proxy_config` (String) is used to configure the behavior and settings of the Kube-proxy, which is responsible for network proxying and load balancing within the cluster. It includes parameters such as proxy mode, cluster IP ranges, and other Kube-proxy specific configurations. insert a valid JSON string with all levels of nesting.
+- `kubelet_config` (String) is used to configure the behavior and settings of the Kubelet, which is the primary node agent that runs on each node in the cluster. It includes parameters such as node IP address, resource allocation, pod eviction policies, and other Kubelet-specific configurations. insert a valid JSON string with all levels of nesting.
+- `labels` (List of String)
+- `lb_sysctl_params` (List of Map of String) Custom sysctl values for Load Balancer instance. Applied on boot.
+- `masters` (Block List, Max: 1) Master node(s) configuration. (see [below for nested schema](#nestedblock--masters))
+- `oidc_cert` (String) insert ssl certificate in x509 pem format
+- `permanently` (Boolean) Determines if cluster should be destroyed
+- `start` (Boolean) Start k8s cluster
+- `taints` (List of String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) ID of default vins for this instace.
+- `with_lb` (Boolean) Create k8s with load balancer if true.
+- `workers` (Block List) Worker node(s) configuration. (see [below for nested schema](#nestedblock--workers))
+- `zone_id` (Number) ID of the zone to put the cluster into.
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `bservice_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `default_wg_id` (Number) ID of default workers group for this instace.
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `id` (String) The ID of this resource.
+- `k8s_ci_name` (String)
+- `kubeconfig` (String) Kubeconfig for cluster access.
+- `lb_id` (Number)
+- `lb_ip` (String) IP address of default load balancer.
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+
+
+### Nested Schema for `masters`
+
+Required:
+
+- `cpu` (Number) Node CPU count.
+- `disk` (Number) Node boot disk size in GB.
+- `num` (Number) Number of nodes to create. Can be either 1, 3 or 5
+- `ram` (Number) Node RAM in MB.
+
+Optional:
+
+- `sep_id` (Number)
+- `sep_pool` (String)
+
+Read-Only:
+
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--masters--detailed_info))
+- `master_id` (Number)
+- `name` (String)
+
+
+### Nested Schema for `masters.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--masters--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `masters.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
+
+
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `workers`
+
+Required:
+
+- `cpu` (Number)
+- `disk` (Number)
+- `name` (String)
+- `num` (Number)
+- `ram` (Number)
+
+Optional:
+
+- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system.
+- `labels` (List of String)
+- `sep_id` (Number)
+- `sep_pool` (String)
+- `taints` (List of String)
+
+Read-Only:
+
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--workers--detailed_info))
+- `guid` (String)
+- `id` (Number)
+
+
+### Nested Schema for `workers.detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--workers--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `workers.detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
+
+
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--account_acl))
+- `k8s_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--k8s_acl))
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--rg_acl))
+
+
+### Nested Schema for `acl.account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.k8s_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
diff --git a/docs/resources/k8s_cp.md b/docs/resources/k8s_cp.md
new file mode 100644
index 00000000..95710bb8
--- /dev/null
+++ b/docs/resources/k8s_cp.md
@@ -0,0 +1,159 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_cp Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_cp (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8sci_id` (Number) ID of the k8s catalog item to base this instance on.
+- `name` (String) Name of the cluster.
+- `network_plugin` (String) Network plugin to be used
+- `rg_id` (Number) Resource group ID that this instance belongs to.
+- `storage_policy_id` (Number) ID of the storage policy
+
+### 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. Possible values: i440fx, Q35. Default: Q35
+- `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.
+- `disk` (Number) Node boot disk size in GB.
+- `extnet_id` (Number) ID of the external network to connect workers to. If omitted network will be chosen by the platfom.
+- `extnet_only` (Boolean) Use only selected ExtNet for infrastructure connections
+- `ha_mode` (Boolean) Use Highly Available schema for LB deploy
+- `init_config` (String) is used to define settings and actions that should be performed before any other component in the cluster starts. It allows you to configure things like node registration, network setup, and other initialization tasks. insert a valid JSON string with all levels of nesting.
+- `join_config` (String) is used to configure the behavior and settings for joining a node to a cluster. It includes parameters such as the cluster's control plane endpoint, token, and certificate key. insert a valid JSON string with all levels of nesting.
+- `kube_proxy_config` (String) is used to configure the behavior and settings of the Kube-proxy, which is responsible for network proxying and load balancing within the cluster. It includes parameters such as proxy mode, cluster IP ranges, and other Kube-proxy specific configurations. insert a valid JSON string with all levels of nesting.
+- `kubelet_config` (String) is used to configure the behavior and settings of the Kubelet, which is the primary node agent that runs on each node in the cluster. It includes parameters such as node IP address, resource allocation, pod eviction policies, and other Kubelet-specific configurations. insert a valid JSON string with all levels of nesting.
+- `lb_sysctl_params` (List of Map of String) Custom sysctl values for Load Balancer instance. Applied on boot.
+- `num` (Number) Number of VMs to create. Can be either 1, 3 or 5
+- `oidc_cert` (String) insert ssl certificate in x509 pem format
+- `permanently` (Boolean) Determines if cluster should be destroyed
+- `ram` (Number) Node RAM in MB.
+- `sep_id` (Number) Storage Endpoint ID
+- `sep_pool` (String) Storage Endpoint Pool
+- `start` (Boolean) Start k8s cluster.
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number) ID of default vins for this instace.
+- `with_lb` (Boolean) Create k8s with load balancer if true.
+- `zone_id` (Number) ID of the zone to put the cluster into.
+
+### Read-Only
+
+- `account_id` (Number)
+- `account_name` (String)
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `bservice_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--detailed_info))
+- `id` (String) The ID of this resource.
+- `k8s_ci_name` (String)
+- `k8s_id` (Number)
+- `kubeconfig` (String) Kubeconfig for cluster access.
+- `lb_id` (Number)
+- `lb_ip` (String) IP address of default load balancer.
+- `master_id` (Number) Master group ID.
+- `master_name` (String) Master group name.
+- `rg_name` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `account_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--account_acl))
+- `k8s_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--k8s_acl))
+- `rg_acl` (List of Object) (see [below for nested schema](#nestedobjatt--acl--rg_acl))
+
+
+### Nested Schema for `acl.account_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.k8s_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `acl.rg_acl`
+
+Read-Only:
+
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+
+### Nested Schema for `detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/resources/k8s_wg.md b/docs/resources/k8s_wg.md
new file mode 100644
index 00000000..e81395ea
--- /dev/null
+++ b/docs/resources/k8s_wg.md
@@ -0,0 +1,77 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_k8s_wg Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_k8s_wg (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `k8s_id` (Number) ID of k8s instance.
+- `name` (String) Name of the worker group.
+- `storage_policy_id` (Number) ID of the storage policy
+
+### Optional
+
+- `annotations` (List of String)
+- `chipset` (String) Type of the emulated system. Possible values: i440fx, Q35. Default: Q35
+- `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.
+- `labels` (List of String)
+- `num` (Number) Number of worker nodes to create.
+- `ram` (Number) Worker node RAM in MB.
+- `taints` (List of String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `worker_sep_id` (Number)
+- `worker_sep_pool` (String)
+
+### Read-Only
+
+- `detailed_info` (List of Object) (see [below for nested schema](#nestedatt--detailed_info))
+- `guid` (String)
+- `id` (String) The ID of this resource.
+- `wg_id` (Number) ID of k8s worker Group.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `detailed_info`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--detailed_info--interfaces))
+- `name` (String)
+- `natable_vins_ip` (String)
+- `natable_vins_network` (String)
+- `status` (String)
+- `tech_status` (String)
+
+
+### Nested Schema for `detailed_info.interfaces`
+
+Read-Only:
+
+- `def_gw` (String)
+- `ip_address` (String)
diff --git a/docs/resources/kvmvm.md b/docs/resources/kvmvm.md
new file mode 100644
index 00000000..e78187fa
--- /dev/null
+++ b/docs/resources/kvmvm.md
@@ -0,0 +1,490 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_kvmvm Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_kvmvm (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `cpu` (Number) Number of CPUs to allocate to this compute instance.
+- `name` (String) Name of this compute. Compute names are case sensitive and must be unique in the resource group.
+- `ram` (Number) Amount of RAM in MB to allocate to this compute instance.
+- `rg_id` (Number) ID of the resource group where this compute should be deployed.
+- `storage_policy_id` (Number) Storage policy id of compute. The rules of the specified storage policy will be used.
+
+### Optional
+
+- `affinity_label` (String) Set affinity label for compute
+- `affinity_rules` (Block List) (see [below for nested schema](#nestedblock--affinity_rules))
+- `alt_boot_id` (Number) ID of CD-ROM live image to boot
+- `anti_affinity_rules` (Block List) (see [below for nested schema](#nestedblock--anti_affinity_rules))
+- `auto_start_w_node` (Boolean) Flag for start compute after node exits from MAINTENANCE state
+- `boot_disk_size` (Number) This compute instance boot disk size in GB. Make sure it is large enough to accomodate selected OS image.
+- `boot_type` (String) Type of image upload.
+- `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.
+- `create_blank` (Boolean) If True, the compute is created via kvmx86/createBlank endpoint (without OS image). The image_id field is not required in this case.
+- `custom_fields` (String)
+- `description` (String) Optional text description of this compute instance.
+- `detach_disks` (Boolean)
+- `disks` (Block List) (see [below for nested schema](#nestedblock--disks))
+- `enabled` (Boolean) If true - enable compute, else - disable
+- `extra_disks` (Set of Number) Optional list of IDs of extra disks to attach to this compute. You may specify several extra disks.
+- `force_resize` (Boolean) Flag for resize compute
+- `force_stop` (Boolean) Flag for redeploy compute
+- `hot_resize` (Boolean) Type of image vm.
+- `hp_backed` (Boolean) Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node.
+- `image_id` (Number) ID of the OS image to base this compute instance on.
+- `loader_type` (String) Type of image vm.
+- `network` (Block Set) Optional network connection(s) for this compute. You may specify several network blocks, one for each connection. (see [below for nested schema](#nestedblock--network))
+- `network_interface_naming` (String) Name of netfowrk interface.
+- `numa_affinity` (String) Rule for VM placement with NUMA affinity.
+- `os_version` (String) the OS version installed on the VM
+- `pause` (Boolean)
+- `pci_devices` (Set of Number) ID of the connected pci devices
+- `permanently` (Boolean)
+- `pin_to_node` (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))
+- `preferred_cpu` (List of Number) Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
+- `reset` (Boolean)
+- `restore` (Boolean)
+- `rollback` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--rollback))
+- `security_groups` (Block Set) list of security group IDs to apply to this interface (see [below for nested schema](#nestedblock--security_groups))
+- `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.
+- `tags` (Block Set) (see [below for nested schema](#nestedblock--tags))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `user_access` (Block Set) (see [below for nested schema](#nestedblock--user_access))
+- `without_boot_disk` (Boolean) If True, the imageId, bootDisk, sepId, pool parameters are ignored and the compute is created without a boot disk in the stopped state.
+- `zone_id` (Number)
+
+### Read-Only
+
+- `account_id` (Number) ID of the account this compute instance belongs to.
+- `account_name` (String) Name of the account this compute instance belongs to.
+- `affinity_weight` (Number)
+- `arch` (String)
+- `boot_disk` (Set of Object) (see [below for nested schema](#nestedatt--boot_disk))
+- `boot_disk_id` (Number) This compute instance boot disk ID.
+- `boot_image_id` (Number)
+- `boot_order` (List of String)
+- `cd_image_id` (Number)
+- `clone_reference` (Number)
+- `clones` (List of Number)
+- `compute_id` (Number)
+- `computeci_id` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `devices` (String)
+- `driver` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `interfaces` (List of Object) (see [below for nested schema](#nestedatt--interfaces))
+- `loader_meta_iso` (List of Object) (see [below for nested schema](#nestedatt--loader_meta_iso))
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `migrationjob` (Number)
+- `milestones` (Number)
+- `natable_vins_id` (Number)
+- `natable_vins_ip` (String)
+- `natable_vins_name` (String)
+- `natable_vins_network` (String)
+- `natable_vins_network_name` (String)
+- `need_reboot` (Boolean)
+- `numa_node_id` (Number)
+- `os_users` (List of Object) Guest OS users provisioned on this compute instance. (see [below for nested schema](#nestedatt--os_users))
+- `pinned` (Boolean)
+- `read_only` (Boolean) Shows if compute is in read-only mode.
+- `reference_id` (String)
+- `registered` (Boolean)
+- `res_name` (String)
+- `reserved_node_cpus` (List of Number)
+- `rg_name` (String) Name of the resource group where this compute instance is located.
+- `snap_sets` (List of Object) (see [below for nested schema](#nestedatt--snap_sets))
+- `stateless_sep_id` (Number)
+- `stateless_sep_type` (String)
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vgpus` (List of Object) List of virtual GPUs (see [below for nested schema](#nestedatt--vgpus))
+- `virtual_image_id` (Number)
+- `virtual_image_name` (String)
+- `vnc_password` (String)
+- `weight` (Number) Priority weight of the compute. Higher value means higher priority and later migration.
+
+
+### Nested Schema for `affinity_rules`
+
+Required:
+
+- `key` (String) key that are taken into account when analyzing this rule will be identified
+- `mode` (String) EQ or NE or ANY - the comparison mode is 'value', recorded by the specified 'key'
+- `policy` (String) RECOMMENDED or REQUIRED, the degree of 'strictness' of this rule
+- `topology` (String) compute or node, for whom rule applies
+- `value` (String) value that must match the key to be taken into account when analyzing this rule
+
+
+
+### Nested Schema for `anti_affinity_rules`
+
+Required:
+
+- `key` (String) key that are taken into account when analyzing this rule will be identified
+- `mode` (String) EQ or NE or ANY - the comparison mode is 'value', recorded by the specified 'key'
+- `policy` (String) RECOMMENDED or REQUIRED, the degree of 'strictness' of this rule
+- `topology` (String) compute or node, for whom rule applies
+- `value` (String) value that must match the key to be taken into account when analyzing this rule
+
+
+
+### Nested Schema for `cd`
+
+Required:
+
+- `cdrom_id` (Number)
+
+
+
+### Nested Schema for `disks`
+
+Required:
+
+- `disk_name` (String) Name for disk
+- `size` (Number) Disk size in GiB
+- `storage_policy_id` (Number) Storage policy id of disk. The rules of the specified storage policy will be used.
+
+Optional:
+
+- `desc` (String) Optional description
+- `image_id` (Number) Specify image id for create disk from template
+- `iotune` (Block List, Max: 1) (see [below for nested schema](#nestedblock--disks--iotune))
+- `permanently` (Boolean) Disk deletion status
+- `pool` (String) Pool name; by default will be chosen automatically
+- `sep_id` (Number) Storage endpoint provider ID; by default the same with boot disk
+
+Read-Only:
+
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `bus_number` (Number) Bus number of the disk on virtual bus (6 = boot disk)
+- `cache` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `devicename` (String)
+- `disk_id` (Number) Disk ID
+- `independent` (Boolean)
+- `pci_slot` (Number) PCI slot number of the disk
+- `present_to` (Map of Number)
+- `provision` (String)
+- `shareable` (Boolean)
+- `size_max` (Number)
+- `size_used` (Number)
+- `to_clean` (Boolean)
+- `updated_time` (Number)
+
+
+### Nested Schema for `disks.iotune`
+
+Optional:
+
+- `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 `network`
+
+Required:
+
+- `net_id` (Number) ID of the network for this connection.
+- `net_type` (String) Type of the network for this connection
+
+Optional:
+
+- `enabled` (Boolean) network enable flag
+- `ip_address` (String) Optional IP address to assign to this connection. This IP should belong to the selected network and free for use.
+- `mac` (String) MAC address associated with this connection. MAC address is assigned automatically.
+- `mtu` (Number) Maximum transmission unit, used only for DPDK type, must be 1500-9216
+- `net_mask` (Number) Subnet mask, used only for DPDK and VFNIC network types
+- `sdn_interface_id` (String) unique_identifier of LogicalPort on SDN side
+- `weight` (Number) weight the network if you need to sort network list, the smallest attach first. zero or null weight attach last
+
+
+
+### Nested Schema for `port_forwarding`
+
+Required:
+
+- `proto` (String)
+- `public_port_start` (Number)
+
+Optional:
+
+- `local_port` (Number)
+- `public_port_end` (Number)
+
+
+
+### Nested Schema for `rollback`
+
+Required:
+
+- `label` (String)
+
+
+
+### Nested Schema for `security_groups`
+
+Required:
+
+- `net_id` (Number) ID of the network
+- `net_type` (String) Type of the network
+- `security_groups` (Set of Number)
+
+Optional:
+
+- `enable_secgroups` (Boolean)
+
+
+
+### Nested Schema for `snapshot`
+
+Required:
+
+- `label` (String)
+
+
+
+### Nested Schema for `tags`
+
+Required:
+
+- `key` (String)
+- `value` (String)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `user_access`
+
+Required:
+
+- `access_type` (String)
+- `username` (String)
+
+
+
+### Nested Schema for `boot_disk`
+
+Read-Only:
+
+- `blk_discard` (Boolean)
+- `block_size` (String)
+- `bus_number` (Number)
+- `cache` (String)
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `desc` (String)
+- `devicename` (String)
+- `disk_id` (Number)
+- `disk_name` (String)
+- `image_id` (Number)
+- `independent` (Boolean)
+- `iotune` (List of Object) (see [below for nested schema](#nestedobjatt--boot_disk--iotune))
+- `pci_slot` (Number)
+- `permanently` (Boolean)
+- `pool` (String)
+- `present_to` (Map of Number)
+- `provision` (String)
+- `sep_id` (Number)
+- `shareable` (Boolean)
+- `size` (Number)
+- `size_max` (Number)
+- `size_used` (Number)
+- `storage_policy_id` (Number)
+- `to_clean` (Boolean)
+- `updated_time` (Number)
+
+
+### Nested Schema for `boot_disk.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 `interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `netmask` (Number)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `trunk_tags` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `loader_meta_iso`
+
+Read-Only:
+
+- `device_name` (String)
+- `path` (String)
+
+
+
+### Nested Schema for `os_users`
+
+Read-Only:
+
+- `guid` (String)
+- `login` (String)
+- `password` (String)
+- `public_key` (String)
+
+
+
+### Nested Schema for `snap_sets`
+
+Read-Only:
+
+- `disks` (List of Number)
+- `guid` (String)
+- `label` (String)
+- `timestamp` (Number)
+
+
+
+### Nested Schema for `vgpus`
+
+Read-Only:
+
+- `account_id` (Number)
+- `bus_number` (Number)
+- `created_time` (Number)
+- `deleted_time` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `id` (Number)
+- `last_claimed_by` (Number)
+- `last_update_time` (Number)
+- `mode` (String)
+- `pci_slot` (Number)
+- `pgpuid` (Number)
+- `profile_id` (Number)
+- `ram` (Number)
+- `reference_id` (String)
+- `rg_id` (Number)
+- `status` (String)
+- `type` (String)
+- `vmid` (Number)
diff --git a/docs/resources/lb.md b/docs/resources/lb.md
new file mode 100644
index 00000000..efad36f3
--- /dev/null
+++ b/docs/resources/lb.md
@@ -0,0 +1,184 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String)
+- `rg_id` (Number)
+
+### Optional
+
+- `config_reset` (Boolean)
+- `desc` (String)
+- `enable` (Boolean)
+- `extnet_id` (Number)
+- `ha_mode` (Boolean)
+- `permanently` (Boolean)
+- `restart` (Boolean)
+- `restore` (Boolean)
+- `safe` (Boolean)
+- `start` (Boolean)
+- `sysctl_params` (List of Map of String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vins_id` (Number)
+- `zone_id` (Number)
+
+### Read-Only
+
+- `account_id` (Number)
+- `backend_haip` (String)
+- `backends` (List of Object) (see [below for nested schema](#nestedatt--backends))
+- `created_by` (String)
+- `created_time` (Number)
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `dp_api_user` (String)
+- `frontend_haip` (String)
+- `frontends` (List of Object) (see [below for nested schema](#nestedatt--frontends))
+- `gid` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `image_id` (Number)
+- `lb_id` (Number)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `part_k8s` (Boolean)
+- `primary_node` (List of Object) (see [below for nested schema](#nestedatt--primary_node))
+- `rg_name` (String)
+- `secondary_node` (List of Object) (see [below for nested schema](#nestedatt--secondary_node))
+- `status` (String)
+- `tech_status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `backends`
+
+Read-Only:
+
+- `algorithm` (String)
+- `guid` (String)
+- `name` (String)
+- `server_default_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--server_default_settings))
+- `servers` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers))
+
+
+### Nested Schema for `backends.server_default_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+### Nested Schema for `backends.servers`
+
+Read-Only:
+
+- `address` (String)
+- `check` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (List of Object) (see [below for nested schema](#nestedobjatt--backends--servers--server_settings))
+
+
+### Nested Schema for `backends.servers.server_settings`
+
+Read-Only:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `guid` (String)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+
+
+
+
+### Nested Schema for `frontends`
+
+Read-Only:
+
+- `backend` (String)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--frontends--bindings))
+- `guid` (String)
+- `name` (String)
+
+
+### Nested Schema for `frontends.bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
+
+
+
+
+### Nested Schema for `primary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
+
+
+
+### Nested Schema for `secondary_node`
+
+Read-Only:
+
+- `backend_ip` (String)
+- `compute_id` (Number)
+- `frontend_ip` (String)
+- `guid` (String)
+- `mgmt_ip` (String)
+- `network_id` (Number)
diff --git a/docs/resources/lb_backend.md b/docs/resources/lb_backend.md
new file mode 100644
index 00000000..73d1f289
--- /dev/null
+++ b/docs/resources/lb_backend.md
@@ -0,0 +1,86 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb_backend Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb_backend (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String) Must be unique among all backends of this LB - name of the new backend to create
+
+### Optional
+
+- `algorithm` (String)
+- `downinter` (Number)
+- `fall` (Number)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `servers` (Block List) (see [below for nested schema](#nestedblock--servers))
+- `slowstart` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `weight` (Number)
+
+### Read-Only
+
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `servers`
+
+Optional:
+
+- `address` (String)
+- `check` (String)
+- `name` (String)
+- `port` (Number)
+- `server_settings` (Block List) (see [below for nested schema](#nestedblock--servers--server_settings))
+
+Read-Only:
+
+- `guid` (String)
+
+
+### Nested Schema for `servers.server_settings`
+
+Optional:
+
+- `downinter` (Number)
+- `fall` (Number)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `weight` (Number)
+
+Read-Only:
+
+- `guid` (String)
+
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/lb_backend_server.md b/docs/resources/lb_backend_server.md
new file mode 100644
index 00000000..d57a43d3
--- /dev/null
+++ b/docs/resources/lb_backend_server.md
@@ -0,0 +1,53 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb_backend_server Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb_backend_server (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `address` (String) IP address of the server.
+- `backend_name` (String) Must be unique among all backends of this LB - name of the new backend to create
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String) Must be unique among all servers defined for this backend - name of the server definition to add.
+- `port` (Number) Port number on the server
+
+### Optional
+
+- `check` (String) set to disabled if this server should be used regardless of its state.
+- `downinter` (Number)
+- `fall` (Number)
+- `inter` (Number)
+- `maxconn` (Number)
+- `maxqueue` (Number)
+- `rise` (Number)
+- `slowstart` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `weight` (Number)
+
+### Read-Only
+
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/lb_frontend.md b/docs/resources/lb_frontend.md
new file mode 100644
index 00000000..7080f422
--- /dev/null
+++ b/docs/resources/lb_frontend.md
@@ -0,0 +1,54 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb_frontend Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb_frontend (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `backend_name` (String)
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `bindings` (List of Object) (see [below for nested schema](#nestedatt--bindings))
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `bindings`
+
+Read-Only:
+
+- `address` (String)
+- `guid` (String)
+- `name` (String)
+- `port` (Number)
diff --git a/docs/resources/lb_frontend_bind.md b/docs/resources/lb_frontend_bind.md
new file mode 100644
index 00000000..1a663353
--- /dev/null
+++ b/docs/resources/lb_frontend_bind.md
@@ -0,0 +1,44 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_lb_frontend_bind Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_lb_frontend_bind (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `address` (String)
+- `frontend_name` (String) Must be unique among all backends of this LB - name of the new backend to create
+- `lb_id` (Number) ID of the LB instance to backendCreate
+- `name` (String)
+- `port` (Number)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/pfw.md b/docs/resources/pfw.md
new file mode 100644
index 00000000..74baf173
--- /dev/null
+++ b/docs/resources/pfw.md
@@ -0,0 +1,44 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_pfw Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_pfw (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number) ID of compute instance.
+- `local_base_port` (Number) Internal base port number.
+- `proto` (String) Network protocol, either 'tcp' or 'udp'.
+- `public_port_start` (Number) External start port number for the rule.
+
+### Optional
+
+- `public_port_end` (Number) End port number (inclusive) for the ranged rule.
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `id` (String) The ID of this resource.
+- `local_ip` (String) IP address of compute instance.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/resgroup.md b/docs/resources/resgroup.md
new file mode 100644
index 00000000..57371bab
--- /dev/null
+++ b/docs/resources/resgroup.md
@@ -0,0 +1,166 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_resgroup Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_resgroup (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number) Unique ID of the account, which this resource group belongs to.
+- `gid` (Number) Unique ID of the grid, where this resource group is deployed.
+- `name` (String) Name of this resource group. Names are case sensitive and unique within the context of a account.
+
+### Optional
+
+- `access` (Block Set) (see [below for nested schema](#nestedblock--access))
+- `def_net` (Block Set, Max: 1) (see [below for nested schema](#nestedblock--def_net))
+- `def_net_type` (String) Type of the network, which this resource group will use as default for its computes - PRIVATE or PUBLIC or NONE.
+- `description` (String) User-defined text description of this resource group.
+- `enable` (Boolean) flag for enable/disable RG
+- `ext_ip` (String) IP address on the external netowrk to request when def_net_type=PRIVATE and ext_net_id is not 0
+- `ext_net_id` (Number) ID of the external network for default ViNS. Pass 0 if def_net_type=PUBLIC or no external connection required for the defult ViNS when def_net_type=PRIVATE
+- `force` (Boolean) Set to True if you want force delete non-empty RG
+- `ipcidr` (String) Address of the netowrk inside the private network segment (aka ViNS) if def_net_type=PRIVATE
+- `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))
+- `restore` (Boolean)
+- `sdn_access_group_id` (String) ID of the SDN access group
+- `storage_policy` (Block Set) (see [below for nested schema](#nestedblock--storage_policy))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `uniq_pools` (List of String)
+
+### Read-Only
+
+- `account_name` (String) Name of the account, which this resource group belongs to.
+- `acl` (List of Object) (see [below for nested schema](#nestedatt--acl))
+- `compute_features` (List of String)
+- `cpu_allocation_parameter` (String)
+- `cpu_allocation_ratio` (Number)
+- `created_by` (String)
+- `created_time` (Number)
+- `def_net_id` (Number) ID of the default network for this resource group (if any).
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `dirty` (Boolean)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `lock_status` (String)
+- `milestones` (Number)
+- `res_types` (List of String)
+- `resource_limits` (List of Object) (see [below for nested schema](#nestedatt--resource_limits))
+- `rg_id` (Number)
+- `secret` (String)
+- `status` (String) Current status of this resource group.
+- `storage_policy_ids` (List of Number)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `vins` (List of Number) List of VINs deployed in this resource group.
+- `vms` (List of Number) List of computes deployed in this resource group.
+
+
+### Nested Schema for `access`
+
+Required:
+
+- `right` (String) Access rights to set, one of 'R', 'RCX' or 'ARCXDU'
+- `user` (String) User or group name to grant access
+
+
+
+### Nested Schema for `def_net`
+
+Required:
+
+- `net_type` (String) Network type to set. Must be on of 'PRIVATE' or 'PUBLIC'.
+
+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.
+
+
+
+### Nested Schema for `quota`
+
+Optional:
+
+- `cpu` (Number) Limit on the total number of CPUs in this resource group.
+- `disk` (Number) Limit on the total volume of virtual storage resources in this resource group, specified in GB.
+- `ext_ips` (Number) Limit on the total number of external IP addresses this resource group can use.
+- `ram` (Number) Limit on the total amount of RAM in this resource group, specified in MB.
+
+Read-Only:
+
+- `cu_d` (Number) Limit on the total volume of storage resources in this resource group, specified in GB.
+- `gpu_units` (Number) Limit on the total number of virtual GPUs this resource group can use.
+
+
+
+### Nested Schema for `storage_policy`
+
+Required:
+
+- `id` (Number)
+
+Optional:
+
+- `limit` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `acl`
+
+Read-Only:
+
+- `email` (String)
+- `explicit` (Boolean)
+- `guid` (String)
+- `right` (String)
+- `status` (String)
+- `type` (String)
+- `user_group_id` (String)
+
+
+
+### Nested Schema for `resource_limits`
+
+Read-Only:
+
+- `cu_c` (Number)
+- `cu_d` (Number)
+- `cu_dm` (Number)
+- `cu_i` (Number)
+- `cu_m` (Number)
+- `gpu_units` (Number)
+- `storage_policy` (Set of Object) (see [below for nested schema](#nestedobjatt--resource_limits--storage_policy))
+
+
+### Nested Schema for `resource_limits.storage_policy`
+
+Read-Only:
+
+- `id` (Number)
+- `limit` (Number)
diff --git a/docs/resources/sdn_access_group.md b/docs/resources/sdn_access_group.md
new file mode 100644
index 00000000..813cae55
--- /dev/null
+++ b/docs/resources/sdn_access_group.md
@@ -0,0 +1,80 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_access_group Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_access_group (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `comment` (String) description (comment) of the group
+- `display_name` (String) group name
+
+### Optional
+
+- `default_security_policy` (Block List, Max: 1) Default security policy configuration (see [below for nested schema](#nestedblock--default_security_policy))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `users` (Block List) managing users who are part of a group (see [below for nested schema](#nestedblock--users))
+
+### Read-Only
+
+- `created_at` (String) Creation timestamp
+- `id` (String) The ID of this resource.
+- `net_object_access_group` (List of Object) Net object access group configuration (see [below for nested schema](#nestedatt--net_object_access_group))
+
+
+### Nested Schema for `default_security_policy`
+
+Optional:
+
+- `default_acl_drop` (String) Default ACL drop action
+- `default_open_session_drop` (Boolean) Default open session drop flag
+
+Read-Only:
+
+- `access_group_id` (String) Policy access group ID
+- `description` (String) Policy description
+- `display_name` (String) Policy display name
+- `id` (String) Policy unique identifier
+- `version_id` (Number) Policy version identifier
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `users`
+
+Required:
+
+- `access_group_role_id` (String) id of the assigned role
+- `user_id` (String) user ID
+
+
+
+### Nested Schema for `net_object_access_group`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `id` (String)
+- `version_id` (Number)
diff --git a/docs/resources/sdn_hypervisor.md b/docs/resources/sdn_hypervisor.md
new file mode 100644
index 00000000..4244781a
--- /dev/null
+++ b/docs/resources/sdn_hypervisor.md
@@ -0,0 +1,74 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_hypervisor Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_hypervisor (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `display_name` (String)
+- `name` (String)
+
+### Optional
+
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `created_at` (String)
+- `hostname` (String)
+- `id` (String) The ID of this resource.
+- `ip` (String)
+- `ports` (List of Object) (see [below for nested schema](#nestedatt--ports))
+- `status` (String)
+- `synced_at` (String)
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `ports`
+
+Read-Only:
+
+- `data` (List of Object) (see [below for nested schema](#nestedobjatt--ports--data))
+- `info` (List of Object) (see [below for nested schema](#nestedobjatt--ports--info))
+
+
+### Nested Schema for `ports.data`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+- `unique_identifier` (String)
+- `up` (Boolean)
+
+
+
+### Nested Schema for `ports.info`
+
+Read-Only:
+
+- `active_ports` (Number)
+- `total_ports` (Number)
diff --git a/docs/resources/sdn_logical_port.md b/docs/resources/sdn_logical_port.md
new file mode 100644
index 00000000..fd23d9b6
--- /dev/null
+++ b/docs/resources/sdn_logical_port.md
@@ -0,0 +1,136 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_logical_port Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_logical_port (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `access_group_id` (String) Access Group ID
+- `description` (String) Description
+- `display_name` (String) Display Name
+- `enabled` (Boolean) Whether the logical port should be enabled
+- `hypervisor` (String) Hypervisor
+- `port_security` (Boolean) Whether the port security is enabled
+- `segment_id` (String) Segment ID
+
+### Optional
+
+- `adapter_mac` (String) Adapter MAC address
+- `force` (Boolean)
+- `labels` (Block List, Max: 1) Labels (see [below for nested schema](#nestedblock--labels))
+- `logical_port_addresses` (Block List) (see [below for nested schema](#nestedblock--logical_port_addresses))
+- `migrate` (Boolean) If true, triggers live migration to the hypervisor specified in the 'hypervisor' field. If false, hypervisor changes are applied via the regular update endpoint.
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `unique_identifier` (String) Unique identifier of the logical port
+
+### Read-Only
+
+- `access_group_name` (String) Name of the access group
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedatt--bindings))
+- `created_at` (String)
+- `external_network_id` (String)
+- `hypervisor_display_name` (String)
+- `id` (String) ID of the logical port
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedatt--status))
+- `version_id` (Number) Version ID of the logical port
+
+
+### Nested Schema for `labels`
+
+Optional:
+
+- `vm_id` (String) VM ID label
+- `vm_name` (String) VM name label
+
+
+
+### Nested Schema for `logical_port_addresses`
+
+Required:
+
+- `ip` (String) IP address of the logical port
+- `ip_type` (String)
+- `is_primary` (Boolean)
+
+Optional:
+
+- `is_discovered` (Boolean)
+- `mac` (String)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/resources/sdn_network_object_group.md b/docs/resources/sdn_network_object_group.md
new file mode 100644
index 00000000..bfe89a00
--- /dev/null
+++ b/docs/resources/sdn_network_object_group.md
@@ -0,0 +1,721 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_network_object_group Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_network_object_group (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `access_group_id` (String)
+- `description` (String)
+- `name` (String)
+
+### Optional
+
+- `addresses` (Block List) (see [below for nested schema](#nestedblock--addresses))
+- `l2_connection_ports_bindings` (Block List) (see [below for nested schema](#nestedblock--l2_connection_ports_bindings))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `access_group_name` (String)
+- `counters` (List of Object) (see [below for nested schema](#nestedatt--counters))
+- `external_network_ports` (List of Object) (see [below for nested schema](#nestedatt--external_network_ports))
+- `id` (String) The ID of this resource.
+- `l2_connection_ports` (List of Object) (see [below for nested schema](#nestedatt--l2_connection_ports))
+- `logical_ports` (List of Object) (see [below for nested schema](#nestedatt--logical_ports))
+- `purpose` (String)
+- `security_policies` (List of Object) (see [below for nested schema](#nestedatt--security_policies))
+- `type` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `addresses`
+
+Required:
+
+- `net_address_type` (String)
+
+Optional:
+
+- `ip_addr` (String)
+- `ip_addr_range_end` (String)
+- `ip_prefix` (String)
+- `mac_addr` (String)
+
+Read-Only:
+
+- `id` (String)
+
+
+
+### Nested Schema for `l2_connection_ports_bindings`
+
+Required:
+
+- `port_id` (String)
+- `port_version` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `counters`
+
+Read-Only:
+
+- `addresses_count` (Number)
+- `l2_connection_ports_count` (Number)
+- `logical_ports_count` (Number)
+- `security_policies_count` (Number)
+- `security_rules_count` (Number)
+
+
+
+### Nested Schema for `external_network_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `bridge_network_name` (String)
+- `comment` (String)
+- `created_at` (String)
+- `default_gateway_ipv4` (String)
+- `default_gateway_ipv6` (String)
+- `description` (String)
+- `enabled` (Boolean)
+- `external_network_ports` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports))
+- `hypervisors` (List of String)
+- `id` (String)
+- `ipv4` (String)
+- `mac` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--status))
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `comment` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `floating_ip` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip))
+- `ipv4` (String)
+- `ipv6` (String)
+- `ipv6_config` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--ipv6_config))
+- `mac` (String)
+- `router_gateaway_port` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--router_gateaway_port))
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `logical_port` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port))
+- `router` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `adapter_mac` (String)
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--bindings))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `exclude_firewall` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--exclude_firewall))
+- `external_network_id` (String)
+- `hypervisor` (String)
+- `hypervisor_display_name` (String)
+- `id` (String)
+- `labels` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--status))
+- `unique_identifier` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.exclude_firewall`
+
+Read-Only:
+
+- `exclusion_reason` (String)
+- `logical_port_addresses_excluded` (Boolean)
+- `logical_port_excluded` (Boolean)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--logical_port--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.logical_port.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `gateaway_ports` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports))
+- `id` (String)
+- `policies` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--policies))
+- `ports` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports))
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.gateaway_ports`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `external_l4_port_max` (Number)
+- `external_l4_port_min` (Number)
+- `id` (String)
+- `snat_enabled` (Boolean)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.gateaway_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--gateaway_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.gateaway_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.policies`
+
+Read-Only:
+
+- `action` (String)
+- `created_at` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `match` (String)
+- `next_ipv4_address` (List of String)
+- `next_ipv6_address` (List of String)
+- `priority` (Number)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `ipv4_address` (String)
+- `ipv6_address` (String)
+- `ipv6_config` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--ipv6_config))
+- `mac` (String)
+- `segment` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--segment))
+- `segment_id` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.ipv6_config`
+
+Read-Only:
+
+- `address_mode` (String)
+- `enable_periodic_ra` (Boolean)
+- `interval_ra` (Number)
+- `router_preference` (String)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.segment`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `id` (String)
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--external_network_ports--floating_ip--router--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.external_network_ports.floating_ip.router.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.ipv6_config`
+
+Read-Only:
+
+- `address_mode` (String)
+- `enable_periodic_ra` (Boolean)
+- `interval_ra` (Number)
+- `router_preference` (String)
+
+
+
+### Nested Schema for `external_network_ports.external_network_ports.router_gateaway_port`
+
+Read-Only:
+
+- `created_at` (String)
+- `description` (String)
+- `id` (String)
+- `router_display_name` (String)
+- `router_id` (String)
+- `snat_enabled` (Boolean)
+- `updated_at` (String)
+
+
+
+
+### Nested Schema for `external_network_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--external_network_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `external_network_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `l2_connection_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `created_at` (String)
+- `id` (String)
+- `l2_external_network` (List of Object) (see [below for nested schema](#nestedobjatt--l2_connection_ports--l2_external_network))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `l2_connection_ports.l2_external_network`
+
+Read-Only:
+
+- `bridge_network_name` (String)
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `hypervisors` (List of String)
+- `id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+
+
+### Nested Schema for `logical_ports`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `adapter_mac` (String)
+- `address_detection` (Boolean)
+- `bindings` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--bindings))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `exclude_firewall` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--exclude_firewall))
+- `external_network_id` (String)
+- `hypervisor` (String)
+- `hypervisor_display_name` (String)
+- `id` (String)
+- `labels` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--labels))
+- `live_migration_target_hv` (String)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--status))
+- `unique_identifier` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `logical_ports.bindings`
+
+Read-Only:
+
+- `address_detection` (Boolean)
+- `created_at` (String)
+- `id` (String)
+- `logical_port_addresses` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--bindings--logical_port_addresses))
+- `port_security` (Boolean)
+- `segment_display_name` (String)
+- `segment_id` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `logical_ports.bindings.logical_port_addresses`
+
+Read-Only:
+
+- `assigned_at` (String)
+- `id` (String)
+- `ip` (String)
+- `ip_type` (String)
+- `is_discovered` (Boolean)
+- `is_primary` (Boolean)
+- `logical_port_id` (String)
+- `mac` (String)
+
+
+
+
+### Nested Schema for `logical_ports.exclude_firewall`
+
+Read-Only:
+
+- `exclusion_reason` (String)
+- `logical_port_addresses_excluded` (Boolean)
+- `logical_port_excluded` (Boolean)
+
+
+
+### Nested Schema for `logical_ports.labels`
+
+Read-Only:
+
+- `vm_id` (String)
+- `vm_name` (String)
+
+
+
+### Nested Schema for `logical_ports.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--logical_ports--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `logical_ports.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
+
+
+
+
+
+### Nested Schema for `security_policies`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `access_group_name` (String)
+- `applied_net_object_groups` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--applied_net_object_groups))
+- `created_at` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `end_priority` (Number)
+- `id` (String)
+- `security_rules` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules))
+- `start_priority` (Number)
+- `status` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--status))
+- `type` (String)
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `security_policies.applied_net_object_groups`
+
+Read-Only:
+
+- `id` (String)
+- `name` (String)
+- `version_id` (Number)
+
+
+
+### Nested Schema for `security_policies.security_rules`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `action` (String)
+- `description` (String)
+- `destination_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--destination_net_object))
+- `direction` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+- `filter` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--filter))
+- `id` (String)
+- `log_enabled` (Boolean)
+- `log_name` (String)
+- `log_severity` (String)
+- `priority` (Number)
+- `security_policy_id` (String)
+- `source_net_object` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--source_net_object))
+- `statistics_enabled` (Boolean)
+- `type` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `security_policies.security_rules.destination_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+### Nested Schema for `security_policies.security_rules.filter`
+
+Read-Only:
+
+- `filters` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--security_rules--filter--filters))
+- `name` (String)
+
+
+### Nested Schema for `security_policies.security_rules.filter.filters`
+
+Read-Only:
+
+- `all` (Boolean)
+- `arp` (Boolean)
+- `dhcp` (Boolean)
+- `expression` (String)
+- `icmp` (Boolean)
+- `ip` (Boolean)
+- `ip_v4` (Boolean)
+- `ip_v6` (Boolean)
+- `keep_opened_sessions` (Boolean)
+- `nd` (Boolean)
+- `tcp` (Boolean)
+- `tcp_dst_ports` (List of String)
+- `udp` (Boolean)
+- `udp_dst_ports` (List of String)
+
+
+
+
+### Nested Schema for `security_policies.security_rules.source_net_object`
+
+Read-Only:
+
+- `display_name` (String)
+- `net_address_pool_id` (String)
+- `net_object_group_id` (String)
+
+
+
+
+### Nested Schema for `security_policies.status`
+
+Read-Only:
+
+- `hypervisor_status` (String)
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--security_policies--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `security_policies.status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/resources/sdn_segment.md b/docs/resources/sdn_segment.md
new file mode 100644
index 00000000..f1a03b79
--- /dev/null
+++ b/docs/resources/sdn_segment.md
@@ -0,0 +1,167 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_sdn_segment Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_sdn_segment (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `access_group_id` (String)
+- `description` (String)
+- `display_name` (String)
+- `enabled` (Boolean)
+
+### Optional
+
+- `dhcp_v4` (Block List, Max: 1) (see [below for nested schema](#nestedblock--dhcp_v4))
+- `dhcp_v6` (Block List, Max: 1) (see [below for nested schema](#nestedblock--dhcp_v6))
+- `force` (Boolean)
+- `subnet_v4` (String)
+- `subnet_v6` (String)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `type` (String)
+
+### Read-Only
+
+- `access_group_name` (String)
+- `created_at` (String)
+- `id` (String) The ID of this resource.
+- `l2_connection_port` (List of Object) (see [below for nested schema](#nestedatt--l2_connection_port))
+- `logical_ports_info` (List of Object) (see [below for nested schema](#nestedatt--logical_ports_info))
+- `routers_info` (List of Object) (see [below for nested schema](#nestedatt--routers_info))
+- `status` (List of Object) (see [below for nested schema](#nestedatt--status))
+- `updated_at` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `dhcp_v4`
+
+Required:
+
+- `enabled` (Boolean)
+- `gateway` (String)
+- `server_ip` (String)
+
+Optional:
+
+- `dns` (List of String)
+- `excluded_address_ranges` (List of String)
+- `lease_time` (Number)
+- `server_mac` (String)
+
+Read-Only:
+
+- `id` (String)
+
+
+
+### Nested Schema for `dhcp_v6`
+
+Required:
+
+- `address_prefix` (String)
+- `enabled` (Boolean)
+
+Optional:
+
+- `dns` (List of String)
+- `lease_time` (Number)
+- `server_mac` (String)
+
+Read-Only:
+
+- `id` (String)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `l2_connection_port`
+
+Read-Only:
+
+- `access_group_id` (String)
+- `created_at` (String)
+- `created_by` (String)
+- `id` (String)
+- `l2_external_network` (List of Object) (see [below for nested schema](#nestedobjatt--l2_connection_port--l2_external_network))
+- `updated_at` (String)
+- `updated_by` (String)
+- `version_id` (Number)
+
+
+### Nested Schema for `l2_connection_port.l2_external_network`
+
+Read-Only:
+
+- `bridge_network_name` (String)
+- `created_at` (String)
+- `created_by` (String)
+- `description` (String)
+- `display_name` (String)
+- `hypervisors` (List of String)
+- `id` (String)
+- `updated_at` (String)
+- `updated_by` (String)
+- `version_id` (Number)
+- `vlan_tag` (Number)
+
+
+
+
+### Nested Schema for `logical_ports_info`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+
+
+
+### Nested Schema for `routers_info`
+
+Read-Only:
+
+- `display_name` (String)
+- `id` (String)
+
+
+
+### Nested Schema for `status`
+
+Read-Only:
+
+- `hypervisors` (List of Object) (see [below for nested schema](#nestedobjatt--status--hypervisors))
+- `operation_status` (String)
+
+
+### Nested Schema for `status.hypervisors`
+
+Read-Only:
+
+- `display_name` (String)
+- `hypervisor_status` (String)
+- `name` (String)
+- `operation_status` (String)
+- `synced_at` (String)
diff --git a/docs/resources/security_group.md b/docs/resources/security_group.md
new file mode 100644
index 00000000..8b18029f
--- /dev/null
+++ b/docs/resources/security_group.md
@@ -0,0 +1,67 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_security_group Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_security_group (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `account_id` (Number)
+- `name` (String)
+
+### Optional
+
+- `description` (String)
+- `rules` (Block Set) (see [below for nested schema](#nestedblock--rules))
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `created_at` (Number)
+- `created_by` (String)
+- `id` (String) The ID of this resource.
+- `security_group_id` (Number)
+- `updated_at` (Number)
+- `updated_by` (String)
+
+
+### Nested Schema for `rules`
+
+Required:
+
+- `direction` (String)
+
+Optional:
+
+- `ethertype` (String)
+- `port_range_max` (Number)
+- `port_range_min` (Number)
+- `protocol` (String)
+- `remote_ip_prefix` (String)
+
+Read-Only:
+
+- `id` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/snapshot.md b/docs/resources/snapshot.md
new file mode 100644
index 00000000..cb9be599
--- /dev/null
+++ b/docs/resources/snapshot.md
@@ -0,0 +1,45 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_snapshot Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_snapshot (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `compute_id` (Number) ID of the compute instance to create snapshot for.
+- `label` (String) text label for snapshot. Must be unique among this compute snapshots.
+
+### Optional
+
+- `rollback` (Boolean) is rollback the snapshot
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### 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.
+- `timestamp` (Number) timestamp
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/docs/resources/vins.md b/docs/resources/vins.md
new file mode 100644
index 00000000..bf6bf788
--- /dev/null
+++ b/docs/resources/vins.md
@@ -0,0 +1,511 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `name` (String)
+
+### Optional
+
+- `account_id` (Number)
+- `desc` (String) Optional user-defined text description of this ViNS.
+- `dns` (Set of String)
+- `enable` (Boolean)
+- `enable_secgroups` (Boolean) enable security groups
+- `ext_ip_addr` (String)
+- `ext_net` (Block List, Max: 1) (see [below for nested schema](#nestedblock--ext_net))
+- `ext_net_id` (Number)
+- `force` (Boolean)
+- `gid` (Number)
+- `ip` (Block List) (see [below for nested schema](#nestedblock--ip))
+- `ipcidr` (String)
+- `nat_rule` (Block List) (see [below for nested schema](#nestedblock--nat_rule))
+- `permanently` (Boolean)
+- `pre_reservations_num` (Number)
+- `restore` (Boolean)
+- `rg_id` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+- `vnfdev_redeploy` (Boolean)
+- `vnfdev_restart` (Boolean)
+- `zone_id` (Number) ID of the Zone to put ViNS into
+
+### Read-Only
+
+- `account_name` (String) Name of the account, which this ViNS belongs to.
+- `computes` (List of Object) (see [below for nested schema](#nestedatt--computes))
+- `created_by` (String)
+- `created_time` (Number)
+- `default_gw` (String)
+- `default_qos` (List of Object) (see [below for nested schema](#nestedatt--default_qos))
+- `deleted_by` (String)
+- `deleted_time` (Number)
+- `guid` (Number)
+- `id` (String) The ID of this resource.
+- `lock_status` (String)
+- `manager_id` (Number)
+- `manager_type` (String)
+- `milestones` (Number)
+- `net_mask` (Number)
+- `network` (String)
+- `redundant` (Boolean)
+- `rg_name` (String)
+- `sec_vnf_dev_id` (Number)
+- `status` (String)
+- `updated_by` (String)
+- `updated_time` (Number)
+- `user_managed` (Boolean)
+- `vins_id` (Number) Unique ID of the ViNS. If ViNS ID is specified, then ViNS name, rg_id and account_id are ignored.
+- `vnf_dev` (List of Object) (see [below for nested schema](#nestedatt--vnf_dev))
+- `vnfs` (List of Object) (see [below for nested schema](#nestedatt--vnfs))
+- `vxlan_id` (Number)
+
+
+### Nested Schema for `ext_net`
+
+Optional:
+
+- `ext_net_id` (Number)
+- `ext_net_ip` (String)
+
+
+
+### Nested Schema for `ip`
+
+Required:
+
+- `type` (String)
+
+Optional:
+
+- `compute_id` (Number)
+- `ip_addr` (String)
+- `mac_addr` (String)
+
+
+
+### Nested Schema for `nat_rule`
+
+Optional:
+
+- `ext_port_end` (Number)
+- `ext_port_start` (Number)
+- `int_ip` (String)
+- `int_port` (Number)
+- `proto` (String)
+
+Read-Only:
+
+- `rule_id` (Number)
+
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
+
+
+
+### Nested Schema for `computes`
+
+Read-Only:
+
+- `compute_id` (Number)
+- `compute_name` (String)
+
+
+
+### Nested Schema for `default_qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+### Nested Schema for `vnf_dev`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `capabilities` (List of String)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config))
+- `config_saved` (Boolean)
+- `custom_pre_cfg` (Boolean)
+- `desc` (String)
+- `gid` (Number)
+- `guid` (Number)
+- `interfaces` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces))
+- `live_migration_job_id` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `vins` (List of Number)
+- `vnc_password` (String)
+- `vnf_id` (Number)
+- `vnf_name` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnf_dev.config`
+
+Read-Only:
+
+- `mgmt` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--mgmt))
+- `resources` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--config--resources))
+
+
+### Nested Schema for `vnf_dev.config.mgmt`
+
+Read-Only:
+
+- `ip_addr` (String)
+- `password` (String)
+- `ssh_key` (String)
+- `user` (String)
+
+
+
+### Nested Schema for `vnf_dev.config.resources`
+
+Read-Only:
+
+- `cpu` (Number)
+- `node_id` (Number)
+- `ram` (Number)
+- `uuid` (String)
+
+
+
+
+### Nested Schema for `vnf_dev.interfaces`
+
+Read-Only:
+
+- `bus_number` (Number)
+- `conn_id` (Number)
+- `conn_type` (String)
+- `def_gw` (String)
+- `enable_secgroups` (Boolean)
+- `enabled` (Boolean)
+- `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)
+- `net_type` (String)
+- `node_id` (Number)
+- `pci_slot` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnf_dev--interfaces--qos))
+- `sdn_interface_id` (String)
+- `security_groups` (List of Number)
+- `target` (String)
+- `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`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+
+### Nested Schema for `vnfs`
+
+Read-Only:
+
+- `dhcp` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp))
+- `gw` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw))
+- `nat` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat))
+
+
+### Nested Schema for `vnfs.dhcp`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices))
+- `dhcp_id` (Number)
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.dhcp.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `dns` (List of String)
+- `ip_end` (String)
+- `ip_start` (String)
+- `lease` (Number)
+- `netmask` (Number)
+- `network` (String)
+- `reservations` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--config--reservations))
+
+
+### Nested Schema for `vnfs.dhcp.config.reservations`
+
+Read-Only:
+
+- `account_id` (Number)
+- `ip` (String)
+- `mac` (String)
+- `type` (String)
+- `vm_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--dhcp--devices--primary))
+
+
+### Nested Schema for `vnfs.dhcp.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.dhcp.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `gw_id` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.gw.config`
+
+Read-Only:
+
+- `default_gw` (String)
+- `ext_net_id` (Number)
+- `ext_net_ip` (String)
+- `ext_netmask` (Number)
+- `qos` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--config--qos))
+
+
+### Nested Schema for `vnfs.gw.config.qos`
+
+Read-Only:
+
+- `e_rate` (Number)
+- `guid` (String)
+- `in_brust` (Number)
+- `in_rate` (Number)
+
+
+
+
+### Nested Schema for `vnfs.gw.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--gw--devices--primary))
+
+
+### Nested Schema for `vnfs.gw.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.gw.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
+
+
+
+
+### Nested Schema for `vnfs.nat`
+
+Read-Only:
+
+- `_ckey` (String)
+- `account_id` (Number)
+- `config` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config))
+- `created_time` (Number)
+- `devices` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices))
+- `gid` (Number)
+- `guid` (Number)
+- `lock_status` (String)
+- `milestones` (Number)
+- `nat_id` (Number)
+- `owner_id` (Number)
+- `owner_type` (String)
+- `pure_virtual` (Boolean)
+- `routes` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--routes))
+- `status` (String)
+- `tech_status` (String)
+- `type` (String)
+- `zone_id` (Number)
+
+
+### Nested Schema for `vnfs.nat.config`
+
+Read-Only:
+
+- `net_mask` (Number)
+- `network` (String)
+- `rules` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--config--rules))
+
+
+### Nested Schema for `vnfs.nat.config.rules`
+
+Read-Only:
+
+- `local_ip` (String)
+- `local_port` (Number)
+- `protocol` (String)
+- `public_port_end` (Number)
+- `public_port_start` (Number)
+- `rule_id` (Number)
+- `vm_id` (Number)
+- `vm_name` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.devices`
+
+Read-Only:
+
+- `primary` (List of Object) (see [below for nested schema](#nestedobjatt--vnfs--nat--devices--primary))
+
+
+### Nested Schema for `vnfs.nat.devices.primary`
+
+Read-Only:
+
+- `dev_id` (Number)
+- `iface01` (String)
+- `iface02` (String)
+
+
+
+
+### Nested Schema for `vnfs.nat.routes`
+
+Read-Only:
+
+- `compute_ids` (List of Number)
+- `destination` (String)
+- `gateway` (String)
+- `guid` (String)
+- `netmask` (String)
+- `route_id` (Number)
diff --git a/docs/resources/vins_static_route.md b/docs/resources/vins_static_route.md
new file mode 100644
index 00000000..b6b9de92
--- /dev/null
+++ b/docs/resources/vins_static_route.md
@@ -0,0 +1,45 @@
+---
+# generated by https://github.com/hashicorp/terraform-plugin-docs
+page_title: "decort_vins_static_route Resource - terraform-provider-decort"
+subcategory: ""
+description: |-
+
+---
+
+# decort_vins_static_route (Resource)
+
+
+
+
+
+
+## Schema
+
+### Required
+
+- `destination` (String)
+- `gateway` (String)
+- `netmask` (String)
+- `vins_id` (Number) Unique ID of the ViNS
+
+### Optional
+
+- `route_id` (Number)
+- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))
+
+### Read-Only
+
+- `compute_ids` (List of Number)
+- `guid` (String)
+- `id` (String) The ID of this resource.
+
+
+### Nested Schema for `timeouts`
+
+Optional:
+
+- `create` (String)
+- `default` (String)
+- `delete` (String)
+- `read` (String)
+- `update` (String)
diff --git a/go.mod b/go.mod
new file mode 100644
index 00000000..b4adb51f
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,94 @@
+module repository.basistech.ru/BASIS/terraform-provider-decort
+
+go 1.24.0
+
+require (
+ github.com/google/uuid v1.6.0
+ github.com/hashicorp/go-cty v1.5.0
+ github.com/hashicorp/terraform-plugin-docs v0.24.0
+ github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1
+ github.com/sirupsen/logrus v1.9.0
+ golang.org/x/net v0.44.0
+ repository.basistech.ru/BASIS/decort-golang-sdk v1.15.1
+)
+
+replace repository.basistech.ru/BASIS/decort-golang-sdk => ../decort-sdk-local
+
+require (
+ github.com/BurntSushi/toml v1.2.1 // indirect
+ github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect
+ github.com/Masterminds/goutils v1.1.1 // indirect
+ github.com/Masterminds/semver/v3 v3.2.0 // indirect
+ github.com/Masterminds/sprig/v3 v3.2.3 // indirect
+ github.com/ProtonMail/go-crypto v1.1.6 // indirect
+ github.com/agext/levenshtein v1.2.3 // indirect
+ github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
+ github.com/armon/go-radix v1.0.0 // indirect
+ github.com/bgentry/speakeasy v0.1.0 // indirect
+ github.com/bmatcuk/doublestar/v4 v4.9.1 // indirect
+ github.com/cloudflare/circl v1.6.1 // indirect
+ github.com/fatih/color v1.16.0 // indirect
+ github.com/gabriel-vasile/mimetype v1.4.10 // indirect
+ github.com/go-playground/locales v0.14.1 // indirect
+ github.com/go-playground/universal-translator v0.18.1 // indirect
+ github.com/go-playground/validator/v10 v10.28.0 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
+ github.com/google/go-cmp v0.7.0 // indirect
+ github.com/google/go-querystring v1.1.0 // indirect
+ github.com/hashicorp/cli v1.1.7 // indirect
+ github.com/hashicorp/errwrap v1.1.0 // indirect
+ github.com/hashicorp/go-checkpoint v0.5.0 // indirect
+ github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
+ github.com/hashicorp/go-hclog v1.6.3 // indirect
+ github.com/hashicorp/go-multierror v1.1.1 // indirect
+ github.com/hashicorp/go-plugin v1.7.0 // indirect
+ github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
+ github.com/hashicorp/go-uuid v1.0.3 // indirect
+ github.com/hashicorp/go-version v1.7.0 // indirect
+ github.com/hashicorp/hc-install v0.9.2 // indirect
+ github.com/hashicorp/hcl/v2 v2.24.0 // indirect
+ github.com/hashicorp/logutils v1.0.0 // indirect
+ github.com/hashicorp/terraform-exec v0.24.0 // indirect
+ github.com/hashicorp/terraform-json v0.27.2 // indirect
+ github.com/hashicorp/terraform-plugin-go v0.29.0 // indirect
+ github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect
+ github.com/hashicorp/terraform-registry-address v0.4.0 // indirect
+ github.com/hashicorp/terraform-svchost v0.1.1 // indirect
+ github.com/hashicorp/yamux v0.1.2 // indirect
+ github.com/huandu/xstrings v1.4.0 // indirect
+ github.com/imdario/mergo v0.3.15 // indirect
+ github.com/leodido/go-urn v1.4.0 // indirect
+ github.com/mattn/go-colorable v0.1.14 // indirect
+ github.com/mattn/go-isatty v0.0.20 // indirect
+ github.com/mattn/go-runewidth v0.0.9 // 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
+ github.com/mitchellh/mapstructure v1.5.0 // indirect
+ 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/shopspring/decimal v1.3.1 // indirect
+ github.com/spf13/cast v1.5.0 // indirect
+ github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
+ github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
+ github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
+ github.com/yuin/goldmark v1.7.7 // indirect
+ github.com/yuin/goldmark-meta v1.1.0 // indirect
+ github.com/zclconf/go-cty v1.17.0 // indirect
+ go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect
+ go.uber.org/mock v0.6.0 // indirect
+ golang.org/x/crypto v0.42.0 // indirect
+ golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect
+ golang.org/x/mod v0.28.0 // indirect
+ golang.org/x/sync v0.17.0 // indirect
+ golang.org/x/sys v0.36.0 // indirect
+ golang.org/x/text v0.30.0 // indirect
+ golang.org/x/tools v0.37.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
+ google.golang.org/grpc v1.75.1 // indirect
+ google.golang.org/protobuf v1.36.9 // indirect
+ gopkg.in/yaml.v2 v2.3.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 00000000..777e58d2
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,320 @@
+dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
+github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
+github.com/Kunde21/markdownfmt/v3 v3.1.0 h1:KiZu9LKs+wFFBQKhrZJrFZwtLnCCWJahL+S+E/3VnM0=
+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.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.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA=
+github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM=
+github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
+github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
+github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
+github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
+github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
+github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
+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 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=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/bmatcuk/doublestar/v4 v4.9.1 h1:X8jg9rRZmJd4yRy7ZeNDRnM+T3ZfHv15JiBJ/avrEXE=
+github.com/bmatcuk/doublestar/v4 v4.9.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
+github.com/bufbuild/protocompile v0.14.1 h1:iA73zAf/fyljNjQKwYzUHD6AD4R8KMasmwa/FBatYVw=
+github.com/bufbuild/protocompile v0.14.1/go.mod h1:ppVdAIhbr2H8asPk6k4pY7t9zB1OU5DoEw9xY/FUi1c=
+github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
+github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
+github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
+github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
+github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
+github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
+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=
+github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
+github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
+github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0=
+github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
+github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
+github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
+github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
+github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
+github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=
+github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
+github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
+github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
+github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
+github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
+github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
+github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
+github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688=
+github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU=
+github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
+github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
+github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
+github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
+github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
+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.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hashicorp/cli v1.1.7 h1:/fZJ+hNdwfTSfsxMBa9WWMlfjUZbX8/LnUxgAd7lCVU=
+github.com/hashicorp/cli v1.1.7/go.mod h1:e6Mfpga9OCT1vqzFuoGZiiF/KaG9CbUfO5s3ghU3YgU=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
+github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU=
+github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg=
+github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
+github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
+github.com/hashicorp/go-cty v1.5.0 h1:EkQ/v+dDNUqnuVpmS5fPqyY71NXVgT5gf32+57xY8g0=
+github.com/hashicorp/go-cty v1.5.0/go.mod h1:lFUCG5kd8exDobgSfyj4ONE/dc822kiYMguVKdHGMLM=
+github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
+github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
+github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
+github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA=
+github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8=
+github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
+github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
+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.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
+github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24=
+github.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I=
+github.com/hashicorp/hcl/v2 v2.24.0 h1:2QJdZ454DSsYGoaE6QheQZjtKZSUs9Nh2izTWiwQxvE=
+github.com/hashicorp/hcl/v2 v2.24.0/go.mod h1:oGoO1FIQYfn/AgyOhlg9qLC6/nOJPX3qGbkZpYAcqfM=
+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.24.0 h1:mL0xlk9H5g2bn0pPF6JQZk5YlByqSqrO5VoaNtAf8OE=
+github.com/hashicorp/terraform-exec v0.24.0/go.mod h1:lluc/rDYfAhYdslLJQg3J0oDqo88oGQAdHR+wDqFvo4=
+github.com/hashicorp/terraform-json v0.27.2 h1:BwGuzM6iUPqf9JYM/Z4AF1OJ5VVJEEzoKST/tRDBJKU=
+github.com/hashicorp/terraform-json v0.27.2/go.mod h1:GzPLJ1PLdUG5xL6xn1OXWIjteQRT2CNT9o/6A9mi9hE=
+github.com/hashicorp/terraform-plugin-docs v0.24.0 h1:YNZYd+8cpYclQyXbl1EEngbld8w7/LPOm99GD5nikIU=
+github.com/hashicorp/terraform-plugin-docs v0.24.0/go.mod h1:YLg+7LEwVmRuJc0EuCw0SPLxuQXw5mW8iJ5ml/kvi+o=
+github.com/hashicorp/terraform-plugin-go v0.29.0 h1:1nXKl/nSpaYIUBU1IG/EsDOX0vv+9JxAltQyDMpq5mU=
+github.com/hashicorp/terraform-plugin-go v0.29.0/go.mod h1:vYZbIyvxyy0FWSmDHChCqKvI40cFTDGSb3D8D70i9GM=
+github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0=
+github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow=
+github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1 h1:mlAq/OrMlg04IuJT7NpefI1wwtdpWudnEmjuQs04t/4=
+github.com/hashicorp/terraform-plugin-sdk/v2 v2.38.1/go.mod h1:GQhpKVvvuwzD79e8/NZ+xzj+ZpWovdPAe8nfV/skwNU=
+github.com/hashicorp/terraform-registry-address v0.4.0 h1:S1yCGomj30Sao4l5BMPjTGZmCNzuv7/GDTDX99E9gTk=
+github.com/hashicorp/terraform-registry-address v0.4.0/go.mod h1:LRS1Ay0+mAiRkUyltGT+UHWkIqTFvigGn/LbMshfflE=
+github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ=
+github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc=
+github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8=
+github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns=
+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=
+github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
+github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
+github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
+github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
+github.com/jhump/protoreflect v1.17.0 h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94=
+github.com/jhump/protoreflect v1.17.0/go.mod h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8=
+github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
+github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
+github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
+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.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
+github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
+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.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
+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/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=
+github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
+github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
+github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
+github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
+github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA=
+github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU=
+github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
+github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+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.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
+github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
+github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
+github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
+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.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8=
+github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY=
+github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
+github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+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.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
+github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
+github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
+github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
+github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
+github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8=
+github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
+github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
+github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
+github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
+github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+github.com/yuin/goldmark v1.7.7 h1:5m9rrB1sW3JUMToKFQfb+FGt1U7r57IHu5GrYrG2nqU=
+github.com/yuin/goldmark v1.7.7/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.17.0 h1:seZvECve6XX4tmnvRzWtJNHdscMtYEx5R7bnnVyd/d0=
+github.com/zclconf/go-cty v1.17.0/go.mod h1:wqFzcImaLTI6A5HfsRwB0nj5n0MRZFwmey8YoFPPs3U=
+github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo=
+github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM=
+go.abhg.dev/goldmark/frontmatter v0.2.0 h1:P8kPG0YkL12+aYk2yU3xHv4tcXzeVnN+gU0tJ5JnxRw=
+go.abhg.dev/goldmark/frontmatter v0.2.0/go.mod h1:XqrEkZuM57djk7zrlRUB02x8I5J0px76YjkOzhB4YlU=
+go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
+go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
+go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
+go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
+go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
+go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
+go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
+go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
+go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
+go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
+go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
+go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
+go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+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.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
+golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
+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.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
+golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+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.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I=
+golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
+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/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
+golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+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=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/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.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
+golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+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.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
+golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
+golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
+gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
+google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
+google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.36.9 h1:w2gp2mA27hUeUzj9Ex9FBjsBm40zfaDtEWow293U7Iw=
+google.golang.org/protobuf v1.36.9/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
+gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
+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=
diff --git a/internal/constants/constants.go b/internal/constants/constants.go
new file mode 100644
index 00000000..e7124801
--- /dev/null
+++ b/internal/constants/constants.go
@@ -0,0 +1,42 @@
+/*
+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.
+*/
+
+package constants
+
+// LIMIT_MAX_VINS_PER_RESGROUP set maximum number of VINs instances per Resource Group
+const LIMIT_MAX_VINS_PER_RESGROUP = 4
+
+// MAX_SSHKEYS_PER_COMPUTE sets maximum number of user:ssh_key pairs to authorize when creating new compute
+const MAX_SSHKEYS_PER_COMPUTE = 12
+
+// MAX_EXTRA_DISKS_PER_COMPUTE sets maximum number of extra disks that can be added when creating new compute
+const MAX_EXTRA_DISKS_PER_COMPUTE = 12
+
+// MAX_NETWORKS_PER_COMPUTE sets maximum number of vNICs per compute
+const MAX_NETWORKS_PER_COMPUTE = 8
+
+// MAX_CPUS_PER_COMPUTE sets maximum number of vCPUs per compute
+const MAX_CPUS_PER_COMPUTE = 128
+
+// MIN_RAM_PER_COMPUTE sets minimum amount of RAM per compute in MB
+const MIN_RAM_PER_COMPUTE = 128
+
+// RAM_DIVISIBILITY sets divisibility of RAM value
+const RAM_DIVISIBILITY = 128
diff --git a/internal/constants/timeouts.go b/internal/constants/timeouts.go
new file mode 100644
index 00000000..06e539f3
--- /dev/null
+++ b/internal/constants/timeouts.go
@@ -0,0 +1,33 @@
+/*
+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.
+*/
+
+package constants
+
+import "time"
+
+// timeouts for API calls from CRUD functions of Terraform plugin
+var Timeout30s = time.Second * 30
+var Timeout60s = time.Second * 60
+var Timeout180s = time.Second * 180
+var Timeout300s = time.Second * 300
+var Timeout600s = time.Second * 600
+var Timeout900s = time.Second * 900
+var Timeout20m = time.Minute * 20
+var Timeout30m = time.Minute * 30
diff --git a/internal/controller/controller.go b/internal/controller/controller.go
new file mode 100644
index 00000000..42faa5ce
--- /dev/null
+++ b/internal/controller/controller.go
@@ -0,0 +1,449 @@
+/*
+Copyright (c) 2019-2023 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.
+*/
+
+package controller
+
+import (
+ "crypto/tls"
+ "fmt"
+ "io"
+
+ "net/http"
+ "net/url"
+ "strconv"
+ "strings"
+
+ log "github.com/sirupsen/logrus"
+ decort "repository.basistech.ru/BASIS/decort-golang-sdk"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/config"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/sdn"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+// enumerated constants that define authentication modes
+const (
+ MODE_UNDEF = iota // this is the invalid mode - it should never be seen
+ MODE_LEGACY
+ MODE_DECS3O
+ MODE_JWT
+ MODE_BVS
+)
+
+type ControllerCfg struct {
+ controller_url string // always required
+ auth_mode_code int // always required
+ auth_mode_txt string // always required, it is a text representation of auth mode
+ bvs_user string // required for bvs mode
+ bvs_password string // required for bvs mode
+ domain string // required for bvs mode
+ token config.Token // obtained from BVS provider on successful login in bvs mode
+ path_cfg string // the path of the configuration file entry
+ path_token string // the path of the token file entry
+ time_to_refresh int64 // the number of minutes before the expiration of the token, a refresh will be made
+ legacy_user string // required for legacy mode
+ legacy_password string // required for legacy mode
+ legacy_sid string // obtained from DECORT controller on successful login in legacy mode
+ jwt string // obtained from Outh2 provider on successful login in decs3o mode, required in jwt mode
+ app_id string // required for decs3o and bvs mode
+ app_secret string // required for decs3o and bvs mode
+ oauth2_url string // required for decs3o and bvs mode
+ decort_username string // assigned to either legacy_user (legacy mode) or Oauth2 user (decs3o mode) upon successful verification
+ cc_client *http.Client // assigned when all initial checks successfully passed
+ caller interfaces.Caller
+}
+
+func ControllerConfigure(d *schema.ResourceData) (*ControllerCfg, error) {
+ // This function first will check that all required provider parameters for the
+ // selected authenticator mode are set correctly and initialize ControllerCfg structure
+ // based on the provided parameters.
+ //
+ // Next, it will check for validity of supplied credentials by initiating connection to the specified
+ // DECORT controller URL and, if succeeded, completes ControllerCfg structure with the rest of computed
+ // parameters (e.g. JWT, session ID and Oauth2 user name).
+ //
+ // The structure created by this function should be used with subsequent calls to decortAPICall() method,
+ // which is a DECORT authentication mode aware wrapper around standard HTTP requests.
+
+ ret_config := &ControllerCfg{
+ controller_url: d.Get("controller_url").(string),
+ auth_mode_code: MODE_UNDEF,
+ legacy_user: d.Get("user").(string),
+ legacy_password: d.Get("password").(string),
+ legacy_sid: "",
+ bvs_user: d.Get("bvs_user").(string),
+ bvs_password: d.Get("bvs_password").(string),
+ domain: d.Get("domain").(string),
+ jwt: d.Get("jwt").(string),
+ app_id: d.Get("app_id").(string),
+ app_secret: d.Get("app_secret").(string),
+ oauth2_url: d.Get("oauth2_url").(string),
+ decort_username: "",
+ token: config.Token{},
+ path_cfg: d.Get("path_cfg").(string),
+ path_token: d.Get("path_token").(string),
+ time_to_refresh: int64(d.Get("time_to_refresh").(int)),
+ }
+
+ allow_unverified_ssl := d.Get("allow_unverified_ssl").(bool)
+
+ if ret_config.controller_url == "" {
+ return nil, fmt.Errorf("empty DECORT cloud controller URL provided")
+ }
+
+ // this should have already been done by StateFunc defined in Schema, but we want to be sure
+ ret_config.auth_mode_txt = strings.ToLower(d.Get("authenticator").(string))
+
+ switch ret_config.auth_mode_txt {
+ case "jwt":
+ if ret_config.jwt == "" {
+ return nil, fmt.Errorf("authenticator mode 'jwt' specified but no JWT provided")
+ }
+ ret_config.auth_mode_code = MODE_JWT
+ case "decs3o":
+ if ret_config.oauth2_url == "" {
+ return nil, fmt.Errorf("authenticator mode 'decs3o' specified but no OAuth2 URL provided")
+ }
+ if ret_config.app_id == "" {
+ return nil, fmt.Errorf("authenticator mode 'decs3o' specified but no Application ID provided")
+ }
+ if ret_config.app_secret == "" {
+ return nil, fmt.Errorf("authenticator mode 'decs3o' specified but no Secret ID provided")
+ }
+ ret_config.auth_mode_code = MODE_DECS3O
+ case "legacy":
+ //
+ ret_config.legacy_user = d.Get("user").(string)
+ if ret_config.legacy_user == "" {
+ return nil, fmt.Errorf("authenticator mode 'legacy' specified but no user provided")
+ }
+ ret_config.legacy_password = d.Get("password").(string)
+ if ret_config.legacy_password == "" {
+ return nil, fmt.Errorf("authenticator mode 'legacy' specified but no password provided")
+ }
+ ret_config.auth_mode_code = MODE_LEGACY
+ case "bvs":
+ if ret_config.bvs_user == "" {
+ return nil, fmt.Errorf("authenticator mode 'bvs' specified but no user provided")
+ }
+ if ret_config.bvs_password == "" {
+ return nil, fmt.Errorf("authenticator mode 'bvs' specified but no password provided")
+ }
+ if ret_config.oauth2_url == "" {
+ return nil, fmt.Errorf("authenticator mode 'bvs' specified but no bvs URL provided")
+ }
+ if ret_config.app_id == "" {
+ return nil, fmt.Errorf("authenticator mode 'bvs' specified but no Application ID provided")
+ }
+ if ret_config.app_secret == "" {
+ return nil, fmt.Errorf("authenticator mode 'bvs' specified but no Secret ID provided")
+ }
+ if ret_config.domain == "" {
+ return nil, fmt.Errorf("authenticator mode 'bvs' specified but no Domain provided")
+ }
+ ret_config.auth_mode_code = MODE_BVS
+ default:
+ return nil, fmt.Errorf("unknown authenticator mode %q provided", ret_config.auth_mode_txt)
+ }
+
+ if allow_unverified_ssl {
+ log.Warn("ControllerConfigure: allow_unverified_ssl is set - will not check certificates!")
+ transCfg := &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} //nolint:gosec
+ ret_config.cc_client = &http.Client{
+ Transport: transCfg,
+ }
+ } else {
+ ret_config.cc_client = &http.Client{}
+ }
+
+ switch ret_config.auth_mode_code {
+ case MODE_LEGACY:
+ ok, err := ret_config.validateLegacyUser()
+ if !ok {
+ return nil, err
+ }
+ ret_config.decort_username = ret_config.legacy_user
+
+ sdkConf := config.LegacyConfig{
+ Username: ret_config.legacy_user,
+ Password: ret_config.legacy_password,
+ DecortURL: ret_config.controller_url,
+ SSLSkipVerify: allow_unverified_ssl,
+ }
+
+ ret_config.caller = decort.NewLegacy(sdkConf)
+
+ case MODE_JWT:
+ //
+ ok, err := ret_config.validateJWT("")
+ if !ok {
+ return nil, err
+ }
+ case MODE_DECS3O:
+ // on success getDECS3OJWT will set config.jwt to the obtained JWT, so there is no
+ // need to set it once again here
+ // _, err := ret_config.getDECS3OJWT()
+ // if err != nil {
+ // return nil, err
+ // }
+ // we are not verifying the JWT when parsing because actual verification is done on the
+ // OVC controller side. Here we do parsing solely to extract Oauth2 user name (claim "user")
+ // and JWT issuer name (claim "iss")
+ // parser := jwt.Parser{}
+ // token, _, err := parser.ParseUnverified(ret_config.jwt, jwt.MapClaims{})
+ // if err != nil {
+ // return nil, err
+ // }
+ // if claims, ok := token.Claims.(jwt.MapClaims); ok {
+ // var tbuf bytes.Buffer
+ // tbuf.WriteString(claims["username"].(string))
+ // tbuf.WriteString("@")
+ // tbuf.WriteString(claims["iss"].(string))
+ // ret_config.decort_username = tbuf.String()
+ // } else {
+ // return nil, fmt.Errorf("failed to extract user and iss fields from JWT token in oauth2 mode")
+ // }
+
+ sdkConf := config.Config{
+ AppID: ret_config.app_id,
+ AppSecret: ret_config.app_secret,
+ SSOURL: ret_config.oauth2_url,
+ DecortURL: ret_config.controller_url,
+ SSLSkipVerify: allow_unverified_ssl,
+ }
+
+ ret_config.caller = decort.New(sdkConf)
+ case MODE_BVS:
+
+ sdkConf := config.BVSConfig{
+ AppID: ret_config.app_id,
+ AppSecret: ret_config.app_secret,
+ SSOURL: ret_config.oauth2_url,
+ DecortURL: ret_config.controller_url,
+ SSLSkipVerify: allow_unverified_ssl,
+ Username: ret_config.bvs_user,
+ Password: ret_config.bvs_password,
+ Domain: ret_config.domain,
+ Token: ret_config.token,
+ PathCfg: ret_config.path_cfg,
+ PathToken: ret_config.path_token,
+ TimeToRefresh: ret_config.time_to_refresh,
+ }
+
+ ret_config.caller = decort.NewBVS(sdkConf)
+ default:
+ // FYI, this should never happen due to all above checks, but we want to be fool proof
+ return nil, fmt.Errorf("unknown authenticator mode code %d provided", ret_config.auth_mode_code)
+ }
+
+ // All checks passed successfully, credentials corresponding to the selected authenticator mode
+ // obtained and validated.
+ return ret_config, nil
+}
+
+// func (config *ControllerCfg) GetDecortUsername() string {
+// return config.decort_username
+// }
+
+// func (config *ControllerCfg) getDECS3OJWT() (string, error) {
+// // Obtain JWT from the Oauth2 provider using application ID and application secret provided in config.
+// if config.auth_mode_code == MODE_UNDEF {
+// return "", fmt.Errorf("getOAuth2JWT method called for undefined authorization mode")
+// }
+// if config.auth_mode_code != MODE_DECS3O {
+// return "", fmt.Errorf("getOAuth2JWT method called for incompatible authorization mode %q", config.auth_mode_txt)
+// }
+
+// params := url.Values{}
+// params.Add("grant_type", "client_credentials")
+// params.Add("client_id", config.app_id)
+// params.Add("client_secret", config.app_secret)
+// params.Add("response_type", "id_token")
+// params.Add("validity", "3600")
+// params_str := params.Encode()
+
+// req, err := http.NewRequest("POST", config.oauth2_url+"/v1/oauth/access_token", strings.NewReader(params_str))
+// if err != nil {
+// return "", err
+// }
+// req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+// req.Header.Set("Content-Length", strconv.Itoa(len(params_str)))
+
+// resp, err := config.cc_client.Do(req)
+// if err != nil {
+// return "", err
+// }
+// if resp.StatusCode != http.StatusOK {
+// // fmt.Println("response Status:", resp.Status)
+// // fmt.Println("response Headers:", resp.Header)
+// // fmt.Println("response Headers:", req.URL)
+// return "", fmt.Errorf("getOauth2JWT: unexpected status code %d when obtaining JWT from %q for APP_ID %q, request Body %q",
+// resp.StatusCode, req.URL, config.app_id, params_str)
+// }
+// defer resp.Body.Close()
+
+// responseData, err := io.ReadAll(resp.Body)
+// if err != nil {
+// return "", err
+// }
+
+// // validation successful - store JWT in the corresponding field of the ControllerCfg structure
+// config.jwt = strings.TrimSpace(string(responseData))
+
+// return config.jwt, nil
+// }
+
+func (config *ControllerCfg) validateJWT(jwt string) (bool, error) {
+ /*
+ Validate JWT against DECORT controller. JWT can be supplied as argument to this method. If empty string supplied as
+ argument, JWT will be taken from config attribute.
+ DECORT controller URL will always be taken from the config attribute assigned at instantiation.
+ Validation is accomplished by attempting API call that lists account for the invoking user.
+ */
+ if jwt == "" {
+ if config.jwt == "" {
+ return false, fmt.Errorf("validateJWT method called, but no meaningful JWT provided")
+ }
+ jwt = config.jwt
+ }
+
+ if config.oauth2_url == "" {
+ return false, fmt.Errorf("validateJWT method called, but no OAuth2 URL provided")
+ }
+
+ req, err := http.NewRequest("POST", config.controller_url+"/restmachine/cloudapi/account/list", nil)
+ if err != nil {
+ return false, err
+ }
+
+ req.Header.Set("Authorization", fmt.Sprintf("bearer %s", jwt))
+ // req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+ // req.Header.Set("Content-Length", strconv.Itoa(0))
+
+ resp, err := config.cc_client.Do(req)
+ if err != nil {
+ return false, err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return false, fmt.Errorf("validateJWT: unexpected status code %d when validating JWT against %q",
+ resp.StatusCode, req.URL)
+ }
+ defer resp.Body.Close()
+
+ return true, nil
+}
+
+func (config *ControllerCfg) validateLegacyUser() (bool, error) {
+ /*
+ Validate legacy user by obtaining a session key, which will be used for authenticating subsequent API calls
+ to DECORT controller.
+ If successful, the session key is stored in config.legacy_sid and true is returned. If unsuccessful for any
+ reason, the method will return false and error.
+ */
+ if config.auth_mode_code == MODE_UNDEF {
+ return false, fmt.Errorf("validateLegacyUser method called for undefined authorization mode")
+ }
+ if config.auth_mode_code != MODE_LEGACY {
+ return false, fmt.Errorf("validateLegacyUser method called for incompatible authorization mode %q", config.auth_mode_txt)
+ }
+
+ params := url.Values{}
+ params.Add("username", config.legacy_user)
+ params.Add("password", config.legacy_password)
+ params_str := params.Encode()
+
+ req, err := http.NewRequest("POST", config.controller_url+"/restmachine/cloudapi/user/authenticate", strings.NewReader(params_str))
+ if err != nil {
+ return false, err
+ }
+
+ req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+ req.Header.Set("Content-Length", strconv.Itoa(len(params_str)))
+
+ resp, err := config.cc_client.Do(req)
+ if err != nil {
+ return false, err
+ }
+ if resp.StatusCode != http.StatusOK {
+ return false, fmt.Errorf("validateLegacyUser: unexpected status code %d when validating legacy user %q against %q",
+ resp.StatusCode, config.legacy_user, config.controller_url)
+ }
+ defer resp.Body.Close()
+
+ responseData, err := io.ReadAll(req.Body)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ // validation successful - keep session ID for future use
+ config.legacy_sid = string(responseData)
+
+ return true, nil
+}
+
+func (config *ControllerCfg) CloudAPI() *cloudapi.CloudAPI {
+ switch config.auth_mode_code {
+ case MODE_LEGACY:
+ client, _ := config.caller.(*decort.LegacyDecortClient)
+ return client.CloudAPI()
+ case MODE_DECS3O:
+ client, _ := config.caller.(*decort.DecortClient)
+ return client.CloudAPI()
+ case MODE_BVS:
+ client, _ := config.caller.(*decort.BVSDecortClient)
+ return client.CloudAPI()
+ default:
+ return &cloudapi.CloudAPI{}
+ }
+}
+func (config *ControllerCfg) CloudBroker() *cloudbroker.CloudBroker {
+ switch config.auth_mode_code {
+ case MODE_LEGACY:
+ client, _ := config.caller.(*decort.LegacyDecortClient)
+ return client.CloudBroker()
+ case MODE_DECS3O:
+ client, _ := config.caller.(*decort.DecortClient)
+ return client.CloudBroker()
+ case MODE_BVS:
+ client, _ := config.caller.(*decort.BVSDecortClient)
+ return client.CloudBroker()
+ default:
+ return &cloudbroker.CloudBroker{}
+ }
+}
+
+func (config *ControllerCfg) SDN() *sdn.SDN {
+ switch config.auth_mode_code {
+ case MODE_LEGACY:
+ client, _ := config.caller.(*decort.LegacyDecortClient)
+ return client.SDN()
+ case MODE_DECS3O:
+ client, _ := config.caller.(*decort.DecortClient)
+ return client.SDN()
+ case MODE_BVS:
+ client, _ := config.caller.(*decort.BVSDecortClient)
+ return client.SDN()
+ default:
+ return &sdn.SDN{}
+ }
+}
diff --git a/internal/dc/utils.go b/internal/dc/utils.go
new file mode 100644
index 00000000..0f41e398
--- /dev/null
+++ b/internal/dc/utils.go
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+Nikita Sorokin,
+Tim Tkachev,
+
+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 dc
+
+import "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+
+func ErrorsToDiagnostics(errs []error) diag.Diagnostics {
+ if len(errs) == 0 {
+ return nil
+ }
+
+ diags := diag.Diagnostics{}
+
+ for _, err := range errs {
+ diags = append(diags, diag.Diagnostic{
+ Severity: diag.Error,
+ Summary: err.Error(),
+ })
+ }
+
+ return diags
+}
+
+func ErrorsToWarnings(errs []error) Warnings {
+ w := Warnings{}
+
+ for _, err := range errs {
+ w.Add(err)
+ }
+
+ return w
+}
diff --git a/internal/dc/warnings.go b/internal/dc/warnings.go
new file mode 100644
index 00000000..1aac8807
--- /dev/null
+++ b/internal/dc/warnings.go
@@ -0,0 +1,53 @@
+/*
+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
+*/
+
+//Diagnostics Collector
+package dc
+
+import "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+
+type Warnings struct {
+ diagnostics diag.Diagnostics
+}
+
+func (w *Warnings) Add(err error) {
+ if w.diagnostics == nil {
+ w.diagnostics = diag.Diagnostics{}
+ }
+ diagFromErr := diag.FromErr(err)
+ diagFromErr[0].Severity = diag.Warning
+ w.diagnostics = append(w.diagnostics, diagFromErr[0])
+}
+
+func (w Warnings) Get() diag.Diagnostics {
+ return w.diagnostics
+}
diff --git a/internal/flattens/meta.go b/internal/flattens/meta.go
new file mode 100644
index 00000000..09f939de
--- /dev/null
+++ b/internal/flattens/meta.go
@@ -0,0 +1,42 @@
+/*
+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.
+*/
+
+package flattens
+
+import "strconv"
+
+func FlattenMeta(m []interface{}) []string {
+ output := []string{}
+ for _, item := range m {
+ switch d := item.(type) {
+ case string:
+ output = append(output, d)
+ case int:
+ output = append(output, strconv.Itoa(d))
+ case int64:
+ output = append(output, strconv.FormatInt(d, 10))
+ case float64:
+ output = append(output, strconv.FormatInt(int64(d), 10))
+ default:
+ output = append(output, "")
+ }
+ }
+ return output
+}
diff --git a/internal/location/api.go b/internal/location/api.go
new file mode 100644
index 00000000..e78743c4
--- /dev/null
+++ b/internal/location/api.go
@@ -0,0 +1,23 @@
+/*
+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.
+*/
+
+package location
+
+const LOCATIONS_LIST_API = "/restmachine/cloudapi/locations/list" // Returns list of GridRecord on success
diff --git a/internal/location/location.go b/internal/location/location.go
new file mode 100644
index 00000000..b44bab5f
--- /dev/null
+++ b/internal/location/location.go
@@ -0,0 +1,53 @@
+/*
+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.
+*/
+
+package location
+
+import (
+ "context"
+ "fmt"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/locations"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+var DefaultGridID int
+
+func UtilityLocationGetDefaultGridID(ctx context.Context, m interface{}) (int, error) {
+ c := m.(*controller.ControllerCfg)
+ req := locations.ListRequest{}
+
+ log.Debug("utilityLocationGetDefaultGridID: retrieving locations list")
+ locList, err := c.CloudAPI().Locations().List(ctx, req)
+ if err != nil {
+ return 0, err
+ }
+
+ if len(locList.Data) == 0 {
+ DefaultGridID = 0
+ return 0, fmt.Errorf("utilityLocationGetDefaultGridID: retrieved 0 length locations list")
+ }
+
+ DefaultGridID = int(locList.Data[0].GID)
+ log.Debugf("utilityLocationGetDefaultGridID: default location GridID %d, name %s", DefaultGridID, locList.Data[0].Name)
+
+ return DefaultGridID, nil
+}
diff --git a/internal/location/models.go b/internal/location/models.go
new file mode 100644
index 00000000..dac3a756
--- /dev/null
+++ b/internal/location/models.go
@@ -0,0 +1,31 @@
+/*
+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.
+*/
+
+package location
+
+type LocationRecord struct {
+ GridID int `json:"gid"`
+ Id int `json:"id"`
+ LocationCode string `json:"locationCode"`
+ Name string `json:"name"`
+ Flag string `json:"flag"`
+}
+
+type LocationsListResp []LocationRecord
diff --git a/internal/provider/data_sources_map.go b/internal/provider/data_sources_map.go
new file mode 100644
index 00000000..51025e8c
--- /dev/null
+++ b/internal/provider/data_sources_map.go
@@ -0,0 +1,327 @@
+/*
+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.
+*/
+
+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"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/k8s"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/kvmvm"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/lb"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/locations"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/rg"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/secgroup"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/sep"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/snapshot"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/stpolicy"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/trunk"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/vfpool"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/vins"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/zone"
+ accessgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/access_group"
+ defaultsecuritypolicy "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/default_security_policy"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/hypervisors"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/logicalports"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/netobjgroups"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/segments"
+
+ 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"
+ cb_image "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/image"
+ cb_k8ci "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8ci"
+ cb_k8s "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8s"
+ cb_kvmvm "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/kvmvm"
+ cb_lb "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/lb"
+ cb_node "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/node"
+ cb_pcidevice "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/pcidevice"
+ cb_rg "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/rg"
+ cb_secgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/secgroup"
+ cb_sep "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/sep"
+ cb_stpolicy "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/stpolicy"
+ cb_trunk "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/trunk"
+ cb_user "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/user"
+ cb_vfpool "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vfpool"
+ cb_vins "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vins"
+ cb_zone "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/zone"
+)
+
+func newDataSourcesMap() map[string]*schema.Resource {
+ return map[string]*schema.Resource{
+ "decort_account": account.DataSourceAccount(),
+ "decort_audit": audit.DataSourceAudit(),
+ "decort_audit_list": audit.DataSourceAuditList(),
+ "decort_resgroup": rg.DataSourceResgroup(),
+ "decort_kvmvm": kvmvm.DataSourceCompute(),
+ "decort_kvmvm_list": kvmvm.DataSourceComputeList(),
+ "decort_kvmvm_audits": kvmvm.DataSourceComputeAudits(),
+ "decort_kvmvm_get_audits": kvmvm.DataSourceComputeGetAudits(),
+ "decort_kvmvm_get_console_url": kvmvm.DataSourceComputeGetConsoleUrl(),
+ "decort_kvmvm_get_log": kvmvm.DataSourceComputeGetLog(),
+ "decort_kvmvm_pfw_list": kvmvm.DataSourceComputePfwList(),
+ "decort_kvmvm_user_list": kvmvm.DataSourceComputeUserList(),
+ "decort_kvmvm_snapshot_usage": kvmvm.DataSourceComputeSnapshotUsage(),
+ "decort_k8s": k8s.DataSourceK8s(),
+ "decort_k8s_list": k8s.DataSourceK8sList(),
+ "decort_k8s_list_deleted": k8s.DataSourceK8sListDeleted(),
+ "decort_k8s_wg": k8s.DataSourceK8sWg(),
+ "decort_k8s_wg_list": k8s.DataSourceK8sWgList(),
+ "decort_k8s_computes": k8s.DataSourceK8sComputes(),
+ "decort_k8ci_list": k8s.DataSourceK8CIList(),
+ "decort_vins": vins.DataSourceVins(),
+ "decort_vins_list": vins.DataSourceVinsList(),
+ "decort_vins_audits": vins.DataSourceVinsAudits(),
+ "decort_vins_ip_list": vins.DataSourceVinsIpList(),
+ "decort_vins_list_deleted": vins.DataSourceVinsListDeleted(),
+ "decort_vins_ext_net_list": vins.DataSourceVinsExtNetList(),
+ "decort_vins_nat_rule_list": vins.DataSourceVinsNatRuleList(),
+ "decort_vins_static_route_list": vins.DataSourceStaticRouteList(),
+ "decort_vins_static_route": vins.DataSourceStaticRoute(),
+ "decort_snapshot_list": snapshot.DataSourceSnapshotList(),
+ "decort_disk": disks.DataSourceDisk(),
+ "decort_disk_list": disks.DataSourceDiskList(),
+ "decort_rg_list": rg.DataSourceRgList(),
+ "decort_rg_affinity_group_computes": rg.DataSourceRgAffinityGroupComputes(),
+ "decort_rg_affinity_groups_list": rg.DataSourceRgAffinityGroupsList(),
+ "decort_rg_affinity_groups_get": rg.DataSourceRgAffinityGroupsGet(),
+ "decort_rg_audits": rg.DataSourceRgAudits(),
+ "decort_rg_list_computes": rg.DataSourceRgListComputes(),
+ "decort_rg_list_deleted": rg.DataSourceRgListDeleted(),
+ "decort_rg_list_lb": rg.DataSourceRgListLb(),
+ "decort_rg_list_pfw": rg.DataSourceRgListPfw(),
+ "decort_rg_list_vins": rg.DataSourceRgListVins(),
+ "decort_rg_usage": rg.DataSourceRgUsage(),
+ "decort_disk_list_deleted": disks.DataSourceDiskListDeleted(),
+ "decort_disk_list_unattached": disks.DataSourceDiskListUnattached(),
+ "decort_disk_snapshot": disks.DataSourceDiskSnapshot(),
+ "decort_disk_snapshot_list": disks.DataSourceDiskSnapshotList(),
+ "decort_disk_replication": disks.DataSourceDiskReplication(),
+ "decort_account_list": account.DataSourceAccountList(),
+ "decort_account_computes_list": account.DataSourceAccountComputesList(),
+ "decort_account_disks_list": account.DataSourceAccountDisksList(),
+ "decort_account_vins_list": account.DataSourceAccountVinsList(),
+ "decort_account_audits_list": account.DataSourceAccountAuditsList(),
+ "decort_account_rg_list": account.DataSourceAccountRGList(),
+ "decort_account_consumed_units": account.DataSourceAccountConsumedUnits(),
+ "decort_account_consumed_units_by_type": account.DataSourceAccountConsumedUnitsByType(),
+ "decort_account_reserved_units": account.DataSourceAccountReservedUnits(),
+ "decort_account_templates_list": account.DataSourceAccountTemplatessList(),
+ "decort_account_deleted_list": account.DataSourceAccountDeletedList(),
+ "decort_account_flipgroups_list": account.DataSourceAccountFlipGroupsList(),
+ "decort_bservice_list": bservice.DataSourceBasicServiceList(),
+ "decort_bservice": bservice.DataSourceBasicService(),
+ "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(),
+ "decort_extnet_default": extnet.DataSourceExtnetDefault(),
+ "decort_extnet_reserved_ip_list": extnet.DataSourceExtnetReservedIp(),
+ "decort_locations_list": locations.DataSourceLocationsList(),
+ "decort_location_url": locations.DataSourceLocationUrl(),
+ "decort_image_list": image.DataSourceImageList(),
+ "decort_image": image.DataSourceImage(),
+ "decort_lb": lb.DataSourceLB(),
+ "decort_lb_list": lb.DataSourceLBList(),
+ "decort_lb_list_deleted": lb.DataSourceLBListDeleted(),
+ "decort_flipgroup": flipgroup.DataSourceFlipgroup(),
+ "decort_flipgroup_list": flipgroup.DataSourceFlipGroupList(),
+ "decort_vfpool": vfpool.DataSourceVFPool(),
+ "decort_vfpool_list": vfpool.DataSourceVFPoolList(),
+ "decort_account_resource_consumption_list": account.DataSourceAccountResourceConsumptionList(),
+ "decort_account_resource_consumption_get": account.DataSourceAccountResourceConsumptionGet(),
+ "decort_kvmvm_list_deleted": kvmvm.DataSourceComputeListDeleted(),
+ "decort_kvmvm_vgpu_list": kvmvm.DataSourceComputeVGPUList(),
+ "decort_kvmvm_pci_device_list": kvmvm.DataSourceComputePCIDeviceList(),
+ "decort_kvmvm_cpu_alignment_profile": kvmvm.DataSourceComputeCPUAlignmentProfile(),
+ "decort_k8s_wg_cloud_init": k8s.DataSourceK8sWgCloudInit(),
+ "decort_rg_resource_consumption_list": rg.DataSourceRGResourceConsumptionList(),
+ "decort_rg_resource_consumption_get": rg.DataSourceRGResourceConsumptionGet(),
+ "decort_sep_and_pools_available_list": sep.DataSourceAvailableSEPAndPoolsList(),
+ "decort_storage_policy": stpolicy.DataSourceStoragePolicy(),
+ "decort_storage_policy_list": stpolicy.DataSourceStoragePolicyList(),
+ "decort_security_group": secgroup.DataSourceSecurityGroup(),
+ "decort_security_group_list": secgroup.DataSourceSecurityGroupList(),
+ "decort_trunk": trunk.DataSourceTrunk(),
+ "decort_trunk_list": trunk.DataSourceTrunkList(),
+ "decort_zone": zone.DataSourceZone(),
+ "decort_zone_list": zone.DataSourceZoneList(),
+
+ "decort_cb_account": cb_account.DataSourceAccount(),
+ "decort_cb_account_list": cb_account.DataSourceAccountList(),
+ "decort_cb_account_computes_list": cb_account.DataSourceAccountComputesList(),
+ "decort_cb_account_list_deleted": cb_account.DataSourceAccountDeletedList(),
+ "decort_cb_account_disks_list": cb_account.DataSourceAccountDisksList(),
+ "decort_cb_account_flipgroups_list": cb_account.DataSourceAccountFlipGroupsList(),
+ "decort_cb_account_rg_list": cb_account.DataSourceAccountRGList(),
+ "decort_cb_account_vins_list": cb_account.DataSourceAccountVinsList(),
+ "decort_cb_account_resource_consumption_get": cb_account.DataSourceAccountResourceConsumptionGet(),
+ "decort_cb_account_resource_consumption_list": cb_account.DataSourceAccountResourceConsumptionList(),
+ "decort_cb_account_audits_list": cb_account.DataSourceAccountAuditsList(),
+ "decort_cb_account_available_templates_list": cb_account.DataSourceAccountAvailableTemplatesList(),
+ "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(),
+ "decort_cb_extnet_reserved_ip_list": cb_extnet.DataSourceExtnetReservedIp(),
+ "decort_cb_extnet_static_route_list": cb_extnet.DataSourceStaticRouteList(),
+ "decort_cb_extnet_static_route": cb_extnet.DataSourceStaticRoute(),
+ "decort_cb_image": cb_image.DataSourceImage(),
+ "decort_cb_grid": cb_grid.DataSourceGrid(),
+ "decort_cb_grid_get_status": cb_grid.DataSourceGridGetStatus(),
+ "decort_cb_grid_post_status": cb_grid.DataSourceGridPostStatus(),
+ "decort_cb_grid_get_diagnosis": cb_grid.DataSourceGridGetDiagnosis(),
+ "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(),
+ "decort_cb_grid_get_consumption": cb_grid.DataSourceGridGetConsumption(),
+ "decort_cb_image_list": cb_image.DataSourceImageList(),
+ "decort_cb_kvmvm": cb_kvmvm.DataSourceCompute(),
+ "decort_cb_kvmvm_affinity_relations": cb_kvmvm.DataSourceComputeAffinityRelations(),
+ "decort_cb_kvmvm_audits": cb_kvmvm.DataSourceComputeAudits(),
+ "decort_cb_kvmvm_boot_order_get": cb_kvmvm.DataSourceComputeBootOrderGet(),
+ "decort_cb_kvmvm_get_audits": cb_kvmvm.DataSourceComputeGetAudits(),
+ "decort_cb_kvmvm_get_console_url": cb_kvmvm.DataSourceComputeGetConsoleUrl(),
+ "decort_cb_kvmvm_get_log": cb_kvmvm.DataSourceComputeGetLog(),
+ "decort_cb_kvmvm_list": cb_kvmvm.DataSourceComputeList(),
+ "decort_cb_kvmvm_list_deleted": cb_kvmvm.DataSourceComputeListDeleted(),
+ "decort_cb_kvmvm_migrate_storage_info": cb_kvmvm.DataSourceComputeMigrateStorageInfo(),
+ "decort_cb_kvmvm_pci_device_list": cb_kvmvm.DataSourceComputePCIDeviceList(),
+ "decort_cb_kvmvm_pfw_list": cb_kvmvm.DataSourceComputePfwList(),
+ "decort_cb_kvmvm_snapshot_list": cb_kvmvm.DataSourceComputeSnapshotList(),
+ "decort_cb_kvmvm_snapshot_usage": cb_kvmvm.DataSourceComputeSnapshotUsage(),
+ "decort_cb_kvmvm_user_list": cb_kvmvm.DataSourceComputeUserList(),
+ "decort_cb_kvmvm_vgpu_list": cb_kvmvm.DataSourceComputeVGPUList(),
+ "decort_cb_kvmvm_cpu_alignment_profile": cb_kvmvm.DataSourceComputeCPUAlignmentProfile(),
+ "decort_cb_node": cb_node.DataSourceNode(),
+ "decort_cb_node_list": cb_node.DataSourceNodeList(),
+ "decort_cb_node_network_info": cb_node.DataSourceNodeNetworkInfo(),
+ "decort_cb_node_pci_devices": cb_node.DataSourceNodePCIDevices(),
+ "decort_cb_disk": cb_disks.DataSourceDisk(),
+ "decort_cb_disk_list": cb_disks.DataSourceDiskList(),
+ "decort_cb_disk_list_deleted": cb_disks.DataSourceDiskListDeleted(),
+ "decort_cb_disk_list_unattached": cb_disks.DataSourceDiskListUnattached(),
+ "decort_cb_disk_snapshot": cb_disks.DataSourceDiskSnapshot(),
+ "decort_cb_disk_snapshot_list": cb_disks.DataSourceDiskSnapshotList(),
+ "decort_cb_disk_replication": cb_disks.DataSourceDiskReplication(),
+ "decort_cb_pcidevice": cb_pcidevice.DataSourcePcidevice(),
+ "decort_cb_pcidevice_list": cb_pcidevice.DataSourcePcideviceList(),
+ "decort_cb_rg": cb_rg.DataSourceResgroup(),
+ "decort_cb_rg_affinity_group_computes": cb_rg.DataSourceRgAffinityGroupComputes(),
+ "decort_cb_rg_affinity_groups_get": cb_rg.DataSourceRgAffinityGroupsGet(),
+ "decort_cb_rg_affinity_groups_list": cb_rg.DataSourceRgAffinityGroupsList(),
+ "decort_cb_rg_resource_consumption_get": cb_rg.DataSourceRGResourceConsumptionGet(),
+ "decort_cb_rg_resource_consumption_list": cb_rg.DataSourceRGResourceConsumptionList(),
+ "decort_cb_rg_audits": cb_rg.DataSourceRgAudits(),
+ "decort_cb_rg_list": cb_rg.DataSourceRgList(),
+ "decort_cb_rg_list_deleted": cb_rg.DataSourceRgListDeleted(),
+ "decort_cb_rg_list_computes": cb_rg.DataSourceRgListComputes(),
+ "decort_cb_rg_list_lb": cb_rg.DataSourceRgListLb(),
+ "decort_cb_rg_list_pfw": cb_rg.DataSourceRgListPfw(),
+ "decort_cb_rg_list_vins": cb_rg.DataSourceRgListVins(),
+ "decort_cb_rg_usage": cb_rg.DataSourceRgUsage(),
+ "decort_cb_sep_list": cb_sep.DataSourceSepList(),
+ "decort_cb_sep": cb_sep.DataSourceSep(),
+ "decort_cb_sep_and_pools_available_list": cb_sep.DataSourceAvailableSEPAndPoolsList(),
+ "decort_cb_sep_consumption": cb_sep.DataSourceSepConsumption(),
+ "decort_cb_sep_disk_list": cb_sep.DataSourceSepDiskList(),
+ "decort_cb_sep_config": cb_sep.DataSourceSepConfig(),
+ "decort_cb_sep_pool": cb_sep.DataSourceSepPool(),
+ "decort_cb_sep_template": cb_sep.DataSourceSepTemplate(),
+ "decort_cb_lb": cb_lb.DataSourceLB(),
+ "decort_cb_lb_list": cb_lb.DataSourceLBList(),
+ "decort_cb_lb_list_deleted": cb_lb.DataSourceLBListDeleted(),
+ "decort_cb_flipgroup_list": cb_flipgroup.DataSourceFlipgroupList(),
+ "decort_cb_flipgroup": cb_flipgroup.DataSourceFlipgroup(),
+ "decort_cb_security_group": cb_secgroup.DataSourceSecurityGroup(),
+ "decort_cb_security_group_list": cb_secgroup.DataSourceSecurityGroupList(),
+ "decort_cb_storage_policy": cb_stpolicy.DataSourceStoragePolicy(),
+ "decort_cb_storage_policy_list": cb_stpolicy.DataSourceStoragePolicyList(),
+ "decort_cb_trunk": cb_trunk.DataSourceTrunk(),
+ "decort_cb_trunk_list": cb_trunk.DataSourceTrunkList(),
+ "decort_cb_user": cb_user.DataSourceUser(),
+ "decort_cb_user_get_audit": cb_user.DataSourceUserGetAudit(),
+ "decort_cb_user_list": cb_user.DataSourceUserList(),
+ "decort_cb_vfpool": cb_vfpool.DataSourceVFPool(),
+ "decort_cb_vfpool_list": cb_vfpool.DataSourceVFPoolList(),
+ "decort_cb_vins": cb_vins.DataSourceVins(),
+ "decort_cb_vins_list": cb_vins.DataSourceVinsList(),
+ "decort_cb_vins_audits": cb_vins.DataSourceVinsAudits(),
+ "decort_cb_vins_ip_list": cb_vins.DataSourceVinsIpList(),
+ "decort_cb_vins_list_deleted": cb_vins.DataSourceVinsListDeleted(),
+ "decort_cb_vins_ext_net_list": cb_vins.DataSourceVinsExtNetList(),
+ "decort_cb_vins_nat_rule_list": cb_vins.DataSourceVinsNatRuleList(),
+ "decort_cb_vins_static_route": cb_vins.DataSourceStaticRoute(),
+ "decort_cb_vins_static_route_list": cb_vins.DataSourceStaticRouteList(),
+ "decort_cb_k8ci": cb_k8ci.DataSourceK8CI(),
+ "decort_cb_k8ci_list": cb_k8ci.DataSourceK8CIList(),
+ "decort_cb_k8ci_list_deleted": cb_k8ci.DataSourceK8CIListDeleted(),
+ "decort_cb_k8s": cb_k8s.DataSourceK8s(),
+ "decort_cb_k8s_list": cb_k8s.DataSourceK8sList(),
+ "decort_cb_k8s_list_deleted": cb_k8s.DataSourceK8sListDeleted(),
+ "decort_cb_k8s_wg": cb_k8s.DataSourceK8sWg(),
+ "decort_cb_k8s_wg_cloud_init": cb_k8s.DataSourceK8sWgCloudInit(),
+ "decort_cb_k8s_wg_list": cb_k8s.DataSourceK8sWgList(),
+ "decort_cb_k8s_computes": cb_k8s.DataSourceK8sComputes(),
+ "decort_cb_zone": cb_zone.DataSourceZone(),
+ "decort_cb_zone_list": cb_zone.DataSourceZoneList(),
+ "decort_cb_zone_cpu_alignment_profile": cb_zone.DataSourceZoneCPUAlignmentProfile(),
+ "decort_cb_zone_cpu_alignment_profile_list": cb_zone.DataSourceZoneCPUAlignmentProfileList(),
+ "decort_cb_zone_cpu_alignment_profile_test": cb_zone.DataSourceZoneCPUAlignmentProfileTest(),
+
+ "decort_sdn_access_group": accessgroup.DataSourceAccessGroup(),
+ "decort_sdn_access_group_list": accessgroup.DataSourceAccessGroupList(),
+ "decort_sdn_access_group_user_list": accessgroup.DataSourceAccessGroupUserList(),
+ "decort_sdn_default_security_policy_list": defaultsecuritypolicy.DataSourceDefaultSecurityPolicyList(),
+ "decort_sdn_segment": segments.DataSourceSegment(),
+ "decort_sdn_segment_list": segments.DataSourceSegmentList(),
+
+ "decort_sdn_hypervisor": hypervisors.DataSourceHypervisor(),
+ "decort_sdn_hypervisor_list": hypervisors.DataSourceHypervisorList(),
+
+ "decort_sdn_logical_port": logicalports.DataSourceLogicalPort(),
+ "decort_sdn_logical_port_get_by_unique_identifier": logicalports.DataSourceLogicalPortByUniqueID(),
+ "decort_sdn_logical_port_list": logicalports.DataSourceLogicalPortList(),
+
+ "decort_sdn_network_object_group": netobjgroups.DataSourceNetworkObjectGroup(),
+ "decort_sdn_network_object_group_list": netobjgroups.DataSourceNetworkObjectGroupList(),
+ }
+}
diff --git a/internal/provider/provider.go b/internal/provider/provider.go
new file mode 100644
index 00000000..b276d30a
--- /dev/null
+++ b/internal/provider/provider.go
@@ -0,0 +1,169 @@
+/*
+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.
+*/
+
+package provider
+
+import (
+ "fmt"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
+ "golang.org/x/net/context"
+
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/location"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/statefuncs"
+)
+
+func Provider() *schema.Provider {
+ return &schema.Provider{
+ Schema: map[string]*schema.Schema{
+ "authenticator": {
+ Type: schema.TypeString,
+ Required: true,
+ StateFunc: statefuncs.StateFuncToLower,
+ ValidateFunc: validation.StringInSlice([]string{"decs3o", "legacy", "jwt", "bvs"}, true), // ignore case while validating
+ Description: "Authentication mode to use when connecting to DECORT cloud API. Should be one of 'decs3o', 'legacy', 'jwt' or 'bvs'.",
+ },
+
+ "oauth2_url": {
+ Type: schema.TypeString,
+ Optional: true,
+ StateFunc: statefuncs.StateFuncToLower,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_OAUTH2_URL", nil),
+ Description: "OAuth2 application URL in 'decs3o' and 'bvs' authentication mode.",
+ },
+
+ "controller_url": {
+ Type: schema.TypeString,
+ Required: true,
+ ForceNew: true,
+ StateFunc: statefuncs.StateFuncToLower,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_CONTROLLER_URL", nil),
+ Description: "URL of DECORT Cloud controller to use. API calls will be directed to this URL.",
+ },
+
+ "user": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_USER", nil),
+ Description: "User name for DECORT cloud API operations in 'legacy' authentication mode.",
+ },
+
+ "password": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_PASSWORD", nil),
+ Description: "User password for DECORT cloud API operations in 'legacy' authentication mode.",
+ },
+
+ "bvs_user": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_BVS_USER", nil),
+ Description: "User name for DECORT cloud API operations in 'bvs' authentication mode.",
+ },
+
+ "bvs_password": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_BVS_PASSWORD", nil),
+ Description: "User password for DECORT cloud API operations in 'bvs' authentication mode.",
+ },
+
+ "domain": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_DOMAIN", nil),
+ Description: "User password for DECORT cloud API operations in 'bvs' authentication mode.",
+ },
+
+ "app_id": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_APP_ID", nil),
+ Description: "Application ID to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode.",
+ },
+
+ "app_secret": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_APP_SECRET", nil),
+ Description: "Application secret to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode.",
+ },
+
+ "jwt": {
+ Type: schema.TypeString,
+ Optional: true,
+ DefaultFunc: schema.EnvDefaultFunc("DECORT_JWT", nil),
+ Description: "JWT to access DECORT cloud API in 'jwt' authentication mode.",
+ },
+
+ "allow_unverified_ssl": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "If true, DECORT API will not verify SSL certificates. Use this with caution and in trusted environments only!",
+ },
+
+ "path_cfg": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "The path of the configuration file entry",
+ },
+
+ "path_token": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "The path of the token file entry",
+ },
+
+ "time_to_refresh": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "The number of minutes before the expiration of the token, a refresh will be made",
+ },
+ },
+
+ ResourcesMap: newResourcesMap(),
+
+ DataSourcesMap: newDataSourcesMap(),
+
+ ConfigureContextFunc: providerConfigure,
+ }
+}
+
+func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
+ decsController, err := controller.ControllerConfigure(d)
+ if err != nil {
+ return nil, diag.FromErr(err)
+ }
+
+ gridId, err := location.UtilityLocationGetDefaultGridID(ctx, decsController)
+ if err != nil {
+ return nil, diag.FromErr(err)
+ }
+ if gridId == 0 {
+ return nil, diag.FromErr(fmt.Errorf("providerConfigure: invalid default Grid ID = 0"))
+ }
+
+ return decsController, nil
+}
diff --git a/internal/provider/resource_map.go b/internal/provider/resource_map.go
new file mode 100644
index 00000000..631dc2eb
--- /dev/null
+++ b/internal/provider/resource_map.go
@@ -0,0 +1,137 @@
+/*
+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.
+*/
+
+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/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/flipgroup"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/image"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/k8s"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/kvmvm"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/lb"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/pfw"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/rg"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/secgroup"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/snapshot"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/vins"
+ accessgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/access_group"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/hypervisors"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/logicalports"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/netobjgroups"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/sdn/segments"
+
+ 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"
+ cb_k8ci "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8ci"
+ cb_k8s "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8s"
+ cb_kvmvm "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/kvmvm"
+ cb_lb "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/lb"
+ cb_pcidevice "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/pcidevice"
+ cb_rg "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/rg"
+ cb_secgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/secgroup"
+ cb_sep "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/sep"
+ cb_stpolicy "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/stpolicy"
+ cb_trunk "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/trunk"
+ cb_user "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/user"
+ cb_vfpool "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vfpool"
+ cb_vins "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vins"
+ cb_zone "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/zone"
+)
+
+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_vins": vins.ResourceVins(),
+ "decort_pfw": pfw.ResourcePfw(),
+ "decort_k8s": k8s.ResourceK8s(),
+ "decort_k8s_wg": k8s.ResourceK8sWg(),
+ "decort_k8s_cp": k8s.ResourceK8sCP(),
+ "decort_snapshot": snapshot.ResourceSnapshot(),
+ "decort_account": account.ResourceAccount(),
+ "decort_bservice": bservice.ResourceBasicService(),
+ "decort_bservice_group": bservice.ResourceBasicServiceGroup(),
+ "decort_image": image.ResourceImage(),
+ "decort_image_from_blank_compute": image.ResourceImageFromBlankCompute(),
+ "decort_image_from_platform_disk": image.ResourceImageFromPlatformDisk(),
+ "decort_image_virtual": image.ResourceImageVirtual(),
+ "decort_lb": lb.ResourceLB(),
+ "decort_lb_backend": lb.ResourceLBBackend(),
+ "decort_lb_backend_server": lb.ResourceLBBackendServer(),
+ "decort_lb_frontend": lb.ResourceLBFrontend(),
+ "decort_lb_frontend_bind": lb.ResourceLBFrontendBind(),
+ "decort_flipgroup": flipgroup.ResourceFlipgroup(),
+ "decort_vins_static_route": vins.ResourceStaticRoute(),
+ "decort_security_group": secgroup.ResourceSecurityGroup(),
+
+ "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(),
+ "decort_cb_virtual_image": cb_image.ResourceVirtualImage(),
+ "decort_cb_cdrom_image": cb_image.ResourceCDROMImage(),
+ "decort_cb_multi_image": cb_image.ResourceMultiImage(),
+ "decort_cb_pcidevice": cb_pcidevice.ResourcePcidevice(),
+ "decort_cb_sep": cb_sep.ResourceSep(),
+ "decort_cb_sep_config": cb_sep.ResourceSepConfig(),
+ "decort_cb_kvmvm": cb_kvmvm.ResourceCompute(),
+ "decort_cb_vins": cb_vins.ResourceVins(),
+ "decort_cb_k8ci": cb_k8ci.ResourceK8CI(),
+ "decort_cb_k8s_cp": cb_k8s.ResourceK8sCP(),
+ "decort_cb_k8s_wg": cb_k8s.ResourceK8sWg(),
+ "decort_cb_vins_static_route": cb_vins.ResourceStaticRoute(),
+ "decort_cb_flipgroup": cb_flipgroup.ResourceFlipgroup(),
+ "decort_cb_lb": cb_lb.ResourceLB(),
+ "decort_cb_lb_backend": cb_lb.ResourceLBBackend(),
+ "decort_cb_lb_backend_server": cb_lb.ResourceLBBackendServer(),
+ "decort_cb_lb_frontend": cb_lb.ResourceLBFrontend(),
+ "decort_cb_lb_frontend_bind": cb_lb.ResourceLBFrontendBind(),
+ "decort_cb_rg": cb_rg.ResourceResgroup(),
+ "decort_cb_storage_policy": cb_stpolicy.ResourceStoragePolicy(),
+ "decort_cb_security_group": cb_secgroup.ResourceSecurityGroup(),
+ "decort_cb_trunk": cb_trunk.ResourceTrunk(),
+ "decort_cb_user": cb_user.ResourceUser(),
+ "decort_cb_vfpool": cb_vfpool.ResourceVFPool(),
+ "decort_cb_zone": cb_zone.ResourceZone(),
+
+ "decort_sdn_segment": segments.ResourceSegment(),
+ "decort_sdn_access_group": accessgroup.ResourceAccessGroup(),
+ "decort_sdn_hypervisor": hypervisors.ResourceHypervisor(),
+ "decort_sdn_logical_port": logicalports.ResourceLogicalPort(),
+ "decort_sdn_network_object_group": netobjgroups.ResourceNetworkObjectGroup(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account.go b/internal/service/cloudapi/account/data_source_account.go
new file mode 100644
index 00000000..8543493f
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account.go
@@ -0,0 +1,379 @@
+/*
+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 account
+
+import (
+ "context"
+ "strconv"
+
+ "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 dataSourceAccountRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ acc, err := utilityAccountCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ flattenAccount(d, *acc)
+ d.SetId(strconv.Itoa(int(acc.ID)))
+
+ return nil
+}
+
+func aclSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "can_be_deleted": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "explicit": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "right": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "user_group_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "emails": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ }
+
+ return res
+}
+
+func resourceLimitsSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "cu_c": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_d": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_dm": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_i": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_m": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "gpu_units": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "storage_policy": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "limit": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ }
+
+ return res
+}
+
+func sepsSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "sep_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "data_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "disk_size": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "disk_size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+
+ return res
+}
+
+func computesSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "started": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "stopped": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+
+ return res
+}
+
+func machinesSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "halted": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "running": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+
+ return res
+}
+
+func dataSourceAccountSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ },
+
+ "dc_location": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "resources": {
+ // Type: schema.TypeList,
+ // Computed: true,
+ // Elem: &schema.Resource{
+ // Schema: resourcesSchemaMake(),
+ // },
+ // },
+ "zone_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "default_zone_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "acl": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: aclSchemaMake(),
+ },
+ },
+ "company": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "companyurl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_features": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deactivation_time": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "displayname": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "resource_limits": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: resourceLimitsSchemaMake(),
+ },
+ },
+ "send_access_emails": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "version": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vins": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: computesSchemaMake(),
+ },
+ },
+ "machines": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: machinesSchemaMake(),
+ },
+ },
+ "vinses": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "cpu_allocation_parameter": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "cpu_allocation_ratio": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "storage_policy_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ }
+ return res
+}
+
+func DataSourceAccount() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_audits_list.go b/internal/service/cloudapi/account/data_source_account_audits_list.go
new file mode 100644
index 00000000..21ca7a5b
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_audits_list.go
@@ -0,0 +1,128 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountAuditsList(aal account.ListAudits) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, aa := range aal {
+ temp := map[string]interface{}{
+ "call": aa.Call,
+ "responsetime": aa.ResponseTime,
+ "statuscode": aa.StatusCode,
+ "timestamp": aa.Timestamp,
+ "user": aa.User,
+ }
+ res = append(res, temp)
+ }
+ return res
+
+}
+
+func dataSourceAccountAuditsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountAuditsList, err := utilityAccountAuditsListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountAuditsList(accountAuditsList))
+
+ return nil
+}
+
+func dataSourceAccountAuditsListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Description: "Search Result",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "call": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "responsetime": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "statuscode": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "timestamp": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "user": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ }
+ return res
+}
+
+func DataSourceAccountAuditsList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountAuditsListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountAuditsListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_computes_list.go b/internal/service/cloudapi/account/data_source_account_computes_list.go
new file mode 100644
index 00000000..6f65152d
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_computes_list.go
@@ -0,0 +1,263 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountComputesList(acl *account.ListComputes) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, acc := range acl.Data {
+ temp := map[string]interface{}{
+ "account_id": acc.AccountID,
+ "account_name": acc.AccountName,
+ "cpus": acc.CPUs,
+ "created_by": acc.CreatedBy,
+ "created_time": acc.CreatedTime,
+ "deleted_by": acc.DeletedBy,
+ "deleted_time": acc.DeletedTime,
+ "compute_id": acc.ComputeID,
+ "compute_name": acc.ComputeName,
+ "ram": acc.RAM,
+ "registered": acc.Registered,
+ "rg_id": acc.RGID,
+ "rg_name": acc.RGName,
+ "status": acc.Status,
+ "tech_status": acc.TechStatus,
+ "total_disks_size": acc.TotalDisksSize,
+ "updated_by": acc.UpdatedBy,
+ "updated_time": acc.UpdatedTime,
+ "user_managed": acc.UserManaged,
+ "vins_connected": acc.VINSConnected,
+ }
+ res = append(res, temp)
+ }
+ return res
+
+}
+
+func dataSourceAccountComputesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountComputesList, err := utilityAccountComputesListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountComputesList(accountComputesList))
+ d.Set("entry_count", accountComputesList.EntryCount)
+
+ return nil
+}
+
+func dataSourceAccountComputesListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "compute_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by compute ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by compute name",
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by RG name",
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by RG ID",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by tech. status",
+ },
+ "ip_address": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by IP address",
+ },
+ "extnet_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by extnet name",
+ },
+ "extnet_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by extnet ID",
+ },
+ "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,
+ Description: "Search Result",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "cpus": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "compute_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ram": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "registered": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "total_disks_size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "user_managed": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "vins_connected": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountComputesList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountComputesListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountComputesListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_consumed_units.go b/internal/service/cloudapi/account/data_source_account_consumed_units.go
new file mode 100644
index 00000000..7d4ed6f5
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_consumed_units.go
@@ -0,0 +1,111 @@
+/*
+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 account
+
+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 dataSourceAccountConsumedUnitsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountConsumedUnits, err := utilityAccountConsumedUnitsCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("cu_c", accountConsumedUnits.CUC)
+ d.Set("cu_d", accountConsumedUnits.CUD)
+ d.Set("cu_dm", accountConsumedUnits.CUDM)
+ d.Set("cu_i", accountConsumedUnits.CUI)
+ d.Set("cu_m", accountConsumedUnits.CUM)
+ d.Set("gpu_units", accountConsumedUnits.GPUUnits)
+
+ return nil
+}
+
+func dataSourceAccountConsumedUnitsSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "cu_c": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_d": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_dm": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_i": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_m": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "gpu_units": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountConsumedUnits() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountConsumedUnitsRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountConsumedUnitsSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_consumed_units_by_type.go b/internal/service/cloudapi/account/data_source_account_consumed_units_by_type.go
new file mode 100644
index 00000000..7c246caf
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_consumed_units_by_type.go
@@ -0,0 +1,91 @@
+/*
+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 account
+
+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 dataSourceAccountConsumedUnitsByTypeRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ result, err := utilityAccountConsumedUnitsByTypeCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("cu_result", result)
+
+ return nil
+}
+
+func dataSourceAccountConsumedUnitsByTypeSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "cu_type": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "cloud unit resource type",
+ },
+ "cu_result": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountConsumedUnitsByType() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountConsumedUnitsByTypeRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountConsumedUnitsByTypeSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_deleted_list.go b/internal/service/cloudapi/account/data_source_account_deleted_list.go
new file mode 100644
index 00000000..96ed76b6
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_deleted_list.go
@@ -0,0 +1,78 @@
+/*
+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 account
+
+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 dataSourceAccountDeletedListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountDeletedList, err := utilityAccountDeletedListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountList(accountDeletedList))
+ d.Set("entry_count", accountDeletedList.EntryCount)
+
+ return nil
+}
+
+func dataSourceAccountDeletedListSchemaMake() map[string]*schema.Schema {
+ temp := dataSourceAccountListSchemaMake()
+ delete(temp, "status")
+ return temp
+}
+
+func DataSourceAccountDeletedList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountDeletedListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountDeletedListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_disks_list.go b/internal/service/cloudapi/account/data_source_account_disks_list.go
new file mode 100644
index 00000000..971fac92
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_disks_list.go
@@ -0,0 +1,177 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountDisksList(adl *account.ListDisks) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, ad := range adl.Data {
+ temp := map[string]interface{}{
+ "disk_id": ad.ID,
+ "disk_name": ad.Name,
+ "pool": ad.Pool,
+ "sep_id": ad.SEPID,
+ "shareable": ad.Shareable,
+ "size_max": ad.SizeMax,
+ "type": ad.Type,
+ }
+ res = append(res, temp)
+ }
+ return res
+
+}
+
+func dataSourceAccountDisksListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountDisksList, err := utilityAccountDisksListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountDisksList(accountDisksList))
+ d.Set("entry_count", accountDisksList.EntryCount)
+
+ return nil
+}
+
+func dataSourceAccountDisksListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "disk_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by disk ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by disk name",
+ },
+ "disk_max_size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by disk max size",
+ },
+ "type": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by disk type",
+ },
+ "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,
+ Description: "Search Result",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountDisksList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountDisksListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountDisksListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_flipgroups_list.go b/internal/service/cloudapi/account/data_source_account_flipgroups_list.go
new file mode 100644
index 00000000..5fdc2246
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_flipgroups_list.go
@@ -0,0 +1,258 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountFlipGroupsList(afgl *account.ListFLIPGroups) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, afg := range afgl.Data {
+ temp := map[string]interface{}{
+ "account_id": afg.AccountID,
+ "client_type": afg.ClientType,
+ "conn_type": afg.ConnType,
+ "created_by": afg.CreatedBy,
+ "created_time": afg.CreatedTime,
+ "default_gw": afg.DefaultGW,
+ "deleted_by": afg.DeletedBy,
+ "deleted_time": afg.DeletedTime,
+ "desc": afg.Description,
+ "gid": afg.GID,
+ "guid": afg.GUID,
+ "fg_id": afg.ID,
+ "ip": afg.IP,
+ "milestones": afg.Milestones,
+ "fg_name": afg.Name,
+ "net_id": afg.NetID,
+ "net_type": afg.NetType,
+ "netmask": afg.NetMask,
+ "status": afg.Status,
+ "updated_by": afg.UpdatedBy,
+ "updated_time": afg.UpdatedTime,
+ }
+ res = append(res, temp)
+ }
+ return res
+
+}
+
+func dataSourceAccountFlipGroupsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountFlipGroupsList, err := utilityAccountFlipGroupsListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountFlipGroupsList(accountFlipGroupsList))
+ d.Set("entry_count", accountFlipGroupsList.EntryCount)
+
+ return nil
+}
+
+func dataSourceAccountFlipGroupsListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by name",
+ },
+ "vins_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by ViNS ID",
+ },
+ "vins_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by ViNS name",
+ },
+ "extnet_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by extnet ID",
+ },
+ "by_ip": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by IP",
+ },
+ "flipgroup_id": {
+ Type: schema.TypeInt,
+ 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,
+ Description: "Page number",
+ },
+ "size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Page size",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Description: "Search Result",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "client_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "conn_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "default_gw": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "fg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ip": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "fg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "net_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "net_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "netmask": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountFlipGroupsList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountFlipGroupsListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountFlipGroupsListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_get_resource_consumption.go b/internal/service/cloudapi/account/data_source_account_get_resource_consumption.go
new file mode 100644
index 00000000..a0925483
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_get_resource_consumption.go
@@ -0,0 +1,149 @@
+/*
+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 account
+
+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 dataSourceAccountResourceConsumptionGetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountResourceConsumptionRec, err := utilityAccountResourceConsumptionGetCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ flattenResourceConsumption(d, accountResourceConsumptionRec)
+ return nil
+}
+
+func dataSourceAccountResourceConsumptionGetSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ },
+ "consumed": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: dataSourceAccResourceSchemaMake(),
+ },
+ },
+ "reserved": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: dataSourceAccResourceSchemaMake(),
+ },
+ },
+ "resource_limits": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: dataSourceResourceLimitsSchemaMake(),
+ },
+ },
+ }
+
+ return res
+}
+
+func dataSourceResourceLimitsSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "cu_c": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_d": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_dm": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_i": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_m": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "gpu_units": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "storage_policy": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "limit": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ }
+
+ return res
+}
+
+func DataSourceAccountResourceConsumptionGet() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountResourceConsumptionGetRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountResourceConsumptionGetSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_list.go b/internal/service/cloudapi/account/data_source_account_list.go
new file mode 100644
index 00000000..a44d0c59
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_list.go
@@ -0,0 +1,251 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountList(al *account.ListAccounts) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, acc := range al.Data {
+ temp := map[string]interface{}{
+ "acl": flattenRgAcl(acc.ACL),
+ "compute_features": acc.ComputeFeatures,
+ "created_time": acc.CreatedTime,
+ "desc": acc.Description,
+ "deleted_time": acc.DeletedTime,
+ "deleted_by": acc.DeletedBy,
+ "account_id": acc.ID,
+ "account_name": acc.Name,
+ "status": acc.Status,
+ "updated_time": acc.UpdatedTime,
+ "updated_by": acc.UpdatedBy,
+ "zone_ids": acc.ZoneIDs,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenRgAcl(rgAcls []account.ListRecordACL) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, rgAcl := range rgAcls {
+ temp := map[string]interface{}{
+ "explicit": rgAcl.IsExplicit,
+ "guid": rgAcl.GUID,
+ "right": rgAcl.Rights,
+ "status": rgAcl.Status,
+ "type": rgAcl.Type,
+ "user_group_id": rgAcl.UgroupID,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func dataSourceAccountListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountList, err := utilityAccountListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountList(accountList))
+ d.Set("entry_count", accountList.EntryCount)
+
+ return nil
+}
+
+func dataSourceAccountListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "by_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by name",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by ACL",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by status",
+ },
+ "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",
+ },
+ "zone_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Zone ID",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "acl": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "explicit": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "right": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "user_group_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "compute_features": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "zone_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_reserved_units.go b/internal/service/cloudapi/account/data_source_account_reserved_units.go
new file mode 100644
index 00000000..8e2ec66b
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_reserved_units.go
@@ -0,0 +1,111 @@
+/*
+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 account
+
+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 dataSourceAccountReservedUnitsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountReservedUnits, err := utilityAccountReservedUnitsCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("cu_c", accountReservedUnits.CUC)
+ d.Set("cu_d", accountReservedUnits.CUD)
+ d.Set("cu_dm", accountReservedUnits.CUDM)
+ d.Set("cu_i", accountReservedUnits.CUI)
+ d.Set("cu_m", accountReservedUnits.CUM)
+ d.Set("gpu_units", accountReservedUnits.GPUUnits)
+
+ return nil
+}
+
+func dataSourceAccountReservedUnitsSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "cu_c": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_d": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_dm": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_i": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_m": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "gpu_units": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountReservedUnits() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountReservedUnitsRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountReservedUnitsSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_resource_consumption_list.go b/internal/service/cloudapi/account/data_source_account_resource_consumption_list.go
new file mode 100644
index 00000000..ad3736e7
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_resource_consumption_list.go
@@ -0,0 +1,195 @@
+/*
+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 account
+
+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 dataSourceAccountResourceConsumptionListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountResourceConsumptionList, err := utilityAccountResourceConsumptionListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccResourceConsumption(accountResourceConsumptionList))
+ d.Set("entry_count", accountResourceConsumptionList.EntryCount)
+ return nil
+}
+
+func dataSourceAccountResourceConsumptionListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "consumed": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: dataSourceAccResourceSchemaMake(),
+ },
+ },
+ "reserved": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: dataSourceAccResourceSchemaMake(),
+ },
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func dataSourceSepsSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "sep_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "data_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "disk_size": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "disk_size_max": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func dataSourceAccResourceSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "cpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disk_size": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "disk_size_max": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "ext_ips": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+
+ "policies": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "disk_size": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "disk_size_max": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "seps": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: dataSourceSepsSchemaMake(),
+ },
+ },
+ },
+ },
+ },
+
+ "ram": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "seps": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: dataSourceSepsSchemaMake(),
+ },
+ },
+ }
+ return res
+}
+
+func DataSourceAccountResourceConsumptionList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountResourceConsumptionListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountResourceConsumptionListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_rg_list.go b/internal/service/cloudapi/account/data_source_account_rg_list.go
new file mode 100644
index 00000000..1f3b6680
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_rg_list.go
@@ -0,0 +1,368 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountRGList(argl *account.ListRG) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, arg := range argl.Data {
+ temp := map[string]interface{}{
+ "computes": flattenAccRGComputes(arg.Computes),
+ "resources": flattenAccRGResources(arg.Resources),
+ "created_by": arg.CreatedBy,
+ "created_time": arg.CreatedTime,
+ "desc": arg.Description,
+ "deleted_by": arg.DeletedBy,
+ "deleted_time": arg.DeletedTime,
+ "rg_id": arg.RGID,
+ "milestones": arg.Milestones,
+ "rg_name": arg.RGName,
+ "status": arg.Status,
+ "updated_by": arg.UpdatedBy,
+ "updated_time": arg.UpdatedTime,
+ "vinses": arg.VINSes,
+ }
+ res = append(res, temp)
+ }
+ return res
+
+}
+
+func flattenAccRGComputes(argc account.RGComputes) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "started": argc.Started,
+ "stopped": argc.Stopped,
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenAccResourceHack(r account.LimitsRG) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "cpu": r.CPU,
+ "disksize": r.DiskSize,
+ "extips": r.ExtIPs,
+ "gpu": r.GPU,
+ "ram": r.RAM,
+ //"seps": flattenAccountSeps(r.SEPs),
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenAccResourceRg(r account.Resource) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "cpu": r.CPU,
+ "disksize": r.DiskSize,
+ "extips": r.ExtIPs,
+ "gpu": r.GPU,
+ "ram": r.RAM,
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenAccRGResources(argr account.RGResources) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "consumed": flattenAccResourceRg(argr.Consumed),
+ "limits": flattenAccResourceHack(argr.Limits),
+ "reserved": flattenAccResourceRg(argr.Reserved),
+ }
+ res = append(res, temp)
+ return res
+}
+
+func dataSourceAccountRGListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountRGList, err := utilityAccountRGListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountRGList(accountRGList))
+ d.Set("entry_count", accountRGList.EntryCount)
+
+ return nil
+}
+
+func dataSourceAccountRGListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "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",
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by RG ID",
+ },
+ "vins_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by ViNS ID",
+ },
+ "vm_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by VM ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by name",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by status",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Description: "Search Result",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "started": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "stopped": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "resources": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "consumed": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "cpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disksize": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "extips": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ram": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+
+ "limits": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "cpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disksize": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "extips": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ram": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "reserved": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "cpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disksize": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "extips": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ram": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vinses": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountRGList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountRGListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountRGListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_templates_list.go b/internal/service/cloudapi/account/data_source_account_templates_list.go
new file mode 100644
index 00000000..42069e19
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_templates_list.go
@@ -0,0 +1,191 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountTemplatesList(atl *account.ListTemplates) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(atl.Data))
+ for _, at := range atl.Data {
+ temp := map[string]interface{}{
+ "unc_path": at.UNCPath,
+ "account_id": at.AccountID,
+ "desc": at.Description,
+ "template_id": at.ID,
+ "template_name": at.Name,
+ "public": at.Public,
+ "size": at.Size,
+ "status": at.Status,
+ "type": at.Type,
+ "username": at.Username,
+ }
+ res = append(res, temp)
+ }
+ return res
+
+}
+
+func dataSourceAccountTemplatesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountTemplatesList, err := utilityAccountTemplatesListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountTemplatesList(accountTemplatesList))
+ d.Set("entry_count", accountTemplatesList.EntryCount)
+ return nil
+}
+
+func dataSourceAccountTemplatesListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "include_deleted": {
+ Type: schema.TypeBool,
+ Optional: true,
+ },
+ "image_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by image id",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by name",
+ },
+ "type": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by type",
+ },
+ "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,
+ Description: "Search Result",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "unc_path": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "template_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "template_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "public": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "size": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "username": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountTemplatessList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountTemplatesListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountTemplatesListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/data_source_account_vins_list.go b/internal/service/cloudapi/account/data_source_account_vins_list.go
new file mode 100644
index 00000000..cda7ca66
--- /dev/null
+++ b/internal/service/cloudapi/account/data_source_account_vins_list.go
@@ -0,0 +1,238 @@
+/*
+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 account
+
+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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenAccountVinsList(avl *account.ListVINS) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, av := range avl.Data {
+ temp := map[string]interface{}{
+ "account_id": av.AccountID,
+ "account_name": av.AccountName,
+ "computes": av.Computes,
+ "created_by": av.CreatedBy,
+ "created_time": av.CreatedTime,
+ "deleted_by": av.DeletedBy,
+ "deleted_time": av.DeletedTime,
+ "external_ip": av.ExternalIP,
+ "extnet_id": av.ExtnetId,
+ "free_ips": av.FreeIPs,
+ "vin_id": av.ID,
+ "vin_name": av.Name,
+ "network": av.Network,
+ "pri_vnf_dev_id": av.PriVNFDevID,
+ "rg_id": av.RGID,
+ "rg_name": av.RGName,
+ "status": av.Status,
+ "updated_by": av.UpdatedBy,
+ "updated_time": av.UpdatedTime,
+ }
+ res = append(res, temp)
+ }
+ return res
+
+}
+
+func dataSourceAccountVinsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ accountVinsList, err := utilityAccountVinsListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAccountVinsList(accountVinsList))
+ d.Set("entry_count", accountVinsList.EntryCount)
+
+ return nil
+}
+
+func dataSourceAccountVinsListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the account",
+ },
+ "vins_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by ViNS ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by name",
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by RG ID",
+ },
+ "ext_ip": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by external IP",
+ },
+ "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,
+ Description: "Search Result",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "computes": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "external_ip": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "extnet_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "free_ips": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vin_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vin_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "network": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "pri_vnf_dev_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceAccountVinsList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAccountVinsListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAccountVinsListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/flattens.go b/internal/service/cloudapi/account/flattens.go
new file mode 100644
index 00000000..b64035be
--- /dev/null
+++ b/internal/service/cloudapi/account/flattens.go
@@ -0,0 +1,242 @@
+package account
+
+import (
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+)
+
+func flattenAccount(d *schema.ResourceData, acc account.RecordAccount) error {
+ d.Set("dc_location", acc.DCLocation)
+ d.Set("desc", acc.Description)
+ d.Set("acl", flattenAccAcl(acc.ACL))
+ d.Set("company", acc.Company)
+ d.Set("companyurl", acc.CompanyURL)
+ d.Set("compute_features", acc.ComputeFeatures)
+ d.Set("created_by", acc.CreatedBy)
+ d.Set("created_time", acc.CreatedTime)
+ d.Set("deactivation_time", acc.DeactivationTime)
+ d.Set("desc", acc.Description)
+ d.Set("deleted_by", acc.DeletedBy)
+ d.Set("deleted_time", acc.DeletedTime)
+ d.Set("displayname", acc.DisplayName)
+ d.Set("enable", flattenEnabled(acc.Status))
+ d.Set("guid", acc.GUID)
+ d.Set("account_id", acc.ID)
+ d.Set("account_name", acc.Name)
+ d.Set("resource_limits", flattenAccResourceLimits(acc.ResourceLimits))
+ d.Set("send_access_emails", acc.SendAccessEmails)
+ d.Set("status", acc.Status)
+ d.Set("updated_by", acc.UpdatedBy)
+ d.Set("updated_time", acc.UpdatedTime)
+ d.Set("version", acc.Version)
+ d.Set("vins", acc.VINS)
+ d.Set("vinses", acc.VINSes)
+ d.Set("computes", flattenAccComputes(acc.Computes))
+ d.Set("machines", flattenAccMachines(acc.Machines))
+ d.Set("cpu_allocation_parameter", acc.CPUAllocationParameter)
+ d.Set("cpu_allocation_ratio", acc.CPUAllocationRatio)
+ d.Set("default_zone_id", acc.DefaultZoneID)
+ d.Set("storage_policy_ids", acc.StoragePolicyIDs)
+ d.Set("zone_ids", flattenZones(acc.ZoneIDs))
+
+ if username, ok := d.GetOk("username"); ok {
+ d.Set("username", username)
+ } else {
+ d.Set("username", acc.ACL[0].UgroupID)
+ }
+
+ return nil
+}
+
+func flattenAccountResource(d *schema.ResourceData, acc account.RecordAccount) error {
+ d.Set("dc_location", acc.DCLocation)
+ d.Set("desc", acc.Description)
+ d.Set("acl", flattenAccAcl(acc.ACL))
+ d.Set("company", acc.Company)
+ d.Set("companyurl", acc.CompanyURL)
+ d.Set("compute_features", acc.ComputeFeatures)
+ d.Set("created_by", acc.CreatedBy)
+ d.Set("created_time", acc.CreatedTime)
+ d.Set("deactivation_time", acc.DeactivationTime)
+ d.Set("desc", acc.Description)
+ d.Set("deleted_by", acc.DeletedBy)
+ d.Set("deleted_time", acc.DeletedTime)
+ d.Set("displayname", acc.DisplayName)
+ d.Set("enable", flattenEnabled(acc.Status))
+ d.Set("guid", acc.GUID)
+ d.Set("account_id", acc.ID)
+ d.Set("account_name", acc.Name)
+ d.Set("resource_limits", flattenAccResourceLimits(acc.ResourceLimits))
+ d.Set("send_access_emails", acc.SendAccessEmails)
+ d.Set("status", acc.Status)
+ d.Set("updated_by", acc.UpdatedBy)
+ d.Set("updated_time", acc.UpdatedTime)
+ d.Set("version", acc.Version)
+ d.Set("vins", acc.VINS)
+ d.Set("vinses", acc.VINSes)
+ d.Set("computes", flattenAccComputes(acc.Computes))
+ d.Set("machines", flattenAccMachines(acc.Machines))
+ d.Set("cpu_allocation_parameter", acc.CPUAllocationParameter)
+ d.Set("cpu_allocation_ratio", acc.CPUAllocationRatio)
+ d.Set("default_zone_id", acc.DefaultZoneID)
+ d.Set("storage_policy_ids", acc.StoragePolicyIDs)
+ d.Set("zone_ids", flattenZonesInResource(acc.ZoneIDs))
+
+ return nil
+}
+
+func flattenEnabled(status string) bool {
+ return status == "CONFIRMED"
+}
+
+func flattenAccComputes(acs account.Computes) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "started": acs.Started,
+ "stopped": acs.Stopped,
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenAccMachines(ams account.Machines) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "running": ams.Running,
+ "halted": ams.Halted,
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenAccAcl(acls []account.RecordACL) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, acls := range acls {
+ temp := map[string]interface{}{
+ "can_be_deleted": acls.CanBeDeleted,
+ "explicit": acls.IsExplicit,
+ "guid": acls.GUID,
+ "right": acls.Rights,
+ "status": acls.Status,
+ "type": acls.Type,
+ "emails": acls.Emails,
+ "user_group_id": acls.UgroupID,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenResourceConsumption(d *schema.ResourceData, acc *account.RecordResourceConsumption) {
+ d.Set("account_id", acc.AccountID)
+ d.Set("consumed", flattenAccResource(acc.Consumed))
+ d.Set("reserved", flattenAccResource(acc.Reserved))
+ d.Set("resource_limits", flattenAccResourceLimits(acc.ResourceLimits))
+}
+
+func flattenAccResourceLimits(rl account.ResourceLimits) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "cu_c": rl.CUC,
+ "cu_d": rl.CUD,
+ "cu_dm": rl.CUDM,
+ "cu_i": rl.CUI,
+ "cu_m": rl.CUM,
+ "gpu_units": rl.GPUUnits,
+ "storage_policy": flattenSTPolicy(rl.StoragePolicy),
+ }
+ res = append(res, temp)
+ return res
+
+}
+
+func flattenSTPolicy(ast []account.StoragePolicyItem) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(ast))
+ for _, item := range ast {
+ temp := map[string]interface{}{
+ "id": item.ID,
+ "limit": item.Limit,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenAccountSeps(seps map[string]map[string]account.DiskUsage) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for sepKey, sepVal := range seps {
+ for dataKey, dataVal := range sepVal {
+ temp := map[string]interface{}{
+ "sep_id": sepKey,
+ "data_name": dataKey,
+ "disk_size": dataVal.DiskSize,
+ "disk_size_max": dataVal.DiskSizeMax,
+ }
+ res = append(res, temp)
+ }
+ }
+ return res
+}
+
+func flattenAccResource(r account.Resource) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "cpu": r.CPU,
+ "disk_size": r.DiskSize,
+ "disk_size_max": r.DiskSizeMax,
+ "ext_ips": r.ExtIPs,
+ "gpu": r.GPU,
+ "ram": r.RAM,
+ "seps": flattenAccountSeps(r.SEPs),
+ "policies": flattenAccountPolicies(r.Policies),
+ }
+ res = append(res, temp)
+ return res
+}
+
+func flattenAccountPolicies(policies map[string]account.Policy) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for k, dataVal := range policies {
+ temp := map[string]interface{}{
+ "id": k,
+ "disk_size": dataVal.DiskSize,
+ "disk_size_max": dataVal.DiskSizeMax,
+ "seps": flattenAccountSeps(dataVal.SEPs),
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenAccResourceConsumption(lrc *account.ListResourceConsumption) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(lrc.Data))
+ for _, rc := range lrc.Data {
+ temp := map[string]interface{}{
+ "consumed": flattenAccResource(rc.Consumed),
+ "reserved": flattenAccResource(rc.Reserved),
+ "account_id": rc.AccountID,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenZones(zones []account.ZoneID) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, zone := range zones {
+ temp := map[string]interface{}{
+ "id": zone.ID,
+ "name": zone.Name,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenZonesInResource(zones []account.ZoneID) []int64 {
+ res := make([]int64, 0)
+ for _, zone := range zones {
+ res = append(res, zone.ID)
+ }
+ return res
+}
diff --git a/internal/service/cloudapi/account/resource_account.go b/internal/service/cloudapi/account/resource_account.go
new file mode 100644
index 00000000..48f5aa6b
--- /dev/null
+++ b/internal/service/cloudapi/account/resource_account.go
@@ -0,0 +1,706 @@
+/*
+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 account
+
+import (
+ "context"
+ "fmt"
+ "strconv"
+ "strings"
+ "time"
+
+ "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/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/tasks"
+ "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/status"
+)
+
+func resourceAccountCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ return diag.Errorf(
+ "Only users with admin privileges are able to create accounts. Contact your platform administrator.\nUse 'terraform import decort_account. ' command to import existing account configuration")
+}
+
+func resourceAccountRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceAccountRead: called for account with ID: %v", d.Id())
+
+ // c := m.(*controller.ControllerCfg)
+
+ acc, err := utilityAccountCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ hasChanged := false
+
+ switch acc.Status {
+ case status.Destroyed:
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been destroyed")
+ // return resourceAccountCreate(ctx, d, m)
+ case status.Destroying:
+ return diag.Errorf("The account is in progress with status: %s", acc.Status)
+ case status.Deleted:
+ // id, _ := strconv.ParseUint(d.Id(), 10, 64)
+
+ // req := account.RestoreRequest{
+ // AccountID: id,
+ // }
+
+ // _, err := c.CloudAPI().Account().Restore(ctx, req)
+ // if err != nil {
+ // return diag.FromErr(err)
+ // }
+
+ // hasChanged = true
+ case status.Disabled:
+ log.Debugf("The account is in status: %s, troubles may occur with update. Please, enable account first.", acc.Status)
+ case status.Confirmed:
+ }
+
+ if hasChanged {
+ acc, err = utilityAccountCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ }
+
+ flattenAccountResource(d, *acc)
+
+ return nil
+}
+
+func resourceAccountDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceAccountDelete")
+ c := m.(*controller.ControllerCfg)
+
+ _, err := utilityAccountCheckPresence(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ req := account.DeleteRequest{
+ AccountID: uint64(d.Get("account_id").(int)),
+ Permanently: d.Get("permanently").(bool),
+ }
+
+ taskID, err := c.CloudAPI().Account().Delete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ taskReq := tasks.GetRequest{
+ AuditID: strings.Trim(taskID, `"`),
+ }
+
+ for {
+ time.Sleep(time.Second * 5)
+ task, err := c.CloudAPI().Tasks().Get(ctx, taskReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ log.Debugf("resourceAccountDelete: delete account - %s", task.Stage)
+
+ if task.Completed {
+ if task.Error != "" {
+ return diag.FromErr(fmt.Errorf("cannot delete account: %v", task.Error))
+ }
+ break
+ }
+ }
+
+ d.SetId("")
+
+ return nil
+}
+
+func resourceAccountUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceAccountUpdate")
+ c := m.(*controller.ControllerCfg)
+
+ acc, err := utilityAccountCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ accountId, _ := strconv.ParseUint(d.Id(), 10, 64)
+
+ hasChanged := false
+
+ switch acc.Status {
+ case status.Destroyed:
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been destroyed")
+ // return resourceAccountCreate(ctx, d, m)
+ case status.Destroying:
+ return diag.Errorf("The account is in progress with status: %s", acc.Status)
+ case status.Deleted:
+ if d.Get("restore").(bool) {
+ req := account.RestoreRequest{
+ AccountID: accountId,
+ }
+
+ taskID, err := c.CloudAPI().Account().Restore(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ taskReq := tasks.GetRequest{
+ AuditID: strings.Trim(taskID, `"`),
+ }
+
+ for {
+ time.Sleep(time.Second * 5)
+ task, err := c.CloudAPI().Tasks().Get(ctx, taskReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ log.Debugf("resourceAccountUpdate: restore account - %s", task.Stage)
+
+ if task.Completed {
+ if task.Error != "" {
+ return diag.FromErr(fmt.Errorf("cannot restore account: %v", task.Error))
+ }
+ break
+ }
+ }
+
+ hasChanged = true
+ }
+ case status.Disabled:
+ log.Debugf("The account is in status: %s, troubles may occur with update. Please, enable account first.", acc.Status)
+ case status.Confirmed:
+ }
+
+ if hasChanged {
+ acc, err = utilityAccountCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("enable") {
+ reqSwitch := account.DisableEnableRequest{
+ AccountID: accountId,
+ }
+ enable := d.Get("enable").(bool)
+
+ if enable {
+
+ _, err := c.CloudAPI().Account().Enable(ctx, reqSwitch)
+ if err != nil {
+ return diag.FromErr(err)
+
+ }
+ } else {
+
+ _, err := c.CloudAPI().Account().Disable(ctx, reqSwitch)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ }
+ }
+
+ req := account.UpdateRequest{
+ AccountID: accountId,
+ }
+
+ updated := false
+
+ if d.HasChange("account_name") {
+ req.Name = d.Get("account_name").(string)
+ updated = true
+ }
+
+ if d.HasChange("desc") {
+ req.Description = d.Get("desc").(string)
+ updated = true
+ }
+
+ if d.HasChange("resource_limits") {
+ resLimit := d.Get("resource_limits").([]interface{})[0]
+ resLimitConv := resLimit.(map[string]interface{})
+
+ if resLimitConv["cu_m"] != nil {
+ maxMemCap := int(resLimitConv["cu_m"].(float64))
+ if maxMemCap == 0 {
+ req.MaxMemoryCapacity = -1
+ } else {
+ req.MaxMemoryCapacity = int64(maxMemCap)
+ }
+ updated = true
+ }
+ if resLimitConv["cu_d"] != nil {
+ maxDiskCap := int(resLimitConv["cu_d"].(float64))
+ if maxDiskCap == 0 {
+ req.MaxVDiskCapacity = -1
+ } else {
+ req.MaxVDiskCapacity = int64(maxDiskCap)
+ }
+ updated = true
+ }
+ if resLimitConv["cu_c"] != nil {
+ maxCPUCap := int(resLimitConv["cu_c"].(float64))
+ if maxCPUCap == 0 {
+ req.MaxCPUCapacity = -1
+ } else {
+ req.MaxCPUCapacity = int64(maxCPUCap)
+ }
+ updated = true
+ }
+ if resLimitConv["cu_i"] != nil {
+ maxNumPublicIP := int(resLimitConv["cu_i"].(float64))
+ if maxNumPublicIP == 0 {
+ req.MaxNumPublicIP = -1
+ } else {
+ req.MaxNumPublicIP = int64(maxNumPublicIP)
+ }
+ updated = true
+ }
+ if resLimitConv["gpu_units"] != nil {
+ gpuUnits := int(resLimitConv["gpu_units"].(float64))
+ if gpuUnits == 0 {
+ req.GPUUnits = -1
+ } else {
+ req.GPUUnits = int64(gpuUnits)
+ }
+ updated = true
+ }
+ }
+
+ if d.HasChange("send_access_emails") {
+ req.SendAccessEmails = d.Get("send_access_emails").(bool)
+ updated = true
+ }
+
+ if updated {
+ _, err := c.CloudAPI().Account().Update(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("default_zone_id") {
+ req.DefaultZoneID = uint64(d.Get("default_zone_id").(int))
+ updated = true
+ }
+
+ if updated {
+ _, err := c.CloudAPI().Account().Update(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("users") {
+ deletedUsers := make([]interface{}, 0)
+ addedUsers := make([]interface{}, 0)
+ updatedUsers := make([]interface{}, 0)
+
+ old, new_ := d.GetChange("users")
+ oldConv := old.([]interface{})
+ newConv := new_.([]interface{})
+ for _, el := range oldConv {
+ if !isContainsUser(newConv, el) {
+ deletedUsers = append(deletedUsers, el)
+ }
+ }
+ for _, el := range newConv {
+ if !isContainsUser(oldConv, el) {
+ duplicate := false
+ for _, user := range acc.ACL {
+ if user.UgroupID == el.(map[string]interface{})["user_id"].(string) {
+ duplicate = true
+ }
+ }
+ if !duplicate {
+ addedUsers = append(addedUsers, el)
+ }
+ } else {
+ if isChangedUser(oldConv, el) {
+ updatedUsers = append(updatedUsers, el)
+ }
+ }
+ }
+
+ if len(deletedUsers) > 0 {
+ for _, user := range deletedUsers {
+ userConv := user.(map[string]interface{})
+
+ req := account.DeleteUserRequest{
+ AccountID: accountId,
+ UserID: userConv["user_id"].(string),
+ }
+ _, err := c.CloudAPI().Account().DeleteUser(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if len(addedUsers) > 0 {
+ for _, user := range addedUsers {
+ userConv := user.(map[string]interface{})
+
+ req := account.AddUserRequest{
+ AccountID: accountId,
+ UserID: userConv["user_id"].(string),
+ AccessType: strings.ToUpper(userConv["access_type"].(string)),
+ }
+
+ _, err := c.CloudAPI().Account().AddUser(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if len(updatedUsers) > 0 {
+ for _, user := range updatedUsers {
+ userConv := user.(map[string]interface{})
+
+ req := account.UpdateUserRequest{
+ AccountID: accountId,
+ UserID: userConv["user_id"].(string),
+ AccessType: strings.ToUpper(userConv["access_type"].(string)),
+ }
+
+ _, err := c.CloudAPI().Account().UpdateUser(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ }
+
+ return resourceAccountRead(ctx, d, m)
+}
+
+func isContainsUser(els []interface{}, el interface{}) bool {
+ for _, elOld := range els {
+ elOldConv := elOld.(map[string]interface{})
+ elConv := el.(map[string]interface{})
+ if elOldConv["user_id"].(string) == elConv["user_id"].(string) {
+ return true
+ }
+ }
+ return false
+}
+
+func isChangedUser(els []interface{}, el interface{}) bool {
+ for _, elOld := range els {
+ 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))) {
+ return true
+ }
+ }
+ return false
+}
+
+func resourceAccountSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "account_name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "account name",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "description",
+ },
+ "emailaddress": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "email",
+ },
+ "send_access_emails": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "if true send emails when a user is granted access to resources",
+ },
+ "users": {
+ Type: schema.TypeList,
+ Optional: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "user_id": {
+ Type: schema.TypeString,
+ Required: true,
+ },
+ "access_type": {
+ Type: schema.TypeString,
+ Required: true,
+ },
+ },
+ },
+ },
+ "default_zone_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "email",
+ },
+ "zone_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "restore": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "restore a deleted account",
+ },
+ "permanently": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "whether to completely delete the account",
+ },
+ "enable": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Computed: true,
+ Description: "enable/disable account",
+ },
+ "resource_limits": {
+ Type: schema.TypeList,
+ Optional: true,
+ Computed: true,
+ MaxItems: 1,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "cu_c": {
+ Type: schema.TypeFloat,
+ Optional: true,
+ Computed: true,
+ },
+ "cu_d": {
+ Type: schema.TypeFloat,
+ Optional: true,
+ Computed: true,
+ },
+ "cu_dm": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "cu_i": {
+ Type: schema.TypeFloat,
+ Optional: true,
+ Computed: true,
+ },
+ "cu_m": {
+ Type: schema.TypeFloat,
+ Optional: true,
+ Computed: true,
+ },
+ "gpu_units": {
+ Type: schema.TypeFloat,
+ Optional: true,
+ Computed: true,
+ },
+ "storage_policy": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "limit": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "dc_location": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "acl": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: aclSchemaMake(),
+ },
+ },
+ "company": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "companyurl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_features": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deactivation_time": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "displayname": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "version": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vins": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: computesSchemaMake(),
+ },
+ },
+ "machines": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: machinesSchemaMake(),
+ },
+ },
+ "vinses": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "cpu_allocation_parameter": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "cpu_allocation_ratio": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "storage_policy_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ }
+}
+
+func ResourceAccount() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ CreateContext: resourceAccountCreate,
+ ReadContext: resourceAccountRead,
+ UpdateContext: resourceAccountUpdate,
+ DeleteContext: resourceAccountDelete,
+
+ Importer: &schema.ResourceImporter{
+ StateContext: schema.ImportStatePassthroughContext,
+ },
+
+ Timeouts: &schema.ResourceTimeout{
+ Create: &constants.Timeout600s,
+ Read: &constants.Timeout300s,
+ Update: &constants.Timeout300s,
+ Delete: &constants.Timeout300s,
+ Default: &constants.Timeout300s,
+ },
+
+ Schema: resourceAccountSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/account/utility_account.go b/internal/service/cloudapi/account/utility_account.go
new file mode 100644
index 00000000..092cdb7c
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account.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 account
+
+import (
+ "context"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.RecordAccount, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ if (strconv.Itoa(d.Get("account_id").(int))) != "0" {
+ id = uint64(d.Get("account_id").(int))
+ } else {
+ idParsed, _ := strconv.Atoi(d.Id())
+ id = uint64(idParsed)
+ }
+
+ req := account.GetRequest{
+ AccountID: id,
+ }
+
+ log.Debugf("utilityAccountCheckPresence: load account")
+ account, err := c.CloudAPI().Account().Get(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return account, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_audits_list.go b/internal/service/cloudapi/account/utility_account_audits_list.go
new file mode 100644
index 00000000..46eeaa61
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_audits_list.go
@@ -0,0 +1,62 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountAuditsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListAudits, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.AuditsRequest{
+ AccountID: id,
+ }
+
+ log.Debugf("utilityAccountAuditsListCheckPresence: load account list")
+ accountAuditsList, err := c.CloudAPI().Account().Audits(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountAuditsList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_computes_list.go b/internal/service/cloudapi/account/utility_account_computes_list.go
new file mode 100644
index 00000000..306f9fa1
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_computes_list.go
@@ -0,0 +1,106 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountComputesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListComputes, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.ListComputesRequest{
+ AccountID: id,
+ }
+
+ if compute_id, ok := d.GetOk("compute_id"); ok {
+ req.ComputeID = uint64(compute_id.(int))
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if rg_name, ok := d.GetOk("rg_name"); ok {
+ req.RGName = rg_name.(string)
+ }
+
+ if rg_id, ok := d.GetOk("rg_id"); ok {
+ req.RGID = uint64(rg_id.(int))
+ }
+
+ if tech_status, ok := d.GetOk("tech_status"); ok {
+ req.TechStatus = tech_status.(string)
+ }
+
+ if ip_address, ok := d.GetOk("ip_address"); ok {
+ req.IPAddress = ip_address.(string)
+ }
+
+ if extnet_name, ok := d.GetOk("extnet_name"); ok {
+ req.ExtNetName = extnet_name.(string)
+ }
+
+ if extnet_id, ok := d.GetOk("extnet_id"); ok {
+ req.ExtNetID = uint64(extnet_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("utilityAccountComputesListCheckPresence: load account list")
+ accountComputesList, err := c.CloudAPI().Account().ListComputes(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountComputesList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_consumed_units.go b/internal/service/cloudapi/account/utility_account_consumed_units.go
new file mode 100644
index 00000000..8957c592
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_consumed_units.go
@@ -0,0 +1,62 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountConsumedUnitsCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ResourceLimits, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.GetConsumedAccountUnitsRequest{
+ AccountID: id,
+ }
+
+ log.Debugf("utilityAccountConsumedUnitsCheckPresence: load account list")
+ accountConsumedUnits, err := c.CloudAPI().Account().GetConsumedAccountUnits(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountConsumedUnits, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_consumed_units_by_type.go b/internal/service/cloudapi/account/utility_account_consumed_units_by_type.go
new file mode 100644
index 00000000..ee441c5c
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_consumed_units_by_type.go
@@ -0,0 +1,66 @@
+/*
+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 account
+
+import (
+ "context"
+ "strings"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountConsumedUnitsByTypeCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (float64, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+ var cuType string
+
+ id = uint64(d.Get("account_id").(int))
+ cuType = strings.ToUpper(d.Get("cu_type").(string))
+
+ req := account.GetConsumedCloudUnitsByTypeRequest{
+ AccountID: id,
+ CUType: cuType,
+ }
+
+ log.Debugf("utilityAccountConsumedUnitsByTypeCheckPresence")
+ result, err := c.CloudAPI().Account().GetConsumedCloudUnitsByType(ctx, req)
+ if err != nil {
+ return 0, err
+ }
+
+ return result, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_deleted_list.go b/internal/service/cloudapi/account/utility_account_deleted_list.go
new file mode 100644
index 00000000..6ddbdaa1
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_deleted_list.go
@@ -0,0 +1,80 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountDeletedListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListAccounts, error) {
+ c := m.(*controller.ControllerCfg)
+
+ req := account.ListDeletedRequest{}
+
+ if page, ok := d.GetOk("page"); ok {
+ req.Page = uint64(page.(int))
+ }
+
+ if size, ok := d.GetOk("size"); ok {
+ req.Size = uint64(size.(int))
+ }
+
+ if by_id, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(by_id.(int))
+ }
+
+ if acl, ok := d.GetOk("acl"); ok {
+ req.ACL = acl.(string)
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if sortBy, ok := d.GetOk("sort_by"); ok {
+ req.SortBy = sortBy.(string)
+ }
+
+ log.Debugf("utilityAccountDeletedListCheckPresence: load")
+ accountDeletedList, err := c.CloudAPI().Account().ListDeleted(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+ return accountDeletedList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_disks_list.go b/internal/service/cloudapi/account/utility_account_disks_list.go
new file mode 100644
index 00000000..506e16fe
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_disks_list.go
@@ -0,0 +1,88 @@
+/*
+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 account
+
+import (
+ "context"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountDisksListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListDisks, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.ListDisksRequest{
+ AccountID: id,
+ }
+
+ if disk_id, ok := d.GetOk("disk_id"); ok {
+ req.DiskID = uint64(disk_id.(int))
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if disk_max_size, ok := d.GetOk("disk_max_size"); ok {
+ req.DiskMaxSize = uint64(disk_max_size.(int))
+ }
+
+ if typeVal, ok := d.GetOk("type"); ok {
+ req.Type = typeVal.(string)
+ }
+
+ 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))
+ }
+
+ accountDisksList, err := c.CloudAPI().Account().ListDisks(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountDisksList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_flip_groups.go b/internal/service/cloudapi/account/utility_account_flip_groups.go
new file mode 100644
index 00000000..ea30177b
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_flip_groups.go
@@ -0,0 +1,98 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountFlipGroupsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListFLIPGroups, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.ListFLIPGroupsRequest{
+ AccountID: id,
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if vins_id, ok := d.GetOk("vins_id"); ok {
+ req.VINSID = uint64(vins_id.(int))
+ }
+
+ if vins_name, ok := d.GetOk("vins_name"); ok {
+ req.VINSName = vins_name.(string)
+ }
+
+ if extnet_id, ok := d.GetOk("extnet_id"); ok {
+ req.ExtNetID = uint64(extnet_id.(int))
+ }
+
+ if by_ip, ok := d.GetOk("by_ip"); ok {
+ 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))
+ }
+
+ 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("utilityAccountFlipGroupsListCheckPresence")
+ accountFlipGroupsList, err := c.CloudAPI().Account().ListFLIPGroups(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountFlipGroupsList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_get_resource_consumption.go b/internal/service/cloudapi/account/utility_account_get_resource_consumption.go
new file mode 100644
index 00000000..77727425
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_get_resource_consumption.go
@@ -0,0 +1,61 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountResourceConsumptionGetCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.RecordResourceConsumption, error) {
+ c := m.(*controller.ControllerCfg)
+
+ id := uint64(d.Get("account_id").(int))
+
+ req:= account.GetResourceConsumptionRequest {
+ AccountID: id,
+ }
+
+ log.Debugf("utilityAccountResourceConsumptionGetCheckPresence: load")
+ accountResourceConsumptionRec, err := c.CloudAPI().Account().GetResourceConsumption(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountResourceConsumptionRec, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_list.go b/internal/service/cloudapi/account/utility_account_list.go
new file mode 100644
index 00000000..48a68d10
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListAccounts, error) {
+ c := m.(*controller.ControllerCfg)
+ req := account.ListRequest{}
+
+ if page, ok := d.GetOk("page"); ok {
+ req.Page = uint64(page.(int))
+ }
+ if size, ok := d.GetOk("size"); ok {
+ req.Size = uint64(size.(int))
+ }
+
+ if by_id, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(by_id.(int))
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if acl, ok := d.GetOk("acl"); ok {
+ req.ACL = acl.(string)
+ }
+
+ if status, ok := d.GetOk("status"); ok {
+ req.Status = status.(string)
+ }
+
+ if sortBy, ok := d.GetOk("sort_by"); ok {
+ req.SortBy = sortBy.(string)
+ }
+
+ if zoneID, ok := d.GetOk("zone_id"); ok {
+ req.ZoneID = uint64(zoneID.(int))
+ }
+
+ log.Debugf("utilityAccountListCheckPresence: load account list")
+ accountList, err := c.CloudAPI().Account().List(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_reserved_units.go b/internal/service/cloudapi/account/utility_account_reserved_units.go
new file mode 100644
index 00000000..97b3b433
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_reserved_units.go
@@ -0,0 +1,62 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountReservedUnitsCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ResourceLimits, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.GetReservedAccountUnitsRequest{
+ AccountID: id,
+ }
+
+ log.Debugf("utilityAccountReservedUnitsCheckPresence: load units")
+ accountReservedUnits, err := c.CloudAPI().Account().GetReservedAccountUnits(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountReservedUnits, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_resource_consumption_list.go b/internal/service/cloudapi/account/utility_account_resource_consumption_list.go
new file mode 100644
index 00000000..119fa77b
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_resource_consumption_list.go
@@ -0,0 +1,55 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountResourceConsumptionListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListResourceConsumption, error) {
+ c := m.(*controller.ControllerCfg)
+
+ log.Debugf("utilityAccountResourceConsumptionListCheckPresence: load")
+ accountResourceConsumptionList, err := c.CloudAPI().Account().ListResourceConsumption(ctx)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountResourceConsumptionList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_rg_list.go b/internal/service/cloudapi/account/utility_account_rg_list.go
new file mode 100644
index 00000000..28087cc4
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_rg_list.go
@@ -0,0 +1,94 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountRGListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListRG, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.ListRGRequest{
+ AccountID: id,
+ }
+
+ if page, ok := d.GetOk("page"); ok {
+ req.Page = uint64(page.(int))
+ }
+
+ if size, ok := d.GetOk("size"); ok {
+ req.Size = uint64(size.(int))
+ }
+
+ if rg_id, ok := d.GetOk("rg_id"); ok {
+ req.RGID = uint64(rg_id.(int))
+ }
+
+ if vins_id, ok := d.GetOk("vins_id"); ok {
+ req.VINSID = uint64(vins_id.(int))
+ }
+
+ if vm_id, ok := d.GetOk("vm_id"); ok {
+ req.VMID = uint64(vm_id.(int))
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if status, ok := d.GetOk("status"); ok {
+ req.Status = status.(string)
+ }
+
+ if sortBy, ok := d.GetOk("sort_by"); ok {
+ req.SortBy = sortBy.(string)
+ }
+
+ log.Debugf("utilityAccountRGListCheckPresence: load account list")
+ accountRGList, err := c.CloudAPI().Account().ListRG(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountRGList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_templates_list.go b/internal/service/cloudapi/account/utility_account_templates_list.go
new file mode 100644
index 00000000..624707df
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_templates_list.go
@@ -0,0 +1,83 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountTemplatesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListTemplates, error) {
+ c := m.(*controller.ControllerCfg)
+
+ id := uint64(d.Get("account_id").(int))
+
+ req := account.ListTemplatesRequest{
+ AccountID: id,
+ }
+
+ if include_deleted, ok := d.GetOk("include_deleted"); ok {
+ req.IncludeDeleted = include_deleted.(bool)
+ }
+ if imageId, ok := d.GetOk("image_id"); ok {
+ req.ImageID = uint64(imageId.(int))
+ }
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+ if typeTemplates, ok := d.GetOk("type"); ok {
+ req.Type = typeTemplates.(string)
+ }
+ 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("utilityAccountTemplatesListCheckPresence: load")
+ accountTemplatesList, err := c.CloudAPI().Account().ListTemplates(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountTemplatesList, nil
+}
diff --git a/internal/service/cloudapi/account/utility_account_vins_list.go b/internal/service/cloudapi/account/utility_account_vins_list.go
new file mode 100644
index 00000000..cb4b978b
--- /dev/null
+++ b/internal/service/cloudapi/account/utility_account_vins_list.go
@@ -0,0 +1,90 @@
+/*
+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 account
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityAccountVinsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListVINS, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ id = uint64(d.Get("account_id").(int))
+
+ req := account.ListVINSRequest{
+ AccountID: id,
+ }
+
+ if vins_id, ok := d.GetOk("vins_id"); ok {
+ req.VINSID = uint64(vins_id.(int))
+ }
+
+ if rg_id, ok := d.GetOk("rg_id"); ok {
+ req.RGID = uint64(rg_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))
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if ext_ip, ok := d.GetOk("ext_ip"); ok {
+ req.ExtIP = ext_ip.(string)
+ }
+
+ log.Debugf("utilityAccountVinsListCheckPresence: load account list")
+ accountVinsList, err := c.CloudAPI().Account().ListVINS(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return accountVinsList, nil
+}
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 00000000..e7f8145b
--- /dev/null
+++ b/internal/service/cloudapi/audit/data_source_audit.go
@@ -0,0 +1,132 @@
+/*
+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,
+ },
+ "correlation_id": {
+ 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/data_source_audit_list.go b/internal/service/cloudapi/audit/data_source_audit_list.go
new file mode 100644
index 00000000..fe5cb753
--- /dev/null
+++ b/internal/service/cloudapi/audit/data_source_audit_list.go
@@ -0,0 +1,244 @@
+/*
+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/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 dataSourceAuditListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ auditList, err := utilityAuditListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenAuditList(auditList))
+ d.Set("entry_count", auditList.EntryCount)
+
+ return nil
+}
+
+func DataSourceAuditList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceAuditListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceAuditListSchemaMake(),
+ }
+}
+
+func dataSourceAuditListSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "timestamp_at": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "find all audits after point in time (unixtime)",
+ },
+ "timestamp_to": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "find all audits before point in time (unixtime)",
+ },
+ "user": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "find by user (Mongo RegExp supported)",
+ },
+ "call": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "find by api endpoint (Mongo RegExp supported)",
+ },
+ "min_status_code": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "find by HTTP min status code",
+ },
+ "max_status_code": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "find by HTTP max status code",
+ },
+ "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",
+ },
+ "request_id": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "request id",
+ },
+ "size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "page size",
+ },
+ "resgroup_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "compute_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "vins_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "service_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "k8s_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "flipgroup_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "lb_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ },
+ "exclude_audit_lines": {
+ Type: schema.TypeBool,
+ Optional: true,
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "compute_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "resgroup_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "call": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "correlation_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "responsetime": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "status_code": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "timestamp": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "user": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ttl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "args": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "kwargs": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "result": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "timestamp_end": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "remote_addr": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "entry count",
+ },
+ }
+}
diff --git a/internal/service/cloudapi/audit/flattens.go b/internal/service/cloudapi/audit/flattens.go
new file mode 100644
index 00000000..c51bfaf1
--- /dev/null
+++ b/internal/service/cloudapi/audit/flattens.go
@@ -0,0 +1,80 @@
+/*
+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("correlation_id", au.CorrelationID)
+ 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)
+}
+
+func flattenAuditList(au *audit.ListAudits) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(au.Data))
+ for _, item := range au.Data {
+ temp := map[string]interface{}{
+ "args": item.Args,
+ "call": item.Call,
+ "correlation_id": item.CorrelationID,
+ "guid": item.GUID,
+ "kwargs": item.Kwargs,
+ "remote_addr": item.RemoteAddr,
+ "result": item.Result,
+ "responsetime": item.ResponseTime,
+ "status_code": item.StatusCode,
+ "timestamp": item.Timestamp,
+ "timestamp_end": item.TimestampEnd,
+ "ttl": item.TTL,
+ "user": item.User,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
diff --git a/internal/service/cloudapi/audit/utility_audit.go b/internal/service/cloudapi/audit/utility_audit.go
new file mode 100644
index 00000000..73f537cf
--- /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("utilityAuditCheckPresence: 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/audit/utility_audit_list.go b/internal/service/cloudapi/audit/utility_audit_list.go
new file mode 100644
index 00000000..fe099a56
--- /dev/null
+++ b/internal/service/cloudapi/audit/utility_audit_list.go
@@ -0,0 +1,117 @@
+/*
+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 utilityAuditListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*audit.ListAudits, error) {
+ c := m.(*controller.ControllerCfg)
+ req := audit.ListRequest{}
+
+ if timestampAt, ok := d.GetOk("timestamp_at"); ok {
+ req.TimestampAt = uint64(timestampAt.(int))
+ }
+ if timestampTo, ok := d.GetOk("timestamp_to"); ok {
+ req.TimestampTo = uint64(timestampTo.(int))
+ }
+ if user, ok := d.GetOk("user"); ok {
+ req.User = user.(string)
+ }
+ if call, ok := d.GetOk("call"); ok {
+ req.Call = call.(string)
+ }
+ if minStatusCode, ok := d.GetOk("min_status_code"); ok {
+ req.MinStatusCode = uint64(minStatusCode.(int))
+ }
+ if maxStatusCode, ok := d.GetOk("max_status_code"); ok {
+ req.MaxStatusCode = uint64(maxStatusCode.(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 RequestID, ok := d.GetOk("request_id"); ok {
+ req.RequestID = RequestID.(string)
+ }
+ if Size, ok := d.GetOk("size"); ok {
+ req.Size = uint64(Size.(int))
+ }
+ if resgroupID, ok := d.GetOk("resgroup_id"); ok {
+ req.RGID = uint64(resgroupID.(int))
+ }
+ if computeID, ok := d.GetOk("compute_id"); ok {
+ req.ComputeID = uint64(computeID.(int))
+ }
+ if accountID, ok := d.GetOk("account_id"); ok {
+ req.AccountID = uint64(accountID.(int))
+ }
+ if vinsID, ok := d.GetOk("vins_id"); ok {
+ req.VINSID = uint64(vinsID.(int))
+ }
+ if serviceID, ok := d.GetOk("service_id"); ok {
+ req.ServiceID = uint64(serviceID.(int))
+ }
+ if k8sID, ok := d.GetOk("k8s_id"); ok {
+ req.K8SID = uint64(k8sID.(int))
+ }
+ if flipgroupID, ok := d.GetOk("flipgroup_id"); ok {
+ req.FLIPGroupID = uint64(flipgroupID.(int))
+ }
+ if lbID, ok := d.GetOk("lb_id"); ok {
+ req.LBID = uint64(lbID.(int))
+ }
+ if sepID, ok := d.GetOk("sep_id"); ok {
+ req.SEPID = uint64(sepID.(int))
+ }
+ if excludeAuditLines, ok := d.GetOk("exclude_audit_lines"); ok {
+ req.ExcludeAuditLines = excludeAuditLines.(bool)
+ }
+
+ log.Debugf("utilityAuditListCheckPresence: load audit list")
+ auditList, err := c.CloudAPI().Audit().List(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return auditList, nil
+}
diff --git a/internal/service/cloudapi/bservice/data_source_bservice.go b/internal/service/cloudapi/bservice/data_source_bservice.go
new file mode 100644
index 00000000..15a6181c
--- /dev/null
+++ b/internal/service/cloudapi/bservice/data_source_bservice.go
@@ -0,0 +1,302 @@
+/*
+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 bservice
+
+import (
+ "context"
+ "strconv"
+
+ "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 dataSourceBasicServiceRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ bs, err := utilityBasicServiceCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ d.SetId(strconv.FormatUint(bs.ID, 10))
+
+ flattenService(d, bs)
+
+ return nil
+}
+
+func dataSourceBasicServiceSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "service_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "base_domain": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "zone_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "architecture": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compgroup_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "compgroup_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compgroup_role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "node_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+
+ "cpu_total": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disk_total": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "groups": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "computes": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "consistency": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ // "groups_name": {
+ // Type: schema.TypeList,
+ // Computed: true,
+ // Elem: &schema.Schema{
+ // Type: schema.TypeString,
+ // },
+ // },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "service_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "parent_srv_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "parent_srv_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ram_total": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "valid": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ },
+ },
+ },
+
+ "ssh_key": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ssh_user": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "user_managed": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceBasicService() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceBasicServiceRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceBasicServiceSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/bservice/data_source_bservice_deleted_list.go b/internal/service/cloudapi/bservice/data_source_bservice_deleted_list.go
new file mode 100644
index 00000000..31c51ae6
--- /dev/null
+++ b/internal/service/cloudapi/bservice/data_source_bservice_deleted_list.go
@@ -0,0 +1,85 @@
+/*
+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 bservice
+
+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 dataSourceBasicServiceDeletedListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ basicServiceDeletedList, err := utilityBasicServiceDeletedListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenBasicServiceList(basicServiceDeletedList))
+ d.Set("entry_count", basicServiceDeletedList.EntryCount)
+
+ return nil
+}
+
+func dataSourceBasicServiceDeletedListSchemaMake() map[string]*schema.Schema {
+ temp := dataSourceBasicServiceListSchemaMake()
+
+ delete(temp, "by_id")
+ delete(temp, "name")
+ delete(temp, "rg_name")
+ delete(temp, "status")
+ delete(temp, "tech_status")
+ delete(temp, "account_name")
+
+ return temp
+}
+
+func DataSourceBasicServiceDeletedList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceBasicServiceDeletedListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceBasicServiceDeletedListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/bservice/data_source_bservice_group.go b/internal/service/cloudapi/bservice/data_source_bservice_group.go
new file mode 100644
index 00000000..c504740b
--- /dev/null
+++ b/internal/service/cloudapi/bservice/data_source_bservice_group.go
@@ -0,0 +1,310 @@
+/*
+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 bservice
+
+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/decort-golang-sdk/pkg/cloudapi/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceBasicServiceGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ bsg, err := utilityBasicServiceGroupCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("account_id", bsg.AccountID)
+ d.Set("account_name", bsg.AccountName)
+ d.Set("computes", flattenBSGroupComputes(bsg.Computes))
+ d.Set("consistency", bsg.Consistency)
+ d.Set("cpu", bsg.CPU)
+ d.Set("created_by", bsg.CreatedBy)
+ d.Set("created_time", bsg.CreatedTime)
+ d.Set("deleted_by", bsg.DeletedBy)
+ d.Set("deleted_time", bsg.DeletedTime)
+ d.Set("disk", bsg.Disk)
+ d.Set("driver", bsg.Driver)
+ d.Set("extnets", bsg.ExtNets)
+ d.Set("gid", bsg.GID)
+ d.Set("guid", bsg.GUID)
+ d.Set("image_id", bsg.ImageID)
+ d.Set("milestones", bsg.Milestones)
+ d.Set("compgroup_name", bsg.Name)
+ d.Set("parents", bsg.Parents)
+ d.Set("ram", bsg.RAM)
+ d.Set("rg_id", bsg.RGID)
+ d.Set("rg_name", bsg.RGName)
+ d.Set("role", bsg.Role)
+ d.Set("sep_id", bsg.SEPID)
+ d.Set("seq_no", bsg.SeqNo)
+ d.Set("status", bsg.Status)
+ d.Set("tech_status", bsg.TechStatus)
+ d.Set("timeout_start", bsg.TimeoutStart)
+ d.Set("updated_by", bsg.UpdatedBy)
+ d.Set("updated_time", bsg.UpdatedTime)
+ d.Set("vinses", bsg.VINSes)
+ return nil
+}
+
+func flattenBSGroupOSUsers(bsgosus bservice.ListOSUsers) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, bsgosu := range bsgosus {
+ temp := map[string]interface{}{
+ "login": bsgosu.Login,
+ "password": bsgosu.Password,
+ }
+ res = append(res, temp)
+ }
+
+ return res
+}
+
+func flattenBSGroupComputes(bsgcs bservice.ListGroupComputes) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, bsgc := range bsgcs {
+ temp := map[string]interface{}{
+ "id": bsgc.ID,
+ "ip_addresses": bsgc.IPAddresses,
+ "name": bsgc.Name,
+ "os_users": flattenBSGroupOSUsers(bsgc.OSUsers),
+ "chipset": bsgc.Chipset,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func dataSourceBasicServiceGroupSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "service_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ },
+ "compgroup_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ip_addresses": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "chipset": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "os_users": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "login": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "password": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "consistency": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "cpu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disk": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "driver": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "extnets": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "compgroup_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "parents": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "ram": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "seq_no": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "timeout_start": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vinses": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ }
+ return res
+}
+
+func DataSourceBasicServiceGroup() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceBasicServiceGroupRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceBasicServiceGroupSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/bservice/data_source_bservice_list.go b/internal/service/cloudapi/bservice/data_source_bservice_list.go
new file mode 100644
index 00000000..0974b53a
--- /dev/null
+++ b/internal/service/cloudapi/bservice/data_source_bservice_list.go
@@ -0,0 +1,279 @@
+/*
+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 bservice
+
+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/decort-golang-sdk/pkg/cloudapi/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func flattenBasicServiceList(bsl *bservice.ListBasicServices) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, bs := range bsl.Data {
+ temp := map[string]interface{}{
+ "account_id": bs.AccountID,
+ "account_name": bs.AccountName,
+ "base_domain": bs.BaseDomain,
+ "created_by": bs.CreatedBy,
+ "created_time": bs.CreatedTime,
+ "deleted_by": bs.DeletedBy,
+ "deleted_time": bs.DeletedTime,
+ "gid": bs.GID,
+ "groups": bs.Groups,
+ "guid": bs.GUID,
+ "service_id": bs.ID,
+ "service_name": bs.Name,
+ "parent_srv_id": bs.ParentSrvID,
+ "parent_srv_type": bs.ParentSrvType,
+ "rg_id": bs.RGID,
+ "rg_name": bs.RGName,
+ "ssh_user": bs.SSHUser,
+ "status": bs.Status,
+ "tech_status": bs.TechStatus,
+ "updated_by": bs.UpdatedBy,
+ "updated_time": bs.UpdatedTime,
+ "user_managed": bs.UserManaged,
+ "zone_id": bs.ZoneID,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func dataSourceBasicServiceListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ basicServiceList, err := utilityBasicServiceListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenBasicServiceList(basicServiceList))
+ d.Set("entry_count", basicServiceList.EntryCount)
+
+ return nil
+}
+
+func dataSourceBasicServiceListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "by_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by bservice name",
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by resource group name",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by status",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by tech status",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by account name",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "ID of the account to query for BasicService instances",
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "ID of the resource group to query for BasicService instances",
+ },
+ "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",
+ },
+ "zone_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Zone ID",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "base_domain": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "zone_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "groups": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "service_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "service_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "parent_srv_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "parent_srv_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ssh_user": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "user_managed": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceBasicServiceList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceBasicServiceListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceBasicServiceListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/bservice/data_source_bservice_snapshot_list.go b/internal/service/cloudapi/bservice/data_source_bservice_snapshot_list.go
new file mode 100644
index 00000000..0df055fb
--- /dev/null
+++ b/internal/service/cloudapi/bservice/data_source_bservice_snapshot_list.go
@@ -0,0 +1,110 @@
+/*
+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 bservice
+
+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 dataSourceBasicServiceSnapshotListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ basicServiceSnapshotList, err := utilityBasicServiceSnapshotListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenBasicServiceSnapshotsList(basicServiceSnapshotList))
+ d.Set("entry_count", basicServiceSnapshotList.EntryCount)
+ return nil
+}
+
+func dataSourceBasicServiceSnapshotListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "service_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the BasicService instance",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "valid": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceBasicServiceSnapshotList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceBasicServiceSnapshotListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceBasicServiceSnapshotListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/bservice/flattens.go b/internal/service/cloudapi/bservice/flattens.go
new file mode 100644
index 00000000..42f13064
--- /dev/null
+++ b/internal/service/cloudapi/bservice/flattens.go
@@ -0,0 +1,140 @@
+package bservice
+
+import (
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
+)
+
+func flattenResourceBasicServiceGroup(d *schema.ResourceData, bsg *bservice.RecordGroup) {
+ d.Set("account_id", bsg.AccountID)
+ d.Set("account_name", bsg.AccountName)
+ d.Set("computes", flattenBSGroupComputes(bsg.Computes))
+ d.Set("consistency", bsg.Consistency)
+ d.Set("cpu", bsg.CPU)
+ d.Set("created_by", bsg.CreatedBy)
+ d.Set("created_time", bsg.CreatedTime)
+ d.Set("deleted_by", bsg.DeletedBy)
+ d.Set("deleted_time", bsg.DeletedTime)
+ d.Set("disk", bsg.Disk)
+ d.Set("driver", bsg.Driver)
+ d.Set("extnets", bsg.ExtNets)
+ d.Set("gid", bsg.GID)
+ d.Set("guid", bsg.GUID)
+ d.Set("image_id", bsg.ImageID)
+ d.Set("milestones", bsg.Milestones)
+ d.Set("compgroup_name", bsg.Name)
+ d.Set("compgroup_id", bsg.ID)
+ d.Set("parents", bsg.Parents)
+ d.Set("ram", bsg.RAM)
+ d.Set("rg_id", bsg.RGID)
+ d.Set("rg_name", bsg.RGName)
+ d.Set("role", bsg.Role)
+ d.Set("sep_id", bsg.SEPID)
+ d.Set("sep_pool", bsg.PoolName)
+ d.Set("seq_no", bsg.SeqNo)
+ d.Set("status", bsg.Status)
+ d.Set("tech_status", bsg.TechStatus)
+ d.Set("timeout_start", bsg.TimeoutStart)
+ d.Set("updated_by", bsg.UpdatedBy)
+ d.Set("updated_time", bsg.UpdatedTime)
+ d.Set("vinses", bsg.VINSes)
+}
+
+func flattenGroups(groups bservice.ListGroups) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, group := range groups {
+ temp := map[string]interface{}{
+ "computes": group.Computes,
+ "consistency": group.Consistency,
+ "id": group.ID,
+ "name": group.Name,
+ "status": group.Status,
+ "tech_status": group.TechStatus,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenService(d *schema.ResourceData, bs *bservice.RecordBasicService) {
+ d.Set("account_id", bs.AccountID)
+ d.Set("account_name", bs.AccountName)
+ d.Set("base_domain", bs.BaseDomain)
+ d.Set("computes", flattenBasicServiceComputes(bs.Computes))
+ d.Set("cpu_total", bs.CPUTotal)
+ d.Set("created_by", bs.CreatedBy)
+ d.Set("created_time", bs.CreatedTime)
+ d.Set("deleted_by", bs.DeletedBy)
+ d.Set("deleted_time", bs.DeletedTime)
+ d.Set("disk_total", bs.DiskTotal)
+ d.Set("gid", bs.GID)
+ d.Set("groups", flattenGroups(bs.Groups))
+ d.Set("guid", bs.GUID)
+ d.Set("milestones", bs.Milestones)
+ d.Set("service_name", bs.Name)
+ d.Set("service_id", bs.ID)
+ d.Set("parent_srv_id", bs.ParentSrvID)
+ d.Set("parent_srv_type", bs.ParentSrvType)
+ d.Set("ram_total", bs.RAMTotal)
+ d.Set("rg_id", bs.RGID)
+ d.Set("rg_name", bs.RGName)
+ d.Set("snapshots", flattenBasicServiceSnapshots(bs.Snapshots))
+ d.Set("ssh_key", bs.SSHKey)
+ d.Set("ssh_user", bs.SSHUser)
+ d.Set("status", bs.Status)
+ d.Set("tech_status", bs.TechStatus)
+ d.Set("updated_by", bs.UpdatedBy)
+ d.Set("updated_time", bs.UpdatedTime)
+ d.Set("user_managed", bs.UserManaged)
+ d.Set("zone_id", bs.ZoneID)
+}
+
+func flattenBasicServiceComputes(bscs bservice.ListComputes) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for _, bsc := range bscs {
+ temp := map[string]interface{}{
+ "account_id": bsc.AccountID,
+ "architecture": bsc.Architecture,
+ "compgroup_id": bsc.CompGroupID,
+ "compgroup_name": bsc.CompGroupName,
+ "compgroup_role": bsc.CompGroupRole,
+ "id": bsc.ID,
+ "name": bsc.Name,
+ "rg_id": bsc.RGID,
+ "node_id": bsc.NodeID,
+ "status": bsc.Status,
+ "tech_status": bsc.TechStatus,
+ }
+ res = append(res, temp)
+ }
+
+ return res
+}
+
+func flattenBasicServiceSnapshots(bsrvss bservice.ListSnapshots) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(bsrvss))
+ for _, bsrvs := range bsrvss {
+ temp := map[string]interface{}{
+ "guid": bsrvs.GUID,
+ "label": bsrvs.Label,
+ "timestamp": bsrvs.Timestamp,
+ "valid": bsrvs.Valid,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenBasicServiceSnapshotsList(bsrvss *bservice.ListInfoSnapshots) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(bsrvss.Data))
+ for _, bsrvs := range bsrvss.Data {
+ temp := map[string]interface{}{
+ "guid": bsrvs.GUID,
+ "label": bsrvs.Label,
+ "timestamp": bsrvs.Timestamp,
+ "valid": bsrvs.Valid,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
diff --git a/internal/service/cloudapi/bservice/resource_bservice.go b/internal/service/cloudapi/bservice/resource_bservice.go
new file mode 100644
index 00000000..468793f3
--- /dev/null
+++ b/internal/service/cloudapi/bservice/resource_bservice.go
@@ -0,0 +1,759 @@
+/*
+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 bservice
+
+import (
+ "context"
+ "errors"
+ "strconv"
+
+ "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/decort-golang-sdk/pkg/cloudapi/bservice"
+ "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"
+)
+
+func resourceBasicServiceCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceCreate")
+ c := m.(*controller.ControllerCfg)
+ req := bservice.CreateRequest{}
+
+ haveRGID, err := existRGID(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ if !haveRGID {
+ return diag.Errorf("resourceBasicServiceCreate: can't create basic service because RGID %d is not allowed or does not exist", d.Get("rg_id").(int))
+ }
+
+ req.Name = d.Get("service_name").(string)
+ req.RGID = uint64(d.Get("rg_id").(int))
+
+ if zoneID, ok := d.GetOk("zone_id"); ok {
+ req.ZoneID = uint64(zoneID.(int))
+ }
+ if sshKey, ok := d.GetOk("ssh_key"); ok {
+ req.SSHKey = sshKey.(string)
+ }
+ if sshUser, ok := d.GetOk("ssh_user"); ok {
+ req.SSHUser = sshUser.(string)
+ }
+
+ serviceId, err := c.CloudAPI().BService().Create(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ d.SetId(strconv.FormatUint(serviceId, 10))
+ d.Set("service_id", serviceId)
+
+ service, err := utilityBasicServiceCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ warnings := dc.Warnings{}
+ enable := d.Get("enable").(bool)
+
+ if enable && (service.Status == status.Disabled || service.Status == status.Created) {
+ log.Debugf("trying to enable bservice %v", serviceId)
+ _, err := c.CloudAPI().BService().Enable(ctx, bservice.EnableRequest{
+ ServiceID: serviceId,
+ })
+
+ if err != nil {
+ warnings.Add(err)
+ }
+ }
+ if d.Get("start").(bool) {
+ log.Debugf("trying to start bservice %v", serviceId)
+
+ if !enable {
+ warnings.Add(errors.New("can not start bservice that is not enabled. Set enable = true and start = true to enable and start bservice"))
+ }
+
+ if enable {
+ _, err := c.CloudAPI().BService().Start(ctx, bservice.StartRequest{
+ ServiceID: serviceId,
+ })
+
+ if err != nil {
+ warnings.Add(err)
+ }
+ }
+ }
+
+ return append(warnings.Get(), resourceBasicServiceRead(ctx, d, m)...)
+}
+
+func resourceBasicServiceRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceRead")
+
+ // c := m.(*controller.ControllerCfg)
+
+ bs, err := utilityBasicServiceCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ hasChanged := false
+
+ switch bs.Status {
+ case status.Modeled:
+ return diag.Errorf("The basic service is in status: %s, please, contact support for more information", bs.Status)
+ case status.Created:
+ case status.Enabled:
+ case status.Enabling:
+ case status.Disabled:
+ log.Debugf("The basic service is in status: %s, troubles can occur with the update. Please, enable bservice first.", bs.Status)
+ case status.Disabling:
+ log.Debugf("The basic service is in status: %s, troubles can occur with the update.", bs.Status)
+ case status.Deleted:
+ // id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ // restoreReq := bservice.RestoreRequest{
+ // ServiceID: id,
+ // }
+ // enableReq := bservice.EnableRequest{
+ // ServiceID: id,
+ // }
+
+ // _, err := c.CloudAPI().BService().Restore(ctx, restoreReq)
+ // if err != nil {
+ // return diag.FromErr(err)
+ // }
+
+ // _, err = c.CloudAPI().BService().Enable(ctx, enableReq)
+ // if err != nil {
+ // return diag.FromErr(err)
+ // }
+
+ // hasChanged = true
+ case status.Deleting:
+ case status.Destroyed:
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been destroyed")
+ // return resourceBasicServiceCreate(ctx, d, m)
+ case status.Destroying:
+ return diag.Errorf("The basic service is in progress with status: %s", bs.Status)
+ case status.Restoring:
+ case status.Reconfiguring:
+ }
+
+ if hasChanged {
+ bs, err = utilityBasicServiceCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ }
+
+ flattenService(d, bs)
+
+ return nil
+}
+
+func resourceBasicServiceDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceDelete")
+ c := m.(*controller.ControllerCfg)
+
+ _, err := utilityBasicServiceCheckPresence(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ req := bservice.DeleteRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ Permanently: d.Get("permanently").(bool),
+ }
+
+ _, err = c.CloudAPI().BService().Delete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ d.SetId("")
+
+ return nil
+}
+
+func resourceBasicServiceUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceUpdate")
+ c := m.(*controller.ControllerCfg)
+
+ haveRGID, err := existRGID(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ if !haveRGID {
+ return diag.Errorf("resourceBasicServiceUpdate: can't create basic service because RGID %d is not allowed or does not exist", d.Get("rg_id").(int))
+ }
+
+ bs, err := utilityBasicServiceCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ hasChanged := false
+
+ switch bs.Status {
+ case status.Modeled:
+ return diag.Errorf("The basic service is in status: %s, please, contact support for more information", bs.Status)
+ case status.Created:
+ case status.Enabled:
+ case status.Enabling:
+ case status.Disabled:
+ log.Debugf("The basic service is in status: %s, troubles can occur with the update. Please, enable bservice first.", bs.Status)
+ case status.Disabling:
+ log.Debugf("The basic service is in status: %s, troubles can occur with the update.", bs.Status)
+ case status.Deleted:
+ if d.Get("restore").(bool) {
+ restoreReq := bservice.RestoreRequest{
+ ServiceID: bs.ID,
+ }
+ _, err := c.CloudAPI().BService().Restore(ctx, restoreReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ hasChanged = true
+
+ if d.Get("enable").(bool) {
+ enableReq := bservice.EnableRequest{
+ ServiceID: bs.ID,
+ }
+ _, err = c.CloudAPI().BService().Enable(ctx, enableReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.Get("start").(bool) {
+ startReq := bservice.StartRequest{
+ ServiceID: bs.ID,
+ }
+ _, err = c.CloudAPI().BService().Start(ctx, startReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+ case status.Deleting:
+ case status.Destroyed:
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been destroyed")
+ // return resourceBasicServiceCreate(ctx, d, m)
+ case status.Destroying:
+ return diag.Errorf("The basic service is in progress with status: %s", bs.Status)
+ case status.Restoring:
+ case status.Reconfiguring:
+ }
+
+ if hasChanged {
+ bs, err = utilityBasicServiceCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("enable") {
+ if d.Get("enable").(bool) {
+ req := bservice.EnableRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ }
+
+ _, err := c.CloudAPI().BService().Enable(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ } else {
+ req := bservice.DisableRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ }
+
+ _, err := c.CloudAPI().BService().Disable(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if d.HasChange("zone_id") {
+ zoneID := uint64(d.Get("zone_id").(int))
+
+ start := d.Get("start").(bool)
+ if start {
+ reqStop := bservice.StopRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ }
+
+ _, err := c.CloudAPI().BService().Stop(ctx, reqStop)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ req := bservice.MigrateToZoneRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ ZoneID: zoneID,
+ }
+
+ _, err = c.CloudAPI().BService().MigrateToZone(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ if start {
+ startReq := bservice.StartRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ }
+
+ _, err = c.CloudAPI().BService().Start(ctx, startReq)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if d.HasChange("start") {
+ if d.Get("start").(bool) {
+ req := bservice.StartRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ }
+
+ _, err := c.CloudAPI().BService().Start(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ } else {
+ req := bservice.StopRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ }
+
+ _, err := c.CloudAPI().BService().Stop(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if d.HasChange("snapshots") {
+ deletedSnapshots := make([]interface{}, 0)
+ addedSnapshots := make([]interface{}, 0)
+ updatedSnapshots := make([]interface{}, 0)
+
+ old, new := d.GetChange("snapshots")
+ oldConv := old.([]interface{})
+ newConv := new.([]interface{})
+ for _, el := range oldConv {
+ if !isContainsSnapshot(newConv, el) {
+ deletedSnapshots = append(deletedSnapshots, el)
+ }
+ }
+ for _, el := range newConv {
+ if !isContainsSnapshot(oldConv, el) {
+ addedSnapshots = append(addedSnapshots, el)
+ } else {
+ if isRollback(oldConv, el) {
+ updatedSnapshots = append(updatedSnapshots, el)
+ }
+ }
+ }
+
+ if len(deletedSnapshots) > 0 {
+ for _, snapshot := range deletedSnapshots {
+ snapshotConv := snapshot.(map[string]interface{})
+ req := bservice.SnapshotDeleteRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ Label: snapshotConv["label"].(string),
+ }
+
+ _, err := c.CloudAPI().BService().SnapshotDelete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if len(addedSnapshots) > 0 {
+ for _, snapshot := range addedSnapshots {
+ snapshotConv := snapshot.(map[string]interface{})
+ req := bservice.SnapshotCreateRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ Label: snapshotConv["label"].(string),
+ }
+
+ _, err := c.CloudAPI().BService().SnapshotCreate(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if len(updatedSnapshots) > 0 {
+ for _, snapshot := range updatedSnapshots {
+ snapshotConv := snapshot.(map[string]interface{})
+ req := bservice.SnapshotRollbackRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ Label: snapshotConv["label"].(string),
+ }
+
+ _, err := c.CloudAPI().BService().SnapshotRollback(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+ }
+
+ return resourceBasicServiceRead(ctx, d, m)
+}
+
+func isContainsSnapshot(els []interface{}, el interface{}) bool {
+ for _, elOld := range els {
+ elOldConv := elOld.(map[string]interface{})
+ elConv := el.(map[string]interface{})
+ if elOldConv["guid"].(string) == elConv["guid"].(string) {
+ return true
+ }
+ }
+ return false
+}
+
+func isRollback(els []interface{}, el interface{}) bool {
+ for _, elOld := range els {
+ elOldConv := elOld.(map[string]interface{})
+ elConv := el.(map[string]interface{})
+ if elOldConv["guid"].(string) == elConv["guid"].(string) &&
+ elOldConv["rollback"].(bool) != elConv["rollback"].(bool) &&
+ elConv["rollback"].(bool) {
+ return true
+ }
+ }
+ return false
+}
+
+func resourceBasicServiceSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "service_name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Name of the service",
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the Resource Group where this service will be placed",
+ },
+ "zone_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "ID of the zone where this service will be placed",
+ },
+ "ssh_key": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "SSH key to deploy for the specified user. Same key will be deployed to all computes of the service.",
+ },
+ "ssh_user": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "name of the user to deploy SSH key for. Pass empty string if no SSH key deployment is required",
+ },
+ "permanently": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "if set to False, Basic service will be deleted to recycle bin. Otherwise destroyed immediately",
+ },
+ "enable": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Enable service. Enabling a service technically means setting model status of all computes and service itself to ENABLED. It does not start computes.",
+ },
+ "restore": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Restores BasicService instance",
+ },
+ "start": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Start service. Starting a service technically means starting computes from all service groups according to group relations",
+ },
+ "service_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "base_domain": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "architecture": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compgroup_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "compgroup_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compgroup_role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "node_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "cpu_total": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "disk_total": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "groups": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "computes": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "consistency": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "parent_srv_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "parent_srv_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ram_total": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Optional: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "label": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ },
+ "rollback": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "valid": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "user_managed": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ }
+}
+
+func ResourceBasicService() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ CreateContext: resourceBasicServiceCreate,
+ ReadContext: resourceBasicServiceRead,
+ UpdateContext: resourceBasicServiceUpdate,
+ DeleteContext: resourceBasicServiceDelete,
+
+ Importer: &schema.ResourceImporter{
+ StateContext: schema.ImportStatePassthroughContext,
+ },
+
+ Timeouts: &schema.ResourceTimeout{
+ Create: &constants.Timeout600s,
+ Read: &constants.Timeout300s,
+ Update: &constants.Timeout300s,
+ Delete: &constants.Timeout300s,
+ Default: &constants.Timeout300s,
+ },
+
+ Schema: resourceBasicServiceSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/bservice/resource_bservice_group.go b/internal/service/cloudapi/bservice/resource_bservice_group.go
new file mode 100644
index 00000000..90cf7489
--- /dev/null
+++ b/internal/service/cloudapi/bservice/resource_bservice_group.go
@@ -0,0 +1,646 @@
+/*
+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 bservice
+
+import (
+ "context"
+ "strconv"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
+ "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/validators"
+)
+
+func resourceBasicServiceGroupCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceGroupCreate")
+
+ c := m.(*controller.ControllerCfg)
+ req := bservice.GroupAddRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ Name: d.Get("compgroup_name").(string),
+ Count: uint64(d.Get("comp_count").(int)),
+ CPU: uint64(d.Get("cpu").(int)),
+ RAM: uint64(d.Get("ram").(int)),
+ Disk: uint64(d.Get("disk").(int)),
+ ImageID: uint64(d.Get("image_id").(int)),
+ StoragePolicyID: uint64(d.Get("storage_policy_id").(int)),
+ }
+
+ if role, ok := d.GetOk("role"); ok {
+ req.Role = role.(string)
+ }
+
+ if timeoutStart, ok := d.GetOk("timeout_start"); ok {
+ req.TimeoutStart = uint64(timeoutStart.(int))
+ }
+
+ ///4.4.0
+ if sepId, ok := d.GetOk("sep_id"); ok {
+ req.SEPID = uint64(sepId.(int))
+ }
+
+ if sepPool, ok := d.GetOk("sep_pool"); ok {
+ req.SEPPool = sepPool.(string)
+ }
+
+ if cloudInit, ok := d.GetOk("cloud_init"); ok {
+ req.UserData = cloudInit.(string)
+ }
+ ///
+
+ if vinses, ok := d.GetOk("vinses"); ok {
+ res := []uint64{}
+ for _, vins := range vinses.([]interface{}) {
+ res = append(res, uint64(vins.(int)))
+ }
+
+ req.VINSes = res
+ }
+ if extnets, ok := d.GetOk("extnets"); ok {
+ res := []uint64{}
+ for _, enet := range extnets.([]interface{}) {
+ res = append(res, uint64(enet.(int)))
+ }
+
+ req.ExtNets = res
+ }
+
+ if chipset, ok := d.GetOk("chipset"); ok {
+ req.Chipset = chipset.(string)
+ }
+
+ compgroupId, err := c.CloudAPI().BService().GroupAdd(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ d.SetId(strconv.FormatUint(compgroupId, 10))
+ d.Set("compgroup_id", compgroupId)
+
+ serviceId := uint64(d.Get("service_id").(int))
+
+ if d.Get("start").(bool) {
+ log.Debugf("trying to start bservice group %v", compgroupId)
+ _, err := c.CloudAPI().BService().GroupStart(ctx, bservice.GroupStartRequest{
+ ServiceID: serviceId,
+ CompGroupID: compgroupId,
+ })
+
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ return resourceBasicServiceGroupRead(ctx, d, m)
+}
+
+func resourceBasicServiceGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceGroupRead")
+
+ bsg, err := utilityBasicServiceGroupCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ flattenResourceBasicServiceGroup(d, bsg)
+
+ return nil
+}
+
+func resourceBasicServiceGroupDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceGroupDelete")
+
+ bsg, err := utilityBasicServiceGroupCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ c := m.(*controller.ControllerCfg)
+ req := bservice.GroupRemoveRequest{
+ ServiceID: bsg.ServiceID,
+ CompGroupID: bsg.ID,
+ }
+
+ _, err = c.CloudAPI().BService().GroupRemove(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ d.SetId("")
+
+ return nil
+}
+
+func resourceBasicServiceGroupUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceBasicServiceGroupEdit")
+ c := m.(*controller.ControllerCfg)
+
+ if d.HasChange("comp_count") {
+ req := bservice.GroupResizeRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ Count: int64(d.Get("comp_count").(int)),
+ Chipset: d.Get("chipset").(string),
+ Mode: d.Get("mode").(string),
+ }
+
+ _, err := c.CloudAPI().BService().GroupResize(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("start") {
+ start := d.Get("start").(bool)
+ if start {
+ req := bservice.GroupStartRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ }
+
+ _, err := c.CloudAPI().BService().GroupStart(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ } else {
+ req := bservice.GroupStopRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ Force: d.Get("force_stop").(bool),
+ }
+
+ _, err := c.CloudAPI().BService().GroupStop(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if d.HasChanges("compgroup_name", "ram", "cpu", "disk", "role") {
+ req := bservice.GroupUpdateRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ Name: d.Get("compgroup_name").(string),
+ Role: d.Get("role").(string),
+ CPU: uint64(d.Get("cpu").(int)),
+ RAM: uint64(d.Get("ram").(int)),
+ Disk: uint64(d.Get("disk").(int)),
+ Force: d.Get("force_update").(bool),
+ }
+
+ _, err := c.CloudAPI().BService().GroupUpdate(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("extnets") {
+ extnets := d.Get("extnets").([]interface{})
+
+ res := []uint64{}
+ for _, enet := range extnets {
+ res = append(res, uint64(enet.(int)))
+ }
+
+ req := bservice.GroupUpdateExtNetRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ ExtNets: res,
+ }
+
+ _, err := c.CloudAPI().BService().GroupUpdateExtNet(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("vinses") {
+ vinses := d.Get("vinses").([]interface{})
+
+ res := []uint64{}
+ for _, vins := range vinses {
+ res = append(res, uint64(vins.(int)))
+ }
+
+ req := bservice.GroupUpdateVINSRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ VINSes: res,
+ }
+
+ _, err := c.CloudAPI().BService().GroupUpdateVINS(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("parents") {
+ deletedParents := make([]interface{}, 0)
+ addedParents := make([]interface{}, 0)
+
+ old, new := d.GetChange("parents")
+ oldConv := old.([]interface{})
+ newConv := new.([]interface{})
+ for _, el := range oldConv {
+ if !isContainsParent(newConv, el) {
+ deletedParents = append(deletedParents, el)
+ }
+ }
+ for _, el := range newConv {
+ if !isContainsParent(oldConv, el) {
+ addedParents = append(addedParents, el)
+ }
+ }
+
+ if len(deletedParents) > 0 {
+ for _, parent := range deletedParents {
+ parentConv := parent.(int)
+
+ req := bservice.GroupParentRemoveRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ ParentID: uint64(parentConv),
+ }
+
+ _, err := c.CloudAPI().BService().GroupParentRemove(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ if len(addedParents) > 0 {
+ for _, parent := range addedParents {
+ parentConv := parent.(int)
+
+ req := bservice.GroupParentAddRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ ParentID: uint64(parentConv),
+ }
+
+ _, err := c.CloudAPI().BService().GroupParentAdd(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+ }
+
+ if d.HasChange("remove_computes") {
+ rcs := d.Get("remove_computes").([]interface{})
+ if len(rcs) > 0 {
+ for _, rc := range rcs {
+ req := bservice.GroupComputeRemoveRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ CompGroupID: uint64(d.Get("compgroup_id").(int)),
+ ComputeID: uint64(rc.(int)),
+ }
+
+ _, err := c.CloudAPI().BService().GroupComputeRemove(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+ }
+
+ return resourceBasicServiceGroupRead(ctx, d, m)
+}
+
+func isContainsParent(els []interface{}, el interface{}) bool {
+ for _, elOld := range els {
+ elOldConv := elOld.(int)
+ elConv := el.(int)
+ if elOldConv == elConv {
+ return true
+ }
+ }
+ return false
+}
+
+func resourceBasicServiceGroupSchemaMake() map[string]*schema.Schema {
+ return map[string]*schema.Schema{
+ "service_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID of the Basic Service to add a group to",
+ },
+ "compgroup_name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "name of the Compute Group to add",
+ },
+ "comp_count": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "computes number. Defines how many computes must be there in the group",
+ },
+ "cpu": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "compute CPU number. All computes in the group have the same CPU count",
+ },
+ "ram": {
+ Type: schema.TypeInt,
+ Required: true,
+ ValidateFunc: validation.All(
+ validation.IntAtLeast(constants.MIN_RAM_PER_COMPUTE),
+ validators.DivisibleBy(constants.RAM_DIVISIBILITY),
+ ),
+ Description: "compute RAM volume in MB. All computes in the group have the same RAM volume",
+ },
+ "disk": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "compute boot disk size in GB",
+ },
+ "image_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "OS image ID to create computes from",
+ },
+ "storage_policy_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "storage policy id of compute. The rules of the specified storage policy will be used.",
+ },
+ ///4.4.0
+ "sep_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "storage endpoint provider ID",
+ },
+ "sep_pool": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "pool to use if sepId is set, can be also empty if needed to be chosen by system",
+ },
+ "cloud_init": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Optional cloud_init parameters. Applied when creating new compute instance only, ignored in all other cases.",
+ },
+ "chipset": {
+ Type: schema.TypeString,
+ Optional: true,
+ ValidateFunc: validation.StringInSlice([]string{"i440fx", "Q35"}, false),
+ Default: "Q35",
+ Description: "Chipset for virtual machines.",
+ },
+ ///
+ "role": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "group role tag. Can be empty string, does not have to be unique",
+ },
+ "timeout_start": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "time of Compute Group readiness",
+ },
+ "extnets": {
+ Type: schema.TypeList,
+ Optional: true,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "list of external networks to connect computes to",
+ },
+ "vinses": {
+ Type: schema.TypeList,
+ Optional: true,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "list of ViNSes to connect computes to",
+ },
+ "mode": {
+ Type: schema.TypeString,
+ Optional: true,
+ Default: "RELATIVE",
+ ValidateFunc: validation.StringInSlice([]string{"RELATIVE", "ABSOLUTE"}, false),
+ Description: "(RELATIVE;ABSOLUTE) either delta or absolute value of computes",
+ },
+ "start": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Start the specified Compute Group within BasicService",
+ },
+ "force_stop": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "force stop Compute Group",
+ },
+ "force_update": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "force resize Compute Group",
+ },
+ "parents": {
+ Type: schema.TypeList,
+ Optional: true,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "remove_computes": {
+ Type: schema.TypeList,
+ Optional: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "compgroup_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "chipset": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ip_addresses": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "os_users": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "login": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "password": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ "consistency": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "driver": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "seq_no": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+}
+
+func ResourceBasicServiceGroup() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ CreateContext: resourceBasicServiceGroupCreate,
+ ReadContext: resourceBasicServiceGroupRead,
+ UpdateContext: resourceBasicServiceGroupUpdate,
+ DeleteContext: resourceBasicServiceGroupDelete,
+
+ Importer: &schema.ResourceImporter{
+ StateContext: schema.ImportStatePassthroughContext,
+ },
+
+ Timeouts: &schema.ResourceTimeout{
+ Create: &constants.Timeout600s,
+ Read: &constants.Timeout300s,
+ Update: &constants.Timeout300s,
+ Delete: &constants.Timeout300s,
+ Default: &constants.Timeout300s,
+ },
+
+ Schema: resourceBasicServiceGroupSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/bservice/resource_check_input_values.go b/internal/service/cloudapi/bservice/resource_check_input_values.go
new file mode 100644
index 00000000..67f37534
--- /dev/null
+++ b/internal/service/cloudapi/bservice/resource_check_input_values.go
@@ -0,0 +1,24 @@
+package bservice
+
+import (
+ "context"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func existRGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
+ c := m.(*controller.ControllerCfg)
+
+ req := rg.ListRequest{}
+
+ rgList, err := c.CloudAPI().RG().List(ctx, req)
+ if err != nil {
+ return false, err
+ }
+
+ rgId := uint64(d.Get("rg_id").(int))
+
+ return len(rgList.FilterByID(rgId).Data) != 0, nil
+}
diff --git a/internal/service/cloudapi/bservice/utility_bservicce_deleted_list.go b/internal/service/cloudapi/bservice/utility_bservicce_deleted_list.go
new file mode 100644
index 00000000..63522b71
--- /dev/null
+++ b/internal/service/cloudapi/bservice/utility_bservicce_deleted_list.go
@@ -0,0 +1,73 @@
+/*
+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 bservice
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityBasicServiceDeletedListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.ListBasicServices, error) {
+ c := m.(*controller.ControllerCfg)
+ req := bservice.ListDeletedRequest{}
+
+ if accountId, ok := d.GetOk("account_id"); ok {
+ req.AccountID = uint64(accountId.(int))
+ }
+ if rgId, ok := d.GetOk("rg_id"); ok {
+ req.RGID = uint64(rgId.(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("utilityBasicServiceDeletedListCheckPresence")
+ basicServiceDeletedList, err := c.CloudAPI().BService().ListDeleted(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return basicServiceDeletedList, nil
+}
diff --git a/internal/service/cloudapi/bservice/utility_bservice.go b/internal/service/cloudapi/bservice/utility_bservice.go
new file mode 100644
index 00000000..866ce6c2
--- /dev/null
+++ b/internal/service/cloudapi/bservice/utility_bservice.go
@@ -0,0 +1,67 @@
+/*
+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 bservice
+
+import (
+ "context"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityBasicServiceCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.RecordBasicService, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ if (strconv.Itoa(d.Get("service_id").(int))) != "0" {
+ id = uint64(d.Get("service_id").(int))
+ } else {
+ id, _ = strconv.ParseUint(d.Id(), 10, 64)
+ }
+
+ req := bservice.GetRequest{
+ ServiceID: id,
+ }
+
+ log.Debugf("utilityBasicServiceCheckPresence")
+ bservice, err := c.CloudAPI().BService().Get(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return bservice, nil
+}
diff --git a/internal/service/cloudapi/bservice/utility_bservice_group.go b/internal/service/cloudapi/bservice/utility_bservice_group.go
new file mode 100644
index 00000000..47d748e8
--- /dev/null
+++ b/internal/service/cloudapi/bservice/utility_bservice_group.go
@@ -0,0 +1,67 @@
+/*
+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 bservice
+
+import (
+ "context"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityBasicServiceGroupCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.RecordGroup, error) {
+ c := m.(*controller.ControllerCfg)
+
+ req := bservice.GroupGetRequest{
+ ServiceID: uint64(d.Get("service_id").(int)),
+ }
+
+ if (strconv.Itoa(d.Get("compgroup_id").(int))) != "0" {
+ req.CompGroupID = uint64(d.Get("compgroup_id").(int))
+ } else {
+ comGroupID, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.CompGroupID = comGroupID
+ }
+
+ log.Debugf("utilityBasicServiceGroupCheckPresence")
+ bserviceGroup, err := c.CloudAPI().BService().GroupGet(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return bserviceGroup, nil
+}
diff --git a/internal/service/cloudapi/bservice/utility_bservice_list.go b/internal/service/cloudapi/bservice/utility_bservice_list.go
new file mode 100644
index 00000000..8519d276
--- /dev/null
+++ b/internal/service/cloudapi/bservice/utility_bservice_list.go
@@ -0,0 +1,99 @@
+/*
+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 bservice
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityBasicServiceListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.ListBasicServices, error) {
+ c := m.(*controller.ControllerCfg)
+ req := bservice.ListRequest{}
+
+ if accountId, ok := d.GetOk("account_id"); ok {
+ req.AccountID = uint64(accountId.(int))
+ }
+ if rgId, ok := d.GetOk("rg_id"); ok {
+ req.RGID = uint64(rgId.(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))
+ }
+
+ if by_id, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(by_id.(int))
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if rg_name, ok := d.GetOk("rg_name"); ok {
+ req.RGName = rg_name.(string)
+ }
+
+ if tech_status, ok := d.GetOk("tech_status"); ok {
+ req.TechStatus = tech_status.(string)
+ }
+
+ if status, ok := d.GetOk("status"); ok {
+ req.Status = status.(string)
+ }
+
+ if acc_name, ok := d.GetOk("account_name"); ok {
+ req.AccountName = acc_name.(string)
+ }
+ if zoneID, ok := d.GetOk("zone_id"); ok {
+ req.ZoneID = uint64(zoneID.(int))
+ }
+
+ log.Debugf("utilityBasicServiceListCheckPresence")
+ basicServiceList, err := c.CloudAPI().BService().List(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return basicServiceList, nil
+}
diff --git a/internal/service/cloudapi/bservice/utility_bservice_snapshot_list.go b/internal/service/cloudapi/bservice/utility_bservice_snapshot_list.go
new file mode 100644
index 00000000..73c70831
--- /dev/null
+++ b/internal/service/cloudapi/bservice/utility_bservice_snapshot_list.go
@@ -0,0 +1,64 @@
+/*
+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 bservice
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityBasicServiceSnapshotListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.ListInfoSnapshots, error) {
+ c := m.(*controller.ControllerCfg)
+ var id uint64
+
+ if serviceId, ok := d.GetOk("service_id"); ok {
+ id = uint64(serviceId.(int))
+ }
+
+ req := bservice.SnapshotListRequest{
+ ServiceID: id,
+ }
+
+ log.Debugf("utilityBasicServiceSnapshotListCheckPresence")
+ basicServiceSnapshotList, err := c.CloudAPI().BService().SnapshotList(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return basicServiceSnapshotList, nil
+}
diff --git a/internal/service/cloudapi/disks/data_source_disk.go b/internal/service/cloudapi/disks/data_source_disk.go
new file mode 100644
index 00000000..489be98c
--- /dev/null
+++ b/internal/service/cloudapi/disks/data_source_disk.go
@@ -0,0 +1,507 @@
+/*
+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 disks
+
+import (
+ "context"
+
+ // "net/url"
+
+ "github.com/google/uuid"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func dataSourceDiskRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+
+ flattenDisk(d, disk)
+
+ return nil
+}
+
+func dataSourceDiskSchemaMake() map[string]*schema.Schema {
+ rets := map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "discard": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "block_size": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "boot_partition": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of disk partitions",
+ // },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "compute_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the device",
+ },
+ // "disk_path": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk path",
+ // },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ // "guid": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Disk ID on the storage side",
+ // },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "IDs of images using the disk",
+ },
+ "independent": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ // "iqn": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk IQN",
+ // },
+ // "login": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Login to access the disk",
+ // },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Milestones",
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of disk",
+ },
+ "machine_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "machine_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ // "passwd": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Password to access the disk",
+ // },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Pool for disk location",
+ },
+ "present_to": {
+ Type: schema.TypeMap,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "provision": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "purge_attempts": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of deletion attempts",
+ // },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ "replication": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pool_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "self_volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "storage_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ Description: "Replication status",
+ },
+ // "reality_device_number": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Reality device number",
+ // },
+ // "reference_id": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "ID of the reference to the disk",
+ // },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Storage endpoint provider ID to create disk",
+ },
+ "sep_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "cache": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "size_available": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size in GB",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "storage_policy_id": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Storage policy ID",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "to_clean": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ }
+
+ return rets
+}
+
+func DataSourceDisk() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDiskRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDiskSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/disks/data_source_disk_list.go b/internal/service/cloudapi/disks/data_source_disk_list.go
new file mode 100644
index 00000000..9da19c45
--- /dev/null
+++ b/internal/service/cloudapi/disks/data_source_disk_list.go
@@ -0,0 +1,592 @@
+/*
+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 disks
+
+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 dataSourceDiskListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ diskList, err := utilityDiskListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenDiskList(diskList))
+ d.Set("entry_count", diskList.EntryCount)
+
+ return nil
+}
+
+func dataSourceDiskListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "by_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by name",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by account name",
+ },
+ "disk_max_size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by max disk size",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by status",
+ },
+ "shared": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "Find by shared field",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "ID of the account the disks belong to",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "find by sep ID",
+ },
+ "pool_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "find by pool name",
+ },
+ "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",
+ },
+ "storage_policy_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "storage policy ID ",
+ },
+ "compute_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by compute ID",
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by rg ID",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "discard": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "block_size": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "boot_partition": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of disk partitions",
+ // },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "compute_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the device",
+ },
+ // "disk_path": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk path",
+ // },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ // "guid": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Disk ID on the storage side",
+ // },
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "IDs of images using the disk",
+ },
+ "independent": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ // "iqn": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk IQN",
+ // },
+ // "login": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Login to access the disk",
+ // },
+ "machine_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Machine ID",
+ },
+ "machine_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Machine name",
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Milestones",
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of disk",
+ },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ // "passwd": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Password to access the disk",
+ // },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Pool for disk location",
+ },
+ "present_to": {
+ Type: schema.TypeMap,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "provision": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "purge_attempts": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of deletion attempts",
+ // },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ // "reality_device_number": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Reality device number",
+ // },
+ // "reference_id": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "ID of the reference to the disk",
+ // },
+ "replication": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pool_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "self_volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "storage_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ Description: "Replication status",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Storage endpoint provider ID to create disk",
+ },
+ "sep_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "cache": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "size_available": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size in GB",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "storage_policy_id": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Storage policy ID",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "to_clean": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceDiskList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDiskListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDiskListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/disks/data_source_disk_list_unattached.go b/internal/service/cloudapi/disks/data_source_disk_list_unattached.go
new file mode 100644
index 00000000..fad4876f
--- /dev/null
+++ b/internal/service/cloudapi/disks/data_source_disk_list_unattached.go
@@ -0,0 +1,484 @@
+/*
+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 disks
+
+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 dataSourceDiskListUnattachedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ diskListUnattached, err := utilityDiskListUnattachedCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenDiskListUnattached(diskListUnattached))
+ d.Set("entry_count", diskListUnattached.EntryCount)
+
+ return nil
+}
+
+func DataSourceDiskListUnattached() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDiskListUnattachedRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDiskListUnattachedSchemaMake(),
+ }
+}
+
+func dataSourceDiskListUnattachedSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "by_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by ID",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by account name",
+ },
+ "disk_max_size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Find by max disk size",
+ },
+ "status": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Find by status",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "ID of the account the disks belong to",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "find by sep ID",
+ },
+ "pool_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "find by pool name",
+ },
+ "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",
+ },
+ "storage_policy_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "storage policy ID ",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "_meta": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ Description: "Meta parameters",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the account the disks belong to",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "discard": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "block_size": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "boot_partition": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of disk partitions",
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "disk_path": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk path",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk ID on the storage side",
+ },
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "IDs of images using the disk",
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ "iqn": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk IQN",
+ },
+ "login": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Login to access the disk",
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Milestones",
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of disk",
+ },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ "present_to": {
+ Type: schema.TypeMap,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "provision": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "passwd": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Password to access the disk",
+ },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Pool for disk location",
+ },
+ "purge_attempts": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of deletion attempts",
+ },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ "reality_device_number": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Reality device number",
+ },
+ "reference_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the reference to the disk",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Storage endpoint provider ID to create disk",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Computed: true,
+ Description: "shareable",
+ },
+ "cache": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Cache mode for the disk",
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size in GB",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "to_clean": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
diff --git a/internal/service/cloudapi/disks/data_source_disk_replication.go b/internal/service/cloudapi/disks/data_source_disk_replication.go
new file mode 100644
index 00000000..e0bbd28f
--- /dev/null
+++ b/internal/service/cloudapi/disks/data_source_disk_replication.go
@@ -0,0 +1,475 @@
+/*
+Copyright (c) 2019-2024 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 disks
+
+import (
+ "context"
+
+ "github.com/google/uuid"
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func dataSourceDiskReplicationRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("dataSourceDiskReplicationRead: called for disk with ID: %s", d.Id())
+ c := m.(*controller.ControllerCfg)
+
+ req := disks.ReplicationStatusRequest{
+ DiskID: uint64(d.Get("disk_id").(int)),
+ }
+
+ status, err := c.CloudAPI().Disks().ReplicationStatus(ctx, req)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+
+ disk, err := utilityDiskReplicaCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ flattenDiskReplica(d, disk, status)
+
+ log.Debugf("dataSourceDiskReplicationRead: read complete for disk with ID: %s", d.Id())
+
+ return nil
+}
+
+func dataSourceDiskReplicationSchemaMake() map[string]*schema.Schema {
+ rets := map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Id of primary disk",
+ },
+ "replica_disk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Id of secondary disk",
+ },
+ "status_replication": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Status of replication",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "boot_partition": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of disk partitions",
+ // },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "compute_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the device",
+ },
+ // "disk_path": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk path",
+ // },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ // "guid": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Disk ID on the storage side",
+ // },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "IDs of images using the disk",
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ // "iqn": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk IQN",
+ // },
+ // "login": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Login to access the disk",
+ // },
+ // "milestones": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Milestones",
+ // },
+ "disk_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of disk",
+ },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ // "passwd": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Password to access the disk",
+ // },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Pool for disk location",
+ },
+ "present_to": {
+ Type: schema.TypeMap,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ // "purge_attempts": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of deletion attempts",
+ // },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ "replication": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pool_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "self_volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "storage_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ Description: "Replication status",
+ },
+ // "reality_device_number": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Reality device number",
+ // },
+ // "reference_id": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "ID of the reference to the disk",
+ // },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Storage endpoint provider ID to create disk",
+ },
+ "sep_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size in GB",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ }
+
+ return rets
+}
+
+func DataSourceDiskReplication() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDiskReplicationRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDiskReplicationSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/disks/data_source_disk_snapshot.go b/internal/service/cloudapi/disks/data_source_disk_snapshot.go
new file mode 100644
index 00000000..736fa1ee
--- /dev/null
+++ b/internal/service/cloudapi/disks/data_source_disk_snapshot.go
@@ -0,0 +1,126 @@
+/*
+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 disks
+
+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/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceDiskSnapshotRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ var snapshot disks.ItemSnapshot
+ label := d.Get("label").(string)
+ for _, sn := range disk.Snapshots {
+ if label == sn.Label {
+ snapshot = sn
+ break
+ }
+ }
+ if label != snapshot.Label {
+ return diag.Errorf("Snapshot with label \"%v\" not found", label)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+
+ flattenDiskSnapshot(d, snapshot)
+
+ return nil
+}
+
+func DataSourceDiskSnapshot() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDiskSnapshotRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDiskSnapshotSchemaMake(),
+ }
+}
+
+func dataSourceDiskSnapshotSchemaMake() map[string]*schema.Schema {
+ rets := map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Name of the snapshot",
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ }
+ return rets
+}
diff --git a/internal/service/cloudapi/disks/data_source_disk_snapshot_list.go b/internal/service/cloudapi/disks/data_source_disk_snapshot_list.go
new file mode 100644
index 00000000..37993030
--- /dev/null
+++ b/internal/service/cloudapi/disks/data_source_disk_snapshot_list.go
@@ -0,0 +1,119 @@
+/*
+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 disks
+
+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 dataSourceDiskSnapshotListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenDiskSnapshotList(disk.Snapshots))
+ return nil
+}
+
+func DataSourceDiskSnapshotList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceDiskSnapshotListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDiskSnapshotListSchemaMake(),
+ }
+}
+
+func dataSourceDiskSnapshotListSchemaMake() map[string]*schema.Schema {
+ rets := map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "items": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ },
+ },
+ },
+ }
+ return rets
+}
diff --git a/internal/service/cloudapi/disks/data_source_list_deleted.go b/internal/service/cloudapi/disks/data_source_list_deleted.go
new file mode 100644
index 00000000..8f6ffc42
--- /dev/null
+++ b/internal/service/cloudapi/disks/data_source_list_deleted.go
@@ -0,0 +1,562 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+Tim Tkachev,
+
+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 disks
+
+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 dataSourceDiskListDeletedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ diskList, err := utilityDiskListDeletedCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenDiskList(diskList))
+ d.Set("entry_count", diskList.EntryCount)
+
+ return nil
+}
+
+func dataSourceDiskDeletedListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "by_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by disk ID",
+ },
+ "name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by disk name",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Optional: true,
+ Description: "Filter by account name",
+ },
+ "disk_max_size": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by max disk size",
+ },
+ "shared": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "Find shared disks",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "ID of the account the disks belong to",
+ },
+ "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{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "discard": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "block_size": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "boot_partition": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of disk partitions",
+ // },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "compute_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the device",
+ },
+ // "disk_path": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk path",
+ // },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ // "guid": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Disk ID on the storage side",
+ // },
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "IDs of images using the disk",
+ },
+ "independent": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ // "iqn": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk IQN",
+ // },
+ // "login": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Login to access the disk",
+ // },
+ "machine_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Machine ID",
+ },
+ "machine_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Machine name",
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Milestones",
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of disk",
+ },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ // "passwd": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Password to access the disk",
+ // },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Pool for disk location",
+ },
+ "present_to": {
+ Type: schema.TypeMap,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "provision": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "purge_attempts": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of deletion attempts",
+ // },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ "replication": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pool_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "self_volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "storage_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ Description: "Replication status",
+ },
+ // "reality_device_number": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Reality device number",
+ // },
+ // "reference_id": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "ID of the reference to the disk",
+ // },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Storage endpoint provider ID to create disk",
+ },
+ "sep_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "cache": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "size_available": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size in GB",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "storage_policy_id": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Storage policy ID",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "to_clean": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceDiskListDeleted() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+ ReadContext: dataSourceDiskListDeletedRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceDiskDeletedListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/disks/flattens.go b/internal/service/cloudapi/disks/flattens.go
new file mode 100644
index 00000000..20764d0a
--- /dev/null
+++ b/internal/service/cloudapi/disks/flattens.go
@@ -0,0 +1,313 @@
+package disks
+
+import (
+ "encoding/json"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/flattens"
+)
+
+func flattenDiskSnapshot(d *schema.ResourceData, snapshot disks.ItemSnapshot) {
+ d.Set("timestamp", snapshot.TimeStamp)
+ d.Set("guid", snapshot.GUID)
+ d.Set("res_id", snapshot.ResID)
+ d.Set("snap_set_guid", snapshot.SnapSetGUID)
+ d.Set("snap_set_time", snapshot.SnapSetTime)
+}
+
+func flattenDiskListUnattached(ul *disks.ListDisksUnattached) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(ul.Data))
+ for _, unattachedDisk := range ul.Data {
+ unattachedDiskAcl, _ := json.Marshal(unattachedDisk.ACL)
+ tmp := map[string]interface{}{
+ "_meta": flattens.FlattenMeta(unattachedDisk.Meta),
+ "account_id": unattachedDisk.AccountID,
+ "account_name": unattachedDisk.AccountName,
+ "acl": string(unattachedDiskAcl),
+ "discard": unattachedDisk.Discard,
+ "block_size": unattachedDisk.BlockSize,
+ "boot_partition": unattachedDisk.BootPartition,
+ "created_time": unattachedDisk.CreatedTime,
+ "deleted_time": unattachedDisk.DeletedTime,
+ "desc": unattachedDisk.Description,
+ "destruction_time": unattachedDisk.DestructionTime,
+ "disk_path": unattachedDisk.DiskPath,
+ "gid": unattachedDisk.GID,
+ "guid": unattachedDisk.GUID,
+ "disk_id": unattachedDisk.ID,
+ "image_id": unattachedDisk.ImageID,
+ "images": unattachedDisk.Images,
+ "iotune": flattenIOTune(unattachedDisk.IOTune),
+ "iqn": unattachedDisk.IQN,
+ "login": unattachedDisk.Login,
+ "milestones": unattachedDisk.Milestones,
+ "disk_name": unattachedDisk.Name,
+ "order": unattachedDisk.Order,
+ "params": unattachedDisk.Params,
+ "parent_id": unattachedDisk.ParentID,
+ "passwd": unattachedDisk.Password,
+ "pci_slot": unattachedDisk.PCISlot,
+ "pool": unattachedDisk.Pool,
+ "present_to": unattachedDisk.PresentTo,
+ "provision": unattachedDisk.Provision,
+ "purge_attempts": unattachedDisk.PurgeAttempts,
+ "purge_time": unattachedDisk.PurgeTime,
+ "reality_device_number": unattachedDisk.RealityDeviceNumber,
+ "reference_id": unattachedDisk.ReferenceID,
+ "res_id": unattachedDisk.ResID,
+ "res_name": unattachedDisk.ResName,
+ "role": unattachedDisk.Role,
+ "sep_id": unattachedDisk.SEPID,
+ "shareable": unattachedDisk.Shareable,
+ "cache": unattachedDisk.Cache,
+ "size_max": unattachedDisk.SizeMax,
+ "size_used": unattachedDisk.SizeUsed,
+ "snapshots": flattenDiskSnapshotList(unattachedDisk.Snapshots),
+ "status": unattachedDisk.Status,
+ "to_clean": unattachedDisk.ToClean,
+ "tech_status": unattachedDisk.TechStatus,
+ "vmid": unattachedDisk.VMID,
+ }
+ res = append(res, tmp)
+ }
+ return res
+}
+
+func flattenDisk(d *schema.ResourceData, disk *disks.RecordDisk) {
+ diskAcl, _ := json.Marshal(disk.ACL)
+ d.Set("account_id", disk.AccountID)
+ d.Set("account_name", disk.AccountName)
+ d.Set("acl", string(diskAcl))
+ d.Set("discard", disk.Discard)
+ d.Set("block_size", disk.BlockSize)
+ // d.Set("boot_partition", disk.BootPartition)
+ d.Set("computes", flattenDiskComputes(disk.Computes))
+ d.Set("created_by", disk.CreatedBy)
+ d.Set("created_time", disk.CreatedTime)
+ d.Set("deleted_by", disk.DeletedBy)
+ d.Set("deleted_time", disk.DeletedTime)
+ d.Set("desc", disk.Description)
+ d.Set("destruction_time", disk.DestructionTime)
+ d.Set("devicename", disk.DeviceName)
+ // d.Set("disk_path", disk.DiskPath)
+ d.Set("gid", disk.GID)
+ // d.Set("guid", disk.GUID)
+ d.Set("disk_id", disk.ID)
+ d.Set("image_id", disk.ImageID)
+ d.Set("images", disk.Images)
+ d.Set("iotune", flattenIOTune(disk.IOTune))
+ // d.Set("iqn", disk.IQN)
+ // d.Set("login", disk.Login)
+ d.Set("independent", disk.Independent)
+ d.Set("machine_id", disk.MachineID)
+ d.Set("machine_name", disk.MachineName)
+ d.Set("disk_name", disk.Name)
+ d.Set("order", disk.Order)
+ d.Set("params", disk.Params)
+ d.Set("parent_id", disk.ParentID)
+ // d.Set("passwd", disk.Passwd)
+ d.Set("pci_slot", disk.PCISlot)
+ d.Set("pool", disk.Pool)
+ d.Set("present_to", disk.PresentTo)
+ d.Set("provision", disk.Provision)
+ // d.Set("purge_attempts", disk.PurgeAttempts)
+ d.Set("purge_time", disk.PurgeTime)
+ d.Set("replication", flattenDiskReplication(disk.Replication))
+ // d.Set("reality_device_number", disk.RealityDeviceNumber)
+ // d.Set("reference_id", disk.ReferenceID)
+ d.Set("res_id", disk.ResID)
+ d.Set("res_name", disk.ResName)
+ d.Set("role", disk.Role)
+ d.Set("sep_id", disk.SepID)
+ d.Set("sep_type", disk.SepType)
+ d.Set("size_max", disk.SizeMax)
+ d.Set("size_used", disk.SizeUsed)
+ d.Set("shareable", disk.Shareable)
+ d.Set("cache", disk.Cache)
+ d.Set("snapshots", flattenDiskSnapshotList(disk.Snapshots))
+ d.Set("status", disk.Status)
+ d.Set("storage_policy_id", disk.StoragePolicyID)
+ d.Set("tech_status", disk.TechStatus)
+ d.Set("vmid", disk.VMID)
+ d.Set("updated_by", disk.UpdatedBy)
+ d.Set("updated_time", disk.UpdatedTime)
+ d.Set("to_clean", disk.ToClean)
+}
+
+func flattenDiskReplication(rep disks.ItemReplication) []map[string]interface{} {
+ res := []map[string]interface{}{
+ {
+ "disk_id": rep.DiskID,
+ "pool_id": rep.PoolID,
+ "role": rep.Role,
+ "self_volume_id": rep.SelfVolumeID,
+ "storage_id": rep.StorageID,
+ "volume_id": rep.VolumeID,
+ },
+ }
+ return res
+}
+
+func flattenDiskReplica(d *schema.ResourceData, disk *disks.RecordDisk, statusReplication string) {
+ diskAcl, _ := json.Marshal(disk.ACL)
+ d.Set("account_id", disk.AccountID)
+ d.Set("account_name", disk.AccountName)
+ d.Set("acl", string(diskAcl))
+ // d.Set("boot_partition", disk.BootPartition)
+ d.Set("computes", flattenDiskComputes(disk.Computes))
+ d.Set("created_time", disk.CreatedTime)
+ d.Set("deleted_time", disk.DeletedTime)
+ d.Set("desc", disk.Description)
+ d.Set("destruction_time", disk.DestructionTime)
+ d.Set("devicename", disk.DeviceName)
+ // d.Set("disk_path", disk.DiskPath)
+ d.Set("gid", disk.GID)
+ // d.Set("guid", disk.GUID)
+ d.Set("replica_disk_id", disk.ID)
+ d.Set("image_id", disk.ImageID)
+ d.Set("images", disk.Images)
+ d.Set("iotune", flattenIOTune(disk.IOTune))
+ // d.Set("iqn", disk.IQN)
+ // d.Set("login", disk.Login)
+ // d.Set("milestones", disk.Milestones)
+ d.Set("disk_name", disk.Name)
+ d.Set("order", disk.Order)
+ d.Set("params", disk.Params)
+ d.Set("parent_id", disk.ParentID)
+ // d.Set("passwd", disk.Passwd)
+ d.Set("pci_slot", disk.PCISlot)
+ d.Set("pool", disk.Pool)
+ d.Set("present_to", disk.PresentTo)
+ // d.Set("purge_attempts", disk.PurgeAttempts)
+ d.Set("purge_time", disk.PurgeTime)
+ d.Set("replication", flattenDiskReplication(disk.Replication))
+ // d.Set("reality_device_number", disk.RealityDeviceNumber)
+ // d.Set("reference_id", disk.ReferenceID)
+ d.Set("res_id", disk.ResID)
+ d.Set("res_name", disk.ResName)
+ d.Set("role", disk.Role)
+ d.Set("sep_id", disk.SepID)
+ d.Set("sep_type", disk.SepType)
+ d.Set("size_max", disk.SizeMax)
+ d.Set("size_used", disk.SizeUsed)
+ d.Set("shareable", disk.Shareable)
+ d.Set("cache", disk.Cache)
+ d.Set("snapshots", flattenDiskSnapshotList(disk.Snapshots))
+ d.Set("status", disk.Status)
+ d.Set("status_replication", statusReplication)
+ d.Set("tech_status", disk.TechStatus)
+ d.Set("vmid", disk.VMID)
+}
+
+func flattenDiskSnapshotList(sl disks.ListSnapshots) []interface{} {
+ res := make([]interface{}, 0, len(sl))
+ for _, snapshot := range sl {
+ temp := map[string]interface{}{
+ "guid": snapshot.GUID,
+ "label": snapshot.Label,
+ "res_id": snapshot.ResID,
+ "snap_set_guid": snapshot.SnapSetGUID,
+ "snap_set_time": snapshot.SnapSetTime,
+ "timestamp": snapshot.TimeStamp,
+ }
+ res = append(res, temp)
+ }
+
+ return res
+}
+
+func flattenDiskList(dl *disks.ListDisks) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0, len(dl.Data))
+ for _, disk := range dl.Data {
+ diskAcl, _ := json.Marshal(disk.ACL)
+ temp := map[string]interface{}{
+ "account_id": disk.AccountID,
+ "account_name": disk.AccountName,
+ "acl": string(diskAcl),
+ "discard": disk.Discard,
+ "block_size": disk.BlockSize,
+ "computes": flattenDiskComputes(disk.Computes),
+ "created_by": disk.CreatedBy,
+ "created_time": disk.CreatedTime,
+ "deleted_by": disk.DeletedBy,
+ "deleted_time": disk.DeletedTime,
+ "desc": disk.Description,
+ "destruction_time": disk.DestructionTime,
+ "devicename": disk.DeviceName,
+ "gid": disk.GID,
+ "disk_id": disk.ID,
+ "image_id": disk.ImageID,
+ "images": disk.Images,
+ "independent": disk.Independent,
+ "iotune": flattenIOTune(disk.IOTune),
+ "machine_id": disk.MachineID,
+ "machine_name": disk.MachineName,
+ "milestones": disk.Milestones,
+ "disk_name": disk.Name,
+ "order": disk.Order,
+ "params": disk.Params,
+ "parent_id": disk.ParentID,
+ "pci_slot": disk.PCISlot,
+ "pool": disk.Pool,
+ "present_to": disk.PresentTo,
+ "provision": disk.Provision,
+ "purge_time": disk.PurgeTime,
+ "replication": flattenDiskReplication(disk.Replication),
+ "res_id": disk.ResID,
+ "res_name": disk.ResName,
+ "role": disk.Role,
+ "sep_id": disk.SepID,
+ "sep_type": disk.SepType,
+ "shareable": disk.Shareable,
+ "cache": disk.Cache,
+ "size_available": disk.SizeAvailable,
+ "size_max": disk.SizeMax,
+ "size_used": disk.SizeUsed,
+ "snapshots": flattenDiskSnapshotList(disk.Snapshots),
+ "status": disk.Status,
+ "storage_policy_id": disk.StoragePolicyID,
+ "tech_status": disk.TechStatus,
+ "vmid": disk.VMID,
+ "updated_by": disk.UpdatedBy,
+ "updated_time": disk.UpdatedTime,
+ "to_clean": disk.ToClean,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
+
+func flattenIOTune(iot disks.IOTune) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ temp := map[string]interface{}{
+ "read_bytes_sec": iot.ReadBytesSec,
+ "read_bytes_sec_max": iot.ReadBytesSecMax,
+ "read_iops_sec": iot.ReadIOPSSec,
+ "read_iops_sec_max": iot.ReadIOPSSecMax,
+ "size_iops_sec": iot.SizeIOPSSec,
+ "total_bytes_sec": iot.TotalBytesSec,
+ "total_bytes_sec_max": iot.TotalBytesSecMax,
+ "total_iops_sec": iot.TotalIOPSSec,
+ "total_iops_sec_max": iot.TotalIOPSSecMax,
+ "write_bytes_sec": iot.WriteBytesSec,
+ "write_bytes_sec_max": iot.WriteBytesSecMax,
+ "write_iops_sec": iot.WriteIOPSSec,
+ "write_iops_sec_max": iot.WriteIOPSSecMax,
+ }
+
+ res = append(res, temp)
+ return res
+}
+
+func flattenDiskComputes(computes map[string]string) []map[string]interface{} {
+ res := make([]map[string]interface{}, 0)
+ for computeKey, computeVal := range computes {
+ temp := map[string]interface{}{
+ "compute_id": computeKey,
+ "compute_name": computeVal,
+ }
+ res = append(res, temp)
+ }
+ return res
+}
diff --git a/internal/service/cloudapi/disks/old_schemas.go b/internal/service/cloudapi/disks/old_schemas.go
new file mode 100644
index 00000000..2b292f3d
--- /dev/null
+++ b/internal/service/cloudapi/disks/old_schemas.go
@@ -0,0 +1,430 @@
+package disks
+
+import (
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
+)
+
+func resourceDiskV1() *schema.Resource {
+ return &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ //ForceNew: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Name of disk",
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Size in GB",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Required: true,
+ //ForceNew: true,
+ Description: "ID of the grid (platform)",
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "Pool for disk location",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Storage endpoint provider ID to create disk",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "type": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ ValidateFunc: validation.StringInSlice([]string{"D", "B", "T"}, false),
+ Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
+ },
+ "detach": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Detaching the disk from compute",
+ },
+ "permanently": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Whether to completely delete the disk, works only with non attached disks",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Computed: true,
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Optional: true,
+ MaxItems: 1,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ "present_to": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk ID. Duplicates the value of the ID parameter",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "boot_partition": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of disk partitions",
+ // },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "compute_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the device",
+ },
+ // "disk_path": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk path",
+ // },
+ // "guid": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Disk ID on the storage side",
+ // },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ Description: "IDs of images using the disk",
+ },
+ // "iqn": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk IQN",
+ // },
+ // "login": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Login to access the disk",
+ // },
+ // "milestones": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Milestones",
+ // },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ // "passwd": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Password to access the disk",
+ // },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ // "purge_attempts": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of deletion attempts",
+ // },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ "replication": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pool_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "self_volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "storage_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ Description: "Replication status",
+ },
+ // "reality_device_number": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Reality device number",
+ // },
+ // "reference_id": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "ID of the reference to the disk",
+ // },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ },
+ }
+}
+
+func resourceDiskV2() *schema.Resource {
+ s := resourceDiskSchemaMake()
+ s["blk_discard"] = &schema.Schema{
+ Type: schema.TypeBool,
+ Computed: true,
+ }
+ return &schema.Resource{Schema: s}
+}
diff --git a/internal/service/cloudapi/disks/resource_check_input_values.go b/internal/service/cloudapi/disks/resource_check_input_values.go
new file mode 100644
index 00000000..a06024c2
--- /dev/null
+++ b/internal/service/cloudapi/disks/resource_check_input_values.go
@@ -0,0 +1,61 @@
+package disks
+
+import (
+ "context"
+ "fmt"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/locations"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func existAccountID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
+ c := m.(*controller.ControllerCfg)
+ accountId := uint64(d.Get("account_id").(int))
+ req := account.ListRequest{}
+
+ accountList, err := c.CloudAPI().Account().List(ctx, req)
+ if err != nil {
+ return false, err
+ }
+
+ return len(accountList.FilterByID(accountId).Data) != 0, nil
+}
+
+func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
+ c := m.(*controller.ControllerCfg)
+ gid := uint64(d.Get("gid").(int))
+ req := locations.ListRequest{}
+
+ locationList, err := c.CloudAPI().Locations().List(ctx, req)
+ if err != nil {
+ return false, err
+ }
+
+ return len(locationList.FilterByGID(gid).Data) != 0, nil
+}
+
+func existDiskID(ctx context.Context, diskId uint64, m interface{}) error {
+ c := m.(*controller.ControllerCfg)
+
+ req := disks.ListRequest{
+ ByID: diskId,
+ }
+
+ diskList, err := c.CloudAPI().Disks().List(ctx, req)
+ if err != nil {
+ return err
+ }
+
+ if len(diskList.Data) == 0 {
+ return fmt.Errorf("resourceDiskReplication: can't create or update Disk replication because DiskID %d is not allowed or does not exist", diskId)
+ }
+
+ if diskList.Data[0].SepType != "TATLIN" {
+ return fmt.Errorf("resourceDiskReplication: can't create or update Disk replication because DiskID %d is not TATLIN SEP Type", diskId)
+ }
+
+ return nil
+}
diff --git a/internal/service/cloudapi/disks/resource_disk.go b/internal/service/cloudapi/disks/resource_disk.go
new file mode 100644
index 00000000..bb85ee67
--- /dev/null
+++ b/internal/service/cloudapi/disks/resource_disk.go
@@ -0,0 +1,857 @@
+/*
+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 disks
+
+import (
+ "context"
+ "fmt"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "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"
+)
+
+func resourceDiskCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ c := m.(*controller.ControllerCfg)
+ req := disks.CreateRequest{}
+
+ haveAccount, err := existAccountID(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ if !haveAccount {
+ return diag.Errorf("resourceDiskCreate: can't create Disk because AccountID %d is not allowed or does not exist", d.Get("account_id").(int))
+ }
+
+ req.AccountID = uint64(d.Get("account_id").(int))
+ req.Name = d.Get("disk_name").(string)
+ req.StoragePolicyID = uint64(d.Get("storage_policy_id").(int))
+ req.Size = uint64(d.Get("size_max").(int))
+
+ if sepId, ok := d.GetOk("sep_id"); ok {
+ req.SEPID = uint64(sepId.(int))
+ }
+
+ if poolName, ok := d.GetOk("pool"); ok {
+ req.Pool = poolName.(string)
+ }
+
+ argVal, argSet := d.GetOk("desc")
+ if argSet {
+ req.Description = argVal.(string)
+ }
+
+ diskId, err := c.CloudAPI().Disks().Create(ctx, req)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ d.SetId(strconv.FormatUint(diskId, 10))
+
+ if iotuneRaw, ok := d.GetOk("iotune"); ok {
+ iot := iotuneRaw.([]interface{})[0]
+ iotune := iot.(map[string]interface{})
+ req := disks.LimitIORequest{
+ DiskID: diskId,
+ IOPS: uint64(iotune["total_iops_sec"].(int)),
+ ReadBytesSec: uint64(iotune["read_bytes_sec"].(int)),
+ ReadBytesSecMax: uint64(iotune["read_bytes_sec_max"].(int)),
+ ReadIOPSSec: uint64(iotune["read_iops_sec"].(int)),
+ ReadIOPSSecMax: uint64(iotune["read_iops_sec_max"].(int)),
+ SizeIOPSSec: uint64(iotune["size_iops_sec"].(int)),
+ TotalBytesSec: uint64(iotune["total_bytes_sec"].(int)),
+ TotalBytesSecMax: uint64(iotune["total_bytes_sec_max"].(int)),
+ TotalIOPSSecMax: uint64(iotune["total_iops_sec_max"].(int)),
+ TotalIOPSSec: uint64(iotune["total_iops_sec"].(int)),
+ WriteBytesSec: uint64(iotune["write_bytes_sec"].(int)),
+ WriteBytesSecMax: uint64(iotune["write_bytes_sec_max"].(int)),
+ WriteIOPSSec: uint64(iotune["write_iops_sec"].(int)),
+ WriteIOPSSecMax: uint64(iotune["write_iops_sec_max"].(int)),
+ }
+
+ _, err := c.CloudAPI().Disks().LimitIO(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if shareable := d.Get("shareable"); shareable.(bool) == true {
+ req := disks.ShareRequest{
+ DiskID: diskId,
+ }
+
+ _, err := c.CloudAPI().Disks().Share(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ return resourceDiskRead(ctx, d, m)
+}
+
+func resourceDiskRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ // c := m.(*controller.ControllerCfg)
+ warnings := dc.Warnings{}
+
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ hasChangeState := false
+
+ switch disk.Status {
+ case status.Destroyed, status.Purged:
+ d.Set("disk_id", 0)
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been destroyed")
+ // return resourceDiskCreate(ctx, d, m)
+ case status.Deleted:
+ // hasChangeState = true
+ // req := disks.RestoreRequest{
+ // 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)
+ // }
+ case status.Assigned:
+ case status.Modeled:
+ return diag.Errorf("The disk is in status: %s, please, contact support for more information", disk.Status)
+ case status.Creating:
+ case status.Created:
+ case status.Allocated:
+ case status.Unallocated:
+ }
+
+ if hasChangeState {
+ disk, err = utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ }
+
+ flattenDisk(d, disk)
+
+ return warnings.Get()
+}
+
+func resourceDiskUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ c := m.(*controller.ControllerCfg)
+ warnings := dc.Warnings{}
+
+ haveAccount, err := existAccountID(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ if !haveAccount {
+ return diag.Errorf("resourceDiskUpdate: can't update Disk because AccountID %d is not allowed or does not exist", d.Get("account_id").(int))
+ }
+
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ hasChangeState := false
+
+ switch disk.Status {
+ case status.Destroyed, status.Purged:
+ d.Set("disk_id", 0)
+ d.SetId("")
+ return diag.Errorf("The resource cannot be updated because it has been destroyed")
+ // return resourceDiskCreate(ctx, d, m)
+ case status.Deleted:
+ hasChangeState = true
+ req := disks.RestoreRequest{
+ DiskID: disk.ID,
+ }
+
+ _, err := c.CloudAPI().Disks().Restore(ctx, req)
+ if err != nil {
+ warnings.Add(err)
+ }
+ case status.Assigned:
+ case status.Modeled:
+ return diag.Errorf("The disk is in status: %s, please, contact support for more information", disk.Status)
+ case status.Creating:
+ case status.Created:
+ case status.Allocated:
+ case status.Unallocated:
+ }
+
+ if hasChangeState {
+ disk, err = utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("storage_policy_id") {
+ req := disks.ChangeDiskStoragePolicyRequest{
+ DiskID: disk.ID,
+ StoragePolicyID: uint64(d.Get("storage_policy_id").(int)),
+ }
+
+ _, err := c.CloudAPI().Disks().ChangeDiskStoragePolicy(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("size_max") {
+ oldSize, newSize := d.GetChange("size_max")
+ if oldSize.(int) < newSize.(int) {
+ log.Debugf("resourceDiskUpdate: resizing disk ID %s - %d GB -> %d GB",
+ d.Id(), oldSize.(int), newSize.(int))
+ req := disks.ResizeRequest{
+ DiskID: disk.ID,
+ Size: uint64(newSize.(int)),
+ }
+
+ _, err := c.CloudAPI().Disks().Resize2(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ d.Set("size_max", newSize)
+ } else if oldSize.(int) > newSize.(int) {
+ return diag.FromErr(fmt.Errorf("resourceDiskUpdate: Disk ID %s - reducing disk size is not allowed", d.Id()))
+ }
+ }
+
+ if d.HasChange("disk_name") {
+ req := disks.RenameRequest{
+ DiskID: disk.ID,
+ Name: d.Get("disk_name").(string),
+ }
+
+ _, err := c.CloudAPI().Disks().Rename(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("iotune") {
+ iot := d.Get("iotune").([]interface{})[0]
+ iotune := iot.(map[string]interface{})
+ req := disks.LimitIORequest{
+ DiskID: disk.ID,
+ IOPS: uint64(iotune["total_iops_sec"].(int)),
+ ReadBytesSec: uint64(iotune["read_bytes_sec"].(int)),
+ ReadBytesSecMax: uint64(iotune["read_bytes_sec_max"].(int)),
+ ReadIOPSSec: uint64(iotune["read_iops_sec"].(int)),
+ ReadIOPSSecMax: uint64(iotune["read_iops_sec_max"].(int)),
+ SizeIOPSSec: uint64(iotune["size_iops_sec"].(int)),
+ TotalBytesSec: uint64(iotune["total_bytes_sec"].(int)),
+ TotalBytesSecMax: uint64(iotune["total_bytes_sec_max"].(int)),
+ TotalIOPSSecMax: uint64(iotune["total_iops_sec_max"].(int)),
+ TotalIOPSSec: uint64(iotune["total_iops_sec"].(int)),
+ WriteBytesSec: uint64(iotune["write_bytes_sec"].(int)),
+ WriteBytesSecMax: uint64(iotune["write_bytes_sec_max"].(int)),
+ WriteIOPSSec: uint64(iotune["write_iops_sec"].(int)),
+ WriteIOPSSecMax: uint64(iotune["write_iops_sec_max"].(int)),
+ }
+
+ _, err := c.CloudAPI().Disks().LimitIO(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("shareable") {
+ oldShare, newShare := d.GetChange("shareable")
+ if oldShare.(bool) == false && newShare.(bool) == true {
+ req := disks.ShareRequest{DiskID: disk.ID}
+
+ _, err := c.CloudAPI().Disks().Share(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ if oldShare.(bool) == true && newShare.(bool) == false {
+ req := disks.UnshareRequest{DiskID: disk.ID}
+
+ _, err := c.CloudAPI().Disks().Unshare(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ }
+
+ return resourceDiskRead(ctx, d, m)
+}
+
+func resourceDiskDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+ if disk.Status == status.Destroyed || disk.Status == status.Purged {
+ return nil
+ }
+
+ req := disks.DeleteRequest{
+ DiskID: disk.ID,
+ Detach: d.Get("detach").(bool),
+ Permanently: d.Get("permanently").(bool),
+ }
+
+ c := m.(*controller.ControllerCfg)
+ _, err = c.CloudAPI().Disks().Delete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ d.SetId("")
+
+ return nil
+}
+
+func resourceDiskSchemaMake() map[string]*schema.Schema {
+ rets := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ //ForceNew: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "storage_policy_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "ID storage policy under which the disk will be created",
+ },
+ "created_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "deleted_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Name of disk",
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Size in GB",
+ },
+ "pool": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "Pool for disk location",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Storage endpoint provider ID to create disk",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Optional: true,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "detach": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Detaching the disk from compute",
+ },
+ "permanently": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Whether to completely delete the disk, works only with non attached disks",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Computed: true,
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Optional: true,
+ MaxItems: 1,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ "present_to": {
+ Type: schema.TypeMap,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk ID. Duplicates the value of the ID parameter",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "cache": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "boot_partition": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of disk partitions",
+ // },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "compute_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the device",
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ // "disk_path": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk path",
+ // },
+ // "guid": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Disk ID on the storage side",
+ // },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "IDs of images using the disk",
+ },
+ "independent": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ // "iqn": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk IQN",
+ // },
+ // "login": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Login to access the disk",
+ // },
+ // "milestones": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Milestones",
+ // },
+ "machine_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "machine_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ // "passwd": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Password to access the disk",
+ // },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ // "purge_attempts": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of deletion attempts",
+ // },
+ "provision": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ "replication": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pool_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "self_volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "storage_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ Description: "Replication status",
+ },
+ // "reality_device_number": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Reality device number",
+ // },
+ // "reference_id": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "ID of the reference to the disk",
+ // },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ "updated_by": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "updated_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "to_clean": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "discard": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Discard mode of the disk",
+ },
+ "block_size": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ }
+
+ return rets
+}
+
+func ResourceDisk() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 3,
+
+ CreateContext: resourceDiskCreate,
+ ReadContext: resourceDiskRead,
+ UpdateContext: resourceDiskUpdate,
+ DeleteContext: resourceDiskDelete,
+
+ Importer: &schema.ResourceImporter{
+ StateContext: schema.ImportStatePassthroughContext,
+ },
+
+ Timeouts: &schema.ResourceTimeout{
+ Create: &constants.Timeout600s,
+ Read: &constants.Timeout300s,
+ Update: &constants.Timeout300s,
+ Delete: &constants.Timeout300s,
+ Default: &constants.Timeout300s,
+ },
+
+ Schema: resourceDiskSchemaMake(),
+ StateUpgraders: []schema.StateUpgrader{
+ {
+ Type: resourceDiskV1().CoreConfigSchema().ImpliedType(),
+ Upgrade: resourceDiskUpgradeV1,
+ Version: 1,
+ },
+ {
+ Type: resourceDiskV2().CoreConfigSchema().ImpliedType(),
+ Upgrade: resourceDiskUpgradeV2,
+ Version: 2,
+ },
+ },
+ }
+}
diff --git a/internal/service/cloudapi/disks/resource_disk_replication.go b/internal/service/cloudapi/disks/resource_disk_replication.go
new file mode 100644
index 00000000..4bdb230a
--- /dev/null
+++ b/internal/service/cloudapi/disks/resource_disk_replication.go
@@ -0,0 +1,631 @@
+/*
+Copyright (c) 2019-2024 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 disks
+
+import (
+ "context"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "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"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func resourceDiskReplicationCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ diskId := uint64(d.Get("disk_id").(int))
+
+ log.Debugf("resourceDiskReplicationCreate: called for disk with ID: %d", diskId)
+
+ c := m.(*controller.ControllerCfg)
+
+ err := existDiskID(ctx, diskId, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ reqCreate := disks.ReplicateRequest{
+ DiskID: diskId,
+ Name: d.Get("disk_name").(string),
+ SepID: uint64(d.Get("sep_id").(int)),
+ PoolName: d.Get("pool_name").(string),
+ }
+
+ diskReplicaId, err := c.CloudAPI().Disks().Replicate(ctx, reqCreate)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ d.SetId(strconv.FormatUint(diskReplicaId, 10))
+ d.Set("replica_disk_id", diskReplicaId)
+
+ log.Debugf("resourceDiskReplicationCreate: create replica complete for disk with ID: %d", diskId)
+
+ warnings := dc.Warnings{}
+
+ if start, ok := d.GetOk("start"); ok && !start.(bool) {
+ log.Debugf("resourceDiskReplicationCreate: replication between disk with ID: %d and replica with ID: %d, try to stop", diskId, diskReplicaId)
+ reqStop := disks.ReplicationStopRequest{
+ DiskID: diskId,
+ }
+ _, err = c.CloudAPI().Disks().ReplicationStop(ctx, reqStop)
+ if err != nil {
+ warnings.Add(err)
+ }
+ log.Debugf("resourceDiskReplicationCreate: replication between disk with ID: %d and replica with ID: %d, stoped", diskId, diskReplicaId)
+ }
+ return append(resourceDiskReplicationRead(ctx, d, m), warnings.Get()...)
+}
+
+func resourceDiskReplicationRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ log.Debugf("resourceDiskReplicationRead: called for disk with ID: %s", d.Id())
+ c := m.(*controller.ControllerCfg)
+
+ req := disks.ReplicationStatusRequest{
+ DiskID: uint64(d.Get("disk_id").(int)),
+ }
+
+ status, err := c.CloudAPI().Disks().ReplicationStatus(ctx, req)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ diskReplica, err := utilityDiskReplicaCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ flattenDiskReplica(d, diskReplica, status)
+
+ log.Debugf("resourceDiskReplicationRead: read complete for disk with ID: %s", d.Id())
+ return nil
+}
+
+func resourceDiskReplicationUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ diskId := uint64(d.Get("disk_id").(int))
+ log.Debugf("resourceDiskReplicationUpdate: called for disk with ID: %d", diskId)
+
+ err := existDiskID(ctx, diskId, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ if d.HasChange("start") {
+ if err := utilityDiskReplicationUpdateStartStop(ctx, d, m); err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("pause") {
+ if err := utilityDiskReplicationUpdatePause(ctx, d, m); err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ if d.HasChange("reverse") {
+ if err := utilityDiskReplicationUpdateReverse(ctx, d, m); err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ log.Debugf("resourceDiskReplicationUpdate: read complete for disk with ID: %d", diskId)
+ return resourceDiskReplicationRead(ctx, d, m)
+}
+
+func resourceDiskReplicationDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ diskId := uint64(d.Get("disk_id").(int))
+ log.Debugf("resourceDiskReplicationDelete: called for disk with ID: %d", diskId)
+
+ disk, err := utilityDiskReplicaCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ c := m.(*controller.ControllerCfg)
+
+ if d.Get("start").(bool) {
+ reqStop := disks.ReplicationStopRequest{
+ DiskID: uint64(d.Get("disk_id").(int)),
+ }
+
+ log.Debugf("resourceDiskReplicationDelete: stop replication for disk with ID: %d", diskId)
+ _, err = c.CloudAPI().Disks().ReplicationStop(ctx, reqStop)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ log.Debugf("resourceDiskReplicationDelete: stop replication for disk with ID: %d, complete", diskId)
+ }
+
+ reqDelete := disks.DeleteRequest{
+ DiskID: disk.ID,
+ Detach: d.Get("detach").(bool),
+ Permanently: d.Get("permanently").(bool),
+ }
+
+ log.Debugf("resourceDiskReplicationDelete: delete disk replica for disk with ID: %d", diskId)
+ _, err = c.CloudAPI().Disks().Delete(ctx, reqDelete)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ log.Debugf("resourceDiskReplicationDelete: delete disk replica for disk with ID: %d, complete", diskId)
+
+ d.SetId("")
+
+ return nil
+}
+
+func resourceDiskReplicationSchemaMake() map[string]*schema.Schema {
+ rets := map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Id of primary disk",
+ },
+ "disk_name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Name of disk replica",
+ },
+ "sep_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Storage endpoint provider ID to create disk replica",
+ },
+ "pool_name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Pool for disk location",
+ },
+ "pause": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Description: "Resume replication",
+ },
+ "reverse": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Reverse replication",
+ },
+ "start": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: true,
+ Description: "Start/Stop replication",
+ },
+ "detach": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Detach disk from machine first",
+ },
+ "permanently": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Delete disk permanently",
+ },
+ "replica_disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Id of replica disk",
+ },
+ "status_replication": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Status of replication",
+ },
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The name of the subscriber '(account') to whom this disk belongs",
+ },
+ "acl": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ // "boot_partition": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of disk partitions",
+ // },
+ "computes": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "compute_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "compute_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "created_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Created time",
+ },
+ "deleted_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Deleted time",
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Description of disk",
+ },
+ "destruction_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of final deletion",
+ },
+ "devicename": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the device",
+ },
+ // "disk_path": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk path",
+ // },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the grid (platform)",
+ },
+ // "guid": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Disk ID on the storage side",
+ // },
+ "image_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Image ID",
+ },
+ "images": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ Description: "IDs of images using the disk",
+ },
+ "iotune": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "read_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to read per second",
+ },
+ "read_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to read",
+ },
+ "read_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of io read operations per second",
+ },
+ "read_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of io read operations",
+ },
+ "size_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size of io operations",
+ },
+ "total_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total size bytes per second",
+ },
+ "total_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total size of bytes per second",
+ },
+ "total_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Total number of io operations per second",
+ },
+ "total_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum total number of io operations per second",
+ },
+ "write_bytes_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of bytes to write per second",
+ },
+ "write_bytes_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of bytes to write per second",
+ },
+ "write_iops_sec": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Number of write operations per second",
+ },
+ "write_iops_sec_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Maximum number of write operations per second",
+ },
+ },
+ },
+ },
+ // "iqn": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Disk IQN",
+ // },
+ // "login": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Login to access the disk",
+ // },
+ // "milestones": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Milestones",
+ // },
+ "order": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Disk order",
+ },
+ "params": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk params",
+ },
+ "parent_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the parent disk",
+ },
+ // "passwd": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "Password to access the disk",
+ // },
+ "pci_slot": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "ID of the pci slot to which the disk is connected",
+ },
+ "present_to": {
+ Type: schema.TypeMap,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ // "purge_attempts": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Number of deletion attempts",
+ // },
+ "purge_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Time of the last deletion attempt",
+ },
+ "replication": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pool_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "self_volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "storage_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "volume_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ Description: "Replication status",
+ },
+ // "reality_device_number": {
+ // Type: schema.TypeInt,
+ // Computed: true,
+ // Description: "Reality device number",
+ // },
+ // "reference_id": {
+ // Type: schema.TypeString,
+ // Computed: true,
+ // Description: "ID of the reference to the disk",
+ // },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Resource ID",
+ },
+ "res_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the resource",
+ },
+ "role": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk role",
+ },
+ "sep_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
+ },
+ "shareable": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "size_max": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Size in GB",
+ },
+ "size_used": {
+ Type: schema.TypeFloat,
+ Computed: true,
+ Description: "Number of used space, in GB",
+ },
+ "snapshots": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Name of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ },
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Disk status",
+ },
+ "tech_status": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Technical status of the disk",
+ },
+ "vmid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "Virtual Machine ID (Deprecated)",
+ },
+ }
+
+ return rets
+}
+
+func ResourceDiskReplication() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ CreateContext: resourceDiskReplicationCreate,
+ ReadContext: resourceDiskReplicationRead,
+ UpdateContext: resourceDiskReplicationUpdate,
+ DeleteContext: resourceDiskReplicationDelete,
+
+ Importer: &schema.ResourceImporter{
+ StateContext: schema.ImportStatePassthroughContext,
+ },
+
+ Timeouts: &schema.ResourceTimeout{
+ Create: &constants.Timeout600s,
+ Read: &constants.Timeout300s,
+ Update: &constants.Timeout300s,
+ Delete: &constants.Timeout300s,
+ Default: &constants.Timeout300s,
+ },
+
+ Schema: resourceDiskReplicationSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/disks/resource_disk_snapshot.go b/internal/service/cloudapi/disks/resource_disk_snapshot.go
new file mode 100644
index 00000000..7507a324
--- /dev/null
+++ b/internal/service/cloudapi/disks/resource_disk_snapshot.go
@@ -0,0 +1,243 @@
+/*
+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 disks
+
+import (
+ "context"
+
+ "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/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func resourceDiskSnapshotCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ c := m.(*controller.ControllerCfg)
+
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ snapshots := disk.Snapshots
+ snapshot := disks.ItemSnapshot{}
+ label := d.Get("label").(string)
+ for _, sn := range snapshots {
+ if label == sn.Label {
+ snapshot = sn
+ break
+ }
+ }
+ if label != snapshot.Label {
+ return diag.Errorf("Snapshot with label \"%v\" not found", label)
+ }
+
+ if rollback := d.Get("rollback").(bool); rollback {
+ req := disks.SnapshotRollbackRequest{
+ DiskID: disk.ID,
+ Label: label,
+ TimeStamp: uint64(d.Get("timestamp").(int)),
+ }
+
+ log.Debugf("resourceDiskCreate: Snapshot rollback with label %s", label)
+ _, err := c.CloudAPI().Disks().SnapshotRollback(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+ return resourceDiskSnapshotRead(ctx, d, m)
+}
+
+func resourceDiskSnapshotRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ snapshots := disk.Snapshots
+ snapshot := disks.ItemSnapshot{}
+ label := d.Get("label").(string)
+ for _, sn := range snapshots {
+ if label == sn.Label {
+ snapshot = sn
+ break
+ }
+ }
+ if label != snapshot.Label {
+ return diag.Errorf("Snapshot with label \"%v\" not found", label)
+ }
+
+ flattenDiskSnapshot(d, snapshot)
+
+ return nil
+}
+
+func resourceDiskSnapshotUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ c := m.(*controller.ControllerCfg)
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ snapshots := disk.Snapshots
+ snapshot := disks.ItemSnapshot{}
+ label := d.Get("label").(string)
+ for _, sn := range snapshots {
+ if label == sn.Label {
+ snapshot = sn
+ break
+ }
+ }
+
+ if label != snapshot.Label {
+ return diag.Errorf("Snapshot with label \"%v\" not found", label)
+ }
+
+ if d.HasChange("rollback") && d.Get("rollback").(bool) == true {
+ req := disks.SnapshotRollbackRequest{
+ DiskID: disk.ID,
+ Label: label,
+ TimeStamp: uint64(d.Get("timestamp").(int)),
+ }
+
+ log.Debugf("resourceDiskUpdtae: Snapshot rollback with label %s", label)
+ _, err := c.CloudAPI().Disks().SnapshotRollback(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ }
+
+ return resourceDiskSnapshotRead(ctx, d, m)
+}
+
+func resourceDiskSnapshotDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ c := m.(*controller.ControllerCfg)
+
+ disk, err := utilityDiskCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ req := disks.SnapshotDeleteRequest{
+ DiskID: disk.ID,
+ Label: d.Get("label").(string),
+ }
+
+ _, err = c.CloudAPI().Disks().SnapshotDelete(ctx, req)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+
+ d.SetId("")
+
+ return nil
+}
+
+func resourceDiskSnapshotSchemaMake() map[string]*schema.Schema {
+ rets := map[string]*schema.Schema{
+ "disk_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ //ForceNew: true,
+ Description: "The unique ID of the subscriber-owner of the disk",
+ },
+ "label": {
+ Type: schema.TypeString,
+ Required: true,
+ //ForceNew: true,
+ Description: "Name of the snapshot",
+ },
+ "rollback": {
+ Type: schema.TypeBool,
+ Optional: true,
+ Default: false,
+ Description: "Needed in order to make a snapshot rollback",
+ },
+ "timestamp": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Computed: true,
+ Description: "Snapshot time",
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "ID of the snapshot",
+ },
+ "res_id": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "Reference to the snapshot",
+ },
+ "snap_set_guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ Description: "The set snapshot ID",
+ },
+ "snap_set_time": {
+ Type: schema.TypeInt,
+ Computed: true,
+ Description: "The set time of the snapshot",
+ },
+ }
+ return rets
+}
+
+func ResourceDiskSnapshot() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ CreateContext: resourceDiskSnapshotCreate,
+ ReadContext: resourceDiskSnapshotRead,
+ UpdateContext: resourceDiskSnapshotUpdate,
+ DeleteContext: resourceDiskSnapshotDelete,
+
+ Importer: &schema.ResourceImporter{
+ StateContext: schema.ImportStatePassthroughContext,
+ },
+
+ Timeouts: &schema.ResourceTimeout{
+ Create: &constants.Timeout600s,
+ Read: &constants.Timeout300s,
+ Update: &constants.Timeout300s,
+ Delete: &constants.Timeout300s,
+ Default: &constants.Timeout300s,
+ },
+
+ Schema: resourceDiskSnapshotSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/disks/state_upgraders.go b/internal/service/cloudapi/disks/state_upgraders.go
new file mode 100644
index 00000000..b7bc3bf8
--- /dev/null
+++ b/internal/service/cloudapi/disks/state_upgraders.go
@@ -0,0 +1,28 @@
+package disks
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+)
+
+func resourceDiskUpgradeV1(ctx context.Context, rawState map[string]interface{}, meta any) (map[string]interface{}, error) {
+ log.Debug("resourceDiskUpgradeV1: upgrading state")
+ rawState["present_to"] = make(map[string]uint64)
+
+ return rawState, nil
+}
+
+func resourceDiskUpgradeV2(ctx context.Context, rawState map[string]interface{}, meta any) (map[string]interface{}, error) {
+ log.Debug("resourceDiskUpgradeV2: upgrading state")
+ if v, ok := rawState["blk_discard"].(bool); ok {
+ if v {
+ rawState["discard"] = "unmap"
+ } else {
+ rawState["discard"] = "ignore"
+ }
+ }
+ delete(rawState, "blk_discard")
+
+ return rawState, nil
+}
diff --git a/internal/service/cloudapi/disks/utility_disk.go b/internal/service/cloudapi/disks/utility_disk.go
new file mode 100644
index 00000000..e28b7527
--- /dev/null
+++ b/internal/service/cloudapi/disks/utility_disk.go
@@ -0,0 +1,69 @@
+/*
+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 disks
+
+import (
+ "context"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityDiskCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.RecordDisk, error) {
+ c := m.(*controller.ControllerCfg)
+ req := disks.GetRequest{}
+
+ if d.Get("disk_id") != nil {
+ if d.Get("disk_id").(int) == 0 {
+ id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.DiskID = id
+ } else {
+ req.DiskID = uint64(d.Get("disk_id").(int))
+ }
+ } else {
+ id, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.DiskID = id
+ }
+
+ log.Debugf("utilityDiskCheckPresence: load disk")
+ disk, err := c.CloudAPI().Disks().Get(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return disk, nil
+}
diff --git a/internal/service/cloudapi/disks/utility_disk_list.go b/internal/service/cloudapi/disks/utility_disk_list.go
new file mode 100644
index 00000000..cb7ff343
--- /dev/null
+++ b/internal/service/cloudapi/disks/utility_disk_list.go
@@ -0,0 +1,102 @@
+/*
+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 disks
+
+import (
+ "context"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityDiskListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.ListDisks, error) {
+ c := m.(*controller.ControllerCfg)
+ req := disks.ListRequest{}
+
+ if by_id, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(by_id.(int))
+ }
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+ if account_name, ok := d.GetOk("account_name"); ok {
+ req.AccountName = account_name.(string)
+ }
+ if disk_max_size, ok := d.GetOk("disk_max_size"); ok {
+ req.DiskMaxSize = int64(disk_max_size.(int))
+ }
+ if status, ok := d.GetOk("status"); ok {
+ req.Status = status.(string)
+ }
+ if shared, ok := d.GetOk("shared"); ok {
+ req.Shared = shared.(bool)
+ }
+ if accountId, ok := d.GetOk("account_id"); ok {
+ req.AccountID = uint64(accountId.(int))
+ }
+ if sepId, ok := d.GetOk("sep_id"); ok {
+ req.AccountID = uint64(sepId.(int))
+ }
+ if pool_name, ok := d.GetOk("pool_name"); ok {
+ req.Pool = pool_name.(string)
+ }
+ 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))
+ }
+ if storagePolicyID, ok := d.GetOk("storage_policy_id"); ok {
+ req.StoragePolicyID = uint64(storagePolicyID.(int))
+ }
+ if rgID, ok := d.GetOk("rg_id"); ok {
+ req.RGID = uint64(rgID.(int))
+ }
+ if computeID, ok := d.GetOk("compute_id"); ok {
+ req.ComputeID = uint64(computeID.(int))
+ }
+
+ log.Debugf("utilityDiskListCheckPresence: load disk list")
+ diskList, err := c.CloudAPI().Disks().List(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return diskList, nil
+}
diff --git a/internal/service/cloudapi/disks/utility_disk_list_deleted.go b/internal/service/cloudapi/disks/utility_disk_list_deleted.go
new file mode 100644
index 00000000..a3b9af9f
--- /dev/null
+++ b/internal/service/cloudapi/disks/utility_disk_list_deleted.go
@@ -0,0 +1,92 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+Tim Tkachev,
+
+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 disks
+
+import (
+ "context"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func utilityDiskListDeletedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.ListDisks, error) {
+ c := m.(*controller.ControllerCfg)
+ req := disks.ListDeletedRequest{}
+
+ if account_id, ok := d.GetOk("account_id"); ok {
+ req.AccountID = uint64(account_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))
+ }
+
+ if by_id, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(by_id.(int))
+ }
+
+ if name, ok := d.GetOk("name"); ok {
+ req.Name = name.(string)
+ }
+
+ if account_name, ok := d.GetOk("account_name"); ok {
+ req.AccountName = account_name.(string)
+ }
+
+ if disk_max_size, ok := d.GetOk("disk_max_size"); ok {
+ req.DiskMaxSize = int64(disk_max_size.(int))
+ }
+
+ if shared, ok := d.GetOk("shared"); ok {
+ req.Shared = shared.(bool)
+ }
+
+ log.Debugf("utilityDiskListDeletedCheckPresence: load disk list")
+ diskList, err := c.CloudAPI().Disks().ListDeleted(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return diskList, nil
+}
diff --git a/internal/service/cloudapi/disks/utility_disk_list_unattached.go b/internal/service/cloudapi/disks/utility_disk_list_unattached.go
new file mode 100644
index 00000000..a5ca36f4
--- /dev/null
+++ b/internal/service/cloudapi/disks/utility_disk_list_unattached.go
@@ -0,0 +1,57 @@
+package disks
+
+import (
+ "context"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+)
+
+func utilityDiskListUnattachedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.ListDisksUnattached, error) {
+ c := m.(*controller.ControllerCfg)
+ req := disks.ListUnattachedRequest{}
+
+ if by_id, ok := d.GetOk("by_id"); ok {
+ req.ByID = uint64(by_id.(int))
+ }
+ if account_name, ok := d.GetOk("account_name"); ok {
+ req.AccountName = account_name.(string)
+ }
+ if disk_max_size, ok := d.GetOk("disk_max_size"); ok {
+ req.DiskMaxSize = int64(disk_max_size.(int))
+ }
+ if status, ok := d.GetOk("status"); ok {
+ req.Status = status.(string)
+ }
+ if accountId, ok := d.GetOk("account_id"); ok {
+ req.AccountID = uint64(accountId.(int))
+ }
+ if sepId, ok := d.GetOk("sep_id"); ok {
+ req.AccountID = uint64(sepId.(int))
+ }
+ if pool_name, ok := d.GetOk("pool_name"); ok {
+ req.Pool = pool_name.(string)
+ }
+ 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))
+ }
+ if storagePolicyID, ok := d.GetOk("storage_policy_id"); ok {
+ req.StoragePolicyID = uint64(storagePolicyID.(int))
+ }
+
+ log.Debugf("utilityDiskListUnattachedCheckPresence: load disk Unattached list")
+ unattachedList, err := c.CloudAPI().Disks().ListUnattached(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return unattachedList, nil
+}
diff --git a/internal/service/cloudapi/disks/utility_disk_replica.go b/internal/service/cloudapi/disks/utility_disk_replica.go
new file mode 100644
index 00000000..0644c4a7
--- /dev/null
+++ b/internal/service/cloudapi/disks/utility_disk_replica.go
@@ -0,0 +1,174 @@
+/*
+Copyright (c) 2019-2024 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 disks
+
+import (
+ "context"
+ "strconv"
+
+ log "github.com/sirupsen/logrus"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+)
+
+func utilityDiskReplicationUpdateStartStop(ctx context.Context, d *schema.ResourceData, m interface{}) error {
+ diskId := uint64(d.Get("disk_id").(int))
+ targetDiskId, _ := strconv.ParseUint(d.Id(), 10, 64)
+
+ log.Debugf("utilityDiskReplicationUpdateStartStop: start update for disk replica with ID: %d", diskId)
+ c := m.(*controller.ControllerCfg)
+
+ start, ok := d.GetOk("start")
+
+ if ok && start.(bool) {
+ log.Debugf("utilityDiskReplicationUpdateStartStop: start disk replication from Disk with ID: %d to Disk with ID: %d", diskId, targetDiskId)
+ req := disks.ReplicationStartRequest{
+ DiskID: diskId,
+ TargetDiskID: targetDiskId,
+ }
+ _, err := c.CloudAPI().Disks().ReplicationStart(ctx, req)
+ if err != nil {
+ return err
+ }
+ log.Debugf("utilityDiskReplicationUpdateStartStop: start disk replication from Disk with ID: %d to Disk with ID: %d, complete", diskId, targetDiskId)
+ }
+
+ if ok && !start.(bool) {
+ log.Debugf("utilityDiskReplicationUpdateStartStop: stop disk replication from Disk with ID: %d to Disk with ID: %d", targetDiskId, diskId)
+ req := disks.ReplicationStopRequest{
+ DiskID: targetDiskId,
+ }
+ _, err := c.CloudAPI().Disks().ReplicationStop(ctx, req)
+ if err != nil {
+ return err
+ }
+ log.Debugf("utilityDiskReplicationUpdateStartStop: stop disk replication from Disk with ID: %d to Disk with ID: %d, complete", targetDiskId, diskId)
+ }
+
+ log.Debugf("utilityDiskReplicationUpdateStartStop: complete update for disk replica with ID: %d", diskId)
+ return nil
+}
+
+func utilityDiskReplicationUpdatePause(ctx context.Context, d *schema.ResourceData, m interface{}) error {
+ diskId := uint64(d.Get("disk_id").(int))
+ log.Debugf("utilityDiskReplicationUpdatePause: start update for disk replica with ID: %d", diskId)
+ c := m.(*controller.ControllerCfg)
+
+ pause, ok := d.GetOk("pause")
+
+ if ok && pause.(bool) {
+ log.Debugf("utilityDiskReplicationUpdatePause: pause disk replication with ID: %d", diskId)
+ req := disks.ReplicationSuspendRequest{
+ DiskID: diskId,
+ }
+ _, err := c.CloudAPI().Disks().ReplicationSuspend(ctx, req)
+ if err != nil {
+ return err
+ }
+ log.Debugf("utilityDiskReplicationUpdatePause: pause disk replication with ID: %d, complete", diskId)
+ }
+
+ if ok && !pause.(bool) {
+ log.Debugf("utilityDiskReplicationUpdatePause: resume disk replication with ID: %d", diskId)
+ req := disks.ReplicationResumeRequest{
+ DiskID: diskId,
+ }
+ _, err := c.CloudAPI().Disks().ReplicationResume(ctx, req)
+ if err != nil {
+ return err
+ }
+ log.Debugf("utilityDiskReplicationUpdatePause: resume disk replication with ID: %d, complete", diskId)
+ }
+
+ log.Debugf("utilityDiskReplicationUpdatePause: complete update for disk replica with ID: %d", diskId)
+ return nil
+}
+
+func utilityDiskReplicationUpdateReverse(ctx context.Context, d *schema.ResourceData, m interface{}) error {
+ diskId := uint64(d.Get("disk_id").(int))
+ targetDiskId, _ := strconv.ParseUint(d.Id(), 10, 64)
+
+ log.Debugf("utilityDiskReplicaUpdateReverse: start update for disk replica with ID: %d", diskId)
+ c := m.(*controller.ControllerCfg)
+
+ reverse, ok := d.GetOk("reverse")
+
+ if ok && reverse.(bool) {
+ log.Debugf("utilityDiskReplicaUpdateReverse: reverse disk replication from Disk with ID: %d to Disk with ID: %d", diskId, targetDiskId)
+ req := disks.ReplicationReverseRequest{
+ DiskID: diskId,
+ }
+ _, err := c.CloudAPI().Disks().ReplicationReverse(ctx, req)
+ if err != nil {
+ return err
+ }
+ log.Debugf("utilityDiskReplicaUpdateReverse: reverse disk replication from Disk with ID: %d to Disk with ID: %d, complete", diskId, targetDiskId)
+ }
+
+ if ok && !reverse.(bool) {
+ log.Debugf("utilityDiskReplicaUpdateReverse: reverse disk replication from Disk with ID: %d to Disk with ID: %d", targetDiskId, diskId)
+ req := disks.ReplicationReverseRequest{
+ DiskID: targetDiskId,
+ }
+ _, err := c.CloudAPI().Disks().ReplicationReverse(ctx, req)
+ if err != nil {
+ return err
+ }
+ log.Debugf("utilityDiskReplicaUpdateReverse: reverse disk replication from Disk with ID: %d to Disk with ID: %d, complete", targetDiskId, diskId)
+ }
+
+ log.Debugf("utilityDiskReplicaUpdateReverse: complete update for disk replica with ID: %d", diskId)
+ return nil
+}
+
+func utilityDiskReplicaCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.RecordDisk, error) {
+ c := m.(*controller.ControllerCfg)
+
+ req := disks.GetRequest{}
+
+ if d.Id() != "" {
+ diskId, _ := strconv.ParseUint(d.Id(), 10, 64)
+ req.DiskID = diskId
+ } else {
+ req.DiskID = uint64(d.Get("replica_disk_id").(int))
+ }
+
+ log.Debugf("utilityDiskReplicaCheckPresence: load disk")
+ disk, err := c.CloudAPI().Disks().Get(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ return disk, nil
+}
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 00000000..7add04a3
--- /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 00000000..35c5dd1b
--- /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 00000000..062002b9
--- /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 00000000..f2849987
--- /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 00000000..a38c2c29
--- /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/extnet/data_source_extnet.go b/internal/service/cloudapi/extnet/data_source_extnet.go
new file mode 100644
index 00000000..c2a44a16
--- /dev/null
+++ b/internal/service/cloudapi/extnet/data_source_extnet.go
@@ -0,0 +1,369 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,
+Kasim Baybikov,
+Tim Tkachev,
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+/*
+Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
+Orchestration Technology) with Terraform by Hashicorp.
+
+Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
+
+Please see README.md to learn where to place source code so that it
+builds seamlessly.
+
+Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
+*/
+
+package extnet
+
+import (
+ "context"
+ "strconv"
+
+ "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 dataSourceExtnetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ e, err := utilityExtnetCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ d.SetId(strconv.FormatUint(e.ID, 10))
+ flattenExtnet(d, e)
+
+ return nil
+}
+
+func dataSourceExtnetSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "net_id": {
+ 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",
+ },
+ "check_ips": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "default": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "default_qos": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "e_rate": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "e_burst": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "in_burst": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "in_rate": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "dns": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "excluded": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "client_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "mac": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ip": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "vm_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "free_ips": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "gateway": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "gid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "guid": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "zone_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ipcidr": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "milestones": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "net_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "network": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "network_ids": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "primary": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "secondary": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "pre_reservations_num": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "prefix": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pri_vnf_dev_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "reservations": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "client_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "domainname": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "hostname": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ip": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "mac": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "vm_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "shared_with": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeInt,
+ },
+ },
+ "status": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "vlan_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "vnfs": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "dhcp": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "ntp": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Schema{
+ Type: schema.TypeString,
+ },
+ },
+ "redundant": {
+ Type: schema.TypeBool,
+ Computed: true,
+ },
+ "sec_vnfdev_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "mtu": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "pre_reservations": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "client_type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "domain_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "hostname": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "desc": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ip": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "mac": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "type": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "vm_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ },
+ },
+ },
+ }
+ return res
+}
+
+func DataSourceExtnet() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceExtnetRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceExtnetSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/extnet/data_source_extnet_computes_list.go b/internal/service/cloudapi/extnet/data_source_extnet_computes_list.go
new file mode 100644
index 00000000..8f4ad351
--- /dev/null
+++ b/internal/service/cloudapi/extnet/data_source_extnet_computes_list.go
@@ -0,0 +1,167 @@
+/*
+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 extnet
+
+import (
+ "context"
+
+ "github.com/google/uuid"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
+)
+
+func dataSourceExtnetComputesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ extnetComputesList, err := utilityExtnetComputesListCheckPresence(ctx, d, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ d.Set("items", flattenExtnetComputesList(extnetComputesList))
+ d.Set("entry_count", extnetComputesList.EntryCount)
+ return nil
+}
+
+func dataSourceExtnetComputesListSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "account_id": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "filter by account ID",
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by RG ID",
+ },
+ "compute_id": {
+ Type: schema.TypeInt,
+ Optional: true,
+ Description: "Filter by compute ID",
+ },
+ "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{
+ "account_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "account_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "extnets": {
+ Type: schema.TypeList,
+ Computed: true,
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "net_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "ipaddr": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "ipcidr": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ "rg_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ "rg_name": {
+ Type: schema.TypeString,
+ Computed: true,
+ },
+ },
+ },
+ },
+ "entry_count": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceExtnetComputesList() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceExtnetComputesListRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceExtnetComputesListSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/extnet/data_source_extnet_default.go b/internal/service/cloudapi/extnet/data_source_extnet_default.go
new file mode 100644
index 00000000..f9e05fde
--- /dev/null
+++ b/internal/service/cloudapi/extnet/data_source_extnet_default.go
@@ -0,0 +1,86 @@
+/*
+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 extnet
+
+import (
+ "context"
+ "strconv"
+
+ "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 dataSourceExtnetDefaultRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
+ extnetId, err := utilityExtnetDefaultCheckPresence(ctx, m)
+ if err != nil {
+ d.SetId("")
+ return diag.FromErr(err)
+ }
+
+ id := uuid.New()
+ d.SetId(id.String())
+ extnetIdInt, err := strconv.ParseInt(extnetId, 10, 32)
+ if err != nil {
+ return diag.FromErr(err)
+ }
+ d.Set("net_id", extnetIdInt)
+
+ return nil
+}
+
+func dataSourceExtnetDefaultSchemaMake() map[string]*schema.Schema {
+ res := map[string]*schema.Schema{
+ "net_id": {
+ Type: schema.TypeInt,
+ Computed: true,
+ },
+ }
+ return res
+}
+
+func DataSourceExtnetDefault() *schema.Resource {
+ return &schema.Resource{
+ SchemaVersion: 1,
+
+ ReadContext: dataSourceExtnetDefaultRead,
+
+ Timeouts: &schema.ResourceTimeout{
+ Read: &constants.Timeout30s,
+ Default: &constants.Timeout60s,
+ },
+
+ Schema: dataSourceExtnetDefaultSchemaMake(),
+ }
+}
diff --git a/internal/service/cloudapi/extnet/data_source_extnet_list.go b/internal/service/cloudapi/extnet/data_source_extnet_list.go
new file mode 100644
index 00000000..e03f1663
--- /dev/null
+++ b/internal/service/cloudapi/extnet/data_source_extnet_list.go
@@ -0,0 +1,169 @@
+/*
+Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
+Authors:
+Petr Krutov,
+Stanislav Solovev,