Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f49d9f8860 | |||
| 20050bc169 | |||
| e2ee45ee14 | |||
|
|
294680282e | ||
|
|
2bc0fbae9a | ||
|
|
2453a32d01 | ||
|
|
0602a4b693 | ||
|
|
28b60de115 | ||
|
|
b705ce4aab | ||
|
|
83ca627cea | ||
|
|
739289fbb8 | ||
|
|
c89574c3e6 | ||
|
|
a1e61674c8 | ||
|
|
cb9ff26bb0 | ||
|
|
6932f9d305 | ||
|
|
712f8edf9e | ||
|
|
805ffe1f29 | ||
|
|
bf8d3fb437 | ||
| d7a7eb9cb3 | |||
|
|
b60f32c570 | ||
| 272e385318 |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -2,4 +2,6 @@ decort/vendor/
|
|||||||
examples/
|
examples/
|
||||||
url_scrapping/
|
url_scrapping/
|
||||||
terraform-provider-decort*
|
terraform-provider-decort*
|
||||||
.vscode/
|
.vscode/
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
|||||||
40
CHANGELOG.md
40
CHANGELOG.md
@@ -1,6 +1,36 @@
|
|||||||
## Version 4.2.4
|
## Version 4.5.2
|
||||||
|
|
||||||
## Bug Fixes
|
### Bugfix
|
||||||
- Fixed incorrect network validation in decort_kvmvm resource
|
- Added resource_limits.cu_dm string field for account, account_consumed_units and account_reserved_units data sources in cloudapi/account
|
||||||
- Fixed inability to remove all networks at once in decort_kvmvm resource
|
- Fixed restore of account resource in cloudapi/account, it happens if restore parameter is set to true
|
||||||
- Deleted "check__ips" (duplicate) field in decort_extnet data source
|
- Fixed restore of bservice resource in cloudapi/bservice, it happens if restore parameter is set to true and only once
|
||||||
|
- Fixed enable of bservice resource in cloudapi/bservice, it happens if enable parameter is set to true
|
||||||
|
- Fixed terraform state update for bservice resource update in cloudapi/bservice
|
||||||
|
- Fixed terraform state update for bservice_group resource update in cloudapi/bservice
|
||||||
|
- Added entry_count field for bservice_snapshot_list data source in cloudapi/bservice
|
||||||
|
- Added items.shareable boolean field for disk_list_unattached data source in cloudapi/disks
|
||||||
|
- Added items.status string field for extnet_list data source in cloudapi/extnet
|
||||||
|
- Fixed multiple minor typos in samples/cloudapi
|
||||||
|
- Added account_name string, created_by string, created_time int, deleted_by string, deleted_time int, network string, rg_id int, rg_name string, updated_by string, updated_by int fields for flipgroup data source and resource in cloudapi/flipgroup
|
||||||
|
- Removed net_mask string, ckey string fields for flipgroup data source and resource in cloudapi/flipgroup
|
||||||
|
- Add meta list field for flipgroup_list data source in cloudapi/flipgroup
|
||||||
|
- Fixed net_mask string field for fligroup_list data source in cloudapi/flipgroup
|
||||||
|
- Fixed id string field for image data source in cloudapi/image
|
||||||
|
- Fix account_name string field for k8s_list data source in cloudapi/k8s
|
||||||
|
- Add network_plugin string field for k8s and k8s_list data sources in cloudapi/k8s
|
||||||
|
- Fixed terraform state update for k8s, k8_cp and k8s_wg resources update in cloudapi/k8s
|
||||||
|
- Add image_name string, interfaces.enabled boolean fields for compute data source in cloudapi/kvmvm
|
||||||
|
- Add the interfaces field to the creation request in cloudapi/kvmvm
|
||||||
|
- Fixed restore of kvmvm resource in cloudapi/kvmvm, it happens if restore parameter is set to true
|
||||||
|
- The logic of network connection has been changed, only the first network connects to the kvmvm in the stopped status, the subsequent ones connect without stopping
|
||||||
|
- Token receipt has been removed from the controller
|
||||||
|
- Add start/stop function after create for lb in cloudapi/lb
|
||||||
|
- Fixed restore of lb resource in cloudapi/lb, it happens if restore parameter is set to true
|
||||||
|
- Add field auth_broker in data source location list in cloudapi/location
|
||||||
|
- Add fields cpu_allocation_parameter and cpu_allocation_ratio in data source rg list lb deleted in cloudapi/rg
|
||||||
|
- Add fields backend_haip and frontend_haip in data source rg list in cloudapi/rg
|
||||||
|
- Change type field Ram QuotaRecord struct in cloudapi/rg/models
|
||||||
|
- Add state upgrader for rg in cloudapi/rg
|
||||||
|
- Add field owner to the creation request in cloudapi/rg
|
||||||
|
- Fixed restore of rg resource in cloudapi/rg, it happens if restore parameter is set to true
|
||||||
|
- Add fields enabled and routesroutes in data source vins in cloudapi/vins
|
||||||
34
Makefile
34
Makefile
@@ -1,30 +1,29 @@
|
|||||||
TEST?=$$(go list ./... | grep -v 'vendor')
|
TEST?=$$(go list ./... | grep -v 'vendor')
|
||||||
HOSTNAME=digitalenergy.online
|
HOSTNAME=basis
|
||||||
NAMESPACE=decort
|
NAMESPACE=decort
|
||||||
NAME=terraform-provider-decort
|
NAME=terraform-provider-decort
|
||||||
BINDIR = ./bin
|
BINDIR = ./bin
|
||||||
ZIPDIR = ./zip
|
ZIPDIR = ./zip
|
||||||
#BINARY=terraform-provider-${NAME}
|
BINARY=${NAME}
|
||||||
BINARY=${NAME}.exe
|
|
||||||
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
|
WORKPATH= ./examples/terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAMESPACE}/${VERSION}/${OS_ARCH}
|
||||||
MAINPATH = ./cmd/decort/
|
MAINPATH = ./cmd/decort/
|
||||||
VERSION=4.2.4
|
VERSION=4.5.2
|
||||||
#OS_ARCH=darwin_amd64
|
OS_ARCH=$(shell go env GOHOSTOS)_$(shell go env GOHOSTARCH)
|
||||||
OS_ARCH=windows_amd64
|
|
||||||
#OS_ARCH=linux_amd64
|
|
||||||
|
|
||||||
FILES= ${BINARY}_${VERSION}_darwin_amd64\
|
FILES = ${BINARY}_${VERSION}_darwin_amd64\
|
||||||
|
${BINARY}_${VERSION}_darwin_arm64\
|
||||||
${BINARY}_${VERSION}_freebsd_386\
|
${BINARY}_${VERSION}_freebsd_386\
|
||||||
${BINARY}_${VERSION}_freebsd_amd64\
|
${BINARY}_${VERSION}_freebsd_amd64\
|
||||||
${BINARY}_${VERSION}_freebsd_arm\
|
${BINARY}_${VERSION}_freebsd_arm\
|
||||||
${BINARY}_${VERSION}_linux_386\
|
${BINARY}_${VERSION}_linux_386\
|
||||||
${BINARY}_${VERSION}_linux_amd64\
|
${BINARY}_${VERSION}_linux_amd64\
|
||||||
${BINARY}_${VERSION}_linux_arm\
|
${BINARY}_${VERSION}_linux_arm\
|
||||||
|
${BINARY}_${VERSION}_linux_arm64\
|
||||||
${BINARY}_${VERSION}_openbsd_386\
|
${BINARY}_${VERSION}_openbsd_386\
|
||||||
${BINARY}_${VERSION}_openbsd_amd64\
|
${BINARY}_${VERSION}_openbsd_amd64\
|
||||||
${BINARY}_${VERSION}_solaris_amd64\
|
${BINARY}_${VERSION}_solaris_amd64\
|
||||||
${BINARY}_${VERSION}_windows_386 \
|
${BINARY}_${VERSION}_windows_386.exe\
|
||||||
${BINARY}_${VERSION}_windows_amd64\
|
${BINARY}_${VERSION}_windows_amd64.exe\
|
||||||
|
|
||||||
BINS = $(addprefix bin/, $(FILES))
|
BINS = $(addprefix bin/, $(FILES))
|
||||||
|
|
||||||
@@ -50,6 +49,7 @@ release: $(FILES)
|
|||||||
|
|
||||||
$(FILES) : $(BINDIR) $(ZIPDIR) $(BINS)
|
$(FILES) : $(BINDIR) $(ZIPDIR) $(BINS)
|
||||||
zip -r $(ZIPDIR)/$@.zip $(BINDIR)/$@
|
zip -r $(ZIPDIR)/$@.zip $(BINDIR)/$@
|
||||||
|
zip -rj $(ZIPDIR)/$@.zip scripts/install.bat scripts/install.sh
|
||||||
|
|
||||||
$(BINDIR):
|
$(BINDIR):
|
||||||
mkdir $@
|
mkdir $@
|
||||||
@@ -59,25 +59,27 @@ $(ZIPDIR):
|
|||||||
|
|
||||||
$(BINS):
|
$(BINS):
|
||||||
GOOS=darwin GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_darwin_amd64 $(MAINPATH)
|
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=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=amd64 go build -o ./bin/${BINARY}_${VERSION}_freebsd_amd64 $(MAINPATH)
|
||||||
GOOS=freebsd GOARCH=arm go build -o ./bin/${BINARY}_${VERSION}_freebsd_arm $(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=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=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=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=386 go build -o ./bin/${BINARY}_${VERSION}_openbsd_386 $(MAINPATH)
|
||||||
GOOS=openbsd GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_openbsd_amd64 $(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=solaris GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_solaris_amd64 $(MAINPATH)
|
||||||
GOOS=windows GOARCH=386 go build -o ./bin/${BINARY}_${VERSION}_windows_386 $(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 $(MAINPATH)
|
GOOS=windows GOARCH=amd64 go build -o ./bin/${BINARY}_${VERSION}_windows_amd64.exe $(MAINPATH)
|
||||||
|
|
||||||
install: build
|
install: build
|
||||||
mkdir -p ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
|
mkdir -p ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
|
||||||
mv ${BINARY} ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
|
mv ${BINARY} ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
|
||||||
|
|
||||||
test:
|
test:
|
||||||
go test -i $(TEST) || exit 1
|
go test -i $(TEST) || exit 1
|
||||||
echo $(TEST) | xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4
|
echo $(TEST) | xargs -t -n4 go test $(TESTARGS) -timeout=30s -parallel=4
|
||||||
|
|
||||||
testacc:
|
testacc:
|
||||||
TF_ACC=1 go test $(TEST) -v $(TESTARGS) -timeout 120m
|
TF_ACC=1 go test $(TEST) -v $(TESTARGS) -timeout 120m
|
||||||
|
|||||||
226
README.md
226
README.md
@@ -6,7 +6,10 @@ Terraform provider для платформы Digital Energy Cloud Orchestration
|
|||||||
|
|
||||||
| Версия DECORT API | Версия провайдера Terraform |
|
| Версия DECORT API | Версия провайдера Terraform |
|
||||||
| ------ | ------ |
|
| ------ | ------ |
|
||||||
| 3.8.6 | 4.x.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.5 | 3.4.x |
|
||||||
| 3.8.0 - 3.8.4 | 3.3.1 |
|
| 3.8.0 - 3.8.4 | 3.3.1 |
|
||||||
| 3.7.x | rc-1.25 |
|
| 3.7.x | rc-1.25 |
|
||||||
@@ -24,118 +27,162 @@ Terraform provider для платформы Digital Energy Cloud Orchestration
|
|||||||
|
|
||||||
## Возможности провайдера
|
## Возможности провайдера
|
||||||
|
|
||||||
- Работа с Compute instances,
|
- Режим пользователя:
|
||||||
- Работа с disks,
|
- Работа с accounts,
|
||||||
- Работа с k8s,
|
- Работа с bservice,
|
||||||
- Работа с image,
|
- Работа с disks,
|
||||||
- Работа с reource groups,
|
- Работа с extnets,
|
||||||
- Работа с VINS,
|
- Работа с flipgroups,
|
||||||
- Работа с pfw,
|
- Работа с image,
|
||||||
- Работа с accounts,
|
- Работа с k8s,
|
||||||
- Работа с snapshots,
|
- Работа с Compute instances,
|
||||||
- Работа с pcidevice,
|
- Работа с load balancer,
|
||||||
- Работа с sep,
|
- Работа с locations,
|
||||||
- Работа с vgpu,
|
- Работа с pfw,
|
||||||
- Работа с bservice,
|
- Работа с resource groups,
|
||||||
- Работа с extnets,
|
- Работа с snapshots,
|
||||||
- Работа с locations,
|
- Работа с stacks,
|
||||||
- Работа с load balancer.
|
- Работа с VINS.
|
||||||
|
|
||||||
Вики проекта: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
- Режим администратора:
|
||||||
|
- Работа с accounts,
|
||||||
|
- Работа с audits,
|
||||||
|
- Работа с disks,
|
||||||
|
- Работа с extnets,
|
||||||
|
- Работа с flipgroups,
|
||||||
|
- Работа с grids,
|
||||||
|
- Работа с images,
|
||||||
|
- Работа с k8ci,
|
||||||
|
- Работа с k8s,
|
||||||
|
- Работа с Compute instances,
|
||||||
|
- Работа с load balancer,
|
||||||
|
- Работа с pci device,
|
||||||
|
- Работа с resource groups,
|
||||||
|
- Работа с seps,
|
||||||
|
- Работа с stacks,
|
||||||
|
- Работа с VINS.
|
||||||
|
|
||||||
## Начало
|
Со списком и описанием функционала всех групп можно ознамоиться на Вики проекта: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
|
|
||||||
Старт возможен по двум путям:
|
## Установка
|
||||||
|
Начиная с версии провайдера `4.3.0` в релизном архиве находятся скрипты-инсталляторы.
|
||||||
1. Установка через собранные пакеты.
|
Чтобы выполнить установку, необходимо:
|
||||||
2. Ручная установка.
|
1. Перейти по адресу: https://repository.basistech.ru/BASIS/terraform-provider-decort/releases
|
||||||
|
2. Выбрать необходимую версию провайдера подходящую под операционную систему.
|
||||||
### Установка через собранные пакеты.
|
3. Скачать архив.
|
||||||
|
4. Распаковать архив.
|
||||||
1. Скачайте и установите terraform по ссылке: https://learn.hashicorp.com/tutorials/terraform/install-cli?in=terraform/aws-get-started
|
5. Выполнить скрипт установщика, `install.sh` или `install.bat` для Windows.<br/>
|
||||||
2. Создайте файл `main.tf` и добавьте в него следующий блок.
|
*Для запуска `install.sh` не забудьте изменить права доступа к файлу*
|
||||||
|
```bash
|
||||||
|
chmod u+x install.sh
|
||||||
|
```
|
||||||
|
6. Дождаться сообщения об успешной установке. Установщик выведет актуальный блок конфигурации провайдера, скопируйте его
|
||||||
|
```bash
|
||||||
|
DECORT provider version 4.3.0 has been successfully installed
|
||||||
|
|
||||||
|
Copy this provider configuration to main.tf file:
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "4.3.0"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
7. После этого, создайте файл `main.tf` в рабочей директории, которая может находится в любом удобном для пользователя месте.
|
||||||
|
В данном примере, рабочая директория с файлом main.tf находится по пути:
|
||||||
|
```bash
|
||||||
|
~/work/tfdir/main.tf
|
||||||
|
```
|
||||||
|
8. Вставьте в `main.tf` блок конфигурации провайдера, который был выведен на экран установщиком:
|
||||||
|
```terraform
|
||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
decort = {
|
||||||
|
version = "4.3.0"
|
||||||
|
source = "basis/decort/decort"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
9. Добавьте в файл блок с инициализацией провайдера.
|
||||||
```terraform
|
```terraform
|
||||||
provider "decort" {
|
provider "decort" {
|
||||||
authenticator = "oauth2"
|
authenticator = "decs3o"
|
||||||
#controller_url = <DECORT_CONTROLLER_URL>
|
controller_url = "https://mr4.digitalenergy.online"
|
||||||
controller_url = "https://ds1.digitalenergy.online"
|
|
||||||
#oauth2_url = <DECORT_SSO_URL>
|
|
||||||
oauth2_url = "https://sso.digitalenergy.online"
|
oauth2_url = "https://sso.digitalenergy.online"
|
||||||
allow_unverified_ssl = true
|
allow_unverified_ssl = true
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Выполните команду
|
10. В консоли выполните команду
|
||||||
|
```bash
|
||||||
```
|
|
||||||
terraform init
|
terraform init
|
||||||
```
|
```
|
||||||
|
|
||||||
Провайдер автоматически будет установлен на ваш компьютер из terraform registry.
|
11. В случае успешной установки, Terraform инициализирует провайдер и будет готов к дальнейшей работе.
|
||||||
|
|
||||||
### Ручная установка
|
|
||||||
|
|
||||||
1. Скачайте и установите Go по ссылке: https://go.dev/dl/
|
|
||||||
2. Скачайте и установите terraform по ссылке: https://learn.hashicorp.com/tutorials/terraform/install-cli?in=terraform/aws-get-started
|
|
||||||
3. Склонируйте репозиторий с провайдером, выполнив команду:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://repository.basistech.ru/BASIS/terraform-provider-decort
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Перейдите в скачанную папку с провайдером и выполните команду
|
|
||||||
|
|
||||||
```bash
|
|
||||||
go build -o terraform-provider-decort
|
|
||||||
```
|
|
||||||
|
|
||||||
Если вы знаете как устроен _makefile_, то можно изменить в файле `Makefile` параметры под вашу ОС и выполнить команду
|
|
||||||
|
|
||||||
```bash
|
|
||||||
make build
|
|
||||||
```
|
|
||||||
|
|
||||||
5. Полученный файл необходимо поместить:
|
|
||||||
Linux:
|
|
||||||
|
|
||||||
|
## Установка из релизов
|
||||||
|
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
|
```bash
|
||||||
~/.terraform.d/plugins/${host_name}/${namespace}/${type}/${version}/${target}
|
~/.terraform.d/plugins/${host_name}/${namespace}/${type}/${version}/${target}
|
||||||
```
|
```
|
||||||
|
|
||||||
Windows:
|
Windows:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
%APPDATA%\terraform.d\plugins\${host_name}\${namespace}\${type}\${version}\${target}
|
%APPDATA%\terraform.d\plugins\${host_name}\${namespace}\${type}\${version}\${target}
|
||||||
```
|
```
|
||||||
|
|
||||||
ВНИМАНИЕ: для ОС Windows `%APP_DATA%` является каталогом, в котором будут помещены будущие файлы terraform.
|
|
||||||
Где:
|
Где:
|
||||||
|
- host_name - имя хоста, держателя провайдера, например, basis
|
||||||
- host_name - имя хоста, держателя провайдера, например, digitalenergy.online
|
- namespace - пространство имен хоста, например decort
|
||||||
- namespace - пространство имен хоста, например decort
|
|
||||||
- type - тип провайдера, может совпадать с пространством имен, например, decort
|
- type - тип провайдера, может совпадать с пространством имен, например, decort
|
||||||
- version - версия провайдера, например 1.2
|
- version - версия провайдера, например 4.3.0
|
||||||
- target - версия ОС, например windows_amd64
|
- target - архитектура операционной системы, например windows_amd64
|
||||||
|
|
||||||
6. После этого, создайте файл `main.tf`.
|
В примере ниже используется путь до провайдера на машине с ОС Linux:
|
||||||
7. Добавьте в него следующий блок
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
~/.terraform.d/plugins/basis/decort/decort/4.3.0/linux_amd64/tf-provider
|
||||||
|
^ ^ ^ ^ ^ ^
|
||||||
|
host_name | | | | | |
|
||||||
|
| | | | |
|
||||||
|
namespace | | | | |
|
||||||
|
| | | |
|
||||||
|
type | | | |
|
||||||
|
| | |
|
||||||
|
version | | |
|
||||||
|
| |
|
||||||
|
target | |
|
||||||
|
|
|
||||||
|
исполняемый файл |
|
||||||
|
```
|
||||||
|
|
||||||
|
6. После этого, создайте файл `main.tf` в рабочей директории, которая может находится в любом удобном для пользователя месте.
|
||||||
|
В данном примере, рабочая директория с файлом main.tf находится по пути:
|
||||||
|
```bash
|
||||||
|
~/work/tfdir/main.tf
|
||||||
|
```
|
||||||
|
7. Добавьте в `main.tf` следующий блок
|
||||||
```terraform
|
```terraform
|
||||||
terraform {
|
terraform {
|
||||||
required_providers {
|
required_providers {
|
||||||
decort = {
|
decort = {
|
||||||
version = "1.2"
|
version = "4.3.0"
|
||||||
source = "digitalenergy.online/decort/decort"
|
source = "basis/decort/decort"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
В поле `version` указывается версия провайдера.
|
||||||
В поле `version` указывается версия провайдера.
|
<br/>
|
||||||
Обязательный параметр
|
**ВНИМАНИЕ: Версии в блоке и в пути к исполняемому файлу провайдера должны совпадать!**
|
||||||
Тип поля - строка
|
|
||||||
ВНИМАНИЕ: Версии в блоке и в репозитории, в который был помещен провайдер должны совпадать!
|
|
||||||
|
|
||||||
В поле `source` помещается путь до репозитория с версией вида:
|
В поле `source` помещается путь до репозитория с версией вида:
|
||||||
|
|
||||||
@@ -143,17 +190,24 @@ terraform {
|
|||||||
${host_name}/${namespace}/${type}
|
${host_name}/${namespace}/${type}
|
||||||
```
|
```
|
||||||
|
|
||||||
ВНИМАНИЕ: все параметры должны совпадать с путем репозитория, в котором помещен провайдер.
|
**ВНИМАНИЕ: Версии в блоке и в пути к исполняемому файлу провайдера должны совпадать!**
|
||||||
|
|
||||||
8. В консоле выполнить команду
|
8. Добавьте в файл блок с инициализацией провайдера.
|
||||||
|
```terraform
|
||||||
|
provider "decort" {
|
||||||
|
authenticator = "decs3o"
|
||||||
|
controller_url = "https://mr4.digitalenergy.online"
|
||||||
|
oauth2_url = "https://sso.digitalenergy.online"
|
||||||
|
allow_unverified_ssl = true
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
9. В консоли выполните команду
|
||||||
```bash
|
```bash
|
||||||
terraform init
|
terraform init
|
||||||
```
|
```
|
||||||
|
|
||||||
9. Если все прошло хорошо - ошибок не будет.
|
10. В случае успешной установки, Terraform инициализирует провайдер и будет готов к дальнейшей работе.
|
||||||
|
|
||||||
Более подробно о сборке провайдера можно найти по ссылке: https://learn.hashicorp.com/tutorials/terraform/provider-use?in=terraform/providers
|
|
||||||
|
|
||||||
## Примеры работы
|
## Примеры работы
|
||||||
|
|
||||||
@@ -162,8 +216,4 @@ terraform init
|
|||||||
- На вики проекта: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
- На вики проекта: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
- В папке `samples`
|
- В папке `samples`
|
||||||
|
|
||||||
Схемы к terraform'у доступны:
|
|
||||||
|
|
||||||
- В папке `docs`
|
|
||||||
|
|
||||||
Хорошей работы!
|
Хорошей работы!
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ Two ways for starting:
|
|||||||
|
|
||||||
```terraform
|
```terraform
|
||||||
provider "decort" {
|
provider "decort" {
|
||||||
authenticator = "oauth2"
|
authenticator = "decs3o"
|
||||||
#controller_url = <DECORT_CONTROLLER_URL>
|
#controller_url = <DECORT_CONTROLLER_URL>
|
||||||
controller_url = "https://ds1.digitalenergy.online"
|
controller_url = "https://ds1.digitalenergy.online"
|
||||||
#oauth2_url = <DECORT_SSO_URL>
|
#oauth2_url = <DECORT_SSO_URL>
|
||||||
|
|||||||
20
go.mod
20
go.mod
@@ -3,13 +3,12 @@ module repository.basistech.ru/BASIS/terraform-provider-decort
|
|||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/golang-jwt/jwt/v4 v4.4.3
|
|
||||||
github.com/google/uuid v1.3.0
|
github.com/google/uuid v1.3.0
|
||||||
github.com/hashicorp/terraform-plugin-docs v0.13.0
|
github.com/hashicorp/terraform-plugin-docs v0.13.0
|
||||||
github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1
|
github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1
|
||||||
github.com/sirupsen/logrus v1.9.0
|
github.com/sirupsen/logrus v1.9.0
|
||||||
golang.org/x/net v0.5.0
|
golang.org/x/net v0.16.0
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.4.7
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.7.3
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -21,10 +20,11 @@ require (
|
|||||||
github.com/armon/go-radix v1.0.0 // indirect
|
github.com/armon/go-radix v1.0.0 // indirect
|
||||||
github.com/bgentry/speakeasy v0.1.0 // indirect
|
github.com/bgentry/speakeasy v0.1.0 // indirect
|
||||||
github.com/fatih/color v1.13.0 // indirect
|
github.com/fatih/color v1.13.0 // indirect
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
|
||||||
github.com/go-playground/locales v0.14.1 // indirect
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
github.com/go-playground/validator/v10 v10.11.2 // indirect
|
github.com/go-playground/validator/v10 v10.15.4 // indirect
|
||||||
github.com/golang/protobuf v1.5.2 // indirect
|
github.com/golang/protobuf v1.5.3 // indirect
|
||||||
github.com/google/go-cmp v0.5.9 // indirect
|
github.com/google/go-cmp v0.5.9 // indirect
|
||||||
github.com/google/go-querystring v1.1.0 // indirect
|
github.com/google/go-querystring v1.1.0 // indirect
|
||||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
@@ -48,7 +48,7 @@ require (
|
|||||||
github.com/hashicorp/yamux v0.1.1 // indirect
|
github.com/hashicorp/yamux v0.1.1 // indirect
|
||||||
github.com/huandu/xstrings v1.4.0 // indirect
|
github.com/huandu/xstrings v1.4.0 // indirect
|
||||||
github.com/imdario/mergo v0.3.13 // indirect
|
github.com/imdario/mergo v0.3.13 // indirect
|
||||||
github.com/leodido/go-urn v1.2.1 // indirect
|
github.com/leodido/go-urn v1.2.4 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.16 // indirect
|
github.com/mattn/go-isatty v0.0.16 // indirect
|
||||||
github.com/mitchellh/cli v1.1.5 // indirect
|
github.com/mitchellh/cli v1.1.5 // indirect
|
||||||
@@ -66,12 +66,12 @@ require (
|
|||||||
github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect
|
github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect
|
||||||
github.com/vmihailenco/tagparser v0.1.2 // indirect
|
github.com/vmihailenco/tagparser v0.1.2 // indirect
|
||||||
github.com/zclconf/go-cty v1.12.1 // indirect
|
github.com/zclconf/go-cty v1.12.1 // indirect
|
||||||
golang.org/x/crypto v0.5.0 // indirect
|
golang.org/x/crypto v0.15.0 // indirect
|
||||||
golang.org/x/sys v0.4.0 // indirect
|
golang.org/x/sys v0.14.0 // indirect
|
||||||
golang.org/x/text v0.6.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
google.golang.org/appengine v1.6.7 // indirect
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 // indirect
|
google.golang.org/genproto v0.0.0-20221207170731-23e4bf6bdc37 // indirect
|
||||||
google.golang.org/grpc v1.51.0 // indirect
|
google.golang.org/grpc v1.51.0 // indirect
|
||||||
google.golang.org/protobuf v1.28.1 // indirect
|
google.golang.org/protobuf v1.31.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
49
go.sum
49
go.sum
@@ -39,6 +39,8 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
|
|||||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
||||||
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
|
github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE=
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
|
||||||
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
||||||
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
|
github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4=
|
||||||
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
|
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
|
||||||
@@ -53,18 +55,16 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o
|
|||||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
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 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||||
github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU=
|
github.com/go-playground/validator/v10 v10.15.4 h1:zMXza4EpOdooxPel5xDqXEdXG5r+WggpvnAKMsalBjs=
|
||||||
github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=
|
github.com/go-playground/validator/v10 v10.15.4/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
|
||||||
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
||||||
github.com/golang-jwt/jwt/v4 v4.4.3 h1:Hxl6lhQFj4AnOX6MLrsCb/+7tCj7DxP7VA+2rDIq5AU=
|
|
||||||
github.com/golang-jwt/jwt/v4 v4.4.3/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
|
||||||
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
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.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
@@ -152,8 +152,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
|||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
|
||||||
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
||||||
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
|
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
|
||||||
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
|
||||||
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
|
github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
|
||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
|
||||||
@@ -191,7 +191,7 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||||
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
|
github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo=
|
||||||
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
|
github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
|
||||||
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
|
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
|
||||||
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
|
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
|
||||||
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
|
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
|
||||||
github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4=
|
github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4=
|
||||||
@@ -208,14 +208,19 @@ github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
|
|||||||
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
|
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/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||||
|
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
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.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||||
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
|
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
|
||||||
|
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
|
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 h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
|
||||||
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
|
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
|
||||||
@@ -242,8 +247,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm
|
|||||||
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
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.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
|
||||||
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
|
golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
|
||||||
golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU=
|
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@@ -258,8 +263,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
|||||||
golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
|
golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
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.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
||||||
golang.org/x/net v0.5.0 h1:GyT4nK/YDHSqa1c4753ouYCDajOYKTja9Xb/OHtgvSw=
|
golang.org/x/net v0.16.0 h1:7eBu7KsSvFDtSXUIDbh3aqlK4DPsZ1rByC8PFfBThos=
|
||||||
golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
|
golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@@ -286,8 +291,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.4.0 h1:Zr2JFtRQNX3BCZ8YtxRE9hNJYC8J6I1MVbMg6owUp18=
|
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
|
||||||
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
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.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
|
||||||
@@ -297,8 +302,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/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.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.6.0 h1:3XmdazWV+ubf7QgHSTWeykHOci5oeekaGJBLkrkaw4k=
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
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.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.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
@@ -315,8 +320,8 @@ google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
|
|||||||
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
|
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
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.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
|
||||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
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-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
@@ -332,5 +337,5 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
|
|||||||
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.4.7 h1:1lHhvOsMX5iFQ4z2qmVT7cORbCr+hTeEH9Lk1E2liYE=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.7.3 h1:NtvW72WsAezk0XYKE5+ag+xauIgKWKcbKLy7YTp5Fuc=
|
||||||
repository.basistech.ru/BASIS/decort-golang-sdk v1.4.7/go.mod h1:szsTGa73O75ckCWVGJPvTtRbhA/ubuYrYhMkPjvHlmE=
|
repository.basistech.ru/BASIS/decort-golang-sdk v1.7.3/go.mod h1:7fj8sgGZFiiExewQeqckCS4WxwOmU0oP6BO6mi1Lpkw=
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
|
||||||
Authors:
|
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
//CloudApi - a part of url for cloudapi
|
|
||||||
const CloudApi = "/restmachine/cloudapi"
|
|
||||||
|
|
||||||
//CloudBroker - a part of url for cloudbroker
|
|
||||||
const CloudBroker = "/restmachine/cloudbroker"
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
@@ -21,18 +21,14 @@ limitations under the License.
|
|||||||
package controller
|
package controller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"context"
|
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io"
|
||||||
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
// "time"
|
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
|
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
|
||||||
@@ -41,31 +37,37 @@ import (
|
|||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi"
|
"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/cloudbroker"
|
||||||
|
|
||||||
jwt "github.com/golang-jwt/jwt/v4"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
// enumerated constants that define authentication modes
|
// enumerated constants that define authentication modes
|
||||||
const (
|
const (
|
||||||
MODE_UNDEF = iota // this is the invalid mode - it should never be seen
|
MODE_UNDEF = iota // this is the invalid mode - it should never be seen
|
||||||
MODE_LEGACY = iota
|
MODE_LEGACY
|
||||||
MODE_OAUTH2 = iota
|
MODE_DECS3O
|
||||||
MODE_JWT = iota
|
MODE_JWT
|
||||||
|
MODE_BVS
|
||||||
)
|
)
|
||||||
|
|
||||||
type ControllerCfg struct {
|
type ControllerCfg struct {
|
||||||
controller_url string // always required
|
controller_url string // always required
|
||||||
auth_mode_code int // always required
|
auth_mode_code int // always required
|
||||||
auth_mode_txt string // always required, it is a text representation of auth mode
|
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_user string // required for legacy mode
|
||||||
legacy_password 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
|
legacy_sid string // obtained from DECORT controller on successful login in legacy mode
|
||||||
jwt string // obtained from Outh2 provider on successful login in oauth2 mode, required in jwt mode
|
jwt string // obtained from Outh2 provider on successful login in decs3o mode, required in jwt mode
|
||||||
app_id string // required for oauth2 mode
|
app_id string // required for decs3o and bvs mode
|
||||||
app_secret string // required for oauth2 mode
|
app_secret string // required for decs3o and bvs mode
|
||||||
oauth2_url string // always required
|
oauth2_url string // required for decs3o and bvs mode
|
||||||
decort_username string // assigned to either legacy_user (legacy mode) or Oauth2 user (oauth2 mode) upon successful verification
|
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
|
cc_client *http.Client // assigned when all initial checks successfully passed
|
||||||
caller interfaces.Caller
|
caller interfaces.Caller
|
||||||
}
|
}
|
||||||
@@ -88,17 +90,24 @@ func ControllerConfigure(d *schema.ResourceData) (*ControllerCfg, error) {
|
|||||||
legacy_user: d.Get("user").(string),
|
legacy_user: d.Get("user").(string),
|
||||||
legacy_password: d.Get("password").(string),
|
legacy_password: d.Get("password").(string),
|
||||||
legacy_sid: "",
|
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),
|
jwt: d.Get("jwt").(string),
|
||||||
app_id: d.Get("app_id").(string),
|
app_id: d.Get("app_id").(string),
|
||||||
app_secret: d.Get("app_secret").(string),
|
app_secret: d.Get("app_secret").(string),
|
||||||
oauth2_url: d.Get("oauth2_url").(string),
|
oauth2_url: d.Get("oauth2_url").(string),
|
||||||
decort_username: "",
|
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)
|
allow_unverified_ssl := d.Get("allow_unverified_ssl").(bool)
|
||||||
|
|
||||||
if ret_config.controller_url == "" {
|
if ret_config.controller_url == "" {
|
||||||
return nil, fmt.Errorf("Empty DECORT cloud controller URL provided.")
|
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
|
// this should have already been done by StateFunc defined in Schema, but we want to be sure
|
||||||
@@ -107,33 +116,53 @@ func ControllerConfigure(d *schema.ResourceData) (*ControllerCfg, error) {
|
|||||||
switch ret_config.auth_mode_txt {
|
switch ret_config.auth_mode_txt {
|
||||||
case "jwt":
|
case "jwt":
|
||||||
if ret_config.jwt == "" {
|
if ret_config.jwt == "" {
|
||||||
return nil, fmt.Errorf("Authenticator mode 'jwt' specified but no JWT provided.")
|
return nil, fmt.Errorf("authenticator mode 'jwt' specified but no JWT provided")
|
||||||
}
|
}
|
||||||
ret_config.auth_mode_code = MODE_JWT
|
ret_config.auth_mode_code = MODE_JWT
|
||||||
case "oauth2":
|
case "decs3o":
|
||||||
if ret_config.oauth2_url == "" {
|
if ret_config.oauth2_url == "" {
|
||||||
return nil, fmt.Errorf("Authenticator mode 'oauth2' specified but no OAuth2 URL provided.")
|
return nil, fmt.Errorf("authenticator mode 'decs3o' specified but no OAuth2 URL provided")
|
||||||
}
|
}
|
||||||
if ret_config.app_id == "" {
|
if ret_config.app_id == "" {
|
||||||
return nil, fmt.Errorf("Authenticator mode 'oauth2' specified but no Application ID provided.")
|
return nil, fmt.Errorf("authenticator mode 'decs3o' specified but no Application ID provided")
|
||||||
}
|
}
|
||||||
if ret_config.app_secret == "" {
|
if ret_config.app_secret == "" {
|
||||||
return nil, fmt.Errorf("Authenticator mode 'oauth2' specified but no Secret ID provided.")
|
return nil, fmt.Errorf("authenticator mode 'decs3o' specified but no Secret ID provided")
|
||||||
}
|
}
|
||||||
ret_config.auth_mode_code = MODE_OAUTH2
|
ret_config.auth_mode_code = MODE_DECS3O
|
||||||
case "legacy":
|
case "legacy":
|
||||||
//
|
//
|
||||||
ret_config.legacy_user = d.Get("user").(string)
|
ret_config.legacy_user = d.Get("user").(string)
|
||||||
if ret_config.legacy_user == "" {
|
if ret_config.legacy_user == "" {
|
||||||
return nil, fmt.Errorf("Authenticator mode 'legacy' specified but no user provided.")
|
return nil, fmt.Errorf("authenticator mode 'legacy' specified but no user provided")
|
||||||
}
|
}
|
||||||
ret_config.legacy_password = d.Get("password").(string)
|
ret_config.legacy_password = d.Get("password").(string)
|
||||||
if ret_config.legacy_password == "" {
|
if ret_config.legacy_password == "" {
|
||||||
return nil, fmt.Errorf("Authenticator mode 'legacy' specified but no password provided.")
|
return nil, fmt.Errorf("authenticator mode 'legacy' specified but no password provided")
|
||||||
}
|
}
|
||||||
ret_config.auth_mode_code = MODE_LEGACY
|
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:
|
default:
|
||||||
return nil, fmt.Errorf("Unknown authenticator mode %q provided.", ret_config.auth_mode_txt)
|
return nil, fmt.Errorf("unknown authenticator mode %q provided", ret_config.auth_mode_txt)
|
||||||
}
|
}
|
||||||
|
|
||||||
if allow_unverified_ssl {
|
if allow_unverified_ssl {
|
||||||
@@ -169,30 +198,30 @@ func ControllerConfigure(d *schema.ResourceData) (*ControllerCfg, error) {
|
|||||||
if !ok {
|
if !ok {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
case MODE_OAUTH2:
|
case MODE_DECS3O:
|
||||||
// on success getOAuth2JWT will set config.jwt to the obtained JWT, so there is no
|
// on success getDECS3OJWT will set config.jwt to the obtained JWT, so there is no
|
||||||
// need to set it once again here
|
// need to set it once again here
|
||||||
_, err := ret_config.getOAuth2JWT()
|
// _, err := ret_config.getDECS3OJWT()
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
// we are not verifying the JWT when parsing because actual verification is done on the
|
// 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")
|
// OVC controller side. Here we do parsing solely to extract Oauth2 user name (claim "user")
|
||||||
// and JWT issuer name (claim "iss")
|
// and JWT issuer name (claim "iss")
|
||||||
parser := jwt.Parser{}
|
// parser := jwt.Parser{}
|
||||||
token, _, err := parser.ParseUnverified(ret_config.jwt, jwt.MapClaims{})
|
// token, _, err := parser.ParseUnverified(ret_config.jwt, jwt.MapClaims{})
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
if claims, ok := token.Claims.(jwt.MapClaims); ok {
|
// if claims, ok := token.Claims.(jwt.MapClaims); ok {
|
||||||
var tbuf bytes.Buffer
|
// var tbuf bytes.Buffer
|
||||||
tbuf.WriteString(claims["username"].(string))
|
// tbuf.WriteString(claims["username"].(string))
|
||||||
tbuf.WriteString("@")
|
// tbuf.WriteString("@")
|
||||||
tbuf.WriteString(claims["iss"].(string))
|
// tbuf.WriteString(claims["iss"].(string))
|
||||||
ret_config.decort_username = tbuf.String()
|
// ret_config.decort_username = tbuf.String()
|
||||||
} else {
|
// } else {
|
||||||
return nil, fmt.Errorf("Failed to extract user and iss fields from JWT token in oauth2 mode.")
|
// return nil, fmt.Errorf("failed to extract user and iss fields from JWT token in oauth2 mode")
|
||||||
}
|
// }
|
||||||
|
|
||||||
sdkConf := config.Config{
|
sdkConf := config.Config{
|
||||||
AppID: ret_config.app_id,
|
AppID: ret_config.app_id,
|
||||||
@@ -203,10 +232,27 @@ func ControllerConfigure(d *schema.ResourceData) (*ControllerCfg, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret_config.caller = decort.New(sdkConf)
|
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:
|
default:
|
||||||
// FYI, this should never happen due to all above checks, but we want to be fool proof
|
// 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)
|
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
|
// All checks passed successfully, credentials corresponding to the selected authenticator mode
|
||||||
@@ -214,57 +260,57 @@ func ControllerConfigure(d *schema.ResourceData) (*ControllerCfg, error) {
|
|||||||
return ret_config, nil
|
return ret_config, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *ControllerCfg) GetDecortUsername() string {
|
// func (config *ControllerCfg) GetDecortUsername() string {
|
||||||
return config.decort_username
|
// return config.decort_username
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (config *ControllerCfg) getOAuth2JWT() (string, error) {
|
// func (config *ControllerCfg) getDECS3OJWT() (string, error) {
|
||||||
// Obtain JWT from the Oauth2 provider using application ID and application secret provided in config.
|
// // Obtain JWT from the Oauth2 provider using application ID and application secret provided in config.
|
||||||
if config.auth_mode_code == MODE_UNDEF {
|
// if config.auth_mode_code == MODE_UNDEF {
|
||||||
return "", fmt.Errorf("getOAuth2JWT method called for undefined authorization mode.")
|
// return "", fmt.Errorf("getOAuth2JWT method called for undefined authorization mode")
|
||||||
}
|
// }
|
||||||
if config.auth_mode_code != MODE_OAUTH2 {
|
// if config.auth_mode_code != MODE_DECS3O {
|
||||||
return "", fmt.Errorf("getOAuth2JWT method called for incompatible authorization mode %q.", config.auth_mode_txt)
|
// return "", fmt.Errorf("getOAuth2JWT method called for incompatible authorization mode %q", config.auth_mode_txt)
|
||||||
}
|
// }
|
||||||
|
|
||||||
params := url.Values{}
|
// params := url.Values{}
|
||||||
params.Add("grant_type", "client_credentials")
|
// params.Add("grant_type", "client_credentials")
|
||||||
params.Add("client_id", config.app_id)
|
// params.Add("client_id", config.app_id)
|
||||||
params.Add("client_secret", config.app_secret)
|
// params.Add("client_secret", config.app_secret)
|
||||||
params.Add("response_type", "id_token")
|
// params.Add("response_type", "id_token")
|
||||||
params.Add("validity", "3600")
|
// params.Add("validity", "3600")
|
||||||
params_str := params.Encode()
|
// params_str := params.Encode()
|
||||||
|
|
||||||
req, err := http.NewRequest("POST", config.oauth2_url+"/v1/oauth/access_token", strings.NewReader(params_str))
|
// req, err := http.NewRequest("POST", config.oauth2_url+"/v1/oauth/access_token", strings.NewReader(params_str))
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
// }
|
||||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
// req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
||||||
req.Header.Set("Content-Length", strconv.Itoa(len(params_str)))
|
// req.Header.Set("Content-Length", strconv.Itoa(len(params_str)))
|
||||||
|
|
||||||
resp, err := config.cc_client.Do(req)
|
// resp, err := config.cc_client.Do(req)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
// }
|
||||||
if resp.StatusCode != http.StatusOK {
|
// if resp.StatusCode != http.StatusOK {
|
||||||
// fmt.Println("response Status:", resp.Status)
|
// // fmt.Println("response Status:", resp.Status)
|
||||||
// fmt.Println("response Headers:", resp.Header)
|
// // fmt.Println("response Headers:", resp.Header)
|
||||||
// fmt.Println("response Headers:", req.URL)
|
// // 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",
|
// 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)
|
// resp.StatusCode, req.URL, config.app_id, params_str)
|
||||||
}
|
// }
|
||||||
defer resp.Body.Close()
|
// defer resp.Body.Close()
|
||||||
|
|
||||||
responseData, err := ioutil.ReadAll(resp.Body)
|
// responseData, err := io.ReadAll(resp.Body)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
// }
|
||||||
|
|
||||||
// validation successful - store JWT in the corresponding field of the ControllerCfg structure
|
// // validation successful - store JWT in the corresponding field of the ControllerCfg structure
|
||||||
config.jwt = strings.TrimSpace(string(responseData))
|
// config.jwt = strings.TrimSpace(string(responseData))
|
||||||
|
|
||||||
return config.jwt, nil
|
// return config.jwt, nil
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (config *ControllerCfg) validateJWT(jwt string) (bool, error) {
|
func (config *ControllerCfg) validateJWT(jwt string) (bool, error) {
|
||||||
/*
|
/*
|
||||||
@@ -275,13 +321,13 @@ func (config *ControllerCfg) validateJWT(jwt string) (bool, error) {
|
|||||||
*/
|
*/
|
||||||
if jwt == "" {
|
if jwt == "" {
|
||||||
if config.jwt == "" {
|
if config.jwt == "" {
|
||||||
return false, fmt.Errorf("validateJWT method called, but no meaningful JWT provided.")
|
return false, fmt.Errorf("validateJWT method called, but no meaningful JWT provided")
|
||||||
}
|
}
|
||||||
jwt = config.jwt
|
jwt = config.jwt
|
||||||
}
|
}
|
||||||
|
|
||||||
if config.oauth2_url == "" {
|
if config.oauth2_url == "" {
|
||||||
return false, fmt.Errorf("validateJWT method called, but no OAuth2 URL provided.")
|
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)
|
req, err := http.NewRequest("POST", config.controller_url+"/restmachine/cloudapi/account/list", nil)
|
||||||
@@ -298,7 +344,7 @@ func (config *ControllerCfg) validateJWT(jwt string) (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return false, fmt.Errorf("validateJWT: unexpected status code %d when validating JWT against %q.",
|
return false, fmt.Errorf("validateJWT: unexpected status code %d when validating JWT against %q",
|
||||||
resp.StatusCode, req.URL)
|
resp.StatusCode, req.URL)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
@@ -314,10 +360,10 @@ func (config *ControllerCfg) validateLegacyUser() (bool, error) {
|
|||||||
reason, the method will return false and error.
|
reason, the method will return false and error.
|
||||||
*/
|
*/
|
||||||
if config.auth_mode_code == MODE_UNDEF {
|
if config.auth_mode_code == MODE_UNDEF {
|
||||||
return false, fmt.Errorf("validateLegacyUser method called for undefined authorization mode.")
|
return false, fmt.Errorf("validateLegacyUser method called for undefined authorization mode")
|
||||||
}
|
}
|
||||||
if config.auth_mode_code != MODE_LEGACY {
|
if config.auth_mode_code != MODE_LEGACY {
|
||||||
return false, fmt.Errorf("validateLegacyUser method called for incompatible authorization mode %q.", config.auth_mode_txt)
|
return false, fmt.Errorf("validateLegacyUser method called for incompatible authorization mode %q", config.auth_mode_txt)
|
||||||
}
|
}
|
||||||
|
|
||||||
params := url.Values{}
|
params := url.Values{}
|
||||||
@@ -338,12 +384,12 @@ func (config *ControllerCfg) validateLegacyUser() (bool, error) {
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return false, fmt.Errorf("validateLegacyUser: unexpected status code %d when validating legacy user %q against %q.",
|
return false, fmt.Errorf("validateLegacyUser: unexpected status code %d when validating legacy user %q against %q",
|
||||||
resp.StatusCode, config.legacy_user, config.controller_url)
|
resp.StatusCode, config.legacy_user, config.controller_url)
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
responseData, err := ioutil.ReadAll(resp.Body)
|
responseData, err := io.ReadAll(req.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
@@ -355,100 +401,32 @@ func (config *ControllerCfg) validateLegacyUser() (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (config *ControllerCfg) CloudAPI() *cloudapi.CloudAPI {
|
func (config *ControllerCfg) CloudAPI() *cloudapi.CloudAPI {
|
||||||
if config.auth_mode_code == MODE_LEGACY {
|
switch config.auth_mode_code {
|
||||||
|
case MODE_LEGACY:
|
||||||
client, _ := config.caller.(*decort.LegacyDecortClient)
|
client, _ := config.caller.(*decort.LegacyDecortClient)
|
||||||
return client.CloudAPI()
|
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{}
|
||||||
}
|
}
|
||||||
|
|
||||||
client, _ := config.caller.(*decort.DecortClient)
|
|
||||||
return client.CloudAPI()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (config *ControllerCfg) CloudBroker() *cloudbroker.CloudBroker {
|
func (config *ControllerCfg) CloudBroker() *cloudbroker.CloudBroker {
|
||||||
if config.auth_mode_code == MODE_LEGACY {
|
switch config.auth_mode_code {
|
||||||
|
case MODE_LEGACY:
|
||||||
client, _ := config.caller.(*decort.LegacyDecortClient)
|
client, _ := config.caller.(*decort.LegacyDecortClient)
|
||||||
return client.CloudBroker()
|
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{}
|
||||||
}
|
}
|
||||||
|
|
||||||
client, _ := config.caller.(*decort.DecortClient)
|
|
||||||
return client.CloudBroker()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (config *ControllerCfg) DecortAPICall(ctx context.Context, method string, api_name string, url_values *url.Values) (json_resp string, err error) { //nolint:unparam
|
|
||||||
// This is a convenience wrapper around standard HTTP request methods that is aware of the
|
|
||||||
// authorization mode for which the provider was initialized and compiles request accordingly.
|
|
||||||
|
|
||||||
if config.cc_client == nil {
|
|
||||||
// this should never happen if ClientConfig was properly called prior to decortAPICall
|
|
||||||
return "", fmt.Errorf("decortAPICall method called with unconfigured DECORT cloud controller HTTP client.")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Example: to create api_params, one would generally do the following:
|
|
||||||
//
|
|
||||||
// data := []byte(`{"machineId": "2638"}`)
|
|
||||||
// api_params := bytes.NewBuffer(data))
|
|
||||||
//
|
|
||||||
// Or:
|
|
||||||
//
|
|
||||||
// params := url.Values{}
|
|
||||||
// params.Add("machineId", "2638")
|
|
||||||
// params.Add("username", "u")
|
|
||||||
// params.Add("password", "b")
|
|
||||||
// req, _ := http.NewRequest(method, url, strings.NewReader(params.Encode()))
|
|
||||||
//
|
|
||||||
|
|
||||||
if config.auth_mode_code == MODE_UNDEF {
|
|
||||||
return "", fmt.Errorf("decortAPICall method called for unknown authorization mode.")
|
|
||||||
}
|
|
||||||
|
|
||||||
if config.auth_mode_code == MODE_LEGACY {
|
|
||||||
url_values.Add("authkey", config.legacy_sid)
|
|
||||||
}
|
|
||||||
params_str := url_values.Encode()
|
|
||||||
|
|
||||||
req, err := http.NewRequest(method, config.controller_url+api_name, strings.NewReader(params_str))
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
req = req.WithContext(ctx)
|
|
||||||
|
|
||||||
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
|
||||||
req.Header.Set("Content-Length", strconv.Itoa(len(params_str)))
|
|
||||||
req.Header.Set("Accept", "application/json")
|
|
||||||
|
|
||||||
if config.auth_mode_code == MODE_OAUTH2 || config.auth_mode_code == MODE_JWT {
|
|
||||||
req.Header.Set("Authorization", fmt.Sprintf("bearer %s", config.jwt))
|
|
||||||
}
|
|
||||||
|
|
||||||
var resp *http.Response
|
|
||||||
var body []byte
|
|
||||||
for i := 0; i < 5; i++ {
|
|
||||||
resp, err = config.cc_client.Do(req)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
body, err = ioutil.ReadAll(resp.Body)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
resp.Body.Close()
|
|
||||||
log.Debugf("decortAPICall: %s %s\n %s", method, api_name, body)
|
|
||||||
|
|
||||||
if resp.StatusCode == http.StatusOK {
|
|
||||||
return string(body), nil
|
|
||||||
} else {
|
|
||||||
if resp.StatusCode == http.StatusInternalServerError {
|
|
||||||
log.Warnf("got 500, retrying %d/5", i+1)
|
|
||||||
time.Sleep(time.Second * 5)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return "", fmt.Errorf("decortAPICall: unexpected status code %d when calling API %q with request Body %q. Respone:\n%s",
|
|
||||||
resp.StatusCode, req.URL, params_str, body)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return "", fmt.Errorf("decortAPICall: unexpected status code %d when calling API %q with request Body %q. Respone:\n%s",
|
|
||||||
resp.StatusCode, req.URL, params_str, body)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +1,65 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Authors:
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
you may not use this file except in compliance with the License.
|
Nikita Sorokin, <nesorokin@basistech.ru>
|
||||||
You may obtain a copy of the License at
|
Tim Tkachev, <tvtkachev@basistech.ru>
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
Unless required by applicable law or agreed to in writing, software
|
You may obtain a copy of the License at
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
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
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
limitations under the License.
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
*/
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
/*
|
||||||
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Please see README.md to learn where to place source code so that it
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
builds seamlessly.
|
|
||||||
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
|
||||||
*/
|
Please see README.md to learn where to place source code so that it
|
||||||
|
builds seamlessly.
|
||||||
package pfw
|
|
||||||
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
const ComputePfwListAPI = "/restmachine/cloudbroker/compute/pfwList"
|
*/
|
||||||
const ComputePfwAddAPI = "/restmachine/cloudbroker/compute/pfwAdd"
|
|
||||||
const ComputePfwDelAPI = "/restmachine/cloudbroker/compute/pfwDel"
|
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
|
||||||
|
}
|
||||||
@@ -41,13 +41,13 @@ func UtilityLocationGetDefaultGridID(ctx context.Context, m interface{}) (int, e
|
|||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(locList) == 0 {
|
if len(locList.Data) == 0 {
|
||||||
DefaultGridID = 0
|
DefaultGridID = 0
|
||||||
return 0, fmt.Errorf("utilityLocationGetDefaultGridID: retrieved 0 length locations list")
|
return 0, fmt.Errorf("utilityLocationGetDefaultGridID: retrieved 0 length locations list")
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultGridID = int(locList[0].GID)
|
DefaultGridID = int(locList.Data[0].GID)
|
||||||
log.Debugf("utilityLocationGetDefaultGridID: default location GridID %d, name %s", DefaultGridID, locList[0].Name)
|
log.Debugf("utilityLocationGetDefaultGridID: default location GridID %d, name %s", DefaultGridID, locList.Data[0].Name)
|
||||||
|
|
||||||
return DefaultGridID, nil
|
return DefaultGridID, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,154 +1,254 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package provider
|
package provider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"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/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/bservice"
|
"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/disks"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/extnet"
|
"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/flipgroup"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/image"
|
"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/k8s"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/kvmvm"
|
"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/lb"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/locations"
|
"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/rg"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/snapshot"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/snapshot"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/vins"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/stack"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/vins"
|
||||||
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_account "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/account"
|
||||||
cb_grid "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/grid"
|
cb_audit "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/audit"
|
||||||
cb_image "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/image"
|
cb_disks "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/disks"
|
||||||
cb_pcidevice "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/pcidevice"
|
cb_extnet "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/extnet"
|
||||||
cb_rg "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/rg"
|
cb_flipgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/flipgroup"
|
||||||
cb_sep "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/sep"
|
cb_grid "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/grid"
|
||||||
cb_vgpu "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vgpu"
|
cb_image "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/image"
|
||||||
)
|
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"
|
||||||
func newDataSourcesMap() map[string]*schema.Resource {
|
cb_pcidevice "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/pcidevice"
|
||||||
return map[string]*schema.Resource{
|
cb_rg "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/rg"
|
||||||
"decort_account": account.DataSourceAccount(),
|
cb_sep "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/sep"
|
||||||
"decort_resgroup": rg.DataSourceResgroup(),
|
cb_stack "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/stack"
|
||||||
"decort_kvmvm": kvmvm.DataSourceCompute(),
|
cb_vins "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vins"
|
||||||
"decort_kvmvm_list": kvmvm.DataSourceComputeList(),
|
|
||||||
"decort_kvmvm_audits": kvmvm.DataSourceComputeAudits(),
|
// cb_vgpu "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vgpu"
|
||||||
"decort_kvmvm_get_audits": kvmvm.DataSourceComputeGetAudits(),
|
cb_k8ci "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8ci"
|
||||||
"decort_kvmvm_get_console_url": kvmvm.DataSourceComputeGetConsoleUrl(),
|
cb_k8s "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8s"
|
||||||
"decort_kvmvm_get_log": kvmvm.DataSourceComputeGetLog(),
|
)
|
||||||
"decort_kvmvm_pfw_list": kvmvm.DataSourceComputePfwList(),
|
|
||||||
"decort_kvmvm_user_list": kvmvm.DataSourceComputeUserList(),
|
func newDataSourcesMap() map[string]*schema.Resource {
|
||||||
"decort_kvmvm_snapshot_usage": kvmvm.DataSourceComputeSnapshotUsage(),
|
return map[string]*schema.Resource{
|
||||||
"decort_k8s": k8s.DataSourceK8s(),
|
"decort_account": account.DataSourceAccount(),
|
||||||
"decort_k8s_list": k8s.DataSourceK8sList(),
|
"decort_resgroup": rg.DataSourceResgroup(),
|
||||||
"decort_k8s_list_deleted": k8s.DataSourceK8sListDeleted(),
|
"decort_kvmvm": kvmvm.DataSourceCompute(),
|
||||||
"decort_k8s_wg": k8s.DataSourceK8sWg(),
|
"decort_kvmvm_list": kvmvm.DataSourceComputeList(),
|
||||||
"decort_k8s_wg_list": k8s.DataSourceK8sWgList(),
|
"decort_kvmvm_audits": kvmvm.DataSourceComputeAudits(),
|
||||||
"decort_k8s_computes": k8s.DataSourceK8sComputes(),
|
"decort_kvmvm_get_audits": kvmvm.DataSourceComputeGetAudits(),
|
||||||
"decort_vins": vins.DataSourceVins(),
|
"decort_kvmvm_get_console_url": kvmvm.DataSourceComputeGetConsoleUrl(),
|
||||||
"decort_vins_list": vins.DataSourceVinsList(),
|
"decort_kvmvm_get_log": kvmvm.DataSourceComputeGetLog(),
|
||||||
"decort_vins_audits": vins.DataSourceVinsAudits(),
|
"decort_kvmvm_pfw_list": kvmvm.DataSourceComputePfwList(),
|
||||||
"decort_vins_ip_list": vins.DataSourceVinsIpList(),
|
"decort_kvmvm_user_list": kvmvm.DataSourceComputeUserList(),
|
||||||
"decort_vins_list_deleted": vins.DataSourceVinsListDeleted(),
|
"decort_kvmvm_snapshot_usage": kvmvm.DataSourceComputeSnapshotUsage(),
|
||||||
"decort_vins_ext_net_list": vins.DataSourceVinsExtNetList(),
|
"decort_k8s": k8s.DataSourceK8s(),
|
||||||
"decort_vins_nat_rule_list": vins.DataSourceVinsNatRuleList(),
|
"decort_k8s_list": k8s.DataSourceK8sList(),
|
||||||
"decort_snapshot_list": snapshot.DataSourceSnapshotList(),
|
"decort_k8s_list_deleted": k8s.DataSourceK8sListDeleted(),
|
||||||
"decort_disk": disks.DataSourceDisk(),
|
"decort_k8s_wg": k8s.DataSourceK8sWg(),
|
||||||
"decort_disk_list": disks.DataSourceDiskList(),
|
"decort_k8s_wg_list": k8s.DataSourceK8sWgList(),
|
||||||
"decort_rg_list": rg.DataSourceRgList(),
|
"decort_k8s_computes": k8s.DataSourceK8sComputes(),
|
||||||
"decort_rg_affinity_group_computes": rg.DataSourceRgAffinityGroupComputes(),
|
"decort_k8ci_list": k8s.DataSourceK8CIList(),
|
||||||
"decort_rg_affinity_groups_list": rg.DataSourceRgAffinityGroupsList(),
|
"decort_vins": vins.DataSourceVins(),
|
||||||
"decort_rg_affinity_groups_get": rg.DataSourceRgAffinityGroupsGet(),
|
"decort_vins_list": vins.DataSourceVinsList(),
|
||||||
"decort_rg_audits": rg.DataSourceRgAudits(),
|
"decort_vins_audits": vins.DataSourceVinsAudits(),
|
||||||
"decort_rg_list_computes": rg.DataSourceRgListComputes(),
|
"decort_vins_ip_list": vins.DataSourceVinsIpList(),
|
||||||
"decort_rg_list_deleted": rg.DataSourceRgListDeleted(),
|
"decort_vins_list_deleted": vins.DataSourceVinsListDeleted(),
|
||||||
"decort_rg_list_lb": rg.DataSourceRgListLb(),
|
"decort_vins_ext_net_list": vins.DataSourceVinsExtNetList(),
|
||||||
"decort_rg_list_pfw": rg.DataSourceRgListPfw(),
|
"decort_vins_nat_rule_list": vins.DataSourceVinsNatRuleList(),
|
||||||
"decort_rg_list_vins": rg.DataSourceRgListVins(),
|
"decort_vins_static_route_list": vins.DataSourceStaticRouteList(),
|
||||||
"decort_rg_usage": rg.DataSourceRgUsage(),
|
"decort_vins_static_route": vins.DataSourceStaticRoute(),
|
||||||
"decort_disk_list_types_detailed": disks.DataSourceDiskListTypesDetailed(),
|
"decort_snapshot_list": snapshot.DataSourceSnapshotList(),
|
||||||
"decort_disk_list_types": disks.DataSourceDiskListTypes(),
|
"decort_disk": disks.DataSourceDisk(),
|
||||||
"decort_disk_list_deleted": disks.DataSourceDiskListDeleted(),
|
"decort_disk_list": disks.DataSourceDiskList(),
|
||||||
"decort_disk_list_unattached": disks.DataSourceDiskListUnattached(),
|
"decort_rg_list": rg.DataSourceRgList(),
|
||||||
"decort_disk_snapshot": disks.DataSourceDiskSnapshot(),
|
"decort_rg_affinity_group_computes": rg.DataSourceRgAffinityGroupComputes(),
|
||||||
"decort_disk_snapshot_list": disks.DataSourceDiskSnapshotList(),
|
"decort_rg_affinity_groups_list": rg.DataSourceRgAffinityGroupsList(),
|
||||||
"decort_account_list": account.DataSourceAccountList(),
|
"decort_rg_affinity_groups_get": rg.DataSourceRgAffinityGroupsGet(),
|
||||||
"decort_account_computes_list": account.DataSourceAccountComputesList(),
|
"decort_rg_audits": rg.DataSourceRgAudits(),
|
||||||
"decort_account_disks_list": account.DataSourceAccountDisksList(),
|
"decort_rg_list_computes": rg.DataSourceRgListComputes(),
|
||||||
"decort_account_vins_list": account.DataSourceAccountVinsList(),
|
"decort_rg_list_deleted": rg.DataSourceRgListDeleted(),
|
||||||
"decort_account_audits_list": account.DataSourceAccountAuditsList(),
|
"decort_rg_list_lb": rg.DataSourceRgListLb(),
|
||||||
"decort_account_rg_list": account.DataSourceAccountRGList(),
|
"decort_rg_list_pfw": rg.DataSourceRgListPfw(),
|
||||||
"decort_account_consumed_units": account.DataSourceAccountConsumedUnits(),
|
"decort_rg_list_vins": rg.DataSourceRgListVins(),
|
||||||
"decort_account_consumed_units_by_type": account.DataSourceAccountConsumedUnitsByType(),
|
"decort_rg_usage": rg.DataSourceRgUsage(),
|
||||||
"decort_account_reserved_units": account.DataSourceAccountReservedUnits(),
|
"decort_disk_list_types_detailed": disks.DataSourceDiskListTypesDetailed(),
|
||||||
"decort_account_templates_list": account.DataSourceAccountTemplatessList(),
|
"decort_disk_list_types": disks.DataSourceDiskListTypes(),
|
||||||
"decort_account_deleted_list": account.DataSourceAccountDeletedList(),
|
"decort_disk_list_deleted": disks.DataSourceDiskListDeleted(),
|
||||||
"decort_account_flipgroups_list": account.DataSourceAccountFlipGroupsList(),
|
"decort_disk_list_unattached": disks.DataSourceDiskListUnattached(),
|
||||||
"decort_bservice_list": bservice.DataSourceBasicServiceList(),
|
"decort_disk_snapshot": disks.DataSourceDiskSnapshot(),
|
||||||
"decort_bservice": bservice.DataSourceBasicService(),
|
"decort_disk_snapshot_list": disks.DataSourceDiskSnapshotList(),
|
||||||
"decort_bservice_snapshot_list": bservice.DataSourceBasicServiceSnapshotList(),
|
"decort_account_list": account.DataSourceAccountList(),
|
||||||
"decort_bservice_group": bservice.DataSourceBasicServiceGroup(),
|
"decort_account_computes_list": account.DataSourceAccountComputesList(),
|
||||||
"decort_bservice_deleted_list": bservice.DataSourceBasicServiceDeletedList(),
|
"decort_account_disks_list": account.DataSourceAccountDisksList(),
|
||||||
"decort_extnet_list": extnet.DataSourceExtnetList(),
|
"decort_account_vins_list": account.DataSourceAccountVinsList(),
|
||||||
"decort_extnet_computes_list": extnet.DataSourceExtnetComputesList(),
|
"decort_account_audits_list": account.DataSourceAccountAuditsList(),
|
||||||
"decort_extnet": extnet.DataSourceExtnet(),
|
"decort_account_rg_list": account.DataSourceAccountRGList(),
|
||||||
"decort_extnet_default": extnet.DataSourceExtnetDefault(),
|
"decort_account_consumed_units": account.DataSourceAccountConsumedUnits(),
|
||||||
"decort_locations_list": locations.DataSourceLocationsList(),
|
"decort_account_consumed_units_by_type": account.DataSourceAccountConsumedUnitsByType(),
|
||||||
"decort_location_url": locations.DataSourceLocationUrl(),
|
"decort_account_reserved_units": account.DataSourceAccountReservedUnits(),
|
||||||
"decort_image_list": image.DataSourceImageList(),
|
"decort_account_templates_list": account.DataSourceAccountTemplatessList(),
|
||||||
"decort_image": image.DataSourceImage(),
|
"decort_account_deleted_list": account.DataSourceAccountDeletedList(),
|
||||||
"decort_lb": lb.DataSourceLB(),
|
"decort_account_flipgroups_list": account.DataSourceAccountFlipGroupsList(),
|
||||||
"decort_lb_list": lb.DataSourceLBList(),
|
"decort_bservice_list": bservice.DataSourceBasicServiceList(),
|
||||||
"decort_lb_list_deleted": lb.DataSourceLBListDeleted(),
|
"decort_bservice": bservice.DataSourceBasicService(),
|
||||||
"decort_flipgroup": flipgroup.DataSourceFlipgroup(),
|
"decort_bservice_snapshot_list": bservice.DataSourceBasicServiceSnapshotList(),
|
||||||
"decort_flipgroup_list": flipgroup.DataSourceFlipGroupList(),
|
"decort_bservice_group": bservice.DataSourceBasicServiceGroup(),
|
||||||
|
"decort_bservice_deleted_list": bservice.DataSourceBasicServiceDeletedList(),
|
||||||
"decort_cb_account": cb_account.DataSourceAccount(),
|
"decort_extnet_list": extnet.DataSourceExtnetList(),
|
||||||
"decort_cb_account_list": cb_account.DataSourceAccountList(),
|
"decort_extnet_computes_list": extnet.DataSourceExtnetComputesList(),
|
||||||
"decort_cb_account_computes_list": cb_account.DataSourceAccountComputesList(),
|
"decort_extnet": extnet.DataSourceExtnet(),
|
||||||
"decort_cb_account_deleted_list": cb_account.DataSourceAccountDeletedList(),
|
"decort_extnet_default": extnet.DataSourceExtnetDefault(),
|
||||||
"decort_cb_account_disks_list": cb_account.DataSourceAccountDisksList(),
|
"decort_locations_list": locations.DataSourceLocationsList(),
|
||||||
"decort_cb_account_flipgroups_list": cb_account.DataSourceAccountFlipGroupsList(),
|
"decort_location_url": locations.DataSourceLocationUrl(),
|
||||||
"decort_cb_account_rg_list": cb_account.DataSourceAccountRGList(),
|
"decort_image_list": image.DataSourceImageList(),
|
||||||
"decort_cb_account_vins_list": cb_account.DataSourceAccountVinsList(),
|
"decort_image": image.DataSourceImage(),
|
||||||
"decort_cb_account_audits_list": cb_account.DataSourceAccountAuditsList(),
|
"decort_lb": lb.DataSourceLB(),
|
||||||
"decort_cb_disk": cb_disks.DataSourceDisk(),
|
"decort_lb_list": lb.DataSourceLBList(),
|
||||||
"decort_cb_disk_list": cb_disks.DataSourceDiskList(),
|
"decort_lb_list_deleted": lb.DataSourceLBListDeleted(),
|
||||||
"decort_cb_image": cb_image.DataSourceImage(),
|
"decort_flipgroup": flipgroup.DataSourceFlipgroup(),
|
||||||
"decort_cb_grid": cb_grid.DataSourceGrid(),
|
"decort_flipgroup_list": flipgroup.DataSourceFlipGroupList(),
|
||||||
"decort_cb_grid_list": cb_grid.DataSourceGridList(),
|
"decort_stack": stack.DataSourceStack(),
|
||||||
"decort_cb_image_list": cb_image.DataSourceImageList(),
|
"decort_stack_list": stack.DataSourceStackList(),
|
||||||
"decort_cb_image_list_stacks": cb_image.DataSourceImageListStacks(),
|
"decort_account_resource_consumption_list": account.DataSourceAccountResourceConsumptionList(),
|
||||||
"decort_cb_pcidevice": cb_pcidevice.DataSourcePcidevice(),
|
"decort_account_resource_consumption_get": account.DataSourceAccountResourceConsumptionGet(),
|
||||||
"decort_cb_pcidevice_list": cb_pcidevice.DataSourcePcideviceList(),
|
"decort_kvmvm_list_deleted": kvmvm.DataSourceComputeListDeleted(),
|
||||||
"decort_cb_sep_list": cb_sep.DataSourceSepList(),
|
"decort_kvmvm_vgpu_list": kvmvm.DataSourceComputeVGPUList(),
|
||||||
"decort_cb_sep": cb_sep.DataSourceSep(),
|
"decort_kvmvm_pci_device_list": kvmvm.DataSourceComputePCIDeviceList(),
|
||||||
"decort_cb_sep_consumption": cb_sep.DataSourceSepConsumption(),
|
"decort_k8s_wg_cloud_init": k8s.DataSourceK8sWgCloudInit(),
|
||||||
"decort_cb_sep_disk_list": cb_sep.DataSourceSepDiskList(),
|
"decort_rg_resource_consumption_list": rg.DataSourceRGResourceConsumptionList(),
|
||||||
"decort_cb_sep_config": cb_sep.DataSourceSepConfig(),
|
"decort_rg_resource_consumption_get": rg.DataSourceRGResourceConsumptionGet(),
|
||||||
"decort_cb_sep_pool": cb_sep.DataSourceSepPool(),
|
|
||||||
"decort_cb_vgpu": cb_vgpu.DataSourceVGPU(),
|
"decort_cb_account": cb_account.DataSourceAccount(),
|
||||||
"decort_cb_rg_list": cb_rg.DataSourceRgList(),
|
"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_audit": cb_audit.DataSourceAudit(),
|
||||||
|
"decort_cb_audit_list": cb_audit.DataSourceAuditList(),
|
||||||
|
"decort_cb_audit_linked_jobs": cb_audit.DataSourceAuditLinkedJobs(),
|
||||||
|
"decort_cb_extnet": cb_extnet.DataSourceExtnetCB(),
|
||||||
|
"decort_cb_extnet_list": cb_extnet.DataSourceExtnetListCB(),
|
||||||
|
"decort_cb_extnet_default": cb_extnet.DataSourceExtnetDefaultCB(),
|
||||||
|
"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_post_diagnosis": cb_grid.DataSourceGridPostDiagnosis(),
|
||||||
|
"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_image_list_stacks": cb_image.DataSourceImageListStacks(),
|
||||||
|
"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_disk": cb_disks.DataSourceDisk(),
|
||||||
|
"decort_cb_disk_list": cb_disks.DataSourceDiskList(),
|
||||||
|
"decort_cb_disk_list_deleted": cb_disks.DataSourceDiskListDeleted(),
|
||||||
|
"decort_cb_disk_list_types": cb_disks.DataSourceDiskListTypes(),
|
||||||
|
"decort_cb_disk_list_types_detailed": cb_disks.DataSourceDiskListTypesDetailed(),
|
||||||
|
"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_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_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_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_stack_list": cb_stack.DataSourceStacksList(),
|
||||||
|
"decort_cb_stack": cb_stack.DataSourceStack(),
|
||||||
|
"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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,129 +1,168 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package provider
|
package provider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
|
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
"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/location"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/statefuncs"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/statefuncs"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Provider() *schema.Provider {
|
func Provider() *schema.Provider {
|
||||||
return &schema.Provider{
|
return &schema.Provider{
|
||||||
Schema: map[string]*schema.Schema{
|
Schema: map[string]*schema.Schema{
|
||||||
"authenticator": {
|
"authenticator": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
StateFunc: statefuncs.StateFuncToLower,
|
StateFunc: statefuncs.StateFuncToLower,
|
||||||
ValidateFunc: validation.StringInSlice([]string{"oauth2", "legacy", "jwt"}, true), // ignore case while validating
|
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 'oauth2', 'legacy' or 'jwt'.",
|
Description: "Authentication mode to use when connecting to DECORT cloud API. Should be one of 'decs3o', 'legacy', 'jwt' or 'bvs'.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"oauth2_url": {
|
"oauth2_url": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
StateFunc: statefuncs.StateFuncToLower,
|
StateFunc: statefuncs.StateFuncToLower,
|
||||||
DefaultFunc: schema.EnvDefaultFunc("DECORT_OAUTH2_URL", nil),
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_OAUTH2_URL", nil),
|
||||||
Description: "OAuth2 application URL in 'oauth2' authentication mode.",
|
Description: "OAuth2 application URL in 'decs3o' and 'bvs' authentication mode.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"controller_url": {
|
"controller_url": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
ForceNew: true,
|
||||||
StateFunc: statefuncs.StateFuncToLower,
|
StateFunc: statefuncs.StateFuncToLower,
|
||||||
Description: "URL of DECORT Cloud controller to use. API calls will be directed to this URL.",
|
Description: "URL of DECORT Cloud controller to use. API calls will be directed to this URL.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"user": {
|
"user": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
DefaultFunc: schema.EnvDefaultFunc("DECORT_USER", nil),
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_USER", nil),
|
||||||
Description: "User name for DECORT cloud API operations in 'legacy' authentication mode.",
|
Description: "User name for DECORT cloud API operations in 'legacy' authentication mode.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"password": {
|
"password": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
DefaultFunc: schema.EnvDefaultFunc("DECORT_PASSWORD", nil),
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_PASSWORD", nil),
|
||||||
Description: "User password for DECORT cloud API operations in 'legacy' authentication mode.",
|
Description: "User password for DECORT cloud API operations in 'legacy' authentication mode.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"app_id": {
|
"bvs_user": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
DefaultFunc: schema.EnvDefaultFunc("DECORT_APP_ID", nil),
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_BVS_USER", nil),
|
||||||
Description: "Application ID to access DECORT cloud API in 'oauth2' authentication mode.",
|
Description: "User name for DECORT cloud API operations in 'bvs' authentication mode.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"app_secret": {
|
"bvs_password": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
DefaultFunc: schema.EnvDefaultFunc("DECORT_APP_SECRET", nil),
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_BVS_PASSWORD", nil),
|
||||||
Description: "Application secret to access DECORT cloud API in 'oauth2' authentication mode.",
|
Description: "User password for DECORT cloud API operations in 'bvs' authentication mode.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"jwt": {
|
"domain": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
DefaultFunc: schema.EnvDefaultFunc("DECORT_JWT", nil),
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_DOMAIN", nil),
|
||||||
Description: "JWT to access DECORT cloud API in 'jwt' authentication mode.",
|
Description: "User password for DECORT cloud API operations in 'bvs' authentication mode.",
|
||||||
},
|
},
|
||||||
|
|
||||||
"allow_unverified_ssl": {
|
"app_id": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Default: false,
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_APP_ID", nil),
|
||||||
Description: "If true, DECORT API will not verify SSL certificates. Use this with caution and in trusted environments only!",
|
Description: "Application ID to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode.",
|
||||||
},
|
},
|
||||||
},
|
|
||||||
|
"app_secret": {
|
||||||
ResourcesMap: newResourcesMap(),
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
DataSourcesMap: newDataSourcesMap(),
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_APP_SECRET", nil),
|
||||||
|
Description: "Application secret to access DECORT cloud API in 'decs3o' and 'bvs' authentication mode.",
|
||||||
ConfigureContextFunc: providerConfigure,
|
},
|
||||||
}
|
|
||||||
}
|
"jwt": {
|
||||||
|
Type: schema.TypeString,
|
||||||
func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
|
Optional: true,
|
||||||
decsController, err := controller.ControllerConfigure(d)
|
DefaultFunc: schema.EnvDefaultFunc("DECORT_JWT", nil),
|
||||||
if err != nil {
|
Description: "JWT to access DECORT cloud API in 'jwt' authentication mode.",
|
||||||
return nil, diag.FromErr(err)
|
},
|
||||||
}
|
|
||||||
|
"allow_unverified_ssl": {
|
||||||
gridId, err := location.UtilityLocationGetDefaultGridID(ctx, decsController)
|
Type: schema.TypeBool,
|
||||||
if err != nil {
|
Optional: true,
|
||||||
return nil, diag.FromErr(err)
|
Default: false,
|
||||||
}
|
Description: "If true, DECORT API will not verify SSL certificates. Use this with caution and in trusted environments only!",
|
||||||
if gridId == 0 {
|
},
|
||||||
return nil, diag.FromErr(fmt.Errorf("providerConfigure: invalid default Grid ID = 0"))
|
|
||||||
}
|
"path_cfg": {
|
||||||
|
Type: schema.TypeString,
|
||||||
return decsController, nil
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,92 +1,103 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package provider
|
package provider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"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/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/bservice"
|
"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/disks"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/flipgroup"
|
"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/image"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/k8s"
|
"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/kvmvm"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/lb"
|
"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/pfw"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/rg"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/rg"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/snapshot"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/snapshot"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/vins"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudapi/vins"
|
||||||
|
|
||||||
cb_account "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/account"
|
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_disks "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/disks"
|
||||||
cb_image "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/image"
|
cb_extnet "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/extnet"
|
||||||
cb_k8s "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8s"
|
cb_flipgroup "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/flipgroup"
|
||||||
cb_kvmvm "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/kvmvm"
|
cb_image "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/image"
|
||||||
cb_pcidevice "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/pcidevice"
|
cb_k8ci "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8ci"
|
||||||
cb_pfw "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/pfw"
|
cb_k8s "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/k8s"
|
||||||
cb_rg "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/rg"
|
cb_kvmvm "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/kvmvm"
|
||||||
cb_sep "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/sep"
|
cb_lb "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/lb"
|
||||||
cb_snapshot "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/snapshot"
|
cb_pcidevice "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/pcidevice"
|
||||||
cb_vins "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vins"
|
cb_rg "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/rg"
|
||||||
)
|
cb_sep "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/sep"
|
||||||
|
cb_vins "repository.basistech.ru/BASIS/terraform-provider-decort/internal/service/cloudbroker/vins"
|
||||||
func newResourcesMap() map[string]*schema.Resource {
|
)
|
||||||
return map[string]*schema.Resource{
|
|
||||||
"decort_resgroup": rg.ResourceResgroup(),
|
func newResourcesMap() map[string]*schema.Resource {
|
||||||
"decort_kvmvm": kvmvm.ResourceCompute(),
|
return map[string]*schema.Resource{
|
||||||
"decort_disk": disks.ResourceDisk(),
|
"decort_resgroup": rg.ResourceResgroup(),
|
||||||
"decort_disk_snapshot": disks.ResourceDiskSnapshot(),
|
"decort_kvmvm": kvmvm.ResourceCompute(),
|
||||||
"decort_vins": vins.ResourceVins(),
|
"decort_disk": disks.ResourceDisk(),
|
||||||
"decort_pfw": pfw.ResourcePfw(),
|
"decort_disk_snapshot": disks.ResourceDiskSnapshot(),
|
||||||
"decort_k8s": k8s.ResourceK8s(),
|
"decort_vins": vins.ResourceVins(),
|
||||||
"decort_k8s_wg": k8s.ResourceK8sWg(),
|
"decort_pfw": pfw.ResourcePfw(),
|
||||||
"decort_k8s_cp": k8s.ResourceK8sCP(),
|
"decort_k8s": k8s.ResourceK8s(),
|
||||||
"decort_snapshot": snapshot.ResourceSnapshot(),
|
"decort_k8s_wg": k8s.ResourceK8sWg(),
|
||||||
"decort_account": account.ResourceAccount(),
|
"decort_k8s_cp": k8s.ResourceK8sCP(),
|
||||||
"decort_bservice": bservice.ResourceBasicService(),
|
"decort_snapshot": snapshot.ResourceSnapshot(),
|
||||||
"decort_bservice_group": bservice.ResourceBasicServiceGroup(),
|
"decort_account": account.ResourceAccount(),
|
||||||
"decort_image": image.ResourceImage(),
|
"decort_bservice": bservice.ResourceBasicService(),
|
||||||
"decort_image_virtual": image.ResourceImageVirtual(),
|
"decort_bservice_group": bservice.ResourceBasicServiceGroup(),
|
||||||
"decort_lb": lb.ResourceLB(),
|
"decort_image": image.ResourceImage(),
|
||||||
"decort_lb_backend": lb.ResourceLBBackend(),
|
"decort_image_virtual": image.ResourceImageVirtual(),
|
||||||
"decort_lb_backend_server": lb.ResourceLBBackendServer(),
|
"decort_lb": lb.ResourceLB(),
|
||||||
"decort_lb_frontend": lb.ResourceLBFrontend(),
|
"decort_lb_backend": lb.ResourceLBBackend(),
|
||||||
"decort_lb_frontend_bind": lb.ResourceLBFrontendBind(),
|
"decort_lb_backend_server": lb.ResourceLBBackendServer(),
|
||||||
"decort_flipgroup": flipgroup.ResourceFlipgroup(),
|
"decort_lb_frontend": lb.ResourceLBFrontend(),
|
||||||
|
"decort_lb_frontend_bind": lb.ResourceLBFrontendBind(),
|
||||||
"decort_cb_account": cb_account.ResourceAccount(),
|
"decort_flipgroup": flipgroup.ResourceFlipgroup(),
|
||||||
"decort_cb_disk": cb_disks.ResourceDisk(),
|
"decort_vins_static_route": vins.ResourceStaticRoute(),
|
||||||
"decort_cb_image": cb_image.ResourceImage(),
|
|
||||||
"decort_cb_virtual_image": cb_image.ResourceVirtualImage(),
|
"decort_cb_account": cb_account.ResourceAccount(),
|
||||||
"decort_cb_cdrom_image": cb_image.ResourceCDROMImage(),
|
"decort_cb_extnet": cb_extnet.ResourceExtnetCB(),
|
||||||
"decort_cb_delete_images": cb_image.ResourceDeleteImages(),
|
"decort_cb_extnet_static_route": cb_extnet.ResourceStaticRoute(),
|
||||||
"decort_cb_pcidevice": cb_pcidevice.ResourcePcidevice(),
|
"decort_cb_disk": cb_disks.ResourceDisk(),
|
||||||
"decort_cb_sep": cb_sep.ResourceSep(),
|
"decort_cb_disk_snapshot": cb_disks.ResourceDiskSnapshot(),
|
||||||
"decort_cb_sep_config": cb_sep.ResourceSepConfig(),
|
"decort_cb_image": cb_image.ResourceImage(),
|
||||||
"decort_cb_resgroup": cb_rg.ResourceResgroup(),
|
"decort_cb_virtual_image": cb_image.ResourceVirtualImage(),
|
||||||
"decort_cb_kvmvm": cb_kvmvm.ResourceCompute(),
|
"decort_cb_cdrom_image": cb_image.ResourceCDROMImage(),
|
||||||
"decort_cb_vins": cb_vins.ResourceVins(),
|
"decort_cb_pcidevice": cb_pcidevice.ResourcePcidevice(),
|
||||||
"decort_cb_pfw": cb_pfw.ResourcePfw(),
|
"decort_cb_sep": cb_sep.ResourceSep(),
|
||||||
"decort_cb_k8s": cb_k8s.ResourceK8s(),
|
"decort_cb_sep_config": cb_sep.ResourceSepConfig(),
|
||||||
"decort_cb_k8s_wg": cb_k8s.ResourceK8sWg(),
|
"decort_cb_kvmvm": cb_kvmvm.ResourceCompute(),
|
||||||
"decort_cb_snapshot": cb_snapshot.ResourceSnapshot(),
|
"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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -41,9 +41,11 @@ import (
|
|||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TODO: resources (additional ds / additional request inside body (?))
|
||||||
func dataSourceAccountRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
acc, err := utilityAccountCheckPresence(ctx, d, m)
|
acc, err := utilityAccountCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,6 +100,10 @@ func resourceLimitsSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeFloat,
|
Type: schema.TypeFloat,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"cu_dm": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
"cu_i": {
|
"cu_i": {
|
||||||
Type: schema.TypeFloat,
|
Type: schema.TypeFloat,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -268,13 +274,13 @@ func dataSourceAccountSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"resources": {
|
// "resources": {
|
||||||
Type: schema.TypeList,
|
// Type: schema.TypeList,
|
||||||
Computed: true,
|
// Computed: true,
|
||||||
Elem: &schema.Resource{
|
// Elem: &schema.Resource{
|
||||||
Schema: resourcesSchemaMake(),
|
// Schema: resourcesSchemaMake(),
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
"ckey": {
|
"ckey": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -1,127 +1,128 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountAuditsList(aal account.ListAudits) []map[string]interface{} {
|
func flattenAccountAuditsList(aal account.ListAudits) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, aa := range aal {
|
for _, aa := range aal {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"call": aa.Call,
|
"call": aa.Call,
|
||||||
"responsetime": aa.ResponseTime,
|
"responsetime": aa.ResponseTime,
|
||||||
"statuscode": aa.StatusCode,
|
"statuscode": aa.StatusCode,
|
||||||
"timestamp": aa.Timestamp,
|
"timestamp": aa.Timestamp,
|
||||||
"user": aa.User,
|
"user": aa.User,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountAuditsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountAuditsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountAuditsList, err := utilityAccountAuditsListCheckPresence(ctx, d, m)
|
accountAuditsList, err := utilityAccountAuditsListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountAuditsList(accountAuditsList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountAuditsList(accountAuditsList))
|
||||||
return nil
|
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceAccountAuditsListSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceAccountAuditsListSchemaMake() map[string]*schema.Schema {
|
||||||
"account_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"account_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
Description: "ID of the account",
|
Required: true,
|
||||||
},
|
Description: "ID of the account",
|
||||||
"items": {
|
},
|
||||||
Type: schema.TypeList,
|
"items": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Description: "Search Result",
|
Computed: true,
|
||||||
Elem: &schema.Resource{
|
Description: "Search Result",
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"call": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeString,
|
"call": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"responsetime": {
|
},
|
||||||
Type: schema.TypeFloat,
|
"responsetime": {
|
||||||
Computed: true,
|
Type: schema.TypeFloat,
|
||||||
},
|
Computed: true,
|
||||||
"statuscode": {
|
},
|
||||||
Type: schema.TypeInt,
|
"statuscode": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"timestamp": {
|
},
|
||||||
Type: schema.TypeFloat,
|
"timestamp": {
|
||||||
Computed: true,
|
Type: schema.TypeFloat,
|
||||||
},
|
Computed: true,
|
||||||
"user": {
|
},
|
||||||
Type: schema.TypeString,
|
"user": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
return res
|
}
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func DataSourceAccountAuditsList() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
func DataSourceAccountAuditsList() *schema.Resource {
|
||||||
SchemaVersion: 1,
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
ReadContext: dataSourceAccountAuditsListRead,
|
|
||||||
|
ReadContext: dataSourceAccountAuditsListRead,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
Timeouts: &schema.ResourceTimeout{
|
||||||
Default: &constants.Timeout60s,
|
Read: &constants.Timeout30s,
|
||||||
},
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
Schema: dataSourceAccountAuditsListSchemaMake(),
|
|
||||||
}
|
Schema: dataSourceAccountAuditsListSchemaMake(),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,202 +1,258 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountComputesList(acl account.ListComputes) []map[string]interface{} {
|
func flattenAccountComputesList(acl *account.ListComputes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, acc := range acl {
|
for _, acc := range acl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": acc.AccountID,
|
"account_id": acc.AccountID,
|
||||||
"account_name": acc.AccountName,
|
"account_name": acc.AccountName,
|
||||||
"cpus": acc.CPUs,
|
"cpus": acc.CPUs,
|
||||||
"created_by": acc.CreatedBy,
|
"created_by": acc.CreatedBy,
|
||||||
"created_time": acc.CreatedTime,
|
"created_time": acc.CreatedTime,
|
||||||
"deleted_by": acc.DeletedBy,
|
"deleted_by": acc.DeletedBy,
|
||||||
"deleted_time": acc.DeletedTime,
|
"deleted_time": acc.DeletedTime,
|
||||||
"compute_id": acc.ComputeID,
|
"compute_id": acc.ComputeID,
|
||||||
"compute_name": acc.ComputeName,
|
"compute_name": acc.ComputeName,
|
||||||
"ram": acc.RAM,
|
"ram": acc.RAM,
|
||||||
"registered": acc.Registered,
|
"registered": acc.Registered,
|
||||||
"rg_id": acc.RGID,
|
"rg_id": acc.RGID,
|
||||||
"rg_name": acc.RGName,
|
"rg_name": acc.RGName,
|
||||||
"status": acc.Status,
|
"status": acc.Status,
|
||||||
"tech_status": acc.TechStatus,
|
"tech_status": acc.TechStatus,
|
||||||
"total_disks_size": acc.TotalDisksSize,
|
"total_disks_size": acc.TotalDisksSize,
|
||||||
"updated_by": acc.UpdatedBy,
|
"updated_by": acc.UpdatedBy,
|
||||||
"updated_time": acc.UpdatedTime,
|
"updated_time": acc.UpdatedTime,
|
||||||
"user_managed": acc.UserManaged,
|
"user_managed": acc.UserManaged,
|
||||||
"vins_connected": acc.VINSConnected,
|
"vins_connected": acc.VINSConnected,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountComputesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountComputesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountComputesList, err := utilityAccountComputesListCheckPresence(ctx, d, m)
|
accountComputesList, err := utilityAccountComputesListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountComputesList(accountComputesList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountComputesList(accountComputesList))
|
||||||
return nil
|
d.Set("entry_count", accountComputesList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountComputesListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceAccountComputesListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Required: true,
|
"account_id": {
|
||||||
Description: "ID of the account",
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"items": {
|
Description: "ID of the account",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"compute_id": {
|
||||||
Description: "Search Result",
|
Type: schema.TypeInt,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Description: "Filter by compute ID",
|
||||||
"account_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"account_name": {
|
Description: "Filter by compute name",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"rg_name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"cpus": {
|
Optional: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Filter by RG name",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"rg_id": {
|
||||||
"created_by": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Filter by RG ID",
|
||||||
},
|
},
|
||||||
"created_time": {
|
"tech_status": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "Filter by tech. status",
|
||||||
"deleted_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"ip_address": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"deleted_time": {
|
Description: "Filter by IP address",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"extnet_name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"compute_id": {
|
Optional: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Filter by extnet name",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"extnet_id": {
|
||||||
"compute_name": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Filter by extnet ID",
|
||||||
},
|
},
|
||||||
"ram": {
|
"page": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "Page number",
|
||||||
"registered": {
|
},
|
||||||
Type: schema.TypeBool,
|
"size": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"rg_id": {
|
Description: "Page size",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"items": {
|
||||||
},
|
Type: schema.TypeList,
|
||||||
"rg_name": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Description: "Search Result",
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
},
|
Schema: map[string]*schema.Schema{
|
||||||
"status": {
|
"account_id": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"tech_status": {
|
"account_name": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"total_disks_size": {
|
"cpus": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"updated_by": {
|
"created_by": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"updated_time": {
|
"created_time": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"user_managed": {
|
"deleted_by": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"vins_connected": {
|
"deleted_time": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"compute_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
}
|
},
|
||||||
return res
|
"compute_name": {
|
||||||
}
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
func DataSourceAccountComputesList() *schema.Resource {
|
},
|
||||||
return &schema.Resource{
|
"ram": {
|
||||||
SchemaVersion: 1,
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
ReadContext: dataSourceAccountComputesListRead,
|
},
|
||||||
|
"registered": {
|
||||||
Timeouts: &schema.ResourceTimeout{
|
Type: schema.TypeBool,
|
||||||
Read: &constants.Timeout30s,
|
Computed: true,
|
||||||
Default: &constants.Timeout60s,
|
},
|
||||||
},
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
Schema: dataSourceAccountComputesListSchemaMake(),
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,110 +1,116 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceAccountConsumedUnitsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountConsumedUnitsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountConsumedUnits, err := utilityAccountConsumedUnitsCheckPresence(ctx, d, m)
|
accountConsumedUnits, err := utilityAccountConsumedUnitsCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("cu_c", accountConsumedUnits.CUC)
|
d.SetId(id.String())
|
||||||
d.Set("cu_d", accountConsumedUnits.CUD)
|
d.Set("cu_c", accountConsumedUnits.CUC)
|
||||||
d.Set("cu_i", accountConsumedUnits.CUI)
|
d.Set("cu_d", accountConsumedUnits.CUD)
|
||||||
d.Set("cu_m", accountConsumedUnits.CUM)
|
d.Set("cu_dm", accountConsumedUnits.CUDM)
|
||||||
d.Set("cu_np", accountConsumedUnits.CUNP)
|
d.Set("cu_i", accountConsumedUnits.CUI)
|
||||||
d.Set("gpu_units", accountConsumedUnits.GPUUnits)
|
d.Set("cu_m", accountConsumedUnits.CUM)
|
||||||
|
d.Set("cu_np", accountConsumedUnits.CUNP)
|
||||||
return nil
|
d.Set("gpu_units", accountConsumedUnits.GPUUnits)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountConsumedUnitsSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceAccountConsumedUnitsSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Required: true,
|
"account_id": {
|
||||||
Description: "ID of the account",
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"cu_c": {
|
Description: "ID of the account",
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_c": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_d": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_d": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_i": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_dm": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_m": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_i": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_np": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_m": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"gpu_units": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_np": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
}
|
Computed: true,
|
||||||
return res
|
},
|
||||||
}
|
"gpu_units": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
func DataSourceAccountConsumedUnits() *schema.Resource {
|
Computed: true,
|
||||||
return &schema.Resource{
|
},
|
||||||
SchemaVersion: 1,
|
}
|
||||||
|
return res
|
||||||
ReadContext: dataSourceAccountConsumedUnitsRead,
|
}
|
||||||
|
|
||||||
Timeouts: &schema.ResourceTimeout{
|
func DataSourceAccountConsumedUnits() *schema.Resource {
|
||||||
Read: &constants.Timeout30s,
|
return &schema.Resource{
|
||||||
Default: &constants.Timeout60s,
|
SchemaVersion: 1,
|
||||||
},
|
|
||||||
|
ReadContext: dataSourceAccountConsumedUnitsRead,
|
||||||
Schema: dataSourceAccountConsumedUnitsSchemaMake(),
|
|
||||||
}
|
Timeouts: &schema.ResourceTimeout{
|
||||||
}
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceAccountConsumedUnitsSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,90 +1,91 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceAccountConsumedUnitsByTypeRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountConsumedUnitsByTypeRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
result, err := utilityAccountConsumedUnitsByTypeCheckPresence(ctx, d, m)
|
result, err := utilityAccountConsumedUnitsByTypeCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("cu_result", result)
|
d.SetId(id.String())
|
||||||
|
d.Set("cu_result", result)
|
||||||
return nil
|
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceAccountConsumedUnitsByTypeSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceAccountConsumedUnitsByTypeSchemaMake() map[string]*schema.Schema {
|
||||||
"account_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"account_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
Description: "ID of the account",
|
Required: true,
|
||||||
},
|
Description: "ID of the account",
|
||||||
"cu_type": {
|
},
|
||||||
Type: schema.TypeString,
|
"cu_type": {
|
||||||
Required: true,
|
Type: schema.TypeString,
|
||||||
Description: "cloud unit resource type",
|
Required: true,
|
||||||
},
|
Description: "cloud unit resource type",
|
||||||
"cu_result": {
|
},
|
||||||
Type: schema.TypeFloat,
|
"cu_result": {
|
||||||
Computed: true,
|
Type: schema.TypeFloat,
|
||||||
},
|
Computed: true,
|
||||||
}
|
},
|
||||||
return res
|
}
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func DataSourceAccountConsumedUnitsByType() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
func DataSourceAccountConsumedUnitsByType() *schema.Resource {
|
||||||
SchemaVersion: 1,
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
ReadContext: dataSourceAccountConsumedUnitsByTypeRead,
|
|
||||||
|
ReadContext: dataSourceAccountConsumedUnitsByTypeRead,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
Timeouts: &schema.ResourceTimeout{
|
||||||
Default: &constants.Timeout60s,
|
Read: &constants.Timeout30s,
|
||||||
},
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
Schema: dataSourceAccountConsumedUnitsByTypeSchemaMake(),
|
|
||||||
}
|
Schema: dataSourceAccountConsumedUnitsByTypeSchemaMake(),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,70 +1,78 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceAccountDeletedListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountDeletedListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountDeletedList, err := utilityAccountDeletedListCheckPresence(ctx, d, m)
|
accountDeletedList, err := utilityAccountDeletedListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountList(accountDeletedList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountList(accountDeletedList))
|
||||||
return nil
|
d.Set("entry_count", accountDeletedList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func DataSourceAccountDeletedList() *schema.Resource {
|
}
|
||||||
return &schema.Resource{
|
|
||||||
SchemaVersion: 1,
|
func dataSourceAccountDeletedListSchemaMake() map[string]*schema.Schema {
|
||||||
|
temp := dataSourceAccountListSchemaMake()
|
||||||
ReadContext: dataSourceAccountDeletedListRead,
|
delete(temp, "status")
|
||||||
|
return temp
|
||||||
Timeouts: &schema.ResourceTimeout{
|
}
|
||||||
Read: &constants.Timeout30s,
|
|
||||||
Default: &constants.Timeout60s,
|
func DataSourceAccountDeletedList() *schema.Resource {
|
||||||
},
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
Schema: dataSourceAccountListSchemaMake(),
|
|
||||||
}
|
ReadContext: dataSourceAccountDeletedListRead,
|
||||||
}
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceAccountDeletedListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,136 +1,172 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountDisksList(adl account.ListDisks) []map[string]interface{} {
|
func flattenAccountDisksList(adl *account.ListDisks) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, ad := range adl {
|
for _, ad := range adl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"disk_id": ad.ID,
|
"disk_id": ad.ID,
|
||||||
"disk_name": ad.Name,
|
"disk_name": ad.Name,
|
||||||
"pool": ad.Pool,
|
"pool": ad.Pool,
|
||||||
"sep_id": ad.SEPID,
|
"sep_id": ad.SEPID,
|
||||||
"shareable": ad.Shareable,
|
"shareable": ad.Shareable,
|
||||||
"size_max": ad.SizeMax,
|
"size_max": ad.SizeMax,
|
||||||
"type": ad.Type,
|
"type": ad.Type,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountDisksListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountDisksListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountDisksList, err := utilityAccountDisksListCheckPresence(ctx, d, m)
|
accountDisksList, err := utilityAccountDisksListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountDisksList(accountDisksList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountDisksList(accountDisksList))
|
||||||
return nil
|
d.Set("entry_count", accountDisksList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountDisksListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceAccountDisksListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Required: true,
|
"account_id": {
|
||||||
Description: "ID of the account",
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"items": {
|
Description: "ID of the account",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"disk_id": {
|
||||||
Description: "Search Result",
|
Type: schema.TypeInt,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Description: "Filter by disk ID",
|
||||||
"disk_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"disk_name": {
|
Description: "Filter by disk name",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"disk_max_size": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"pool": {
|
Optional: true,
|
||||||
Type: schema.TypeString,
|
Description: "Filter by disk max size",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"type": {
|
||||||
"sep_id": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeInt,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Filter by disk type",
|
||||||
},
|
},
|
||||||
"shareable": {
|
"page": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "Page number",
|
||||||
"size_max": {
|
},
|
||||||
Type: schema.TypeInt,
|
"size": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"type": {
|
Description: "Page size",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"items": {
|
||||||
},
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
},
|
Description: "Search Result",
|
||||||
},
|
Elem: &schema.Resource{
|
||||||
}
|
Schema: map[string]*schema.Schema{
|
||||||
return res
|
"disk_id": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
func DataSourceAccountDisksList() *schema.Resource {
|
},
|
||||||
return &schema.Resource{
|
"disk_name": {
|
||||||
SchemaVersion: 1,
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
ReadContext: dataSourceAccountDisksListRead,
|
},
|
||||||
|
"pool": {
|
||||||
Timeouts: &schema.ResourceTimeout{
|
Type: schema.TypeString,
|
||||||
Read: &constants.Timeout30s,
|
Computed: true,
|
||||||
Default: &constants.Timeout60s,
|
},
|
||||||
},
|
"sep_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
Schema: dataSourceAccountDisksListSchemaMake(),
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,207 +1,253 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountFlipGroupsList(afgl account.ListFLIPGroups) []map[string]interface{} {
|
func flattenAccountFlipGroupsList(afgl *account.ListFLIPGroups) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, afg := range afgl {
|
for _, afg := range afgl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": afg.AccountID,
|
"account_id": afg.AccountID,
|
||||||
"client_type": afg.ClientType,
|
"client_type": afg.ClientType,
|
||||||
"conn_type": afg.ConnType,
|
"conn_type": afg.ConnType,
|
||||||
"created_by": afg.CreatedBy,
|
"created_by": afg.CreatedBy,
|
||||||
"created_time": afg.CreatedTime,
|
"created_time": afg.CreatedTime,
|
||||||
"default_gw": afg.DefaultGW,
|
"default_gw": afg.DefaultGW,
|
||||||
"deleted_by": afg.DeletedBy,
|
"deleted_by": afg.DeletedBy,
|
||||||
"deleted_time": afg.DeletedTime,
|
"deleted_time": afg.DeletedTime,
|
||||||
"desc": afg.Description,
|
"desc": afg.Description,
|
||||||
"gid": afg.GID,
|
"gid": afg.GID,
|
||||||
"guid": afg.GUID,
|
"guid": afg.GUID,
|
||||||
"fg_id": afg.ID,
|
"fg_id": afg.ID,
|
||||||
"ip": afg.IP,
|
"ip": afg.IP,
|
||||||
"milestones": afg.Milestones,
|
"milestones": afg.Milestones,
|
||||||
"fg_name": afg.Name,
|
"fg_name": afg.Name,
|
||||||
"net_id": afg.NetID,
|
"net_id": afg.NetID,
|
||||||
"net_type": afg.NetType,
|
"net_type": afg.NetType,
|
||||||
"netmask": afg.NetMask,
|
"netmask": afg.NetMask,
|
||||||
"status": afg.Status,
|
"status": afg.Status,
|
||||||
"updated_by": afg.UpdatedBy,
|
"updated_by": afg.UpdatedBy,
|
||||||
"updated_time": afg.UpdatedTime,
|
"updated_time": afg.UpdatedTime,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountFlipGroupsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountFlipGroupsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountFlipGroupsList, err := utilityAccountFlipGroupsListCheckPresence(ctx, d, m)
|
accountFlipGroupsList, err := utilityAccountFlipGroupsListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountFlipGroupsList(accountFlipGroupsList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountFlipGroupsList(accountFlipGroupsList))
|
||||||
return nil
|
d.Set("entry_count", accountFlipGroupsList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountFlipGroupsListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceAccountFlipGroupsListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Required: true,
|
"account_id": {
|
||||||
Description: "ID of the account",
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"items": {
|
Description: "ID of the account",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"name": {
|
||||||
Description: "Search Result",
|
Type: schema.TypeString,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Description: "Filter by name",
|
||||||
"account_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"vins_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"client_type": {
|
Description: "Filter by ViNS ID",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"vins_name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"conn_type": {
|
Optional: true,
|
||||||
Type: schema.TypeString,
|
Description: "Filter by ViNS name",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"extnet_id": {
|
||||||
"created_by": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Filter by extnet ID",
|
||||||
},
|
},
|
||||||
"created_time": {
|
"by_ip": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "Filter by IP",
|
||||||
"default_gw": {
|
},
|
||||||
Type: schema.TypeString,
|
"flipgroup_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"deleted_by": {
|
Description: "Filter by flipgroup ID",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"page": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"deleted_time": {
|
Optional: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Page number",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"size": {
|
||||||
"desc": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Page size",
|
||||||
},
|
},
|
||||||
"gid": {
|
"items": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
Description: "Search Result",
|
||||||
"guid": {
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
Computed: true,
|
"account_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"fg_id": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"client_type": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"ip": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"conn_type": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"milestones": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"created_by": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"fg_name": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"created_time": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"net_id": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"default_gw": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"net_type": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"deleted_by": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"netmask": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"deleted_time": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"status": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"desc": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"updated_by": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"gid": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"updated_time": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"guid": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"fg_id": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
return res
|
Computed: true,
|
||||||
}
|
},
|
||||||
|
"ip": {
|
||||||
func DataSourceAccountFlipGroupsList() *schema.Resource {
|
Type: schema.TypeString,
|
||||||
return &schema.Resource{
|
Computed: true,
|
||||||
SchemaVersion: 1,
|
},
|
||||||
|
"milestones": {
|
||||||
ReadContext: dataSourceAccountFlipGroupsListRead,
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
},
|
||||||
Read: &constants.Timeout30s,
|
"fg_name": {
|
||||||
Default: &constants.Timeout60s,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
|
},
|
||||||
Schema: dataSourceAccountFlipGroupsListSchemaMake(),
|
"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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
|
Authors:
|
||||||
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
"cu_np": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gpu_units": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,184 +1,210 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountList(al account.ListAccounts) []map[string]interface{} {
|
func flattenAccountList(al *account.ListAccounts) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, acc := range al {
|
for _, acc := range al.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"acl": flattenRgAcl(acc.ACL),
|
"acl": flattenRgAcl(acc.ACL),
|
||||||
"created_time": acc.CreatedTime,
|
"created_time": acc.CreatedTime,
|
||||||
"deleted_time": acc.DeletedTime,
|
"deleted_time": acc.DeletedTime,
|
||||||
"account_id": acc.ID,
|
"account_id": acc.ID,
|
||||||
"account_name": acc.Name,
|
"account_name": acc.Name,
|
||||||
"status": acc.Status,
|
"status": acc.Status,
|
||||||
"updated_time": acc.UpdatedTime,
|
"updated_time": acc.UpdatedTime,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgAcl(rgAcls []account.RecordACL) []map[string]interface{} {
|
func flattenRgAcl(rgAcls []account.RecordACL) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, rgAcl := range rgAcls {
|
for _, rgAcl := range rgAcls {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"explicit": rgAcl.IsExplicit,
|
"explicit": rgAcl.IsExplicit,
|
||||||
"guid": rgAcl.GUID,
|
"guid": rgAcl.GUID,
|
||||||
"right": rgAcl.Rights,
|
"right": rgAcl.Rights,
|
||||||
"status": rgAcl.Status,
|
"status": rgAcl.Status,
|
||||||
"type": rgAcl.Type,
|
"type": rgAcl.Type,
|
||||||
"user_group_id": rgAcl.UgroupID,
|
"user_group_id": rgAcl.UgroupID,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountList, err := utilityAccountListCheckPresence(ctx, d, m)
|
accountList, err := utilityAccountListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountList(accountList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountList(accountList))
|
||||||
return nil
|
d.Set("entry_count", accountList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"page": {
|
func dataSourceAccountListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Optional: true,
|
"by_id": {
|
||||||
Description: "Page number",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"size": {
|
Description: "Filter by ID",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"name": {
|
||||||
Description: "Page size",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"items": {
|
Description: "Filter by name",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"acl": {
|
||||||
Elem: &schema.Resource{
|
Type: schema.TypeString,
|
||||||
Schema: map[string]*schema.Schema{
|
Optional: true,
|
||||||
"acl": {
|
Description: "Filter by ACL",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"status": {
|
||||||
Elem: &schema.Resource{
|
Type: schema.TypeString,
|
||||||
Schema: map[string]*schema.Schema{
|
Optional: true,
|
||||||
"explicit": {
|
Description: "Filter by status",
|
||||||
Type: schema.TypeBool,
|
},
|
||||||
Computed: true,
|
"page": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"guid": {
|
Optional: true,
|
||||||
Type: schema.TypeString,
|
Description: "Page number",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"size": {
|
||||||
"right": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Page size",
|
||||||
},
|
},
|
||||||
"status": {
|
"items": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
Elem: &schema.Resource{
|
||||||
"type": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeString,
|
"acl": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
"user_group_id": {
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeString,
|
Schema: map[string]*schema.Schema{
|
||||||
Computed: true,
|
"explicit": {
|
||||||
},
|
Type: schema.TypeBool,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"guid": {
|
||||||
"created_time": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
},
|
||||||
},
|
"right": {
|
||||||
"deleted_time": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
},
|
||||||
},
|
"status": {
|
||||||
"account_id": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
},
|
||||||
},
|
"type": {
|
||||||
"account_name": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
},
|
||||||
},
|
"user_group_id": {
|
||||||
"status": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
},
|
||||||
},
|
},
|
||||||
"updated_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"created_time": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"deleted_time": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
return res
|
Computed: true,
|
||||||
}
|
},
|
||||||
|
"account_id": {
|
||||||
func DataSourceAccountList() *schema.Resource {
|
Type: schema.TypeInt,
|
||||||
return &schema.Resource{
|
Computed: true,
|
||||||
SchemaVersion: 1,
|
},
|
||||||
|
"account_name": {
|
||||||
ReadContext: dataSourceAccountListRead,
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
},
|
||||||
Read: &constants.Timeout30s,
|
"status": {
|
||||||
Default: &constants.Timeout60s,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
|
},
|
||||||
Schema: dataSourceAccountListSchemaMake(),
|
"updated_time": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
}
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,110 +1,116 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceAccountReservedUnitsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountReservedUnitsRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountReservedUnits, err := utilityAccountReservedUnitsCheckPresence(ctx, d, m)
|
accountReservedUnits, err := utilityAccountReservedUnitsCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("cu_c", accountReservedUnits.CUC)
|
d.SetId(id.String())
|
||||||
d.Set("cu_d", accountReservedUnits.CUD)
|
d.Set("cu_c", accountReservedUnits.CUC)
|
||||||
d.Set("cu_i", accountReservedUnits.CUI)
|
d.Set("cu_d", accountReservedUnits.CUD)
|
||||||
d.Set("cu_m", accountReservedUnits.CUM)
|
d.Set("cu_dm", accountReservedUnits.CUDM)
|
||||||
d.Set("cu_np", accountReservedUnits.CUNP)
|
d.Set("cu_i", accountReservedUnits.CUI)
|
||||||
d.Set("gpu_units", accountReservedUnits.GPUUnits)
|
d.Set("cu_m", accountReservedUnits.CUM)
|
||||||
|
d.Set("cu_np", accountReservedUnits.CUNP)
|
||||||
return nil
|
d.Set("gpu_units", accountReservedUnits.GPUUnits)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountReservedUnitsSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceAccountReservedUnitsSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Required: true,
|
"account_id": {
|
||||||
Description: "ID of the account",
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"cu_c": {
|
Description: "ID of the account",
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_c": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_d": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_d": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_i": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_dm": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_m": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_i": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"cu_np": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_m": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
"gpu_units": {
|
Computed: true,
|
||||||
Type: schema.TypeFloat,
|
},
|
||||||
Computed: true,
|
"cu_np": {
|
||||||
},
|
Type: schema.TypeFloat,
|
||||||
}
|
Computed: true,
|
||||||
return res
|
},
|
||||||
}
|
"gpu_units": {
|
||||||
|
Type: schema.TypeFloat,
|
||||||
func DataSourceAccountReservedUnits() *schema.Resource {
|
Computed: true,
|
||||||
return &schema.Resource{
|
},
|
||||||
SchemaVersion: 1,
|
}
|
||||||
|
return res
|
||||||
ReadContext: dataSourceAccountReservedUnitsRead,
|
}
|
||||||
|
|
||||||
Timeouts: &schema.ResourceTimeout{
|
func DataSourceAccountReservedUnits() *schema.Resource {
|
||||||
Read: &constants.Timeout30s,
|
return &schema.Resource{
|
||||||
Default: &constants.Timeout60s,
|
SchemaVersion: 1,
|
||||||
},
|
|
||||||
|
ReadContext: dataSourceAccountReservedUnitsRead,
|
||||||
Schema: dataSourceAccountReservedUnitsSchemaMake(),
|
|
||||||
}
|
Timeouts: &schema.ResourceTimeout{
|
||||||
}
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceAccountReservedUnitsSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,170 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
|
Authors:
|
||||||
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
"ext_traffic": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"gpu": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,331 +1,372 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountRGList(argl account.ListRG) []map[string]interface{} {
|
func flattenAccountRGList(argl *account.ListRG) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, arg := range argl {
|
for _, arg := range argl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"computes": flattenAccRGComputes(arg.Computes),
|
"computes": flattenAccRGComputes(arg.Computes),
|
||||||
"resources": flattenAccRGResources(arg.Resources),
|
"resources": flattenAccRGResources(arg.Resources),
|
||||||
"created_by": arg.CreatedBy,
|
"created_by": arg.CreatedBy,
|
||||||
"created_time": arg.CreatedTime,
|
"created_time": arg.CreatedTime,
|
||||||
"deleted_by": arg.DeletedBy,
|
"deleted_by": arg.DeletedBy,
|
||||||
"deleted_time": arg.DeletedTime,
|
"deleted_time": arg.DeletedTime,
|
||||||
"rg_id": arg.RGID,
|
"rg_id": arg.RGID,
|
||||||
"milestones": arg.Milestones,
|
"milestones": arg.Milestones,
|
||||||
"rg_name": arg.RGName,
|
"rg_name": arg.RGName,
|
||||||
"status": arg.Status,
|
"status": arg.Status,
|
||||||
"updated_by": arg.UpdatedBy,
|
"updated_by": arg.UpdatedBy,
|
||||||
"updated_time": arg.UpdatedTime,
|
"updated_time": arg.UpdatedTime,
|
||||||
"vinses": arg.VINSes,
|
"vinses": arg.VINSes,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenAccRGComputes(argc account.RGComputes) []map[string]interface{} {
|
func flattenAccRGComputes(argc account.RGComputes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"started": argc.Started,
|
"started": argc.Started,
|
||||||
"stopped": argc.Stopped,
|
"stopped": argc.Stopped,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenAccResourceHack(r account.LimitsRG) []map[string]interface{} {
|
func flattenAccResourceHack(r account.LimitsRG) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cpu": r.CPU,
|
"cpu": r.CPU,
|
||||||
"disksize": r.DiskSize,
|
"disksize": r.DiskSize,
|
||||||
"extips": r.ExtIPs,
|
"extips": r.ExtIPs,
|
||||||
"exttraffic": r.ExtTraffic,
|
"exttraffic": r.ExtTraffic,
|
||||||
"gpu": r.GPU,
|
"gpu": r.GPU,
|
||||||
"ram": r.RAM,
|
"ram": r.RAM,
|
||||||
//"seps": flattenAccountSeps(r.SEPs),
|
//"seps": flattenAccountSeps(r.SEPs),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenAccResourceRg(r account.Resource) []map[string]interface{} {
|
func flattenAccResourceRg(r account.Resource) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cpu": r.CPU,
|
"cpu": r.CPU,
|
||||||
"disksize": r.DiskSize,
|
"disksize": r.DiskSize,
|
||||||
"extips": r.ExtIPs,
|
"extips": r.ExtIPs,
|
||||||
"exttraffic": r.ExtTraffic,
|
"exttraffic": r.ExtTraffic,
|
||||||
"gpu": r.GPU,
|
"gpu": r.GPU,
|
||||||
"ram": r.RAM,
|
"ram": r.RAM,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenAccRGResources(argr account.RGResources) []map[string]interface{} {
|
func flattenAccRGResources(argr account.RGResources) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"consumed": flattenAccResourceRg(argr.Consumed),
|
"consumed": flattenAccResourceRg(argr.Consumed),
|
||||||
"limits": flattenAccResourceHack(argr.Limits),
|
"limits": flattenAccResourceHack(argr.Limits),
|
||||||
"reserved": flattenAccResourceRg(argr.Reserved),
|
"reserved": flattenAccResourceRg(argr.Reserved),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountRGListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountRGListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountRGList, err := utilityAccountRGListCheckPresence(ctx, d, m)
|
accountRGList, err := utilityAccountRGListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountRGList(accountRGList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountRGList(accountRGList))
|
||||||
return nil
|
d.Set("entry_count", accountRGList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountRGListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceAccountRGListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Required: true,
|
"account_id": {
|
||||||
Description: "ID of the account",
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"items": {
|
Description: "ID of the account",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"page": {
|
||||||
Description: "Search Result",
|
Type: schema.TypeInt,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Description: "Page number",
|
||||||
"computes": {
|
},
|
||||||
Type: schema.TypeList,
|
"size": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Description: "Page size",
|
||||||
"started": {
|
},
|
||||||
Type: schema.TypeInt,
|
"rg_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"stopped": {
|
Description: "Filter by RG ID",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"vins_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
},
|
Description: "Filter by ViNS ID",
|
||||||
},
|
},
|
||||||
"resources": {
|
"vm_id": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
Elem: &schema.Resource{
|
Description: "Filter by VM ID",
|
||||||
Schema: map[string]*schema.Schema{
|
},
|
||||||
"consumed": {
|
"name": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
Elem: &schema.Resource{
|
Description: "Filter by name",
|
||||||
Schema: map[string]*schema.Schema{
|
},
|
||||||
"cpu": {
|
"status": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "Filter by status",
|
||||||
"disksize": {
|
},
|
||||||
Type: schema.TypeInt,
|
"items": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
"extips": {
|
Description: "Search Result",
|
||||||
Type: schema.TypeInt,
|
Elem: &schema.Resource{
|
||||||
Computed: true,
|
Schema: map[string]*schema.Schema{
|
||||||
},
|
"computes": {
|
||||||
"exttraffic": {
|
Type: schema.TypeList,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
},
|
Schema: map[string]*schema.Schema{
|
||||||
"gpu": {
|
"started": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"ram": {
|
"stopped": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"resources": {
|
||||||
"limits": {
|
Type: schema.TypeList,
|
||||||
Type: schema.TypeList,
|
Computed: true,
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
Elem: &schema.Resource{
|
Schema: map[string]*schema.Schema{
|
||||||
Schema: map[string]*schema.Schema{
|
"consumed": {
|
||||||
"cpu": {
|
Type: schema.TypeList,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
},
|
Schema: map[string]*schema.Schema{
|
||||||
"disksize": {
|
"cpu": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"extips": {
|
"disksize": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"exttraffic": {
|
"extips": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"gpu": {
|
"exttraffic": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"ram": {
|
"gpu": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"ram": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"reserved": {
|
},
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
},
|
||||||
Elem: &schema.Resource{
|
},
|
||||||
Schema: map[string]*schema.Schema{
|
|
||||||
"cpu": {
|
"limits": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
Elem: &schema.Resource{
|
||||||
"disksize": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"cpu": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"extips": {
|
},
|
||||||
Type: schema.TypeInt,
|
"disksize": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"exttraffic": {
|
},
|
||||||
Type: schema.TypeInt,
|
"extips": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"gpu": {
|
},
|
||||||
Type: schema.TypeInt,
|
"exttraffic": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"ram": {
|
},
|
||||||
Type: schema.TypeInt,
|
"gpu": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"ram": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"created_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"reserved": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
"created_time": {
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
Computed: true,
|
"cpu": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"deleted_by": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"disksize": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"deleted_time": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"extips": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"rg_id": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"exttraffic": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"milestones": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"gpu": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"rg_name": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"ram": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"status": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
},
|
||||||
},
|
},
|
||||||
"updated_by": {
|
},
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
},
|
||||||
},
|
},
|
||||||
"updated_time": {
|
|
||||||
Type: schema.TypeInt,
|
"created_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"vinses": {
|
},
|
||||||
Type: schema.TypeInt,
|
"created_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"deleted_by": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
}
|
Computed: true,
|
||||||
return res
|
},
|
||||||
}
|
"deleted_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
func DataSourceAccountRGList() *schema.Resource {
|
Computed: true,
|
||||||
return &schema.Resource{
|
},
|
||||||
SchemaVersion: 1,
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
ReadContext: dataSourceAccountRGListRead,
|
Computed: true,
|
||||||
|
},
|
||||||
Timeouts: &schema.ResourceTimeout{
|
"milestones": {
|
||||||
Read: &constants.Timeout30s,
|
Type: schema.TypeInt,
|
||||||
Default: &constants.Timeout60s,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"rg_name": {
|
||||||
Schema: dataSourceAccountRGListSchemaMake(),
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,152 +1,186 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountTemplatesList(atl account.ListTemplates) []map[string]interface{} {
|
func flattenAccountTemplatesList(atl *account.ListTemplates) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(atl.Data))
|
||||||
for _, at := range atl {
|
for _, at := range atl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"unc_path": at.UNCPath,
|
"unc_path": at.UNCPath,
|
||||||
"account_id": at.AccountID,
|
"account_id": at.AccountID,
|
||||||
"desc": at.Description,
|
"desc": at.Description,
|
||||||
"template_id": at.ID,
|
"template_id": at.ID,
|
||||||
"template_name": at.Name,
|
"template_name": at.Name,
|
||||||
"public": at.Public,
|
"public": at.Public,
|
||||||
"size": at.Size,
|
"size": at.Size,
|
||||||
"status": at.Status,
|
"status": at.Status,
|
||||||
"type": at.Type,
|
"type": at.Type,
|
||||||
"username": at.Username,
|
"username": at.Username,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountTemplatesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountTemplatesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountTemplatesList, err := utilityAccountTemplatesListCheckPresence(ctx, d, m)
|
accountTemplatesList, err := utilityAccountTemplatesListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountTemplatesList(accountTemplatesList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountTemplatesList(accountTemplatesList))
|
||||||
return nil
|
d.Set("entry_count", accountTemplatesList.EntryCount)
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceAccountTemplatesListSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceAccountTemplatesListSchemaMake() map[string]*schema.Schema {
|
||||||
"account_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"account_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
Description: "ID of the account",
|
Required: true,
|
||||||
},
|
Description: "ID of the account",
|
||||||
"items": {
|
},
|
||||||
Type: schema.TypeList,
|
"include_deleted": {
|
||||||
Computed: true,
|
Type: schema.TypeBool,
|
||||||
Description: "Search Result",
|
Optional: true,
|
||||||
Elem: &schema.Resource{
|
},
|
||||||
Schema: map[string]*schema.Schema{
|
"image_id": {
|
||||||
"unc_path": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Find by image id",
|
||||||
},
|
},
|
||||||
"account_id": {
|
"name": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "Filter by name",
|
||||||
"desc": {
|
},
|
||||||
Type: schema.TypeString,
|
"type": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"template_id": {
|
Description: "Filter by type",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"page": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"template_name": {
|
Optional: true,
|
||||||
Type: schema.TypeString,
|
Description: "Page number",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"size": {
|
||||||
"public": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeBool,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Page size",
|
||||||
},
|
},
|
||||||
"size": {
|
"items": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
Description: "Search Result",
|
||||||
"status": {
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeString,
|
Schema: map[string]*schema.Schema{
|
||||||
Computed: true,
|
"unc_path": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"type": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"account_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"username": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"desc": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"template_id": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
return res
|
Computed: true,
|
||||||
}
|
},
|
||||||
|
"template_name": {
|
||||||
func DataSourceAccountTemplatessList() *schema.Resource {
|
Type: schema.TypeString,
|
||||||
return &schema.Resource{
|
Computed: true,
|
||||||
SchemaVersion: 1,
|
},
|
||||||
|
"public": {
|
||||||
ReadContext: dataSourceAccountTemplatesListRead,
|
Type: schema.TypeBool,
|
||||||
|
Computed: true,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
},
|
||||||
Read: &constants.Timeout30s,
|
"size": {
|
||||||
Default: &constants.Timeout60s,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
|
},
|
||||||
Schema: dataSourceAccountTemplatesListSchemaMake(),
|
"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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,187 +1,223 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package account
|
package account
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenAccountVinsList(avl account.ListVINS) []map[string]interface{} {
|
func flattenAccountVinsList(avl *account.ListVINS) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, av := range avl {
|
for _, av := range avl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": av.AccountID,
|
"account_id": av.AccountID,
|
||||||
"account_name": av.AccountName,
|
"account_name": av.AccountName,
|
||||||
"computes": av.Computes,
|
"computes": av.Computes,
|
||||||
"created_by": av.CreatedBy,
|
"created_by": av.CreatedBy,
|
||||||
"created_time": av.CreatedTime,
|
"created_time": av.CreatedTime,
|
||||||
"deleted_by": av.DeletedBy,
|
"deleted_by": av.DeletedBy,
|
||||||
"deleted_time": av.DeletedTime,
|
"deleted_time": av.DeletedTime,
|
||||||
"external_ip": av.ExternalIP,
|
"external_ip": av.ExternalIP,
|
||||||
"vin_id": av.ID,
|
"vin_id": av.ID,
|
||||||
"vin_name": av.Name,
|
"vin_name": av.Name,
|
||||||
"network": av.Network,
|
"network": av.Network,
|
||||||
"pri_vnf_dev_id": av.PriVNFDevID,
|
"pri_vnf_dev_id": av.PriVNFDevID,
|
||||||
"rg_id": av.RGID,
|
"rg_id": av.RGID,
|
||||||
"rg_name": av.RGName,
|
"rg_name": av.RGName,
|
||||||
"status": av.Status,
|
"status": av.Status,
|
||||||
"updated_by": av.UpdatedBy,
|
"updated_by": av.UpdatedBy,
|
||||||
"updated_time": av.UpdatedTime,
|
"updated_time": av.UpdatedTime,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceAccountVinsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceAccountVinsListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
accountVinsList, err := utilityAccountVinsListCheckPresence(ctx, d, m)
|
accountVinsList, err := utilityAccountVinsListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenAccountVinsList(accountVinsList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenAccountVinsList(accountVinsList))
|
||||||
return nil
|
d.Set("entry_count", accountVinsList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceAccountVinsListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceAccountVinsListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Required: true,
|
"account_id": {
|
||||||
Description: "ID of the account",
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"items": {
|
Description: "ID of the account",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"vins_id": {
|
||||||
Description: "Search Result",
|
Type: schema.TypeInt,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Description: "Filter by ViNS ID",
|
||||||
"account_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"account_name": {
|
Description: "Filter by name",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"rg_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"computes": {
|
Optional: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Filter by RG ID",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"ext_ip": {
|
||||||
"created_by": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Filter by external IP",
|
||||||
},
|
},
|
||||||
"created_time": {
|
"page": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "Page number",
|
||||||
"deleted_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"size": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"deleted_time": {
|
Description: "Page size",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"items": {
|
||||||
},
|
Type: schema.TypeList,
|
||||||
"external_ip": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Description: "Search Result",
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
},
|
Schema: map[string]*schema.Schema{
|
||||||
"vin_id": {
|
"account_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"vin_name": {
|
"account_name": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"network": {
|
"computes": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"pri_vnf_dev_id": {
|
"created_by": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"rg_id": {
|
"created_time": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"rg_name": {
|
"deleted_by": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"status": {
|
"deleted_time": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"updated_by": {
|
"external_ip": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"updated_time": {
|
"vin_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"vin_name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
}
|
},
|
||||||
return res
|
"network": {
|
||||||
}
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
func DataSourceAccountVinsList() *schema.Resource {
|
},
|
||||||
return &schema.Resource{
|
"pri_vnf_dev_id": {
|
||||||
SchemaVersion: 1,
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
ReadContext: dataSourceAccountVinsListRead,
|
},
|
||||||
|
"rg_id": {
|
||||||
Timeouts: &schema.ResourceTimeout{
|
Type: schema.TypeInt,
|
||||||
Read: &constants.Timeout30s,
|
Computed: true,
|
||||||
Default: &constants.Timeout60s,
|
},
|
||||||
},
|
"rg_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
Schema: dataSourceAccountVinsListSchemaMake(),
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
func flattenAccount(d *schema.ResourceData, acc account.RecordAccount) error {
|
func flattenAccount(d *schema.ResourceData, acc account.RecordAccount) error {
|
||||||
d.Set("dc_location", acc.DCLocation)
|
d.Set("dc_location", acc.DCLocation)
|
||||||
d.Set("resources", flattenAccResources(acc.Resources))
|
// d.Set("resources", flattenAccResources(acc.Resources))
|
||||||
d.Set("ckey", acc.CKey)
|
d.Set("ckey", acc.CKey)
|
||||||
d.Set("acl", flattenAccAcl(acc.ACL))
|
d.Set("acl", flattenAccAcl(acc.ACL))
|
||||||
d.Set("company", acc.Company)
|
d.Set("company", acc.Company)
|
||||||
@@ -21,7 +21,7 @@ func flattenAccount(d *schema.ResourceData, acc account.RecordAccount) error {
|
|||||||
d.Set("guid", acc.GUID)
|
d.Set("guid", acc.GUID)
|
||||||
d.Set("account_id", acc.ID)
|
d.Set("account_id", acc.ID)
|
||||||
d.Set("account_name", acc.Name)
|
d.Set("account_name", acc.Name)
|
||||||
d.Set("resource_limits", flattenRgResourceLimits(acc.ResourceLimits))
|
d.Set("resource_limits", flattenAccResourceLimits(acc.ResourceLimits))
|
||||||
d.Set("send_access_emails", acc.SendAccessEmails)
|
d.Set("send_access_emails", acc.SendAccessEmails)
|
||||||
d.Set("status", acc.Status)
|
d.Set("status", acc.Status)
|
||||||
d.Set("updated_time", acc.UpdatedTime)
|
d.Set("updated_time", acc.UpdatedTime)
|
||||||
@@ -79,11 +79,19 @@ func flattenAccAcl(acls []account.RecordACL) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenRgResourceLimits(rl account.ResourceLimits) []map[string]interface{} {
|
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)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cu_c": rl.CUC,
|
"cu_c": rl.CUC,
|
||||||
"cu_d": rl.CUD,
|
"cu_d": rl.CUD,
|
||||||
|
"cu_dm": rl.CUDM,
|
||||||
"cu_i": rl.CUI,
|
"cu_i": rl.CUI,
|
||||||
"cu_m": rl.CUM,
|
"cu_m": rl.CUM,
|
||||||
"cu_np": rl.CUNP,
|
"cu_np": rl.CUNP,
|
||||||
@@ -95,15 +103,15 @@ func flattenRgResourceLimits(rl account.ResourceLimits) []map[string]interface{}
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenAccResources(r account.Resources) []map[string]interface{} {
|
// func flattenAccResources(r account.Resources) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
// res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
// temp := map[string]interface{}{
|
||||||
"current": flattenAccResource(r.Current),
|
// "current": flattenAccResource(r.Current),
|
||||||
"reserved": flattenAccResource(r.Reserved),
|
// "reserved": flattenAccResource(r.Reserved),
|
||||||
}
|
// }
|
||||||
res = append(res, temp)
|
// res = append(res, temp)
|
||||||
return res
|
// return res
|
||||||
}
|
// }
|
||||||
|
|
||||||
func flattenAccountSeps(seps map[string]map[string]account.DiskUsage) []map[string]interface{} {
|
func flattenAccountSeps(seps map[string]map[string]account.DiskUsage) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
@@ -124,14 +132,28 @@ func flattenAccountSeps(seps map[string]map[string]account.DiskUsage) []map[stri
|
|||||||
func flattenAccResource(r account.Resource) []map[string]interface{} {
|
func flattenAccResource(r account.Resource) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"cpu": r.CPU,
|
"cpu": r.CPU,
|
||||||
"disksize": r.DiskSize,
|
"disk_size": r.DiskSize,
|
||||||
"extips": r.ExtIPs,
|
"disk_size_max": r.DiskSizeMax,
|
||||||
"exttraffic": r.ExtTraffic,
|
"ext_ips": r.ExtIPs,
|
||||||
"gpu": r.GPU,
|
"ext_traffic": r.ExtTraffic,
|
||||||
"ram": r.RAM,
|
"gpu": r.GPU,
|
||||||
"seps": flattenAccountSeps(r.SEPs),
|
"ram": r.RAM,
|
||||||
|
"seps": flattenAccountSeps(r.SEPs),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
return res
|
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
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -42,7 +42,7 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountComputesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListComputes, error) {
|
func utilityAccountComputesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListComputes, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
var id uint64
|
||||||
|
|
||||||
@@ -52,6 +52,46 @@ func utilityAccountComputesListCheckPresence(ctx context.Context, d *schema.Reso
|
|||||||
AccountID: id,
|
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 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")
|
log.Debugf("utilityAccountComputesListCheckPresence: load account list")
|
||||||
accountComputesList, err := c.CloudAPI().Account().ListComputes(ctx, req)
|
accountComputesList, err := c.CloudAPI().Account().ListComputes(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -42,23 +42,29 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountDeletedListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListAccounts, error) {
|
func utilityAccountDeletedListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListAccounts, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var (
|
|
||||||
pageVal uint64 = 0
|
req := account.ListDeletedRequest{}
|
||||||
sizeVal uint64 = 0
|
|
||||||
)
|
|
||||||
|
|
||||||
if page, ok := d.GetOk("page"); ok {
|
if page, ok := d.GetOk("page"); ok {
|
||||||
pageVal = uint64(page.(int))
|
req.Page = uint64(page.(int))
|
||||||
}
|
|
||||||
if size, ok := d.GetOk("size"); ok {
|
|
||||||
sizeVal = uint64(size.(int))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
req := account.ListDeletedRequest{
|
if size, ok := d.GetOk("size"); ok {
|
||||||
Page: pageVal,
|
req.Size = uint64(size.(int))
|
||||||
Size: sizeVal,
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("utilityAccountDeletedListCheckPresence: load")
|
log.Debugf("utilityAccountDeletedListCheckPresence: load")
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountDisksListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListDisks, error) {
|
func utilityAccountDisksListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListDisks, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
var id uint64
|
||||||
|
|
||||||
@@ -51,6 +51,30 @@ func utilityAccountDisksListCheckPresence(ctx context.Context, d *schema.Resourc
|
|||||||
AccountID: id,
|
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 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)
|
accountDisksList, err := c.CloudAPI().Account().ListDisks(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountFlipGroupsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListFLIPGroups, error) {
|
func utilityAccountFlipGroupsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListFLIPGroups, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
var id uint64
|
||||||
|
|
||||||
@@ -52,6 +52,38 @@ func utilityAccountFlipGroupsListCheckPresence(ctx context.Context, d *schema.Re
|
|||||||
AccountID: id,
|
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 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")
|
log.Debugf("utilityAccountFlipGroupsListCheckPresence")
|
||||||
accountFlipGroupsList, err := c.CloudAPI().Account().ListFLIPGroups(ctx, req)
|
accountFlipGroupsList, err := c.CloudAPI().Account().ListFLIPGroups(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
|
Authors:
|
||||||
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -42,23 +42,31 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListAccounts, error) {
|
func utilityAccountListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListAccounts, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var (
|
req := account.ListRequest{}
|
||||||
pageVal uint64 = 0
|
|
||||||
sizeVal uint64 = 0
|
|
||||||
)
|
|
||||||
|
|
||||||
if page, ok := d.GetOk("page"); ok {
|
if page, ok := d.GetOk("page"); ok {
|
||||||
pageVal = uint64(page.(int))
|
req.Page = uint64(page.(int))
|
||||||
}
|
}
|
||||||
if size, ok := d.GetOk("size"); ok {
|
if size, ok := d.GetOk("size"); ok {
|
||||||
sizeVal = uint64(size.(int))
|
req.Size = uint64(size.(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
req := account.ListRequest{
|
if by_id, ok := d.GetOk("by_id"); ok {
|
||||||
Page: pageVal,
|
req.ByID = uint64(by_id.(int))
|
||||||
Size: sizeVal,
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("utilityAccountListCheckPresence: load account list")
|
log.Debugf("utilityAccountListCheckPresence: load account list")
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
|
Authors:
|
||||||
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
||||||
@@ -42,7 +42,7 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountRGListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListRG, error) {
|
func utilityAccountRGListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListRG, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
var id uint64
|
||||||
|
|
||||||
@@ -52,6 +52,34 @@ func utilityAccountRGListCheckPresence(ctx context.Context, d *schema.ResourceDa
|
|||||||
AccountID: id,
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityAccountRGListCheckPresence: load account list")
|
log.Debugf("utilityAccountRGListCheckPresence: load account list")
|
||||||
accountRGList, err := c.CloudAPI().Account().ListRG(ctx, req)
|
accountRGList, err := c.CloudAPI().Account().ListRG(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -42,16 +42,34 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountTemplatesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListTemplates, error) {
|
func utilityAccountTemplatesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListTemplates, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
|
||||||
|
|
||||||
id = uint64(d.Get("account_id").(int))
|
id := uint64(d.Get("account_id").(int))
|
||||||
|
|
||||||
req := account.ListTemplatesRequest{
|
req := account.ListTemplatesRequest{
|
||||||
AccountID: id,
|
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 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")
|
log.Debugf("utilityAccountTemplatesListCheckPresence: load")
|
||||||
accountTemplatesList, err := c.CloudAPI().Account().ListTemplates(ctx, req)
|
accountTemplatesList, err := c.CloudAPI().Account().ListTemplates(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityAccountVinsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (account.ListVINS, error) {
|
func utilityAccountVinsListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*account.ListVINS, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
var id uint64
|
||||||
|
|
||||||
@@ -52,6 +52,30 @@ func utilityAccountVinsListCheckPresence(ctx context.Context, d *schema.Resource
|
|||||||
AccountID: id,
|
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 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")
|
log.Debugf("utilityAccountVinsListCheckPresence: load account list")
|
||||||
accountVinsList, err := c.CloudAPI().Account().ListVINS(ctx, req)
|
accountVinsList, err := c.CloudAPI().Account().ListVINS(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -1,297 +1,298 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package bservice
|
package bservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceBasicServiceRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceBasicServiceRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
bs, err := utilityBasicServiceCheckPresence(ctx, d, m)
|
bs, err := utilityBasicServiceCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
d.SetId(strconv.FormatUint(bs.ID, 10))
|
|
||||||
|
d.SetId(strconv.FormatUint(bs.ID, 10))
|
||||||
flattenService(d, bs)
|
|
||||||
|
flattenService(d, bs)
|
||||||
return nil
|
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceBasicServiceSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceBasicServiceSchemaMake() map[string]*schema.Schema {
|
||||||
"service_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"service_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"account_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"account_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"account_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"account_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"base_domain": {
|
},
|
||||||
Type: schema.TypeString,
|
"base_domain": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"computes": {
|
},
|
||||||
Type: schema.TypeList,
|
"computes": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"account_id": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"account_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"architecture": {
|
},
|
||||||
Type: schema.TypeString,
|
"architecture": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"compgroup_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"compgroup_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"compgroup_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"compgroup_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"compgroup_role": {
|
},
|
||||||
Type: schema.TypeString,
|
"compgroup_role": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"rg_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"rg_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"stack_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"stack_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"name": {
|
},
|
||||||
Type: schema.TypeString,
|
"name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"status": {
|
},
|
||||||
Type: schema.TypeString,
|
"status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"tech_status": {
|
},
|
||||||
Type: schema.TypeString,
|
"tech_status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"cpu_total": {
|
|
||||||
Type: schema.TypeInt,
|
"cpu_total": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"created_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"created_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"created_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
"created_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"deleted_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"deleted_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"deleted_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
"deleted_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"disk_total": {
|
},
|
||||||
Type: schema.TypeString,
|
"disk_total": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"gid": {
|
},
|
||||||
Type: schema.TypeInt,
|
"gid": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"groups": {
|
},
|
||||||
Type: schema.TypeList,
|
"groups": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"computes": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"computes": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"consistency": {
|
},
|
||||||
Type: schema.TypeBool,
|
"consistency": {
|
||||||
Computed: true,
|
Type: schema.TypeBool,
|
||||||
},
|
Computed: true,
|
||||||
"id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"name": {
|
},
|
||||||
Type: schema.TypeString,
|
"name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"status": {
|
},
|
||||||
Type: schema.TypeString,
|
"status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"tech_status": {
|
},
|
||||||
Type: schema.TypeString,
|
"tech_status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"groups_name": {
|
},
|
||||||
Type: schema.TypeList,
|
// "groups_name": {
|
||||||
Computed: true,
|
// Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
// Computed: true,
|
||||||
Type: schema.TypeString,
|
// Elem: &schema.Schema{
|
||||||
},
|
// Type: schema.TypeString,
|
||||||
},
|
// },
|
||||||
"guid": {
|
// },
|
||||||
Type: schema.TypeInt,
|
"guid": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"milestones": {
|
},
|
||||||
Type: schema.TypeInt,
|
"milestones": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"service_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"service_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"parent_srv_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"parent_srv_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"parent_srv_type": {
|
},
|
||||||
Type: schema.TypeString,
|
"parent_srv_type": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"ram_total": {
|
},
|
||||||
Type: schema.TypeInt,
|
"ram_total": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"rg_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"rg_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"rg_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"rg_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"snapshots": {
|
},
|
||||||
Type: schema.TypeList,
|
"snapshots": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"guid": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeString,
|
"guid": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"label": {
|
},
|
||||||
Type: schema.TypeString,
|
"label": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"timestamp": {
|
},
|
||||||
Type: schema.TypeInt,
|
"timestamp": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"valid": {
|
},
|
||||||
Type: schema.TypeBool,
|
"valid": {
|
||||||
Computed: true,
|
Type: schema.TypeBool,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
},
|
||||||
"ssh_key": {
|
|
||||||
Type: schema.TypeString,
|
"ssh_key": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"ssh_user": {
|
},
|
||||||
Type: schema.TypeString,
|
"ssh_user": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"status": {
|
},
|
||||||
Type: schema.TypeString,
|
"status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"tech_status": {
|
},
|
||||||
Type: schema.TypeString,
|
"tech_status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"updated_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"updated_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"updated_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
"updated_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"user_managed": {
|
},
|
||||||
Type: schema.TypeBool,
|
"user_managed": {
|
||||||
Computed: true,
|
Type: schema.TypeBool,
|
||||||
},
|
Computed: true,
|
||||||
}
|
},
|
||||||
return res
|
}
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func DataSourceBasicService() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
func DataSourceBasicService() *schema.Resource {
|
||||||
SchemaVersion: 1,
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
ReadContext: dataSourceBasicServiceRead,
|
|
||||||
|
ReadContext: dataSourceBasicServiceRead,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
Timeouts: &schema.ResourceTimeout{
|
||||||
Default: &constants.Timeout60s,
|
Read: &constants.Timeout30s,
|
||||||
},
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
Schema: dataSourceBasicServiceSchemaMake(),
|
|
||||||
}
|
Schema: dataSourceBasicServiceSchemaMake(),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,70 +1,85 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package bservice
|
package bservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceBasicServiceDeletedListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceBasicServiceDeletedListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
basicServiceDeletedList, err := utilityBasicServiceDeletedListCheckPresence(ctx, d, m)
|
basicServiceDeletedList, err := utilityBasicServiceDeletedListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenBasicServiceList(basicServiceDeletedList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenBasicServiceList(basicServiceDeletedList))
|
||||||
return nil
|
d.Set("entry_count", basicServiceDeletedList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func DataSourceBasicServiceDeletedList() *schema.Resource {
|
}
|
||||||
return &schema.Resource{
|
|
||||||
SchemaVersion: 1,
|
func dataSourceBasicServiceDeletedListSchemaMake() map[string]*schema.Schema {
|
||||||
|
temp := dataSourceBasicServiceListSchemaMake()
|
||||||
ReadContext: dataSourceBasicServiceDeletedListRead,
|
|
||||||
|
delete(temp, "by_id")
|
||||||
Timeouts: &schema.ResourceTimeout{
|
delete(temp, "name")
|
||||||
Read: &constants.Timeout30s,
|
delete(temp, "rg_name")
|
||||||
Default: &constants.Timeout60s,
|
delete(temp, "status")
|
||||||
},
|
delete(temp, "tech_status")
|
||||||
|
delete(temp, "account_name")
|
||||||
Schema: dataSourceBasicServiceListSchemaMake(),
|
|
||||||
}
|
return temp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DataSourceBasicServiceDeletedList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceBasicServiceDeletedListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceBasicServiceDeletedListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,304 +1,305 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package bservice
|
package bservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
|
"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/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceBasicServiceGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceBasicServiceGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
bsg, err := utilityBasicServiceGroupCheckPresence(ctx, d, m)
|
bsg, err := utilityBasicServiceGroupCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("account_id", bsg.AccountID)
|
d.SetId(id.String())
|
||||||
d.Set("account_name", bsg.AccountName)
|
d.Set("account_id", bsg.AccountID)
|
||||||
d.Set("computes", flattenBSGroupComputes(bsg.Computes))
|
d.Set("account_name", bsg.AccountName)
|
||||||
d.Set("consistency", bsg.Consistency)
|
d.Set("computes", flattenBSGroupComputes(bsg.Computes))
|
||||||
d.Set("cpu", bsg.CPU)
|
d.Set("consistency", bsg.Consistency)
|
||||||
d.Set("created_by", bsg.CreatedBy)
|
d.Set("cpu", bsg.CPU)
|
||||||
d.Set("created_time", bsg.CreatedTime)
|
d.Set("created_by", bsg.CreatedBy)
|
||||||
d.Set("deleted_by", bsg.DeletedBy)
|
d.Set("created_time", bsg.CreatedTime)
|
||||||
d.Set("deleted_time", bsg.DeletedTime)
|
d.Set("deleted_by", bsg.DeletedBy)
|
||||||
d.Set("disk", bsg.Disk)
|
d.Set("deleted_time", bsg.DeletedTime)
|
||||||
d.Set("driver", bsg.Driver)
|
d.Set("disk", bsg.Disk)
|
||||||
d.Set("extnets", bsg.ExtNets)
|
d.Set("driver", bsg.Driver)
|
||||||
d.Set("gid", bsg.GID)
|
d.Set("extnets", bsg.ExtNets)
|
||||||
d.Set("guid", bsg.GUID)
|
d.Set("gid", bsg.GID)
|
||||||
d.Set("image_id", bsg.ImageID)
|
d.Set("guid", bsg.GUID)
|
||||||
d.Set("milestones", bsg.Milestones)
|
d.Set("image_id", bsg.ImageID)
|
||||||
d.Set("compgroup_name", bsg.Name)
|
d.Set("milestones", bsg.Milestones)
|
||||||
d.Set("parents", bsg.Parents)
|
d.Set("compgroup_name", bsg.Name)
|
||||||
d.Set("ram", bsg.RAM)
|
d.Set("parents", bsg.Parents)
|
||||||
d.Set("rg_id", bsg.RGID)
|
d.Set("ram", bsg.RAM)
|
||||||
d.Set("rg_name", bsg.RGName)
|
d.Set("rg_id", bsg.RGID)
|
||||||
d.Set("role", bsg.Role)
|
d.Set("rg_name", bsg.RGName)
|
||||||
d.Set("sep_id", bsg.SEPID)
|
d.Set("role", bsg.Role)
|
||||||
d.Set("seq_no", bsg.SeqNo)
|
d.Set("sep_id", bsg.SEPID)
|
||||||
d.Set("status", bsg.Status)
|
d.Set("seq_no", bsg.SeqNo)
|
||||||
d.Set("tech_status", bsg.TechStatus)
|
d.Set("status", bsg.Status)
|
||||||
d.Set("timeout_start", bsg.TimeoutStart)
|
d.Set("tech_status", bsg.TechStatus)
|
||||||
d.Set("updated_by", bsg.UpdatedBy)
|
d.Set("timeout_start", bsg.TimeoutStart)
|
||||||
d.Set("updated_time", bsg.UpdatedTime)
|
d.Set("updated_by", bsg.UpdatedBy)
|
||||||
d.Set("vinses", bsg.VINSes)
|
d.Set("updated_time", bsg.UpdatedTime)
|
||||||
return nil
|
d.Set("vinses", bsg.VINSes)
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func flattenBSGroupOSUsers(bsgosus bservice.ListOSUsers) []map[string]interface{} {
|
|
||||||
res := make([]map[string]interface{}, 0)
|
func flattenBSGroupOSUsers(bsgosus bservice.ListOSUsers) []map[string]interface{} {
|
||||||
for _, bsgosu := range bsgosus {
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
for _, bsgosu := range bsgosus {
|
||||||
"login": bsgosu.Login,
|
temp := map[string]interface{}{
|
||||||
"password": bsgosu.Password,
|
"login": bsgosu.Login,
|
||||||
}
|
"password": bsgosu.Password,
|
||||||
res = append(res, temp)
|
}
|
||||||
}
|
res = append(res, temp)
|
||||||
|
}
|
||||||
return res
|
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func flattenBSGroupComputes(bsgcs bservice.ListGroupComputes) []map[string]interface{} {
|
|
||||||
res := make([]map[string]interface{}, 0)
|
func flattenBSGroupComputes(bsgcs bservice.ListGroupComputes) []map[string]interface{} {
|
||||||
for _, bsgc := range bsgcs {
|
res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
for _, bsgc := range bsgcs {
|
||||||
"id": bsgc.ID,
|
temp := map[string]interface{}{
|
||||||
"ip_addresses": bsgc.IPAddresses,
|
"id": bsgc.ID,
|
||||||
"name": bsgc.Name,
|
"ip_addresses": bsgc.IPAddresses,
|
||||||
"os_users": flattenBSGroupOSUsers(bsgc.OSUsers),
|
"name": bsgc.Name,
|
||||||
}
|
"os_users": flattenBSGroupOSUsers(bsgc.OSUsers),
|
||||||
res = append(res, temp)
|
}
|
||||||
}
|
res = append(res, temp)
|
||||||
return res
|
}
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func dataSourceBasicServiceGroupSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceBasicServiceGroupSchemaMake() map[string]*schema.Schema {
|
||||||
"service_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"service_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"compgroup_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"compgroup_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"account_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"account_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"account_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"account_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"computes": {
|
},
|
||||||
Type: schema.TypeList,
|
"computes": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"id": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"ip_addresses": {
|
},
|
||||||
Type: schema.TypeList,
|
"ip_addresses": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
},
|
||||||
"name": {
|
},
|
||||||
Type: schema.TypeString,
|
"name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"os_users": {
|
},
|
||||||
Type: schema.TypeList,
|
"os_users": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"login": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeString,
|
"login": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"password": {
|
},
|
||||||
Type: schema.TypeString,
|
"password": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"consistency": {
|
},
|
||||||
Type: schema.TypeBool,
|
"consistency": {
|
||||||
Computed: true,
|
Type: schema.TypeBool,
|
||||||
},
|
Computed: true,
|
||||||
"cpu": {
|
},
|
||||||
Type: schema.TypeInt,
|
"cpu": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"created_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"created_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"created_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
"created_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"deleted_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"deleted_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"deleted_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
"deleted_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"disk": {
|
},
|
||||||
Type: schema.TypeInt,
|
"disk": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"driver": {
|
},
|
||||||
Type: schema.TypeString,
|
"driver": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"extnets": {
|
},
|
||||||
Type: schema.TypeList,
|
"extnets": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
"gid": {
|
},
|
||||||
Type: schema.TypeInt,
|
"gid": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"guid": {
|
},
|
||||||
Type: schema.TypeInt,
|
"guid": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"image_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"image_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"milestones": {
|
},
|
||||||
Type: schema.TypeInt,
|
"milestones": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"compgroup_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"compgroup_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"parents": {
|
},
|
||||||
Type: schema.TypeList,
|
"parents": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
"ram": {
|
},
|
||||||
Type: schema.TypeInt,
|
"ram": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"rg_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"rg_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"rg_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"rg_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"role": {
|
},
|
||||||
Type: schema.TypeString,
|
"role": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"sep_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"sep_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"seq_no": {
|
},
|
||||||
Type: schema.TypeInt,
|
"seq_no": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"status": {
|
},
|
||||||
Type: schema.TypeString,
|
"status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"tech_status": {
|
},
|
||||||
Type: schema.TypeString,
|
"tech_status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"timeout_start": {
|
},
|
||||||
Type: schema.TypeInt,
|
"timeout_start": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"updated_by": {
|
},
|
||||||
Type: schema.TypeString,
|
"updated_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"updated_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
"updated_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"vinses": {
|
},
|
||||||
Type: schema.TypeList,
|
"vinses": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
return res
|
}
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func DataSourceBasicServiceGroup() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
func DataSourceBasicServiceGroup() *schema.Resource {
|
||||||
SchemaVersion: 1,
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
ReadContext: dataSourceBasicServiceGroupRead,
|
|
||||||
|
ReadContext: dataSourceBasicServiceGroupRead,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
Timeouts: &schema.ResourceTimeout{
|
||||||
Default: &constants.Timeout60s,
|
Read: &constants.Timeout30s,
|
||||||
},
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
Schema: dataSourceBasicServiceGroupSchemaMake(),
|
|
||||||
}
|
Schema: dataSourceBasicServiceGroupSchemaMake(),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,228 +1,264 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package bservice
|
package bservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
|
"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/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenBasicServiceList(bsl bservice.ListBasicServices) []map[string]interface{} {
|
func flattenBasicServiceList(bsl *bservice.ListBasicServices) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, bs := range bsl {
|
for _, bs := range bsl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": bs.AccountID,
|
"account_id": bs.AccountID,
|
||||||
"account_name": bs.AccountName,
|
"account_name": bs.AccountName,
|
||||||
"base_domain": bs.BaseDomain,
|
"base_domain": bs.BaseDomain,
|
||||||
"created_by": bs.CreatedBy,
|
"created_by": bs.CreatedBy,
|
||||||
"created_time": bs.CreatedTime,
|
"created_time": bs.CreatedTime,
|
||||||
"deleted_by": bs.DeletedBy,
|
"deleted_by": bs.DeletedBy,
|
||||||
"deleted_time": bs.DeletedTime,
|
"deleted_time": bs.DeletedTime,
|
||||||
"gid": bs.GID,
|
"gid": bs.GID,
|
||||||
"groups": bs.Groups,
|
"groups": bs.Groups,
|
||||||
"guid": bs.GUID,
|
"guid": bs.GUID,
|
||||||
"service_id": bs.ID,
|
"service_id": bs.ID,
|
||||||
"service_name": bs.Name,
|
"service_name": bs.Name,
|
||||||
"parent_srv_id": bs.ParentSrvID,
|
"parent_srv_id": bs.ParentSrvID,
|
||||||
"parent_srv_type": bs.ParentSrvType,
|
"parent_srv_type": bs.ParentSrvType,
|
||||||
"rg_id": bs.RGID,
|
"rg_id": bs.RGID,
|
||||||
"rg_name": bs.RGName,
|
"rg_name": bs.RGName,
|
||||||
"ssh_user": bs.SSHUser,
|
"ssh_user": bs.SSHUser,
|
||||||
"status": bs.Status,
|
"status": bs.Status,
|
||||||
"tech_status": bs.TechStatus,
|
"tech_status": bs.TechStatus,
|
||||||
"updated_by": bs.UpdatedBy,
|
"updated_by": bs.UpdatedBy,
|
||||||
"updated_time": bs.UpdatedTime,
|
"updated_time": bs.UpdatedTime,
|
||||||
"user_managed": bs.UserManaged,
|
"user_managed": bs.UserManaged,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceBasicServiceListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceBasicServiceListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
basicServiceList, err := utilityBasicServiceListCheckPresence(ctx, d, m)
|
basicServiceList, err := utilityBasicServiceListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenBasicServiceList(basicServiceList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenBasicServiceList(basicServiceList))
|
||||||
return nil
|
d.Set("entry_count", basicServiceList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceBasicServiceListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceBasicServiceListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Optional: true,
|
"by_id": {
|
||||||
Description: "ID of the account to query for BasicService instances",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"rg_id": {
|
Description: "Filter by ID",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"name": {
|
||||||
Description: "ID of the resource group to query for BasicService instances",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"page": {
|
Description: "Filter by bservice name",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"rg_name": {
|
||||||
Description: "Page number",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"size": {
|
Description: "Filter by resource group name",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"status": {
|
||||||
Description: "Page size",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"items": {
|
Description: "Filter by status",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"tech_status": {
|
||||||
Elem: &schema.Resource{
|
Type: schema.TypeString,
|
||||||
Schema: map[string]*schema.Schema{
|
Optional: true,
|
||||||
"account_id": {
|
Description: "Filter by tech status",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"account_name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"account_name": {
|
Optional: true,
|
||||||
Type: schema.TypeString,
|
Description: "Filter by account name",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"account_id": {
|
||||||
"base_domain": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "ID of the account to query for BasicService instances",
|
||||||
},
|
},
|
||||||
"created_by": {
|
"rg_id": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Optional: true,
|
||||||
},
|
Description: "ID of the resource group to query for BasicService instances",
|
||||||
"created_time": {
|
},
|
||||||
Type: schema.TypeInt,
|
"page": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"deleted_by": {
|
Description: "Page number",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"size": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"deleted_time": {
|
Optional: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Page size",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"items": {
|
||||||
"gid": {
|
Type: schema.TypeList,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
},
|
Schema: map[string]*schema.Schema{
|
||||||
"groups": {
|
"account_id": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Elem: &schema.Schema{
|
},
|
||||||
Type: schema.TypeInt,
|
"account_name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"guid": {
|
},
|
||||||
Type: schema.TypeInt,
|
"base_domain": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"service_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"created_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"service_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"created_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"parent_srv_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"deleted_by": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"parent_srv_type": {
|
},
|
||||||
Type: schema.TypeString,
|
"deleted_time": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"rg_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"gid": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"rg_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"groups": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
"ssh_user": {
|
Elem: &schema.Schema{
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
},
|
||||||
},
|
},
|
||||||
"status": {
|
"guid": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"tech_status": {
|
"service_id": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"updated_by": {
|
"service_name": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"updated_time": {
|
"parent_srv_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"user_managed": {
|
"parent_srv_type": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"rg_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
}
|
},
|
||||||
return res
|
"rg_name": {
|
||||||
}
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
func DataSourceBasicServiceList() *schema.Resource {
|
},
|
||||||
return &schema.Resource{
|
"ssh_user": {
|
||||||
SchemaVersion: 1,
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
ReadContext: dataSourceBasicServiceListRead,
|
},
|
||||||
|
"status": {
|
||||||
Timeouts: &schema.ResourceTimeout{
|
Type: schema.TypeString,
|
||||||
Read: &constants.Timeout30s,
|
Computed: true,
|
||||||
Default: &constants.Timeout60s,
|
},
|
||||||
},
|
"tech_status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
Schema: dataSourceBasicServiceListSchemaMake(),
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,105 +1,110 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package bservice
|
package bservice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceBasicServiceSnapshotListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceBasicServiceSnapshotListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
basicServiceSnapshotList, err := utilityBasicServiceSnapshotListCheckPresence(ctx, d, m)
|
basicServiceSnapshotList, err := utilityBasicServiceSnapshotListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenBasicServiceSnapshots(basicServiceSnapshotList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenBasicServiceSnapshotsList(basicServiceSnapshotList))
|
||||||
return nil
|
d.Set("entry_count", basicServiceSnapshotList.EntryCount)
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceBasicServiceSnapshotListSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceBasicServiceSnapshotListSchemaMake() map[string]*schema.Schema {
|
||||||
"service_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"service_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
Description: "ID of the BasicService instance",
|
Required: true,
|
||||||
},
|
Description: "ID of the BasicService instance",
|
||||||
"items": {
|
},
|
||||||
Type: schema.TypeList,
|
"items": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"guid": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeString,
|
"guid": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"label": {
|
},
|
||||||
Type: schema.TypeString,
|
"label": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"timestamp": {
|
},
|
||||||
Type: schema.TypeInt,
|
"timestamp": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"valid": {
|
},
|
||||||
Type: schema.TypeBool,
|
"valid": {
|
||||||
Computed: true,
|
Type: schema.TypeBool,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
return res
|
"entry_count": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
func DataSourceBasicServiceSnapshotList() *schema.Resource {
|
},
|
||||||
return &schema.Resource{
|
}
|
||||||
SchemaVersion: 1,
|
return res
|
||||||
|
}
|
||||||
ReadContext: dataSourceBasicServiceSnapshotListRead,
|
|
||||||
|
func DataSourceBasicServiceSnapshotList() *schema.Resource {
|
||||||
Timeouts: &schema.ResourceTimeout{
|
return &schema.Resource{
|
||||||
Read: &constants.Timeout30s,
|
SchemaVersion: 1,
|
||||||
Default: &constants.Timeout60s,
|
|
||||||
},
|
ReadContext: dataSourceBasicServiceSnapshotListRead,
|
||||||
|
|
||||||
Schema: dataSourceBasicServiceSnapshotListSchemaMake(),
|
Timeouts: &schema.ResourceTimeout{
|
||||||
}
|
Read: &constants.Timeout30s,
|
||||||
}
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceBasicServiceSnapshotListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ func flattenResourceBasicServiceGroup(d *schema.ResourceData, bsg *bservice.Reco
|
|||||||
d.Set("rg_name", bsg.RGName)
|
d.Set("rg_name", bsg.RGName)
|
||||||
d.Set("role", bsg.Role)
|
d.Set("role", bsg.Role)
|
||||||
d.Set("sep_id", bsg.SEPID)
|
d.Set("sep_id", bsg.SEPID)
|
||||||
|
d.Set("sep_pool", bsg.PoolName)
|
||||||
d.Set("seq_no", bsg.SeqNo)
|
d.Set("seq_no", bsg.SeqNo)
|
||||||
d.Set("status", bsg.Status)
|
d.Set("status", bsg.Status)
|
||||||
d.Set("tech_status", bsg.TechStatus)
|
d.Set("tech_status", bsg.TechStatus)
|
||||||
@@ -110,7 +111,7 @@ func flattenBasicServiceComputes(bscs bservice.ListComputes) []map[string]interf
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenBasicServiceSnapshots(bsrvss bservice.ListSnapshots) []map[string]interface{} {
|
func flattenBasicServiceSnapshots(bsrvss bservice.ListSnapshots) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(bsrvss))
|
||||||
for _, bsrvs := range bsrvss {
|
for _, bsrvs := range bsrvss {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": bsrvs.GUID,
|
"guid": bsrvs.GUID,
|
||||||
@@ -122,3 +123,17 @@ func flattenBasicServiceSnapshots(bsrvss bservice.ListSnapshots) []map[string]in
|
|||||||
}
|
}
|
||||||
return res
|
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
|
||||||
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -20,5 +20,5 @@ func existRGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool
|
|||||||
|
|
||||||
rgId := uint64(d.Get("rg_id").(int))
|
rgId := uint64(d.Get("rg_id").(int))
|
||||||
|
|
||||||
return len(rgList.FilterByID(rgId)) != 0, nil
|
return len(rgList.FilterByID(rgId).Data) != 0, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,9 +42,9 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityBasicServiceDeletedListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (bservice.ListBasicServices, error) {
|
func utilityBasicServiceDeletedListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.ListBasicServices, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := bservice.ListRequest{}
|
req := bservice.ListDeletedRequest{}
|
||||||
|
|
||||||
if accountId, ok := d.GetOk("account_id"); ok {
|
if accountId, ok := d.GetOk("account_id"); ok {
|
||||||
req.AccountID = uint64(accountId.(int))
|
req.AccountID = uint64(accountId.(int))
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityBasicServiceListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (bservice.ListBasicServices, error) {
|
func utilityBasicServiceListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.ListBasicServices, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := bservice.ListRequest{}
|
req := bservice.ListRequest{}
|
||||||
|
|
||||||
@@ -59,6 +59,30 @@ func utilityBasicServiceListCheckPresence(ctx context.Context, d *schema.Resourc
|
|||||||
req.Size = uint64(size.(int))
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
log.Debugf("utilityBasicServiceListCheckPresence")
|
log.Debugf("utilityBasicServiceListCheckPresence")
|
||||||
basicServiceList, err := c.CloudAPI().BService().List(ctx, req)
|
basicServiceList, err := c.CloudAPI().BService().List(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityBasicServiceSnapshotListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (bservice.ListSnapshots, error) {
|
func utilityBasicServiceSnapshotListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*bservice.ListInfoSnapshots, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
var id uint64
|
var id uint64
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ import (
|
|||||||
func dataSourceDiskRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,454 +1,500 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package disks
|
package disks
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceDiskListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
diskList, err := utilityDiskListCheckPresence(ctx, d, m)
|
diskList, err := utilityDiskListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenDiskList(diskList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenDiskList(diskList))
|
||||||
return nil
|
d.Set("entry_count", diskList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceDiskListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceDiskListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Optional: true,
|
"by_id": {
|
||||||
Description: "ID of the account the disks belong to",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"type": {
|
Description: "Find by ID",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Optional: true,
|
"name": {
|
||||||
Description: "type of the disks",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"page": {
|
Description: "Find by name",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"account_name": {
|
||||||
Description: "Page number",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"size": {
|
Description: "Find by account name",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"disk_max_size": {
|
||||||
Description: "Page size",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"items": {
|
Description: "Find by max disk size",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"status": {
|
||||||
Elem: &schema.Resource{
|
Type: schema.TypeString,
|
||||||
Schema: map[string]*schema.Schema{
|
Optional: true,
|
||||||
"account_id": {
|
Description: "Find by status",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"shared": {
|
||||||
Description: "The unique ID of the subscriber-owner of the disk",
|
Type: schema.TypeBool,
|
||||||
},
|
Optional: true,
|
||||||
"account_name": {
|
Description: "Find by shared field",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"account_id": {
|
||||||
Description: "The name of the subscriber '(account') to whom this disk belongs",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"acl": {
|
Description: "ID of the account the disks belong to",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"type": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
// "boot_partition": {
|
Optional: true,
|
||||||
// Type: schema.TypeInt,
|
Description: "type of the disks",
|
||||||
// Computed: true,
|
},
|
||||||
// Description: "Number of disk partitions",
|
"sep_id": {
|
||||||
// },
|
Type: schema.TypeInt,
|
||||||
"computes": {
|
Optional: true,
|
||||||
Type: schema.TypeList,
|
Description: "find by sep ID",
|
||||||
Computed: true,
|
},
|
||||||
Elem: &schema.Resource{
|
"pool_name": {
|
||||||
Schema: map[string]*schema.Schema{
|
Type: schema.TypeString,
|
||||||
"compute_id": {
|
Optional: true,
|
||||||
Type: schema.TypeString,
|
Description: "find by pool name",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"page": {
|
||||||
"compute_name": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Optional: true,
|
||||||
Computed: true,
|
Description: "Page number",
|
||||||
},
|
},
|
||||||
},
|
"size": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"created_time": {
|
Description: "Page size",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"items": {
|
||||||
Description: "Created time",
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
"deleted_time": {
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
Computed: true,
|
"account_id": {
|
||||||
Description: "Deleted time",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"desc": {
|
Description: "The unique ID of the subscriber-owner of the disk",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"account_name": {
|
||||||
Description: "Description of disk",
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"destruction_time": {
|
Description: "The name of the subscriber '(account') to whom this disk belongs",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"acl": {
|
||||||
Description: "Time of final deletion",
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"devicename": {
|
},
|
||||||
Type: schema.TypeString,
|
// "boot_partition": {
|
||||||
Computed: true,
|
// Type: schema.TypeInt,
|
||||||
Description: "Name of the device",
|
// Computed: true,
|
||||||
},
|
// Description: "Number of disk partitions",
|
||||||
// "disk_path": {
|
// },
|
||||||
// Type: schema.TypeString,
|
"computes": {
|
||||||
// Computed: true,
|
Type: schema.TypeList,
|
||||||
// Description: "Disk path",
|
Computed: true,
|
||||||
// },
|
Elem: &schema.Resource{
|
||||||
"gid": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"compute_id": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
Description: "ID of the grid (platform)",
|
Computed: true,
|
||||||
},
|
},
|
||||||
// "guid": {
|
"compute_name": {
|
||||||
// Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
// Computed: true,
|
Computed: true,
|
||||||
// Description: "Disk ID on the storage side",
|
},
|
||||||
// },
|
},
|
||||||
"disk_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"created_time": {
|
||||||
Description: "The unique ID of the subscriber-owner of the disk",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"image_id": {
|
Description: "Created time",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"deleted_time": {
|
||||||
Description: "Image ID",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"images": {
|
Description: "Deleted time",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"desc": {
|
||||||
Elem: &schema.Schema{
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
},
|
Description: "Description of disk",
|
||||||
Description: "IDs of images using the disk",
|
},
|
||||||
},
|
"destruction_time": {
|
||||||
"iotune": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeList,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Time of final deletion",
|
||||||
Elem: &schema.Resource{
|
},
|
||||||
Schema: map[string]*schema.Schema{
|
"devicename": {
|
||||||
"read_bytes_sec": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Name of the device",
|
||||||
Description: "Number of bytes to read per second",
|
},
|
||||||
},
|
// "disk_path": {
|
||||||
"read_bytes_sec_max": {
|
// Type: schema.TypeString,
|
||||||
Type: schema.TypeInt,
|
// Computed: true,
|
||||||
Computed: true,
|
// Description: "Disk path",
|
||||||
Description: "Maximum number of bytes to read",
|
// },
|
||||||
},
|
"gid": {
|
||||||
"read_iops_sec": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "ID of the grid (platform)",
|
||||||
Description: "Number of io read operations per second",
|
},
|
||||||
},
|
// "guid": {
|
||||||
"read_iops_sec_max": {
|
// Type: schema.TypeInt,
|
||||||
Type: schema.TypeInt,
|
// Computed: true,
|
||||||
Computed: true,
|
// Description: "Disk ID on the storage side",
|
||||||
Description: "Maximum number of io read operations",
|
// },
|
||||||
},
|
"disk_id": {
|
||||||
"size_iops_sec": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "The unique ID of the subscriber-owner of the disk",
|
||||||
Description: "Size of io operations",
|
},
|
||||||
},
|
"image_id": {
|
||||||
"total_bytes_sec": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Image ID",
|
||||||
Description: "Total size bytes per second",
|
},
|
||||||
},
|
"images": {
|
||||||
"total_bytes_sec_max": {
|
Type: schema.TypeList,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Elem: &schema.Schema{
|
||||||
Description: "Maximum total size of bytes per second",
|
Type: schema.TypeString,
|
||||||
},
|
},
|
||||||
"total_iops_sec": {
|
Description: "IDs of images using the disk",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"iotune": {
|
||||||
Description: "Total number of io operations per second",
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
"total_iops_sec_max": {
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
Computed: true,
|
"read_bytes_sec": {
|
||||||
Description: "Maximum total number of io operations per second",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"write_bytes_sec": {
|
Description: "Number of bytes to read per second",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"read_bytes_sec_max": {
|
||||||
Description: "Number of bytes to write per second",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"write_bytes_sec_max": {
|
Description: "Maximum number of bytes to read",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"read_iops_sec": {
|
||||||
Description: "Maximum number of bytes to write per second",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"write_iops_sec": {
|
Description: "Number of io read operations per second",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"read_iops_sec_max": {
|
||||||
Description: "Number of write operations per second",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"write_iops_sec_max": {
|
Description: "Maximum number of io read operations",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"size_iops_sec": {
|
||||||
Description: "Maximum number of write operations per second",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
Description: "Size of io operations",
|
||||||
},
|
},
|
||||||
},
|
"total_bytes_sec": {
|
||||||
// "iqn": {
|
Type: schema.TypeInt,
|
||||||
// Type: schema.TypeString,
|
Computed: true,
|
||||||
// Computed: true,
|
Description: "Total size bytes per second",
|
||||||
// Description: "Disk IQN",
|
},
|
||||||
// },
|
"total_bytes_sec_max": {
|
||||||
// "login": {
|
Type: schema.TypeInt,
|
||||||
// Type: schema.TypeString,
|
Computed: true,
|
||||||
// Computed: true,
|
Description: "Maximum total size of bytes per second",
|
||||||
// Description: "Login to access the disk",
|
},
|
||||||
// },
|
"total_iops_sec": {
|
||||||
"machine_id": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Total number of io operations per second",
|
||||||
Description: "Machine ID",
|
},
|
||||||
},
|
"total_iops_sec_max": {
|
||||||
"machine_name": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Maximum total number of io operations per second",
|
||||||
Description: "Machine name",
|
},
|
||||||
},
|
"write_bytes_sec": {
|
||||||
// "milestones": {
|
Type: schema.TypeInt,
|
||||||
// Type: schema.TypeInt,
|
Computed: true,
|
||||||
// Computed: true,
|
Description: "Number of bytes to write per second",
|
||||||
// Description: "Milestones",
|
},
|
||||||
// },
|
"write_bytes_sec_max": {
|
||||||
"disk_name": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Maximum number of bytes to write per second",
|
||||||
Description: "Name of disk",
|
},
|
||||||
},
|
"write_iops_sec": {
|
||||||
"order": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Number of write operations per second",
|
||||||
Description: "Disk order",
|
},
|
||||||
},
|
"write_iops_sec_max": {
|
||||||
"params": {
|
Type: schema.TypeInt,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Maximum number of write operations per second",
|
||||||
Description: "Disk params",
|
},
|
||||||
},
|
},
|
||||||
"parent_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
// "iqn": {
|
||||||
Description: "ID of the parent disk",
|
// Type: schema.TypeString,
|
||||||
},
|
// Computed: true,
|
||||||
// "passwd": {
|
// Description: "Disk IQN",
|
||||||
// Type: schema.TypeString,
|
// },
|
||||||
// Computed: true,
|
// "login": {
|
||||||
// Description: "Password to access the disk",
|
// Type: schema.TypeString,
|
||||||
// },
|
// Computed: true,
|
||||||
"pci_slot": {
|
// Description: "Login to access the disk",
|
||||||
Type: schema.TypeInt,
|
// },
|
||||||
Computed: true,
|
"machine_id": {
|
||||||
Description: "ID of the pci slot to which the disk is connected",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"pool": {
|
Description: "Machine ID",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"machine_name": {
|
||||||
Description: "Pool for disk location",
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"present_to": {
|
Description: "Machine name",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
// "milestones": {
|
||||||
Elem: &schema.Schema{
|
// Type: schema.TypeInt,
|
||||||
Type: schema.TypeInt,
|
// Computed: true,
|
||||||
},
|
// Description: "Milestones",
|
||||||
},
|
// },
|
||||||
// "purge_attempts": {
|
"disk_name": {
|
||||||
// Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
// Computed: true,
|
Computed: true,
|
||||||
// Description: "Number of deletion attempts",
|
Description: "Name of disk",
|
||||||
// },
|
},
|
||||||
"purge_time": {
|
"order": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Time of the last deletion attempt",
|
Description: "Disk order",
|
||||||
},
|
},
|
||||||
// "reality_device_number": {
|
"params": {
|
||||||
// Type: schema.TypeInt,
|
Type: schema.TypeString,
|
||||||
// Computed: true,
|
Computed: true,
|
||||||
// Description: "Reality device number",
|
Description: "Disk params",
|
||||||
// },
|
},
|
||||||
// "reference_id": {
|
"parent_id": {
|
||||||
// Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
// Computed: true,
|
Computed: true,
|
||||||
// Description: "ID of the reference to the disk",
|
Description: "ID of the parent disk",
|
||||||
// },
|
},
|
||||||
"res_id": {
|
// "passwd": {
|
||||||
Type: schema.TypeString,
|
// Type: schema.TypeString,
|
||||||
Computed: true,
|
// Computed: true,
|
||||||
Description: "Resource ID",
|
// Description: "Password to access the disk",
|
||||||
},
|
// },
|
||||||
"res_name": {
|
"pci_slot": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Name of the resource",
|
Description: "ID of the pci slot to which the disk is connected",
|
||||||
},
|
},
|
||||||
"role": {
|
"pool": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Disk role",
|
Description: "Pool for disk location",
|
||||||
},
|
},
|
||||||
"sep_id": {
|
"present_to": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Storage endpoint provider ID to create disk",
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"sep_type": {
|
},
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
// "purge_attempts": {
|
||||||
Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
|
// Type: schema.TypeInt,
|
||||||
},
|
// Computed: true,
|
||||||
"shareable": {
|
// Description: "Number of deletion attempts",
|
||||||
Type: schema.TypeBool,
|
// },
|
||||||
Computed: true,
|
"purge_time": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"size_max": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Time of the last deletion attempt",
|
||||||
Computed: true,
|
},
|
||||||
Description: "Size in GB",
|
// "reality_device_number": {
|
||||||
},
|
// Type: schema.TypeInt,
|
||||||
"size_used": {
|
// Computed: true,
|
||||||
Type: schema.TypeFloat,
|
// Description: "Reality device number",
|
||||||
Computed: true,
|
// },
|
||||||
Description: "Number of used space, in GB",
|
// "reference_id": {
|
||||||
},
|
// Type: schema.TypeString,
|
||||||
"snapshots": {
|
// Computed: true,
|
||||||
Type: schema.TypeList,
|
// Description: "ID of the reference to the disk",
|
||||||
Computed: true,
|
// },
|
||||||
Elem: &schema.Resource{
|
"res_id": {
|
||||||
Schema: map[string]*schema.Schema{
|
Type: schema.TypeString,
|
||||||
"guid": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Description: "Resource ID",
|
||||||
Computed: true,
|
},
|
||||||
Description: "ID of the snapshot",
|
"res_name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"label": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Description: "Name of the resource",
|
||||||
Computed: true,
|
},
|
||||||
Description: "Name of the snapshot",
|
"role": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"res_id": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Description: "Disk role",
|
||||||
Computed: true,
|
},
|
||||||
Description: "Reference to the snapshot",
|
"sep_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"snap_set_guid": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Description: "Storage endpoint provider ID to create disk",
|
||||||
Computed: true,
|
},
|
||||||
Description: "The set snapshot ID",
|
"sep_type": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"snap_set_time": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Type SEP. Defines the type of storage system and contains one of the values set in the cloud platform",
|
||||||
Computed: true,
|
},
|
||||||
Description: "The set time of the snapshot",
|
"shareable": {
|
||||||
},
|
Type: schema.TypeBool,
|
||||||
"timestamp": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"size_max": {
|
||||||
Description: "Snapshot time",
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
Description: "Size in GB",
|
||||||
},
|
},
|
||||||
},
|
"size_used": {
|
||||||
"status": {
|
Type: schema.TypeFloat,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Number of used space, in GB",
|
||||||
Description: "Disk status",
|
},
|
||||||
},
|
"snapshots": {
|
||||||
"tech_status": {
|
Type: schema.TypeList,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
Description: "Technical status of the disk",
|
Schema: map[string]*schema.Schema{
|
||||||
},
|
"guid": {
|
||||||
"type": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "ID of the snapshot",
|
||||||
Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
|
},
|
||||||
},
|
"label": {
|
||||||
"vmid": {
|
Type: schema.TypeString,
|
||||||
Type: schema.TypeInt,
|
Computed: true,
|
||||||
Computed: true,
|
Description: "Name of the snapshot",
|
||||||
Description: "Virtual Machine ID (Deprecated)",
|
},
|
||||||
},
|
"res_id": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
},
|
Description: "Reference to the snapshot",
|
||||||
}
|
},
|
||||||
return res
|
"snap_set_guid": {
|
||||||
}
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
func DataSourceDiskList() *schema.Resource {
|
Description: "The set snapshot ID",
|
||||||
return &schema.Resource{
|
},
|
||||||
SchemaVersion: 1,
|
"snap_set_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
ReadContext: dataSourceDiskListRead,
|
Computed: true,
|
||||||
|
Description: "The set time of the snapshot",
|
||||||
Timeouts: &schema.ResourceTimeout{
|
},
|
||||||
Read: &constants.Timeout30s,
|
"timestamp": {
|
||||||
Default: &constants.Timeout60s,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
|
Description: "Snapshot time",
|
||||||
Schema: dataSourceDiskListSchemaMake(),
|
},
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Disk status",
|
||||||
|
},
|
||||||
|
"tech_status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Technical status of the disk",
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
|
||||||
|
},
|
||||||
|
"vmid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Virtual Machine ID (Deprecated)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -44,17 +44,29 @@ import (
|
|||||||
func dataSourceDiskListTypesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskListTypesRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
listTypes, err := utilityDiskListTypesCheckPresence(ctx, d, m)
|
listTypes, err := utilityDiskListTypesCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("types", listTypes)
|
d.Set("types", listTypes.Data)
|
||||||
|
d.Set("entry_count", listTypes.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceDiskListTypesSchemaMake() map[string]*schema.Schema {
|
func dataSourceDiskListTypesSchemaMake() map[string]*schema.Schema {
|
||||||
res := map[string]*schema.Schema{
|
res := map[string]*schema.Schema{
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"types": {
|
"types": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -63,6 +75,10 @@ func dataSourceDiskListTypesSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
Description: "The types of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
|
Description: "The types of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,16 +38,18 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
|
"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/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenDiskListTypesDetailed(tld []interface{}) []map[string]interface{} {
|
func flattenDiskListTypesDetailed(tld *disks.ListTypes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, typeListDetailed := range tld {
|
for _, typeListDetailed := range tld.Data {
|
||||||
toMap := typeListDetailed.(map[string]interface{})
|
toMap := typeListDetailed.(map[string]interface{})
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"pools": flattenListTypesDetailedPools(toMap["pools"].([]interface{})),
|
"pools": flattenListTypesDetailedPools(toMap["pools"].([]interface{})),
|
||||||
"sep_id": toMap["sepId"].(float64),
|
"sep_id": toMap["sepId"].(float64),
|
||||||
|
"sep_name": toMap["sepName"].(string),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
@@ -59,8 +61,9 @@ func flattenListTypesDetailedPools(pools []interface{}) []interface{} {
|
|||||||
for _, pool := range pools {
|
for _, pool := range pools {
|
||||||
toMap := pool.(map[string]interface{})
|
toMap := pool.(map[string]interface{})
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"name": toMap["name"].(string),
|
"name": toMap["name"].(string),
|
||||||
"types": toMap["types"].([]interface{}),
|
"system": toMap["system"].(string),
|
||||||
|
"types": toMap["types"].([]interface{}),
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
@@ -71,17 +74,29 @@ func flattenListTypesDetailedPools(pools []interface{}) []interface{} {
|
|||||||
func dataSourceDiskListTypesDetailedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskListTypesDetailedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
listTypesDetailed, err := utilityDiskListTypesDetailedCheckPresence(ctx, d, m)
|
listTypesDetailed, err := utilityDiskListTypesDetailedCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenDiskListTypesDetailed(listTypesDetailed))
|
d.Set("items", flattenDiskListTypesDetailed(listTypesDetailed))
|
||||||
|
d.Set("entry_count", listTypesDetailed.EntryCount)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
||||||
res := map[string]*schema.Schema{
|
res := map[string]*schema.Schema{
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"items": {
|
"items": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -97,6 +112,10 @@ func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Pool name",
|
Description: "Pool name",
|
||||||
},
|
},
|
||||||
|
"system": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
"types": {
|
"types": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -113,9 +132,17 @@ func dataSourceDiskListTypesDetailedSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Storage endpoint provider ID to create disk",
|
Description: "Storage endpoint provider ID to create disk",
|
||||||
},
|
},
|
||||||
|
"sep_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,12 +44,14 @@ import (
|
|||||||
func dataSourceDiskListUnattachedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskListUnattachedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
diskListUnattached, err := utilityDiskListUnattachedCheckPresence(ctx, d, m)
|
diskListUnattached, err := utilityDiskListUnattachedCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenDiskListUnattached(diskListUnattached))
|
d.Set("items", flattenDiskListUnattached(diskListUnattached))
|
||||||
|
d.Set("entry_count", diskListUnattached.EntryCount)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@@ -71,12 +73,56 @@ func DataSourceDiskListUnattached() *schema.Resource {
|
|||||||
|
|
||||||
func dataSourceDiskListUnattachedSchemaMake() map[string]*schema.Schema {
|
func dataSourceDiskListUnattachedSchemaMake() map[string]*schema.Schema {
|
||||||
res := 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": {
|
"account_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Description: "ID of the account the disks belong to",
|
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",
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "type of the disks",
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page number",
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
|
},
|
||||||
"items": {
|
"items": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -330,6 +376,11 @@ func dataSourceDiskListUnattachedSchemaMake() map[string]*schema.Schema {
|
|||||||
Computed: true,
|
Computed: true,
|
||||||
Description: "Storage endpoint provider ID to create disk",
|
Description: "Storage endpoint provider ID to create disk",
|
||||||
},
|
},
|
||||||
|
"shareable": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Computed: true,
|
||||||
|
Description: "shareable",
|
||||||
|
},
|
||||||
"size_max": {
|
"size_max": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -401,6 +452,10 @@ func dataSourceDiskListUnattachedSchemaMake() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import (
|
|||||||
func dataSourceDiskSnapshotRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskSnapshotRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import (
|
|||||||
func dataSourceDiskSnapshotListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskSnapshotListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ Authors:
|
|||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
Tim Tkachev, <tvtkachev@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@@ -42,18 +43,433 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceDiskListDeletedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceDiskListDeletedRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
diskList, err := utilityDiskListCheckPresence(ctx, d, m)
|
diskList, err := utilityDiskListDeletedCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
id := uuid.New()
|
id := uuid.New()
|
||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
d.Set("items", flattenDiskList(diskList))
|
d.Set("items", flattenDiskList(diskList))
|
||||||
|
d.Set("entry_count", diskList.EntryCount)
|
||||||
|
|
||||||
return nil
|
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",
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "type of the disks",
|
||||||
|
},
|
||||||
|
"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,
|
||||||
|
},
|
||||||
|
// "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",
|
||||||
|
// },
|
||||||
|
"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.TypeString,
|
||||||
|
},
|
||||||
|
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",
|
||||||
|
// },
|
||||||
|
"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.TypeList,
|
||||||
|
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",
|
||||||
|
},
|
||||||
|
// "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",
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "The type of disk in terms of its role in compute: 'B=Boot, D=Data, T=Temp'",
|
||||||
|
},
|
||||||
|
"vmid": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Virtual Machine ID (Deprecated)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
func DataSourceDiskListDeleted() *schema.Resource {
|
func DataSourceDiskListDeleted() *schema.Resource {
|
||||||
return &schema.Resource{
|
return &schema.Resource{
|
||||||
SchemaVersion: 1,
|
SchemaVersion: 1,
|
||||||
@@ -64,6 +480,6 @@ func DataSourceDiskListDeleted() *schema.Resource {
|
|||||||
Default: &constants.Timeout60s,
|
Default: &constants.Timeout60s,
|
||||||
},
|
},
|
||||||
|
|
||||||
Schema: dataSourceDiskListSchemaMake(),
|
Schema: dataSourceDiskDeletedListSchemaMake(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ func flattenDiskSnapshot(d *schema.ResourceData, snapshot disks.ItemSnapshot) {
|
|||||||
d.Set("snap_set_time", snapshot.SnapSetTime)
|
d.Set("snap_set_time", snapshot.SnapSetTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenDiskListUnattached(ul disks.ListDisksUnattached) []map[string]interface{} {
|
func flattenDiskListUnattached(ul *disks.ListDisksUnattached) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ul.Data))
|
||||||
for _, unattachedDisk := range ul {
|
for _, unattachedDisk := range ul.Data {
|
||||||
unattachedDiskAcl, _ := json.Marshal(unattachedDisk.ACL)
|
unattachedDiskAcl, _ := json.Marshal(unattachedDisk.ACL)
|
||||||
tmp := map[string]interface{}{
|
tmp := map[string]interface{}{
|
||||||
"_ckey": unattachedDisk.CKey,
|
"_ckey": unattachedDisk.CKey,
|
||||||
@@ -56,6 +56,7 @@ func flattenDiskListUnattached(ul disks.ListDisksUnattached) []map[string]interf
|
|||||||
"res_name": unattachedDisk.ResName,
|
"res_name": unattachedDisk.ResName,
|
||||||
"role": unattachedDisk.Role,
|
"role": unattachedDisk.Role,
|
||||||
"sep_id": unattachedDisk.SEPID,
|
"sep_id": unattachedDisk.SEPID,
|
||||||
|
"shareable": unattachedDisk.Shareable,
|
||||||
"size_max": unattachedDisk.SizeMax,
|
"size_max": unattachedDisk.SizeMax,
|
||||||
"size_used": unattachedDisk.SizeUsed,
|
"size_used": unattachedDisk.SizeUsed,
|
||||||
"snapshots": flattenDiskSnapshotList(unattachedDisk.Snapshots),
|
"snapshots": flattenDiskSnapshotList(unattachedDisk.Snapshots),
|
||||||
@@ -120,7 +121,7 @@ func flattenDisk(d *schema.ResourceData, disk *disks.RecordDisk) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenDiskSnapshotList(sl disks.ListSnapshots) []interface{} {
|
func flattenDiskSnapshotList(sl disks.ListSnapshots) []interface{} {
|
||||||
res := make([]interface{}, 0)
|
res := make([]interface{}, 0, len(sl))
|
||||||
for _, snapshot := range sl {
|
for _, snapshot := range sl {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"guid": snapshot.GUID,
|
"guid": snapshot.GUID,
|
||||||
@@ -136,9 +137,9 @@ func flattenDiskSnapshotList(sl disks.ListSnapshots) []interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenDiskList(dl disks.ListDisks) []map[string]interface{} {
|
func flattenDiskList(dl *disks.ListDisks) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(dl.Data))
|
||||||
for _, disk := range dl {
|
for _, disk := range dl.Data {
|
||||||
diskAcl, _ := json.Marshal(disk.ACL)
|
diskAcl, _ := json.Marshal(disk.ACL)
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": disk.AccountID,
|
"account_id": disk.AccountID,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func existAccountID(ctx context.Context, d *schema.ResourceData, m interface{})
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return len(accountList.FilterByID(accountId)) != 0, nil
|
return len(accountList.FilterByID(accountId).Data) != 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
||||||
@@ -32,5 +32,5 @@ func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool,
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return len(locationList.FilterByGID(gid)) != 0, nil
|
return len(locationList.FilterByGID(gid).Data) != 0, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ func resourceDiskCreate(ctx context.Context, d *schema.ResourceData, m interface
|
|||||||
|
|
||||||
diskId, err := c.CloudAPI().Disks().Create(ctx, req)
|
diskId, err := c.CloudAPI().Disks().Create(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,7 +143,7 @@ func resourceDiskCreate(ctx context.Context, d *schema.ResourceData, m interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
func resourceDiskRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceDiskRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
c := m.(*controller.ControllerCfg)
|
// c := m.(*controller.ControllerCfg)
|
||||||
warnings := dc.Warnings{}
|
warnings := dc.Warnings{}
|
||||||
|
|
||||||
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
||||||
@@ -157,23 +158,24 @@ func resourceDiskRead(ctx context.Context, d *schema.ResourceData, m interface{}
|
|||||||
case status.Destroyed, status.Purged:
|
case status.Destroyed, status.Purged:
|
||||||
d.Set("disk_id", 0)
|
d.Set("disk_id", 0)
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
return resourceDiskCreate(ctx, d, m)
|
return diag.Errorf("The resource cannot be updated because it has been destroyed")
|
||||||
|
// return resourceDiskCreate(ctx, d, m)
|
||||||
case status.Deleted:
|
case status.Deleted:
|
||||||
hasChangeState = true
|
// hasChangeState = true
|
||||||
req := disks.RestoreRequest{
|
// req := disks.RestoreRequest{
|
||||||
DiskID: disk.ID,
|
// DiskID: disk.ID,
|
||||||
}
|
// }
|
||||||
|
|
||||||
if reason, ok := d.GetOk("reason"); ok {
|
// if reason, ok := d.GetOk("reason"); ok {
|
||||||
req.Reason = reason.(string)
|
// req.Reason = reason.(string)
|
||||||
} else {
|
// } else {
|
||||||
req.Reason = "Terraform automatic restore"
|
// req.Reason = "Terraform automatic restore"
|
||||||
}
|
// }
|
||||||
|
|
||||||
_, err := c.CloudAPI().Disks().Restore(ctx, req)
|
// _, err := c.CloudAPI().Disks().Restore(ctx, req)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
warnings.Add(err)
|
// warnings.Add(err)
|
||||||
}
|
// }
|
||||||
case status.Assigned:
|
case status.Assigned:
|
||||||
case status.Modeled:
|
case status.Modeled:
|
||||||
return diag.Errorf("The disk is in status: %s, please, contact support for more information", disk.Status)
|
return diag.Errorf("The disk is in status: %s, please, contact support for more information", disk.Status)
|
||||||
@@ -218,6 +220,7 @@ func resourceDiskUpdate(ctx context.Context, d *schema.ResourceData, m interface
|
|||||||
|
|
||||||
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -227,7 +230,8 @@ func resourceDiskUpdate(ctx context.Context, d *schema.ResourceData, m interface
|
|||||||
case status.Destroyed, status.Purged:
|
case status.Destroyed, status.Purged:
|
||||||
d.Set("disk_id", 0)
|
d.Set("disk_id", 0)
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
return resourceDiskCreate(ctx, d, m)
|
return diag.Errorf("The resource cannot be updated because it has been destroyed")
|
||||||
|
// return resourceDiskCreate(ctx, d, m)
|
||||||
case status.Deleted:
|
case status.Deleted:
|
||||||
hasChangeState = true
|
hasChangeState = true
|
||||||
req := disks.RestoreRequest{
|
req := disks.RestoreRequest{
|
||||||
@@ -271,7 +275,7 @@ func resourceDiskUpdate(ctx context.Context, d *schema.ResourceData, m interface
|
|||||||
Size: uint64(newSize.(int)),
|
Size: uint64(newSize.(int)),
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := c.CloudAPI().Disks().Resize(ctx, req)
|
_, err := c.CloudAPI().Disks().Resize2(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
@@ -375,9 +379,9 @@ func resourceDiskDelete(ctx context.Context, d *schema.ResourceData, m interface
|
|||||||
func resourceDiskSchemaMake() map[string]*schema.Schema {
|
func resourceDiskSchemaMake() map[string]*schema.Schema {
|
||||||
rets := map[string]*schema.Schema{
|
rets := map[string]*schema.Schema{
|
||||||
"account_id": {
|
"account_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
//ForceNew: true,
|
||||||
Description: "The unique ID of the subscriber-owner of the disk",
|
Description: "The unique ID of the subscriber-owner of the disk",
|
||||||
},
|
},
|
||||||
"disk_name": {
|
"disk_name": {
|
||||||
@@ -391,9 +395,9 @@ func resourceDiskSchemaMake() map[string]*schema.Schema {
|
|||||||
Description: "Size in GB",
|
Description: "Size in GB",
|
||||||
},
|
},
|
||||||
"gid": {
|
"gid": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
//ForceNew: true,
|
||||||
Description: "ID of the grid (platform)",
|
Description: "ID of the grid (platform)",
|
||||||
},
|
},
|
||||||
"pool": {
|
"pool": {
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ func resourceDiskSnapshotCreate(ctx context.Context, d *schema.ResourceData, m i
|
|||||||
func resourceDiskSnapshotRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceDiskSnapshotRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
disk, err := utilityDiskCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,15 +170,15 @@ func resourceDiskSnapshotDelete(ctx context.Context, d *schema.ResourceData, m i
|
|||||||
func resourceDiskSnapshotSchemaMake() map[string]*schema.Schema {
|
func resourceDiskSnapshotSchemaMake() map[string]*schema.Schema {
|
||||||
rets := map[string]*schema.Schema{
|
rets := map[string]*schema.Schema{
|
||||||
"disk_id": {
|
"disk_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
//ForceNew: true,
|
||||||
Description: "The unique ID of the subscriber-owner of the disk",
|
Description: "The unique ID of the subscriber-owner of the disk",
|
||||||
},
|
},
|
||||||
"label": {
|
"label": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
//ForceNew: true,
|
||||||
Description: "Name of the snapshot",
|
Description: "Name of the snapshot",
|
||||||
},
|
},
|
||||||
"rollback": {
|
"rollback": {
|
||||||
|
|||||||
@@ -43,22 +43,46 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityDiskListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (disks.ListDisks, error) {
|
func utilityDiskListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.ListDisks, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := disks.ListRequest{}
|
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 diskType, ok := d.GetOk("type"); ok {
|
||||||
|
req.Type = strings.ToUpper(diskType.(string))
|
||||||
|
}
|
||||||
|
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 page, ok := d.GetOk("page"); ok {
|
if page, ok := d.GetOk("page"); ok {
|
||||||
req.Page = uint64(page.(int))
|
req.Page = uint64(page.(int))
|
||||||
}
|
}
|
||||||
if size, ok := d.GetOk("size"); ok {
|
if size, ok := d.GetOk("size"); ok {
|
||||||
req.Size = uint64(size.(int))
|
req.Size = uint64(size.(int))
|
||||||
}
|
}
|
||||||
if diskType, ok := d.GetOk("type"); ok {
|
|
||||||
req.Type = strings.ToUpper(diskType.(string))
|
|
||||||
}
|
|
||||||
if accountId, ok := d.GetOk("accountId"); ok {
|
|
||||||
req.AccountID = uint64(accountId.(int))
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Debugf("utilityDiskListCheckPresence: load disk list")
|
log.Debugf("utilityDiskListCheckPresence: load disk list")
|
||||||
diskList, err := c.CloudAPI().Disks().List(ctx, req)
|
diskList, err := c.CloudAPI().Disks().List(ctx, req)
|
||||||
|
|||||||
92
internal/service/cloudapi/disks/utility_disk_list_deleted.go
Normal file
92
internal/service/cloudapi/disks/utility_disk_list_deleted.go
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
|
Authors:
|
||||||
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
Tim Tkachev, <tvtkachev@basistech.ru>
|
||||||
|
|
||||||
|
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 typev, ok := d.GetOk("type"); ok {
|
||||||
|
req.Type = typev.(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
|
||||||
|
}
|
||||||
@@ -9,12 +9,40 @@ import (
|
|||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityDiskListUnattachedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (disks.ListDisksUnattached, error) {
|
func utilityDiskListUnattachedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.ListDisksUnattached, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := disks.ListUnattachedRequest{}
|
req := disks.ListUnattachedRequest{}
|
||||||
if accountId, ok := d.GetOk("accountId"); ok {
|
|
||||||
|
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 diskType, ok := d.GetOk("type"); ok {
|
||||||
|
req.Type = diskType.(string)
|
||||||
|
}
|
||||||
|
if accountId, ok := d.GetOk("account_id"); ok {
|
||||||
req.AccountID = uint64(accountId.(int))
|
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 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("utilityDiskListUnattachedCheckPresence: load disk Unattached list")
|
log.Debugf("utilityDiskListUnattachedCheckPresence: load disk Unattached list")
|
||||||
unattachedList, err := c.CloudAPI().Disks().ListUnattached(ctx, req)
|
unattachedList, err := c.CloudAPI().Disks().ListUnattached(ctx, req)
|
||||||
|
|||||||
@@ -41,11 +41,18 @@ import (
|
|||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityDiskListTypesDetailedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) ([]interface{}, error) {
|
func utilityDiskListTypesDetailedCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.ListTypes, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := disks.ListTypesRequest{
|
req := disks.ListTypesRequest{
|
||||||
Detailed: true,
|
Detailed: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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("utilityDiskListTypesDetailedCheckPresence: load disk list Types Detailed")
|
log.Debugf("utilityDiskListTypesDetailedCheckPresence: load disk list Types Detailed")
|
||||||
listTypesDetailed, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
listTypesDetailed, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
||||||
|
|||||||
@@ -41,12 +41,19 @@ import (
|
|||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/controller"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityDiskListTypesCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) ([]interface{}, error) {
|
func utilityDiskListTypesCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*disks.ListTypes, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := disks.ListTypesRequest{
|
req := disks.ListTypesRequest{
|
||||||
Detailed: false,
|
Detailed: false,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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("utilityDiskListTypesCheckPresence: load disk list Types Detailed")
|
log.Debugf("utilityDiskListTypesCheckPresence: load disk list Types Detailed")
|
||||||
typesList, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
typesList, err := c.CloudAPI().Disks().ListTypes(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -1,285 +1,286 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
Tim Tkachev, <tvtkachev@basistech.ru>
|
Tim Tkachev, <tvtkachev@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package extnet
|
package extnet
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceExtnetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceExtnetRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
e, err := utilityExtnetCheckPresence(ctx, d, m)
|
e, err := utilityExtnetCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
d.SetId(strconv.FormatUint(e.ID, 10))
|
|
||||||
flattenExtnet(d, e)
|
d.SetId(strconv.FormatUint(e.ID, 10))
|
||||||
|
flattenExtnet(d, e)
|
||||||
return nil
|
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceExtnetSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceExtnetSchemaMake() map[string]*schema.Schema {
|
||||||
"net_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"net_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Required: true,
|
||||||
"ckey": {
|
},
|
||||||
Type: schema.TypeString,
|
"ckey": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"meta": {
|
},
|
||||||
Type: schema.TypeList,
|
"meta": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeString,
|
||||||
Description: "meta",
|
},
|
||||||
},
|
Description: "meta",
|
||||||
"check_ips": {
|
},
|
||||||
Type: schema.TypeList,
|
"check_ips": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
},
|
||||||
"default": {
|
},
|
||||||
Type: schema.TypeBool,
|
"default": {
|
||||||
Computed: true,
|
Type: schema.TypeBool,
|
||||||
},
|
Computed: true,
|
||||||
"default_qos": {
|
},
|
||||||
Type: schema.TypeList,
|
"default_qos": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"e_rate": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"e_rate": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"e_burst": {
|
},
|
||||||
Type: schema.TypeInt,
|
"e_burst": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"guid": {
|
},
|
||||||
Type: schema.TypeString,
|
"guid": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"in_burst": {
|
},
|
||||||
Type: schema.TypeInt,
|
"in_burst": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"in_rate": {
|
},
|
||||||
Type: schema.TypeInt,
|
"in_rate": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"desc": {
|
},
|
||||||
Type: schema.TypeString,
|
"desc": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"dns": {
|
},
|
||||||
Type: schema.TypeList,
|
"dns": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
},
|
||||||
"excluded": {
|
},
|
||||||
Type: schema.TypeList,
|
"excluded": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"client_type": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeString,
|
"client_type": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"mac": {
|
},
|
||||||
Type: schema.TypeString,
|
"mac": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"ip": {
|
},
|
||||||
Type: schema.TypeString,
|
"ip": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"type": {
|
},
|
||||||
Type: schema.TypeString,
|
"type": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"vm_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"vm_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"free_ips": {
|
},
|
||||||
Type: schema.TypeInt,
|
"free_ips": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"gateway": {
|
},
|
||||||
Type: schema.TypeString,
|
"gateway": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"gid": {
|
},
|
||||||
Type: schema.TypeInt,
|
"gid": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"guid": {
|
},
|
||||||
Type: schema.TypeInt,
|
"guid": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"ipcidr": {
|
},
|
||||||
Type: schema.TypeString,
|
"ipcidr": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"milestones": {
|
},
|
||||||
Type: schema.TypeInt,
|
"milestones": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"net_name": {
|
},
|
||||||
Type: schema.TypeString,
|
"net_name": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"network": {
|
},
|
||||||
Type: schema.TypeString,
|
"network": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"network_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"network_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"pre_reservations_num": {
|
},
|
||||||
Type: schema.TypeInt,
|
"pre_reservations_num": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"prefix": {
|
},
|
||||||
Type: schema.TypeInt,
|
"prefix": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"pri_vnf_dev_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"pri_vnf_dev_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"reservations": {
|
},
|
||||||
Type: schema.TypeList,
|
"reservations": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"client_type": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeString,
|
"client_type": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"domainname": {
|
},
|
||||||
Type: schema.TypeString,
|
"domainname": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"hostname": {
|
},
|
||||||
Type: schema.TypeString,
|
"hostname": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"desc": {
|
},
|
||||||
Type: schema.TypeString,
|
"desc": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"ip": {
|
},
|
||||||
Type: schema.TypeString,
|
"ip": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"mac": {
|
},
|
||||||
Type: schema.TypeString,
|
"mac": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"type": {
|
},
|
||||||
Type: schema.TypeString,
|
"type": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"vm_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"vm_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"shared_with": {
|
},
|
||||||
Type: schema.TypeList,
|
"shared_with": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Schema{
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
Elem: &schema.Schema{
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
"status": {
|
},
|
||||||
Type: schema.TypeString,
|
"status": {
|
||||||
Computed: true,
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
"vlan_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"vlan_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
"vnfs": {
|
},
|
||||||
Type: schema.TypeList,
|
"vnfs": {
|
||||||
Computed: true,
|
Type: schema.TypeList,
|
||||||
Elem: &schema.Resource{
|
Computed: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Elem: &schema.Resource{
|
||||||
"dhcp": {
|
Schema: map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"dhcp": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
return res
|
}
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func DataSourceExtnet() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
func DataSourceExtnet() *schema.Resource {
|
||||||
SchemaVersion: 1,
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
ReadContext: dataSourceExtnetRead,
|
|
||||||
|
ReadContext: dataSourceExtnetRead,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
Timeouts: &schema.ResourceTimeout{
|
||||||
Default: &constants.Timeout60s,
|
Read: &constants.Timeout30s,
|
||||||
},
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
Schema: dataSourceExtnetSchemaMake(),
|
|
||||||
}
|
Schema: dataSourceExtnetSchemaMake(),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,137 +1,162 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package extnet
|
package extnet
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceExtnetComputesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceExtnetComputesListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
extnetComputesList, err := utilityExtnetComputesListCheckPresence(ctx, d, m)
|
extnetComputesList, err := utilityExtnetComputesListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenExtnetComputesList(extnetComputesList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenExtnetComputesList(extnetComputesList))
|
||||||
return nil
|
d.Set("entry_count", extnetComputesList.EntryCount)
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceExtnetComputesListSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceExtnetComputesListSchemaMake() map[string]*schema.Schema {
|
||||||
"account_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"account_id": {
|
||||||
Required: true,
|
Type: schema.TypeInt,
|
||||||
Description: "filter by account ID",
|
Required: true,
|
||||||
},
|
Description: "filter by account ID",
|
||||||
"items": {
|
},
|
||||||
Type: schema.TypeList,
|
"rg_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: map[string]*schema.Schema{
|
Description: "Filter by RG ID",
|
||||||
"account_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"compute_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"account_name": {
|
Description: "Filter by compute ID",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"page": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"extnets": {
|
Optional: true,
|
||||||
Type: schema.TypeList,
|
Description: "Page number",
|
||||||
Computed: true,
|
},
|
||||||
Elem: &schema.Resource{
|
"size": {
|
||||||
Schema: map[string]*schema.Schema{
|
Type: schema.TypeInt,
|
||||||
"net_id": {
|
Optional: true,
|
||||||
Type: schema.TypeInt,
|
Description: "Page size",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"items": {
|
||||||
"ipaddr": {
|
Type: schema.TypeList,
|
||||||
Type: schema.TypeString,
|
Computed: true,
|
||||||
Computed: true,
|
Elem: &schema.Resource{
|
||||||
},
|
Schema: map[string]*schema.Schema{
|
||||||
"ipcidr": {
|
"account_id": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"name": {
|
"account_name": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
"extnets": {
|
||||||
},
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
"id": {
|
Elem: &schema.Resource{
|
||||||
Type: schema.TypeInt,
|
Schema: map[string]*schema.Schema{
|
||||||
Computed: true,
|
"net_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"name": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"ipaddr": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"rg_id": {
|
Computed: true,
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Computed: true,
|
"ipcidr": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
"rg_name": {
|
Computed: true,
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"name": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
Computed: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
return res
|
},
|
||||||
}
|
"id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
func DataSourceExtnetComputesList() *schema.Resource {
|
Computed: true,
|
||||||
return &schema.Resource{
|
},
|
||||||
SchemaVersion: 1,
|
"name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
ReadContext: dataSourceExtnetComputesListRead,
|
Computed: true,
|
||||||
|
},
|
||||||
Timeouts: &schema.ResourceTimeout{
|
"rg_id": {
|
||||||
Read: &constants.Timeout30s,
|
Type: schema.TypeInt,
|
||||||
Default: &constants.Timeout60s,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"rg_name": {
|
||||||
Schema: dataSourceExtnetComputesListSchemaMake(),
|
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(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,85 +1,86 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package extnet
|
package extnet
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceExtnetDefaultRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceExtnetDefaultRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
extnetId, err := utilityExtnetDefaultCheckPresence(ctx, m)
|
extnetId, err := utilityExtnetDefaultCheckPresence(ctx, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
extnetIdInt, err := strconv.ParseInt(extnetId, 10, 32)
|
d.SetId(id.String())
|
||||||
if err != nil {
|
extnetIdInt, err := strconv.ParseInt(extnetId, 10, 32)
|
||||||
return diag.FromErr(err)
|
if err != nil {
|
||||||
}
|
return diag.FromErr(err)
|
||||||
d.Set("net_id", extnetIdInt)
|
}
|
||||||
|
d.Set("net_id", extnetIdInt)
|
||||||
return nil
|
|
||||||
}
|
return nil
|
||||||
|
}
|
||||||
func dataSourceExtnetDefaultSchemaMake() map[string]*schema.Schema {
|
|
||||||
res := map[string]*schema.Schema{
|
func dataSourceExtnetDefaultSchemaMake() map[string]*schema.Schema {
|
||||||
"net_id": {
|
res := map[string]*schema.Schema{
|
||||||
Type: schema.TypeInt,
|
"net_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Computed: true,
|
||||||
}
|
},
|
||||||
return res
|
}
|
||||||
}
|
return res
|
||||||
|
}
|
||||||
func DataSourceExtnetDefault() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
func DataSourceExtnetDefault() *schema.Resource {
|
||||||
SchemaVersion: 1,
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
ReadContext: dataSourceExtnetDefaultRead,
|
|
||||||
|
ReadContext: dataSourceExtnetDefaultRead,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
|
||||||
Read: &constants.Timeout30s,
|
Timeouts: &schema.ResourceTimeout{
|
||||||
Default: &constants.Timeout60s,
|
Read: &constants.Timeout30s,
|
||||||
},
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
Schema: dataSourceExtnetDefaultSchemaMake(),
|
|
||||||
}
|
Schema: dataSourceExtnetDefaultSchemaMake(),
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,111 +1,150 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package extnet
|
package extnet
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceExtnetListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceExtnetListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
extnetList, err := utilityExtnetListCheckPresence(ctx, d, m)
|
extnetList, err := utilityExtnetListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
id := uuid.New()
|
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenExtnetList(extnetList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenExtnetList(extnetList))
|
||||||
return nil
|
d.Set("entry_count", extnetList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceExtnetListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
res := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceExtnetListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
res := map[string]*schema.Schema{
|
||||||
Optional: true,
|
"account_id": {
|
||||||
Description: "filter by account ID",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"page": {
|
Description: "Find by account ID",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"by_id": {
|
||||||
Description: "Page number",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"size": {
|
Description: "Find by ID",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"name": {
|
||||||
Description: "Page size",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"items": {
|
Description: "Find by name",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"network": {
|
||||||
Elem: &schema.Resource{
|
Type: schema.TypeString,
|
||||||
Schema: map[string]*schema.Schema{
|
Optional: true,
|
||||||
"net_id": {
|
},
|
||||||
Type: schema.TypeInt,
|
"vlan_id": {
|
||||||
Computed: true,
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"ipcidr": {
|
Description: "Find by VLAN ID",
|
||||||
Type: schema.TypeString,
|
},
|
||||||
Computed: true,
|
"vnfdev_id": {
|
||||||
},
|
Type: schema.TypeInt,
|
||||||
"name": {
|
Optional: true,
|
||||||
Type: schema.TypeString,
|
Description: "Find by VnfDEV ID",
|
||||||
Computed: true,
|
},
|
||||||
},
|
"status": {
|
||||||
},
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
},
|
Description: "Find by status",
|
||||||
}
|
},
|
||||||
return res
|
"page": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
func DataSourceExtnetList() *schema.Resource {
|
Description: "Page number",
|
||||||
return &schema.Resource{
|
},
|
||||||
SchemaVersion: 1,
|
"size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
ReadContext: dataSourceExtnetListRead,
|
Optional: true,
|
||||||
|
Description: "Page size",
|
||||||
Timeouts: &schema.ResourceTimeout{
|
},
|
||||||
Read: &constants.Timeout30s,
|
"items": {
|
||||||
Default: &constants.Timeout60s,
|
Type: schema.TypeList,
|
||||||
},
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
Schema: dataSourceExtnetListSchemaMake(),
|
Schema: map[string]*schema.Schema{
|
||||||
}
|
"net_id": {
|
||||||
}
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ipcidr": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceExtnetList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceExtnetListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceExtnetListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
func flattenExtnet(d *schema.ResourceData, e *extnet.RecordExtNet) {
|
func flattenExtnet(d *schema.ResourceData, e *extnet.RecordExtNet) {
|
||||||
d.Set("ckey", e.CKey)
|
d.Set("ckey", e.CKey)
|
||||||
d.Set("meta", flattens.FlattenMeta(e.Meta))
|
d.Set("meta", flattens.FlattenMeta(e.Meta))
|
||||||
d.Set("check_ips", e.CheckIps)
|
d.Set("check_ips", e.CheckIPs)
|
||||||
d.Set("default", e.Default)
|
d.Set("default", e.Default)
|
||||||
d.Set("default_qos", flattenExtnetDefaultQos(e.DefaultQOS))
|
d.Set("default_qos", flattenExtnetDefaultQos(e.DefaultQOS))
|
||||||
d.Set("desc", e.Description)
|
d.Set("desc", e.Description)
|
||||||
@@ -35,7 +35,7 @@ func flattenExtnet(d *schema.ResourceData, e *extnet.RecordExtNet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExcluded(ex []extnet.Excluded) []map[string]interface{} {
|
func flattenExcluded(ex []extnet.Excluded) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ex))
|
||||||
for _, item := range ex {
|
for _, item := range ex {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"client_type": item.ClientType,
|
"client_type": item.ClientType,
|
||||||
@@ -51,7 +51,7 @@ func flattenExcluded(ex []extnet.Excluded) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetReservations(ers extnet.ListReservations) []map[string]interface{} {
|
func flattenExtnetReservations(ers extnet.ListReservations) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ers))
|
||||||
for _, er := range ers {
|
for _, er := range ers {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"client_type": er.ClientType,
|
"client_type": er.ClientType,
|
||||||
@@ -92,7 +92,7 @@ func flattenExtnetVNFS(evnfs extnet.VNFs) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetsComputes(ecs extnet.ListExtNetExtends) []map[string]interface{} {
|
func flattenExtnetsComputes(ecs extnet.ListExtNetExtends) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ecs))
|
||||||
for _, ec := range ecs {
|
for _, ec := range ecs {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"net_id": ec.ID,
|
"net_id": ec.ID,
|
||||||
@@ -105,9 +105,9 @@ func flattenExtnetsComputes(ecs extnet.ListExtNetExtends) []map[string]interface
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetComputesList(ecl extnet.ListExtNetComputes) []map[string]interface{} {
|
func flattenExtnetComputesList(ecl *extnet.ListExtNetComputes) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(ecl.Data))
|
||||||
for _, ec := range ecl {
|
for _, ec := range ecl.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": ec.AccountID,
|
"account_id": ec.AccountID,
|
||||||
"account_name": ec.AccountName,
|
"account_name": ec.AccountName,
|
||||||
@@ -122,13 +122,14 @@ func flattenExtnetComputesList(ecl extnet.ListExtNetComputes) []map[string]inter
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenExtnetList(el extnet.ListExtNets) []map[string]interface{} {
|
func flattenExtnetList(el *extnet.ListExtNets) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(el.Data))
|
||||||
for _, e := range el {
|
for _, e := range el.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"net_id": e.ID,
|
"net_id": e.ID,
|
||||||
"ipcidr": e.IPCIDR,
|
"ipcidr": e.IPCIDR,
|
||||||
"name": e.Name,
|
"name": e.Name,
|
||||||
|
"status": e.Status,
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,12 +42,26 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityExtnetComputesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (extnet.ListExtNetComputes, error) {
|
func utilityExtnetComputesListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*extnet.ListExtNetComputes, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := extnet.ListComputesRequest{
|
req := extnet.ListComputesRequest{
|
||||||
AccountID: uint64(d.Get("account_id").(int)),
|
AccountID: uint64(d.Get("account_id").(int)),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if rg_id, ok := d.GetOk("rg_id"); ok {
|
||||||
|
req.RGID = uint64(rg_id.(int))
|
||||||
|
}
|
||||||
|
if compute_id, ok := d.GetOk("compute_id"); ok {
|
||||||
|
req.ComputeID = uint64(compute_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("utilityExtnetComputesListCheckPresence")
|
log.Debugf("utilityExtnetComputesListCheckPresence")
|
||||||
extnetComputesList, err := c.CloudAPI().ExtNet().ListComputes(ctx, req)
|
extnetComputesList, err := c.CloudAPI().ExtNet().ListComputes(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -42,13 +42,31 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityExtnetListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (extnet.ListExtNets, error) {
|
func utilityExtnetListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*extnet.ListExtNets, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := extnet.ListRequest{}
|
req := extnet.ListRequest{}
|
||||||
|
|
||||||
if accountId, ok := d.GetOk("account_id"); ok {
|
if accountId, ok := d.GetOk("account_id"); ok {
|
||||||
req.AccountID = uint64(accountId.(int))
|
req.AccountID = uint64(accountId.(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 network, ok := d.GetOk("network"); ok {
|
||||||
|
req.Network = network.(string)
|
||||||
|
}
|
||||||
|
if vlan_id, ok := d.GetOk("vlan_id"); ok {
|
||||||
|
req.VLANID = uint64(vlan_id.(int))
|
||||||
|
}
|
||||||
|
if vnfdev_id, ok := d.GetOk("vnfdev_id"); ok {
|
||||||
|
req.VNFDevID = uint64(vnfdev_id.(int))
|
||||||
|
}
|
||||||
|
if status, ok := d.GetOk("status"); ok {
|
||||||
|
req.Status = status.(string)
|
||||||
|
}
|
||||||
if page, ok := d.GetOk("page"); ok {
|
if page, ok := d.GetOk("page"); ok {
|
||||||
req.Page = uint64(page.(int))
|
req.Page = uint64(page.(int))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,13 +77,6 @@ func dataSourceFlipgroupSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"client_names": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"client_type": {
|
"client_type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -53,12 +53,48 @@ func dataSourceFlipgroupList(ctx context.Context, d *schema.ResourceData, m inte
|
|||||||
d.SetId(id.String())
|
d.SetId(id.String())
|
||||||
|
|
||||||
d.Set("items", flattenFlipgroupList(fg_list))
|
d.Set("items", flattenFlipgroupList(fg_list))
|
||||||
|
d.Set("entry_count", fg_list.EntryCount)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func dataSourceFlipgroupListSchemaMake() map[string]*schema.Schema {
|
func dataSourceFlipgroupListSchemaMake() map[string]*schema.Schema {
|
||||||
return map[string]*schema.Schema{
|
return 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",
|
||||||
|
},
|
||||||
|
"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 ExtNetID",
|
||||||
|
},
|
||||||
|
"by_ip": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by IP-address",
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by RG ID",
|
||||||
|
},
|
||||||
"page": {
|
"page": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -82,10 +118,6 @@ func dataSourceFlipgroupListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"account_name": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"client_ids": {
|
"client_ids": {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -93,13 +125,6 @@ func dataSourceFlipgroupListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"client_names": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"client_type": {
|
"client_type": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -112,26 +137,10 @@ func dataSourceFlipgroupListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"created_by": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"created_time": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"default_gw": {
|
"default_gw": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"deleted_by": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"deleted_time": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"desc": {
|
"desc": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -164,33 +173,32 @@ func dataSourceFlipgroupListSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"network": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"rg_id": {
|
|
||||||
Type: schema.TypeInt,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"rg_name": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"status": {
|
"status": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"updated_by": {
|
"net_mask": {
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"updated_time": {
|
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"ckey": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,13 +36,13 @@ package flipgroup
|
|||||||
import (
|
import (
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/flipgroup"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/flipgroup"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/flattens"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenFlipgroup(d *schema.ResourceData, fg *flipgroup.ItemFLIPGroup) {
|
func flattenFlipgroup(d *schema.ResourceData, fg *flipgroup.RecordFLIPGroup) {
|
||||||
d.Set("account_id", fg.AccountID)
|
d.Set("account_id", fg.AccountID)
|
||||||
d.Set("account_name", fg.AccountName)
|
d.Set("account_name", fg.AccountName)
|
||||||
d.Set("client_ids", fg.ClientIDs)
|
d.Set("client_ids", fg.ClientIDs)
|
||||||
d.Set("client_names", fg.ClientNames)
|
|
||||||
d.Set("client_type", fg.ClientType)
|
d.Set("client_type", fg.ClientType)
|
||||||
d.Set("conn_id", fg.ConnID)
|
d.Set("conn_id", fg.ConnID)
|
||||||
d.Set("conn_type", fg.ConnType)
|
d.Set("conn_type", fg.ConnType)
|
||||||
@@ -68,22 +68,18 @@ func flattenFlipgroup(d *schema.ResourceData, fg *flipgroup.ItemFLIPGroup) {
|
|||||||
d.Set("updated_time", fg.UpdatedTime)
|
d.Set("updated_time", fg.UpdatedTime)
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenFlipgroupList(fg_list flipgroup.ListFLIPGroups) []map[string]interface{} {
|
func flattenFlipgroupList(fg_list *flipgroup.ListFLIPGroups) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, fg := range fg_list {
|
for _, fg := range fg_list.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
|
"ckey": fg.CKey,
|
||||||
|
"meta": flattens.FlattenMeta(fg.Meta),
|
||||||
"account_id": fg.AccountID,
|
"account_id": fg.AccountID,
|
||||||
"account_name": fg.AccountName,
|
|
||||||
"client_ids": fg.ClientIDs,
|
"client_ids": fg.ClientIDs,
|
||||||
"client_names": fg.ClientNames,
|
|
||||||
"client_type": fg.ClientType,
|
"client_type": fg.ClientType,
|
||||||
"conn_id": fg.ConnID,
|
"conn_id": fg.ConnID,
|
||||||
"conn_type": fg.ConnType,
|
"conn_type": fg.ConnType,
|
||||||
"created_by": fg.CreatedBy,
|
|
||||||
"created_time": fg.CreatedTime,
|
|
||||||
"default_gw": fg.DefaultGW,
|
"default_gw": fg.DefaultGW,
|
||||||
"deleted_by": fg.DeletedBy,
|
|
||||||
"deleted_time": fg.DeletedTime,
|
|
||||||
"desc": fg.Description,
|
"desc": fg.Description,
|
||||||
"gid": fg.GID,
|
"gid": fg.GID,
|
||||||
"guid": fg.GUID,
|
"guid": fg.GUID,
|
||||||
@@ -93,12 +89,8 @@ func flattenFlipgroupList(fg_list flipgroup.ListFLIPGroups) []map[string]interfa
|
|||||||
"name": fg.Name,
|
"name": fg.Name,
|
||||||
"net_id": fg.NetID,
|
"net_id": fg.NetID,
|
||||||
"net_type": fg.NetType,
|
"net_type": fg.NetType,
|
||||||
"network": fg.Network,
|
"net_mask": fg.NetMask,
|
||||||
"rg_id": fg.RGID,
|
|
||||||
"rg_name": fg.RGName,
|
|
||||||
"status": fg.Status,
|
"status": fg.Status,
|
||||||
"updated_by": fg.UpdatedBy,
|
|
||||||
"updated_time": fg.UpdatedTime,
|
|
||||||
}
|
}
|
||||||
res = append(res, temp)
|
res = append(res, temp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ func resourceFlipgroupCreate(ctx context.Context, d *schema.ResourceData, m inte
|
|||||||
|
|
||||||
resp, err := c.CloudAPI().FLIPGroup().Create(ctx, req)
|
resp, err := c.CloudAPI().FLIPGroup().Create(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -136,6 +137,7 @@ func resourceFlipgroupDelete(ctx context.Context, d *schema.ResourceData, m inte
|
|||||||
|
|
||||||
fg, err := utilityFlipgroupCheckPresence(ctx, d, m)
|
fg, err := utilityFlipgroupCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +150,8 @@ func resourceFlipgroupDelete(ctx context.Context, d *schema.ResourceData, m inte
|
|||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
d.SetId("")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,13 +213,6 @@ func resourceFlipgroupSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"client_names": {
|
|
||||||
Type: schema.TypeList,
|
|
||||||
Computed: true,
|
|
||||||
Elem: &schema.Schema{
|
|
||||||
Type: schema.TypeString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"conn_id": {
|
"conn_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -256,6 +253,10 @@ func resourceFlipgroupSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
"network": {
|
"network": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -268,10 +269,6 @@ func resourceFlipgroupSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
"status": {
|
|
||||||
Type: schema.TypeString,
|
|
||||||
Computed: true,
|
|
||||||
},
|
|
||||||
"updated_by": {
|
"updated_by": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ import (
|
|||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func handleClientIDsUpdate(ctx context.Context, d *schema.ResourceData, c *controller.ControllerCfg, fg *flipgroup.ItemFLIPGroup, warn *dc.Warnings) {
|
func handleClientIDsUpdate(ctx context.Context, d *schema.ResourceData, c *controller.ControllerCfg, fg *flipgroup.RecordFLIPGroup, warn *dc.Warnings) {
|
||||||
addedClients := make([]interface{}, 0)
|
addedClients := make([]interface{}, 0)
|
||||||
removedClients := make([]interface{}, 0)
|
removedClients := make([]interface{}, 0)
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ func addComputesAfterCreation(ctx context.Context, warnings *dc.Warnings, c *con
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func utilityFlipgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*flipgroup.ItemFLIPGroup, error) {
|
func utilityFlipgroupCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*flipgroup.RecordFLIPGroup, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := flipgroup.GetRequest{}
|
req := flipgroup.GetRequest{}
|
||||||
|
|
||||||
@@ -146,10 +146,38 @@ func utilityFlipgroupCheckPresence(ctx context.Context, d *schema.ResourceData,
|
|||||||
return fg, err
|
return fg, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func utilityFlipgroupListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (flipgroup.ListFLIPGroups, error) {
|
func utilityFlipgroupListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*flipgroup.ListFLIPGroups, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := flipgroup.ListRequest{}
|
req := flipgroup.ListRequest{}
|
||||||
|
|
||||||
|
if name, ok := d.GetOk("name"); ok {
|
||||||
|
req.Name = name.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if vinsId, ok := d.GetOk("vins_id"); ok {
|
||||||
|
req.VINSID = uint64(vinsId.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
if vinsName, ok := d.GetOk("vins_name"); ok {
|
||||||
|
req.VINSName = vinsName.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if extNetId, ok := d.GetOk("extnet_id"); ok {
|
||||||
|
req.ExtNetID = uint64(extNetId.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
if byIp, ok := d.GetOk("by_ip"); ok {
|
||||||
|
req.ByIP = byIp.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if rgId, ok := d.GetOk("rg_id"); ok {
|
||||||
|
req.RGID = uint64(rgId.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
if byId, ok := d.GetOk("by_id"); ok {
|
||||||
|
req.ByID = uint64(byId.(int))
|
||||||
|
}
|
||||||
|
|
||||||
if page, ok := d.GetOk("page"); ok {
|
if page, ok := d.GetOk("page"); ok {
|
||||||
req.Page = uint64(page.(int))
|
req.Page = uint64(page.(int))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ package image
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
@@ -44,12 +44,11 @@ import (
|
|||||||
func dataSourceImageRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceImageRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
image, err := utilityImageCheckPresence(ctx, d, m)
|
image, err := utilityImageCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
id := uuid.New()
|
d.SetId(strconv.Itoa(int(image.ID)))
|
||||||
d.SetId(id.String())
|
|
||||||
|
|
||||||
flattenImage(d, image)
|
flattenImage(d, image)
|
||||||
|
|
||||||
|
|||||||
@@ -1,99 +1,160 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package image
|
package image
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
)
|
)
|
||||||
|
|
||||||
func dataSourceImageListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceImageListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
imageList, err := utilityImageListCheckPresence(ctx, d, m)
|
imageList, err := utilityImageListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
id := uuid.New()
|
}
|
||||||
d.SetId(id.String())
|
id := uuid.New()
|
||||||
d.Set("items", flattenImageList(imageList))
|
d.SetId(id.String())
|
||||||
|
d.Set("items", flattenImageList(imageList))
|
||||||
return nil
|
d.Set("entry_count", imageList.EntryCount)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func dataSourceImageListSchemaMake() map[string]*schema.Schema {
|
}
|
||||||
rets := map[string]*schema.Schema{
|
|
||||||
"account_id": {
|
func dataSourceImageListSchemaMake() map[string]*schema.Schema {
|
||||||
Type: schema.TypeInt,
|
rets := map[string]*schema.Schema{
|
||||||
Optional: true,
|
"sep_id": {
|
||||||
Description: "optional account ID to include account images",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"page": {
|
Description: "Filter by Storage Endpoint ID",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"by_id": {
|
||||||
Description: "page number",
|
Type: schema.TypeInt,
|
||||||
},
|
Optional: true,
|
||||||
"size": {
|
Description: "Filter by ID",
|
||||||
Type: schema.TypeInt,
|
},
|
||||||
Optional: true,
|
"name": {
|
||||||
Description: "page size",
|
Type: schema.TypeString,
|
||||||
},
|
Optional: true,
|
||||||
"items": {
|
Description: "Filter by name",
|
||||||
Type: schema.TypeList,
|
},
|
||||||
Computed: true,
|
"status": {
|
||||||
Description: "image list",
|
Type: schema.TypeString,
|
||||||
Elem: &schema.Resource{
|
Optional: true,
|
||||||
Schema: dataSourceImageSchemaMake(),
|
Description: "Filter by status",
|
||||||
},
|
},
|
||||||
},
|
"architecture": {
|
||||||
}
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
return rets
|
Description: "Filter by architecture",
|
||||||
}
|
},
|
||||||
|
"type_image": {
|
||||||
func DataSourceImageList() *schema.Resource {
|
Type: schema.TypeString,
|
||||||
return &schema.Resource{
|
Optional: true,
|
||||||
SchemaVersion: 1,
|
Description: "Filter by image type",
|
||||||
|
},
|
||||||
ReadContext: dataSourceImageListRead,
|
"image_size": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
Timeouts: &schema.ResourceTimeout{
|
Optional: true,
|
||||||
Read: &constants.Timeout30s,
|
Description: "Filter by image size",
|
||||||
Default: &constants.Timeout60s,
|
},
|
||||||
},
|
"sep_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
Schema: dataSourceImageListSchemaMake(),
|
Optional: true,
|
||||||
}
|
Description: "Filter by SEP name",
|
||||||
}
|
},
|
||||||
|
"pool": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by pool",
|
||||||
|
},
|
||||||
|
"public": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find public/private images",
|
||||||
|
},
|
||||||
|
"hot_resize": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find hot resizable images",
|
||||||
|
},
|
||||||
|
"bootable": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Find bootable images",
|
||||||
|
},
|
||||||
|
"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: "image list",
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: dataSourceImageSchemaMake(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return rets
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceImageList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceImageListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceImageListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package image
|
|||||||
import (
|
import (
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/image"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/image"
|
||||||
|
"strconv"
|
||||||
)
|
)
|
||||||
|
|
||||||
func flattenHistory(history []image.History) []map[string]interface{} {
|
func flattenHistory(history []image.History) []map[string]interface{} {
|
||||||
@@ -23,7 +24,7 @@ func flattenImage(d *schema.ResourceData, img *image.RecordImage) {
|
|||||||
d.Set("unc_path", img.UNCPath)
|
d.Set("unc_path", img.UNCPath)
|
||||||
d.Set("ckey", img.CKey)
|
d.Set("ckey", img.CKey)
|
||||||
d.Set("account_id", img.AccountID)
|
d.Set("account_id", img.AccountID)
|
||||||
d.Set("acl", img.ACL)
|
d.Set("acl", FlattenACL(img.ACL))
|
||||||
d.Set("architecture", img.Architecture)
|
d.Set("architecture", img.Architecture)
|
||||||
d.Set("boot_type", img.BootType)
|
d.Set("boot_type", img.BootType)
|
||||||
d.Set("bootable", img.Bootable)
|
d.Set("bootable", img.Bootable)
|
||||||
@@ -58,9 +59,9 @@ func flattenImage(d *schema.ResourceData, img *image.RecordImage) {
|
|||||||
d.Set("version", img.Version)
|
d.Set("version", img.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenImageList(il image.ListImages) []map[string]interface{} {
|
func flattenImageList(il *image.ListImages) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0)
|
||||||
for _, img := range il {
|
for _, img := range il.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": img.AccountID,
|
"account_id": img.AccountID,
|
||||||
"architecture": img.Architecture,
|
"architecture": img.Architecture,
|
||||||
@@ -85,3 +86,18 @@ func flattenImageList(il image.ListImages) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func FlattenACL(acl interface{}) string {
|
||||||
|
switch d := acl.(type) {
|
||||||
|
case string:
|
||||||
|
return d
|
||||||
|
case int:
|
||||||
|
return strconv.Itoa(d)
|
||||||
|
case int64:
|
||||||
|
return strconv.FormatInt(d, 10)
|
||||||
|
case float64:
|
||||||
|
return strconv.FormatInt(int64(d), 10)
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ func existAccountID(ctx context.Context, d *schema.ResourceData, m interface{})
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return len(accounts.FilterByID(accountId)) != 0, nil
|
return len(accounts.FilterByID(accountId).Data) != 0, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool, error) {
|
||||||
@@ -32,5 +32,5 @@ func existGID(ctx context.Context, d *schema.ResourceData, m interface{}) (bool,
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return len(locationList.FilterByGID(gid)) != 0, nil
|
return len(locationList.FilterByGID(gid).Data) != 0, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,272 +1,276 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
Authors:
|
Authors:
|
||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
You may obtain a copy of the License at
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
Terraform DECORT provider - manage resources provided by DECORT (Digital Energy Cloud
|
||||||
Orchestration Technology) with Terraform by Hashicorp.
|
Orchestration Technology) with Terraform by Hashicorp.
|
||||||
|
|
||||||
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
Source code: https://repository.basistech.ru/BASIS/terraform-provider-decort
|
||||||
|
|
||||||
Please see README.md to learn where to place source code so that it
|
Please see README.md to learn where to place source code so that it
|
||||||
builds seamlessly.
|
builds seamlessly.
|
||||||
|
|
||||||
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
Documentation: https://repository.basistech.ru/BASIS/terraform-provider-decort/wiki
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package image
|
package image
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
"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/schema"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/image"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/image"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
"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/controller"
|
||||||
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/status"
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/status"
|
||||||
)
|
)
|
||||||
|
|
||||||
func resourceImageCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func resourceImageCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
log.Debugf("resourceImageCreate: called for image %s", d.Get("name").(string))
|
log.Debugf("resourceImageCreate: called for image %s", d.Get("name").(string))
|
||||||
|
|
||||||
haveGID, err := existGID(ctx, d, m)
|
haveGID, err := existGID(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !haveGID {
|
if !haveGID {
|
||||||
return diag.Errorf("resourceImageCreate: can't create Image because GID %d is not allowed or does not exist", d.Get("gid").(int))
|
return diag.Errorf("resourceImageCreate: can't create Image because GID %d is not allowed or does not exist", d.Get("gid").(int))
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, ok := d.GetOk("account_id"); ok {
|
if _, ok := d.GetOk("account_id"); ok {
|
||||||
haveAccountID, err := existAccountID(ctx, d, m)
|
haveAccountID, err := existAccountID(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !haveAccountID {
|
if !haveAccountID {
|
||||||
return diag.Errorf("resourceImageCreate: can't create Image because AccountID %d is not allowed or does not exist", d.Get("account_id").(int))
|
return diag.Errorf("resourceImageCreate: can't create Image because AccountID %d is not allowed or does not exist", d.Get("account_id").(int))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := image.CreateRequest{}
|
req := image.CreateRequest{}
|
||||||
|
|
||||||
req.Name = d.Get("name").(string)
|
req.Name = d.Get("name").(string)
|
||||||
req.URL = d.Get("url").(string)
|
req.URL = d.Get("url").(string)
|
||||||
req.GID = uint64(d.Get("gid").(int))
|
req.GID = uint64(d.Get("gid").(int))
|
||||||
req.BootType = d.Get("boot_type").(string)
|
req.BootType = d.Get("boot_type").(string)
|
||||||
req.ImageType = d.Get("type").(string)
|
req.ImageType = d.Get("type").(string)
|
||||||
|
|
||||||
drivers := []string{}
|
drivers := []string{}
|
||||||
for _, driver := range d.Get("drivers").([]interface{}) {
|
for _, driver := range d.Get("drivers").([]interface{}) {
|
||||||
drivers = append(drivers, driver.(string))
|
drivers = append(drivers, driver.(string))
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Drivers = drivers
|
req.Drivers = drivers
|
||||||
|
|
||||||
if hotresize, ok := d.GetOk("hot_resize"); ok {
|
if hotresize, ok := d.GetOk("hot_resize"); ok {
|
||||||
req.HotResize = hotresize.(bool)
|
req.HotResize = hotresize.(bool)
|
||||||
}
|
}
|
||||||
if username, ok := d.GetOk("username"); ok {
|
if username, ok := d.GetOk("username"); ok {
|
||||||
req.Username = username.(string)
|
req.Username = username.(string)
|
||||||
}
|
}
|
||||||
if password, ok := d.GetOk("password"); ok {
|
if password, ok := d.GetOk("password"); ok {
|
||||||
req.Password = password.(string)
|
req.Password = password.(string)
|
||||||
}
|
}
|
||||||
if accountId, ok := d.GetOk("account_id"); ok {
|
if accountId, ok := d.GetOk("account_id"); ok {
|
||||||
req.AccountID = uint64(accountId.(int))
|
req.AccountID = uint64(accountId.(int))
|
||||||
}
|
}
|
||||||
if usernameDL, ok := d.GetOk("username_dl"); ok {
|
if usernameDL, ok := d.GetOk("username_dl"); ok {
|
||||||
req.UsernameDL = usernameDL.(string)
|
req.UsernameDL = usernameDL.(string)
|
||||||
}
|
}
|
||||||
if passwordDL, ok := d.GetOk("password_dl"); ok {
|
if passwordDL, ok := d.GetOk("password_dl"); ok {
|
||||||
req.PasswordDL = passwordDL.(string)
|
req.PasswordDL = passwordDL.(string)
|
||||||
}
|
}
|
||||||
if sepId, ok := d.GetOk("sep_id"); ok {
|
if sepId, ok := d.GetOk("sep_id"); ok {
|
||||||
req.SEPID = uint64(sepId.(int))
|
req.SEPID = uint64(sepId.(int))
|
||||||
}
|
}
|
||||||
if poolName, ok := d.GetOk("pool_name"); ok {
|
if poolName, ok := d.GetOk("pool_name"); ok {
|
||||||
req.Pool = poolName.(string)
|
req.Pool = poolName.(string)
|
||||||
}
|
}
|
||||||
if architecture, ok := d.GetOk("architecture"); ok {
|
if architecture, ok := d.GetOk("architecture"); ok {
|
||||||
req.Architecture = architecture.(string)
|
req.Architecture = architecture.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
imageId, err := c.CloudAPI().Image().Create(ctx, req)
|
imageId, err := c.CloudAPI().Image().Create(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
d.SetId(strconv.FormatUint(imageId, 10))
|
|
||||||
d.Set("image_id", imageId)
|
d.SetId(strconv.FormatUint(imageId, 10))
|
||||||
|
d.Set("image_id", imageId)
|
||||||
_, err = utilityImageCheckPresence(ctx, d, m)
|
|
||||||
if err != nil {
|
_, err = utilityImageCheckPresence(ctx, d, m)
|
||||||
return diag.FromErr(err)
|
if err != nil {
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
return resourceImageRead(ctx, d, m)
|
|
||||||
}
|
return resourceImageRead(ctx, d, m)
|
||||||
|
}
|
||||||
func resourceImageRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
|
||||||
log.Debugf("resourceImageRead: called for %s id: %s", d.Get("name").(string), d.Id())
|
func resourceImageRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
log.Debugf("resourceImageRead: called for %s id: %s", d.Get("name").(string), d.Id())
|
||||||
img, err := utilityImageCheckPresence(ctx, d, m)
|
|
||||||
if img == nil {
|
img, err := utilityImageCheckPresence(ctx, d, m)
|
||||||
d.SetId("")
|
if img == nil {
|
||||||
return diag.FromErr(err)
|
d.SetId("")
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
switch img.Status {
|
|
||||||
case status.Modeled:
|
switch img.Status {
|
||||||
return diag.Errorf("The image is in status: %s, please, contact support for more information", img.Status)
|
case status.Modeled:
|
||||||
case status.Creating:
|
return diag.Errorf("The image is in status: %s, please, contact support for more information", img.Status)
|
||||||
case status.Created:
|
case status.Creating:
|
||||||
case status.Destroyed, status.Purged:
|
case status.Created:
|
||||||
d.SetId("")
|
case status.Destroyed, status.Purged:
|
||||||
return resourceImageCreate(ctx, d, m)
|
d.SetId("")
|
||||||
}
|
return diag.Errorf("The resource cannot be updated because it has been destroyed")
|
||||||
|
// return resourceImageCreate(ctx, d, m)
|
||||||
flattenImage(d, img)
|
}
|
||||||
|
|
||||||
return nil
|
flattenImage(d, img)
|
||||||
}
|
|
||||||
|
return nil
|
||||||
func resourceImageDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
}
|
||||||
log.Debugf("resourceImageDelete: called for %s, id: %s", d.Get("name").(string), d.Id())
|
|
||||||
|
func resourceImageDelete(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
_, err := utilityImageCheckPresence(ctx, d, m)
|
log.Debugf("resourceImageDelete: called for %s, id: %s", d.Get("name").(string), d.Id())
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
_, err := utilityImageCheckPresence(ctx, d, m)
|
||||||
}
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
c := m.(*controller.ControllerCfg)
|
return diag.FromErr(err)
|
||||||
req := image.DeleteRequest{
|
}
|
||||||
ImageID: uint64(d.Get("image_id").(int)),
|
|
||||||
}
|
c := m.(*controller.ControllerCfg)
|
||||||
|
req := image.DeleteRequest{
|
||||||
if permanently, ok := d.GetOk("permanently"); ok {
|
ImageID: uint64(d.Get("image_id").(int)),
|
||||||
req.Permanently = permanently.(bool)
|
}
|
||||||
}
|
|
||||||
|
if permanently, ok := d.GetOk("permanently"); ok {
|
||||||
_, err = c.CloudAPI().Image().Delete(ctx, req)
|
req.Permanently = permanently.(bool)
|
||||||
if err != nil {
|
}
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
_, err = c.CloudAPI().Image().Delete(ctx, req)
|
||||||
|
if err != nil {
|
||||||
d.SetId("")
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
return nil
|
|
||||||
}
|
d.SetId("")
|
||||||
|
|
||||||
func resourceImageRename(ctx context.Context, d *schema.ResourceData, m interface{}) error {
|
return nil
|
||||||
log.Debugf("resourceImageEditName: called for %s, id: %s", d.Get("name").(string), d.Id())
|
}
|
||||||
c := m.(*controller.ControllerCfg)
|
|
||||||
req := image.RenameRequest{
|
func resourceImageRename(ctx context.Context, d *schema.ResourceData, m interface{}) error {
|
||||||
ImageID: uint64(d.Get("image_id").(int)),
|
log.Debugf("resourceImageEditName: called for %s, id: %s", d.Get("name").(string), d.Id())
|
||||||
Name: d.Get("name").(string),
|
c := m.(*controller.ControllerCfg)
|
||||||
}
|
req := image.RenameRequest{
|
||||||
|
ImageID: uint64(d.Get("image_id").(int)),
|
||||||
_, err := c.CloudAPI().Image().Rename(ctx, req)
|
Name: d.Get("name").(string),
|
||||||
if err != nil {
|
}
|
||||||
return err
|
|
||||||
}
|
_, err := c.CloudAPI().Image().Rename(ctx, req)
|
||||||
|
if err != nil {
|
||||||
return nil
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceImageUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
return nil
|
||||||
log.Debugf("resourceImageUpdate: called for %s, id: %s", d.Get("name").(string), d.Id())
|
}
|
||||||
|
|
||||||
haveGID, err := existGID(ctx, d, m)
|
func resourceImageUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
if err != nil {
|
log.Debugf("resourceImageUpdate: called for %s, id: %s", d.Get("name").(string), d.Id())
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
haveGID, err := existGID(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
if !haveGID {
|
return diag.FromErr(err)
|
||||||
return diag.Errorf("resourceImageUpdate: can't update Image because GID %d is not allowed or does not exist", d.Get("gid").(int))
|
}
|
||||||
}
|
|
||||||
|
if !haveGID {
|
||||||
if _, ok := d.GetOk("account_id"); ok {
|
return diag.Errorf("resourceImageUpdate: can't update Image because GID %d is not allowed or does not exist", d.Get("gid").(int))
|
||||||
haveAccountID, err := existAccountID(ctx, d, m)
|
}
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
if _, ok := d.GetOk("account_id"); ok {
|
||||||
}
|
haveAccountID, err := existAccountID(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
if !haveAccountID {
|
return diag.FromErr(err)
|
||||||
return diag.Errorf("resourceImageUpdate: can't update Image because AccountID %d is not allowed or does not exist", d.Get("account_id").(int))
|
}
|
||||||
}
|
|
||||||
}
|
if !haveAccountID {
|
||||||
|
return diag.Errorf("resourceImageUpdate: can't update Image because AccountID %d is not allowed or does not exist", d.Get("account_id").(int))
|
||||||
image, err := utilityImageCheckPresence(ctx, d, m)
|
}
|
||||||
if image == nil {
|
}
|
||||||
if err != nil {
|
|
||||||
return diag.FromErr(err)
|
image, err := utilityImageCheckPresence(ctx, d, m)
|
||||||
}
|
if image == nil {
|
||||||
return nil
|
if err != nil {
|
||||||
}
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
switch image.Status {
|
return nil
|
||||||
case status.Modeled:
|
}
|
||||||
return diag.Errorf("The image is in status: %s, please, contact support for more information", image.Status)
|
|
||||||
case status.Creating:
|
switch image.Status {
|
||||||
case status.Created:
|
case status.Modeled:
|
||||||
case status.Destroyed, status.Purged:
|
return diag.Errorf("The image is in status: %s, please, contact support for more information", image.Status)
|
||||||
d.SetId("")
|
case status.Creating:
|
||||||
return resourceImageCreate(ctx, d, m)
|
case status.Created:
|
||||||
}
|
case status.Destroyed, status.Purged:
|
||||||
|
d.SetId("")
|
||||||
if d.HasChange("name") {
|
return diag.Errorf("The resource cannot be updated because it has been destroyed")
|
||||||
err := resourceImageRename(ctx, d, m)
|
// return resourceImageCreate(ctx, d, m)
|
||||||
if err != nil {
|
}
|
||||||
return diag.FromErr(err)
|
|
||||||
}
|
if d.HasChange("name") {
|
||||||
}
|
err := resourceImageRename(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
return resourceImageRead(ctx, d, m)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
func ResourceImage() *schema.Resource {
|
|
||||||
return &schema.Resource{
|
return resourceImageRead(ctx, d, m)
|
||||||
SchemaVersion: 1,
|
}
|
||||||
|
|
||||||
CreateContext: resourceImageCreate,
|
func ResourceImage() *schema.Resource {
|
||||||
ReadContext: resourceImageRead,
|
return &schema.Resource{
|
||||||
UpdateContext: resourceImageUpdate,
|
SchemaVersion: 1,
|
||||||
DeleteContext: resourceImageDelete,
|
|
||||||
|
CreateContext: resourceImageCreate,
|
||||||
Importer: &schema.ResourceImporter{
|
ReadContext: resourceImageRead,
|
||||||
StateContext: schema.ImportStatePassthroughContext,
|
UpdateContext: resourceImageUpdate,
|
||||||
},
|
DeleteContext: resourceImageDelete,
|
||||||
|
|
||||||
Timeouts: &schema.ResourceTimeout{
|
Importer: &schema.ResourceImporter{
|
||||||
Create: &constants.Timeout600s,
|
StateContext: schema.ImportStatePassthroughContext,
|
||||||
Read: &constants.Timeout300s,
|
},
|
||||||
Update: &constants.Timeout300s,
|
|
||||||
Delete: &constants.Timeout300s,
|
Timeouts: &schema.ResourceTimeout{
|
||||||
Default: &constants.Timeout300s,
|
Create: &constants.Timeout600s,
|
||||||
},
|
Read: &constants.Timeout300s,
|
||||||
|
Update: &constants.Timeout300s,
|
||||||
Schema: resourceImageSchemaMake(dataSourceImageExtendSchemaMake()),
|
Delete: &constants.Timeout300s,
|
||||||
}
|
Default: &constants.Timeout300s,
|
||||||
}
|
},
|
||||||
|
|
||||||
|
Schema: resourceImageSchemaMake(dataSourceImageExtendSchemaMake()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ func resourceImageVirtualCreate(ctx context.Context, d *schema.ResourceData, m i
|
|||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := image.CreateVirtualRequest{
|
req := image.CreateVirtualRequest{
|
||||||
Name: d.Get("name").(string),
|
Name: d.Get("name").(string),
|
||||||
TargetID: uint64(d.Get("target_id").(int)),
|
TargetID: uint64(d.Get("link_to").(int)),
|
||||||
}
|
}
|
||||||
|
|
||||||
imageId, err := c.CloudAPI().Image().CreateVirtual(ctx, req)
|
imageId, err := c.CloudAPI().Image().CreateVirtual(ctx, req)
|
||||||
|
|||||||
@@ -42,12 +42,56 @@ import (
|
|||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
)
|
)
|
||||||
|
|
||||||
func utilityImageListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (image.ListImages, error) {
|
func utilityImageListCheckPresence(ctx context.Context, d *schema.ResourceData, m interface{}) (*image.ListImages, error) {
|
||||||
c := m.(*controller.ControllerCfg)
|
c := m.(*controller.ControllerCfg)
|
||||||
req := image.ListRequest{}
|
req := image.ListRequest{}
|
||||||
|
|
||||||
if accountId, ok := d.GetOk("account_id"); ok {
|
if sep_id, ok := d.GetOk("sep_id"); ok {
|
||||||
req.AccountID = uint64(accountId.(int))
|
req.SEPID = uint64(sep_id.(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 status, ok := d.GetOk("status"); ok {
|
||||||
|
req.Status = status.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if architecture, ok := d.GetOk("architecture"); ok {
|
||||||
|
req.Architecture = architecture.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if type_image, ok := d.GetOk("type_image"); ok {
|
||||||
|
req.TypeImage = type_image.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if image_size, ok := d.GetOk("image_size"); ok {
|
||||||
|
req.ImageSize = uint64(image_size.(int))
|
||||||
|
}
|
||||||
|
|
||||||
|
if sep_name, ok := d.GetOk("sep_name"); ok {
|
||||||
|
req.SEPName = sep_name.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if pool, ok := d.GetOk("pool"); ok {
|
||||||
|
req.Pool = pool.(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if public, ok := d.GetOk("public"); ok {
|
||||||
|
req.Public = public.(bool)
|
||||||
|
}
|
||||||
|
|
||||||
|
if hot_resize, ok := d.GetOk("hot_resize"); ok {
|
||||||
|
req.HotResize = hot_resize.(bool)
|
||||||
|
}
|
||||||
|
|
||||||
|
if bootable, ok := d.GetOk("bootable"); ok {
|
||||||
|
req.Bootable = bootable.(bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
if page, ok := d.GetOk("page"); ok {
|
if page, ok := d.GetOk("page"); ok {
|
||||||
|
|||||||
175
internal/service/cloudapi/k8s/data_source_k8ci_list.go
Normal file
175
internal/service/cloudapi/k8s/data_source_k8ci_list.go
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2022 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
|
Authors:
|
||||||
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
Tim Tkachev, <tvtkachev@basistech.ru>
|
||||||
|
|
||||||
|
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 k8s
|
||||||
|
|
||||||
|
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 dataSourceK8CIListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
list, err := utilityK8CIListCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
d.SetId(uuid.New().String())
|
||||||
|
flattenK8CIList(d, list)
|
||||||
|
d.Set("entry_count", list.EntryCount)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceK8CIListSchemaMake() map[string]*schema.Schema {
|
||||||
|
return 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",
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by status",
|
||||||
|
},
|
||||||
|
"worker_driver": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by worker driver",
|
||||||
|
},
|
||||||
|
"master_driver": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by master driver",
|
||||||
|
},
|
||||||
|
"network_plugin": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by network plugin",
|
||||||
|
},
|
||||||
|
"include_disabled": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
Description: "Include deleted k8cis in result",
|
||||||
|
},
|
||||||
|
"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{
|
||||||
|
"k8ci_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
Description: "K8CI ID",
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "K8CI name",
|
||||||
|
},
|
||||||
|
"lb_image_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
Description: "LB Image ID",
|
||||||
|
},
|
||||||
|
"network_plugins": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Description: "List of available network plugins",
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "K8CI Status",
|
||||||
|
},
|
||||||
|
"desc": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"created_time": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceK8CIList() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceK8CIListRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceK8CIListSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ Authors:
|
|||||||
Petr Krutov, <petr.krutov@digitalenergy.online>
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
Tim Tkachev, <tvtkachev@basistech.ru>
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
@@ -49,6 +50,7 @@ import (
|
|||||||
func dataSourceK8sRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceK8sRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
cluster, err := utilityDataK8sCheckPresence(ctx, d, m)
|
cluster, err := utilityDataK8sCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
d.SetId(strconv.FormatUint(cluster.ID, 10))
|
d.SetId(strconv.FormatUint(cluster.ID, 10))
|
||||||
@@ -60,7 +62,7 @@ func dataSourceK8sRead(ctx context.Context, d *schema.ResourceData, m interface{
|
|||||||
}
|
}
|
||||||
|
|
||||||
curK8s := k8s.ItemK8SCluster{}
|
curK8s := k8s.ItemK8SCluster{}
|
||||||
for _, k8sCluster := range k8sList {
|
for _, k8sCluster := range k8sList.Data {
|
||||||
if k8sCluster.ID == cluster.ID {
|
if k8sCluster.ID == cluster.ID {
|
||||||
curK8s = k8sCluster
|
curK8s = k8sCluster
|
||||||
}
|
}
|
||||||
@@ -398,6 +400,10 @@ func dataSourceK8sSchemaMake() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"network_plugin": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
"rg_id": {
|
"rg_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
|||||||
@@ -80,10 +80,6 @@ func computesSchemaMake() map[string]*schema.Schema {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func workerComputesSchemaMake() map[string]*schema.Schema {
|
|
||||||
return map[string]*schema.Schema{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func dataSourceK8sComputesSchemaMake() map[string]*schema.Schema {
|
func dataSourceK8sComputesSchemaMake() map[string]*schema.Schema {
|
||||||
return map[string]*schema.Schema{
|
return map[string]*schema.Schema{
|
||||||
"k8s_id": {
|
"k8s_id": {
|
||||||
|
|||||||
@@ -135,6 +135,46 @@ func k8sWorkersGroupsSchemaMake() map[string]*schema.Schema {
|
|||||||
|
|
||||||
func createK8sListSchema() map[string]*schema.Schema {
|
func createK8sListSchema() map[string]*schema.Schema {
|
||||||
return map[string]*schema.Schema{
|
return 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",
|
||||||
|
},
|
||||||
|
"ip_address": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by IP address",
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by RG ID",
|
||||||
|
},
|
||||||
|
"lb_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by LB ID",
|
||||||
|
},
|
||||||
|
"bservice_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by BService ID",
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by status",
|
||||||
|
},
|
||||||
|
"tech_status": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Filter by tech. status",
|
||||||
|
},
|
||||||
"includedeleted": {
|
"includedeleted": {
|
||||||
Type: schema.TypeBool,
|
Type: schema.TypeBool,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@@ -231,6 +271,10 @@ func createK8sListSchema() map[string]*schema.Schema {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"network_plugin": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
"rg_id": {
|
"rg_id": {
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
@@ -276,6 +320,10 @@ func createK8sListSchema() map[string]*schema.Schema {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"entry_count": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ func dataSourceK8sListDeletedRead(ctx context.Context, d *schema.ResourceData, m
|
|||||||
func dataSourceK8sListDeletedSchemaMake() map[string]*schema.Schema {
|
func dataSourceK8sListDeletedSchemaMake() map[string]*schema.Schema {
|
||||||
k8sListDeleted := createK8sListSchema()
|
k8sListDeleted := createK8sListSchema()
|
||||||
delete(k8sListDeleted, "includedeleted")
|
delete(k8sListDeleted, "includedeleted")
|
||||||
|
delete(k8sListDeleted, "status")
|
||||||
return k8sListDeleted
|
return k8sListDeleted
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ func dataSourceK8sWgRead(ctx context.Context, d *schema.ResourceData, m interfac
|
|||||||
|
|
||||||
wg, workersComputeList, err := utilityDataK8sWgCheckPresence(ctx, d, m)
|
wg, workersComputeList, err := utilityDataK8sWgCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,94 @@
|
|||||||
|
/*
|
||||||
|
Copyright (c) 2019-2023 Digital Energy Cloud Solutions LLC. All Rights Reserved.
|
||||||
|
Authors:
|
||||||
|
Petr Krutov, <petr.krutov@digitalenergy.online>
|
||||||
|
Stanislav Solovev, <spsolovev@digitalenergy.online>
|
||||||
|
Kasim Baybikov, <kmbaybikov@basistech.ru>
|
||||||
|
|
||||||
|
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 k8s
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
"repository.basistech.ru/BASIS/terraform-provider-decort/internal/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
func dataSourceK8sWgCloudInitRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
|
log.Debugf("dataSourceK8sWgCloudInitRead: called with k8s id %d and wg id %d", d.Get("k8s_id").(int), d.Get("wg_id").(int))
|
||||||
|
|
||||||
|
metaData, err := utilityK8sWgCloudInitCheckPresence(ctx, d, m)
|
||||||
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
|
return diag.FromErr(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.New()
|
||||||
|
d.SetId(id.String())
|
||||||
|
d.Set("cloud_init", metaData)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func dataSourceK8sWgCloudInitSchemaMake() map[string]*schema.Schema {
|
||||||
|
return map[string]*schema.Schema{
|
||||||
|
"k8s_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
Description: "Kubernetes cluster ID",
|
||||||
|
},
|
||||||
|
"wg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
Description: "ID of the workers compute group",
|
||||||
|
},
|
||||||
|
"cloud_init": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Worker group Cloud init",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func DataSourceK8sWgCloudInit() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
SchemaVersion: 1,
|
||||||
|
|
||||||
|
ReadContext: dataSourceK8sWgCloudInitRead,
|
||||||
|
|
||||||
|
Timeouts: &schema.ResourceTimeout{
|
||||||
|
Read: &constants.Timeout30s,
|
||||||
|
Default: &constants.Timeout60s,
|
||||||
|
},
|
||||||
|
|
||||||
|
Schema: dataSourceK8sWgCloudInitSchemaMake(),
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -45,6 +45,7 @@ import (
|
|||||||
func dataSourceK8sWgListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func dataSourceK8sWgListRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
wgList, err := utilityK8sWgListCheckPresence(ctx, d, m)
|
wgList, err := utilityK8sWgListCheckPresence(ctx, d, m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
d.SetId("")
|
||||||
return diag.FromErr(err)
|
return diag.FromErr(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,9 +37,34 @@ import (
|
|||||||
|
|
||||||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8ci"
|
||||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s"
|
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func flattenK8CIItems(list *k8ci.ListK8CI) []map[string]interface{} {
|
||||||
|
res := make([]map[string]interface{}, 0, len(list.Data))
|
||||||
|
for _, item := range list.Data {
|
||||||
|
temp := map[string]interface{}{
|
||||||
|
"k8ci_id": item.ID,
|
||||||
|
"name": item.Name,
|
||||||
|
"lb_image_id": item.LBImageID,
|
||||||
|
"network_plugins": item.NetworkPlugins,
|
||||||
|
"status": item.Status,
|
||||||
|
"desc": item.Description,
|
||||||
|
"created_time": item.CreatedTime,
|
||||||
|
"version": item.Version,
|
||||||
|
}
|
||||||
|
|
||||||
|
res = append(res, temp)
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
func flattenK8CIList(d *schema.ResourceData, list *k8ci.ListK8CI) {
|
||||||
|
d.Set("items", flattenK8CIItems(list))
|
||||||
|
}
|
||||||
|
|
||||||
func flattenK8sDataComputes(d *schema.ResourceData, cluster *k8s.RecordK8S) {
|
func flattenK8sDataComputes(d *schema.ResourceData, cluster *k8s.RecordK8S) {
|
||||||
d.Set("k8s_id", cluster.ID)
|
d.Set("k8s_id", cluster.ID)
|
||||||
d.Set("masters", flattenMasterComputes(cluster))
|
d.Set("masters", flattenMasterComputes(cluster))
|
||||||
@@ -47,7 +72,7 @@ func flattenK8sDataComputes(d *schema.ResourceData, cluster *k8s.RecordK8S) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenMasterComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
func flattenMasterComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(cluster.K8SGroups.Masters.DetailedInfo))
|
||||||
for _, comp := range cluster.K8SGroups.Masters.DetailedInfo {
|
for _, comp := range cluster.K8SGroups.Masters.DetailedInfo {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"id": comp.ID,
|
"id": comp.ID,
|
||||||
@@ -63,7 +88,7 @@ func flattenMasterComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWorkerComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
func flattenWorkerComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(cluster.K8SGroups.Workers))
|
||||||
for _, wg := range cluster.K8SGroups.Workers {
|
for _, wg := range cluster.K8SGroups.Workers {
|
||||||
for _, comp := range wg.DetailedInfo {
|
for _, comp := range wg.DetailedInfo {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
@@ -81,7 +106,7 @@ func flattenWorkerComputes(cluster *k8s.RecordK8S) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenAclList(aclList k8s.ListACL) []map[string]interface{} {
|
func flattenAclList(aclList k8s.ListACL) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(aclList))
|
||||||
for _, acl := range aclList {
|
for _, acl := range aclList {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"explicit": acl.Explicit,
|
"explicit": acl.Explicit,
|
||||||
@@ -109,7 +134,7 @@ func flattenAcl(acl k8s.RecordACL) []map[string]interface{} {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface{} {
|
func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(interfaces))
|
||||||
for _, interfaceCompute := range interfaces {
|
for _, interfaceCompute := range interfaces {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"def_gw": interfaceCompute.DefGW,
|
"def_gw": interfaceCompute.DefGW,
|
||||||
@@ -122,7 +147,7 @@ func flattenInterfaces(interfaces compute.ListInterfaces) []map[string]interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenDetailedInfo(detailedInfoList k8s.ListDetailedInfo, computes []compute.RecordCompute) []map[string]interface{} {
|
func flattenDetailedInfo(detailedInfoList k8s.ListDetailedInfo, computes []compute.RecordCompute) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(detailedInfoList))
|
||||||
if computes != nil {
|
if computes != nil {
|
||||||
for i, detailedInfo := range detailedInfoList {
|
for i, detailedInfo := range detailedInfoList {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
@@ -168,7 +193,7 @@ func flattenMasterGroup(mastersGroup k8s.MasterGroup, masters []compute.RecordCo
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenK8sGroup(k8SGroupList k8s.ListK8SGroups, workers []compute.RecordCompute) []map[string]interface{} {
|
func flattenK8sGroup(k8SGroupList k8s.ListK8SGroups, workers []compute.RecordCompute) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(k8SGroupList))
|
||||||
for _, k8sGroup := range k8SGroupList {
|
for _, k8sGroup := range k8SGroupList {
|
||||||
labels := make([]string, 0)
|
labels := make([]string, 0)
|
||||||
for _, label := range k8sGroup.Labels {
|
for _, label := range k8sGroup.Labels {
|
||||||
@@ -197,15 +222,15 @@ func flattenK8sGroup(k8SGroupList k8s.ListK8SGroups, workers []compute.RecordCom
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenK8sGroups(k8sGroups k8s.RecordK8SGroups, masters []compute.RecordCompute, workers []compute.RecordCompute) []map[string]interface{} {
|
// func flattenK8sGroups(k8sGroups k8s.RecordK8SGroups, masters []compute.RecordCompute, workers []compute.RecordCompute) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
// res := make([]map[string]interface{}, 0)
|
||||||
temp := map[string]interface{}{
|
// temp := map[string]interface{}{
|
||||||
"masters": flattenMasterGroup(k8sGroups.Masters, masters),
|
// "masters": flattenMasterGroup(k8sGroups.Masters, masters),
|
||||||
"workers": flattenK8sGroup(k8sGroups.Workers, workers),
|
// "workers": flattenK8sGroup(k8sGroups.Workers, workers),
|
||||||
}
|
// }
|
||||||
res = append(res, temp)
|
// res = append(res, temp)
|
||||||
return res
|
// return res
|
||||||
}
|
// }
|
||||||
|
|
||||||
func flattenK8sData(d *schema.ResourceData, cluster k8s.RecordK8S, masters []compute.RecordCompute, workers []compute.RecordCompute) {
|
func flattenK8sData(d *schema.ResourceData, cluster k8s.RecordK8S, masters []compute.RecordCompute, workers []compute.RecordCompute) {
|
||||||
d.Set("acl", flattenAcl(cluster.ACL))
|
d.Set("acl", flattenAcl(cluster.ACL))
|
||||||
@@ -222,6 +247,7 @@ func flattenK8sData(d *schema.ResourceData, cluster k8s.RecordK8S, masters []com
|
|||||||
d.Set("workers", flattenK8sGroup(cluster.K8SGroups.Workers, workers))
|
d.Set("workers", flattenK8sGroup(cluster.K8SGroups.Workers, workers))
|
||||||
d.Set("lb_id", cluster.LBID)
|
d.Set("lb_id", cluster.LBID)
|
||||||
d.Set("name", cluster.Name)
|
d.Set("name", cluster.Name)
|
||||||
|
d.Set("network_plugin", cluster.NetworkPlugin)
|
||||||
d.Set("rg_id", cluster.RGID)
|
d.Set("rg_id", cluster.RGID)
|
||||||
d.Set("rg_name", cluster.RGName)
|
d.Set("rg_name", cluster.RGName)
|
||||||
d.Set("status", cluster.Status)
|
d.Set("status", cluster.Status)
|
||||||
@@ -242,7 +268,7 @@ func flattenServiceAccount(serviceAccount k8s.RecordServiceAccount) []map[string
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWorkersGroup(workersGroups k8s.ListK8SGroups) []map[string]interface{} {
|
func flattenWorkersGroup(workersGroups k8s.ListK8SGroups) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(workersGroups))
|
||||||
for _, worker := range workersGroups {
|
for _, worker := range workersGroups {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"annotations": worker.Annotations,
|
"annotations": worker.Annotations,
|
||||||
@@ -262,12 +288,12 @@ func flattenWorkersGroup(workersGroups k8s.ListK8SGroups) []map[string]interface
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenK8sItems(k8sItems k8s.ListK8SClusters) []map[string]interface{} {
|
func flattenK8sItems(k8sItems *k8s.ListK8SClusters) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(k8sItems.Data))
|
||||||
for _, item := range k8sItems {
|
for _, item := range k8sItems.Data {
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
"account_id": item.AccountID,
|
"account_id": item.AccountID,
|
||||||
"account_name": item.Name,
|
"account_name": item.AccountName,
|
||||||
"acl": item.ACL,
|
"acl": item.ACL,
|
||||||
"bservice_id": item.BServiceID,
|
"bservice_id": item.BServiceID,
|
||||||
"ci_id": item.CIID,
|
"ci_id": item.CIID,
|
||||||
@@ -283,6 +309,7 @@ func flattenK8sItems(k8sItems k8s.ListK8SClusters) []map[string]interface{} {
|
|||||||
"lb_id": item.LBID,
|
"lb_id": item.LBID,
|
||||||
"milestones": item.Milestones,
|
"milestones": item.Milestones,
|
||||||
"k8s_name": item.Name,
|
"k8s_name": item.Name,
|
||||||
|
"network_plugin": item.NetworkPlugin,
|
||||||
"rg_id": item.RGID,
|
"rg_id": item.RGID,
|
||||||
"rg_name": item.RGName,
|
"rg_name": item.RGName,
|
||||||
"service_account": flattenServiceAccount(item.ServiceAccount),
|
"service_account": flattenServiceAccount(item.ServiceAccount),
|
||||||
@@ -299,8 +326,9 @@ func flattenK8sItems(k8sItems k8s.ListK8SClusters) []map[string]interface{} {
|
|||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenK8sList(d *schema.ResourceData, k8sItems k8s.ListK8SClusters) {
|
func flattenK8sList(d *schema.ResourceData, k8sItems *k8s.ListK8SClusters) {
|
||||||
d.Set("items", flattenK8sItems(k8sItems))
|
d.Set("items", flattenK8sItems(k8sItems))
|
||||||
|
d.Set("entry_count", k8sItems.EntryCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
func flattenResourceK8sCP(d *schema.ResourceData, k8s k8s.RecordK8S, masters []compute.RecordCompute) {
|
func flattenResourceK8sCP(d *schema.ResourceData, k8s k8s.RecordK8S, masters []compute.RecordCompute) {
|
||||||
@@ -370,7 +398,7 @@ func flattenResourceK8s(d *schema.ResourceData, k8s k8s.RecordK8S, masters []com
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWg(d *schema.ResourceData, wg k8s.ItemK8SGroup, computes []compute.RecordCompute) {
|
func flattenWg(d *schema.ResourceData, wg k8s.ItemK8SGroup, computes []compute.RecordCompute) {
|
||||||
labels := make([]string, 0)
|
labels := make([]string, 0, len(wg.Labels))
|
||||||
for _, label := range wg.Labels {
|
for _, label := range wg.Labels {
|
||||||
if strings.HasPrefix(label, "workersGroupName") {
|
if strings.HasPrefix(label, "workersGroupName") {
|
||||||
continue
|
continue
|
||||||
@@ -392,7 +420,7 @@ func flattenWg(d *schema.ResourceData, wg k8s.ItemK8SGroup, computes []compute.R
|
|||||||
}
|
}
|
||||||
|
|
||||||
func flattenWgList(wgList k8s.ListK8SGroups, computesMap map[uint64][]compute.RecordCompute) []map[string]interface{} {
|
func flattenWgList(wgList k8s.ListK8SGroups, computesMap map[uint64][]compute.RecordCompute) []map[string]interface{} {
|
||||||
res := make([]map[string]interface{}, 0)
|
res := make([]map[string]interface{}, 0, len(wgList))
|
||||||
for _, wg := range wgList {
|
for _, wg := range wgList {
|
||||||
computes := computesMap[wg.ID]
|
computes := computesMap[wg.ID]
|
||||||
temp := map[string]interface{}{
|
temp := map[string]interface{}{
|
||||||
|
|||||||
@@ -85,21 +85,21 @@ func mastersSchemaMake() map[string]*schema.Schema {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
}
|
}
|
||||||
masters["cpu"] = &schema.Schema{
|
masters["cpu"] = &schema.Schema{
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
//ForceNew: true,
|
||||||
Description: "Node CPU count.",
|
Description: "Node CPU count.",
|
||||||
}
|
}
|
||||||
masters["ram"] = &schema.Schema{
|
masters["ram"] = &schema.Schema{
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
//ForceNew: true,
|
||||||
Description: "Node RAM in MB.",
|
Description: "Node RAM in MB.",
|
||||||
}
|
}
|
||||||
masters["disk"] = &schema.Schema{
|
masters["disk"] = &schema.Schema{
|
||||||
Type: schema.TypeInt,
|
Type: schema.TypeInt,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
//ForceNew: true,
|
||||||
Description: "Node boot disk size in GB.",
|
Description: "Node boot disk size in GB.",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
396
internal/service/cloudapi/k8s/old_schemas.go
Normal file
396
internal/service/cloudapi/k8s/old_schemas.go
Normal file
@@ -0,0 +1,396 @@
|
|||||||
|
package k8s
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
|
||||||
|
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
|
||||||
|
)
|
||||||
|
|
||||||
|
func resourceK8sCPSchemaV1() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Required: true,
|
||||||
|
Description: "Name of the cluster.",
|
||||||
|
},
|
||||||
|
"rg_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
//ForceNew: true,
|
||||||
|
Description: "Resource group ID that this instance belongs to.",
|
||||||
|
},
|
||||||
|
"k8sci_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Required: true,
|
||||||
|
//ForceNew: true,
|
||||||
|
Description: "ID of the k8s catalog item to base this instance on.",
|
||||||
|
},
|
||||||
|
"network_plugin": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Required: true,
|
||||||
|
Description: "Network plugin to be used",
|
||||||
|
ValidateFunc: validation.StringInSlice([]string{"flannel", "weavenet", "calico"}, true),
|
||||||
|
},
|
||||||
|
"num": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
ValidateFunc: validation.IntInSlice([]int{1, 3}),
|
||||||
|
Description: "Number of VMs to create. Can be either 1 or 3",
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Node CPU count.",
|
||||||
|
},
|
||||||
|
"ram": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Node RAM in MB.",
|
||||||
|
},
|
||||||
|
"disk": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Node boot disk size in GB.",
|
||||||
|
},
|
||||||
|
"sep_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Storage Endpoint ID",
|
||||||
|
},
|
||||||
|
"sep_pool": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Storage Endpoint Pool",
|
||||||
|
},
|
||||||
|
"with_lb": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: true,
|
||||||
|
Description: "Create k8s with load balancer if true.",
|
||||||
|
},
|
||||||
|
"extnet_only": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
Description: "Use only selected ExtNet for infrastructure connections",
|
||||||
|
},
|
||||||
|
// /4.4.0
|
||||||
|
"cloud_init": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Meta data for working group computes, format YAML 'user_data': 1111",
|
||||||
|
},
|
||||||
|
"join_config": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "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": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "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": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "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.",
|
||||||
|
},
|
||||||
|
"cluster_config": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "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.",
|
||||||
|
},
|
||||||
|
"init_config": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "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.",
|
||||||
|
},
|
||||||
|
"additional_sans": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names",
|
||||||
|
Elem: &schema.Schema{
|
||||||
|
Type: schema.TypeString,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"ha_mode": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Use Highly Available schema for LB deploy",
|
||||||
|
},
|
||||||
|
"lb_sysctl_params": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Custom sysctl values for Load Balancer instance. Applied on boot.",
|
||||||
|
},
|
||||||
|
"oidc_cert": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "insert ssl certificate in x509 pem format",
|
||||||
|
},
|
||||||
|
////
|
||||||
|
"extnet_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
//ForceNew: true,
|
||||||
|
Description: "ID of the external network to connect workers to. If omitted network will be chosen by the platfom.",
|
||||||
|
},
|
||||||
|
"desc": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "Text description of this instance.",
|
||||||
|
},
|
||||||
|
"start": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: true,
|
||||||
|
Description: "Start k8s cluster.",
|
||||||
|
},
|
||||||
|
"detailed_info": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"compute_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,
|
||||||
|
},
|
||||||
|
"interfaces": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"def_gw": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"ip_address": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"natable_vins_ip": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"natable_vins_network": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"master_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Master group ID.",
|
||||||
|
},
|
||||||
|
"master_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Master group name.",
|
||||||
|
},
|
||||||
|
"acl": {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Computed: true,
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
"account_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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"k8s_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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"rg_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,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"account_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"account_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"bservice_id": {
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
"k8s_ci_name": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"lb_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"k8s_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Computed: true,
|
||||||
|
},
|
||||||
|
"lb_ip": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "IP address of default load balancer.",
|
||||||
|
},
|
||||||
|
"rg_name": {
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
"kubeconfig": {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Computed: true,
|
||||||
|
Description: "Kubeconfig for cluster access.",
|
||||||
|
},
|
||||||
|
"vins_id": {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Computed: true,
|
||||||
|
Description: "ID of default vins for this instace.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user