## Инструкция по миграции с terraform-provider-decort на terraform-provider-dynamix ### Установка terraform-provider-dynamix В релизном архиве находятся скрипты-инсталляторы. Чтобы выполнить установку, необходимо: 1. Перейти по адресу: https://repository.basistech.ru/BASIS/terraform-provider-dynamix/releases 2. Выбрать необходимую версию провайдера подходящую под операционную систему. 3. Скачать архив. 4. Распаковать архив. 5. Выполнить скрипт установщика, `install.sh` или `install.bat` для Windows.
*Для запуска `install.sh` не забудьте изменить права доступа к файлу* ```bash chmod u+x install.sh ``` 6. Дождаться сообщения об успешной установке. Установщик выведет актуальный блок конфигурации провайдера, скопируйте его ```bash DYNAMIX provider version 1.2.1 has been successfully installed Copy this provider configuration to main.tf file: terraform { required_providers { dynamix = { source = "basistech.ru/tf/dynamix" version = "1.2.1" } } } ``` 7. Теперь вам необходимо отредактировать ваши конфигурационные .tf файлы terraform-provider-decort для работы с terraform-provider-dynamix. #### Общие изменения Измените блок подключения провайдера. Замените `decort` на `dynamix`, `source = "basis/decort/decort"` на `source = "basistech.ru/tf/dynamix"`, укажите нужную версию. ##### Было ```go terraform { required_providers { decort = { source = "basis/decort/decort" version = "4.6.1" } } } ``` ##### Стало ```go terraform { required_providers { dynamix = { source = "basistech.ru/tf/dynamix" version = "1.2.1" } } } ``` Измените блок настройки провайдера. Замените название провайдера с `decort` на `dynamix`. ##### Было ```go provider "decort" { authenticator = "decs3o" #controller_url = controller_url = "https://ds1.digitalenergy.online" #oauth2_url = oauth2_url = "https://sso.digitalenergy.online" allow_unverified_ssl = true } ``` ##### Стало ```go provider "dynamix" { authenticator = "decs3o" #controller_url = controller_url = "https://ds1.digitalenergy.online" #oauth2_url = oauth2_url = "https://sso.digitalenergy.online" allow_unverified_ssl = true } ``` Если параметры провайдера указаны в переменных окружения, замените префикс DECORT на DYNAMIX #### Было `DECORT_CONTROLLER_URL` #### Стало `DYNAMIX_CONTROLLER_URL` Измените блок описания самого ресурса/датасурса. Замените `decort` на `dynamix`. ##### Было ```go data "decort_account" "a" { #id аккаунта #обязательный параметр #тип - целое число account_id = 11111 } ``` ##### Стало ```go data "dynamix_account" "a" { #id аккаунта #обязательный параметр #тип - целое число account_id = 11111 } ``` Не забудьте изменить название ресурса/датасурса в блоке вывода. Замените `decort` на `dynamix`. ##### Было ```go output "test" { value = data.decort_account.a } ``` ##### Стало ```go output "test" { value = data.dynamix_account.a } ``` Для большинства конфигурационных файлов этих изменений будет достаточно. В терминале выполните команду ```bash terraform init ``` В случае успешной установки, Terraform инициализирует провайдер и будет готов к дальнейшей работе.
Для ресурсов, которые описаны ниже необходимо сделать несколько дополнительных изменений. #### Аккаунты account 1. data source `dynamix_account_deleted_list` - Data source `dynamix_account_deleted_list` теперь имеет название `dynamix_account_list_deleted` и должен быть переименован. Блок `output` так же должен быть изменен. ##### Было ```go data "dynamix_account_deleted_list" "adl" { #фильтр по id аккаунта #опциональный параметр #тип - целое число #by_id = 100 #фильтр по имени аккаунта #опциональный параметр #тип - строка #name = "test" #фильтр по acl #опциональный параметр #тип - строка #acl = "acl" #сортировка по одному из поддерживаемых полей #опциональный параметр #тип - строка #формат - "+поле" по возрастанию / "-поле" по убыванию #sort_by = "+name" #номер страницы для отображения #опциональный параметр #тип - целое число #если не задан - выводятся все доступные данные #page = 2 #размер страницы #опциональный параметр #тип - целое число #если не задан - выводятся все доступные данные #size = 3 } output "test" { value = data.dynamix_account_deleted_list.adl } ``` ##### Стало ```go data "dynamix_account_list_deleted" "adl" { #фильтр по id аккаунта #опциональный параметр #тип - целое число #by_id = 100 #фильтр по имени аккаунта #опциональный параметр #тип - строка #name = "test" #фильтр по acl #опциональный параметр #тип - строка #acl = "acl" #сортировка по одному из поддерживаемых полей #опциональный параметр #тип - строка #формат - "+поле" по возрастанию / "-поле" по убыванию #sort_by = "+name" #номер страницы для отображения #опциональный параметр #тип - целое число #если не задан - выводятся все доступные данные #page = 2 #размер страницы #опциональный параметр #тип - целое число #если не задан - выводятся все доступные данные #size = 3 } output "test" { value = data.dynamix_account_list_deleted.adl } ``` #### Ресурсная группа rg 1. resource `dynamix_resgroup` - Блоки `def_net`, `access`, `quota` стали атрибутами и теперь их следует задавать через знак равно. ##### Было ```go access [{ #имя юзера предоставляемому права #обязательный параметр при использовании блока #тип - строка user = "user@decs3o" #тип прав #опциональный параметр #тип - строка right = "RCX" }] ``` ```go def_net { #тип сети #обязательный параметр при использовании блока #тип - строка net_type = "PUBLIC" #id сети #опциональный параметр #идентификатор сегмента сети. Если net_type — PUBLIC, а net_id — 0, #то будет выбран сегмент внешней сети по умолчанию. Если net_type #имеет значение PRIVATE и net_id=0, будет выбран первый vins, определенный для этой ресурсной группы #в противном случае net_id идентифицирует либо существующий сегмент внешней сети, либо vins #тип - целое число net_id = 1234 } ``` ```go quota { #максимальное количество ядер процессора #опциональный параметр #значение по умолчанию: -1 #тип - целое число cpu = 5 #максимальный размер памяти в мегабайтах #опциональный параметр #значение по умолчанию: -1 #тип - целое число ram = 1024 #максимальный размер объединенных виртуальных дисков в ГБ #опциональный параметр #значение по умолчанию: -1 #тип - целое число disk = 180 #максимальное количество отправленных/полученных сетевых узлов #опциональный параметр #значение по умолчанию: -1 #тип - целое число ext_traffic = 21 #максимальное количество назначенных общедоступных IP-адресов #опциональный параметр #значение по умолчанию: -1 #тип - целое число ext_ips = 29 } ``` ##### Стало ```go access = [{ #имя юзера предоставляемому права #обязательный параметр при использовании блока #тип - строка user = "user@decs3o" #тип прав #опциональный параметр #тип - строка right = "RCX" }] ``` ```go def_net = { #тип сети #обязательный параметр при использовании блока #тип - строка net_type = "PUBLIC" #id сети #опциональный параметр #идентификатор сегмента сети. Если net_type — PUBLIC, а net_id — 0, #то будет выбран сегмент внешней сети по умолчанию. Если net_type #имеет значение PRIVATE и net_id=0, будет выбран первый vins, определенный для этой ресурсной группы #в противном случае net_id идентифицирует либо существующий сегмент внешней сети, либо vins #тип - целое число net_id = 1234 } ``` ```go quota = { #максимальное количество ядер процессора #опциональный параметр #значение по умолчанию: -1 #тип - целое число cpu = 5 #максимальный размер памяти в мегабайтах #опциональный параметр #значение по умолчанию: -1 #тип - целое число ram = 1024 #максимальный размер объединенных виртуальных дисков в ГБ #опциональный параметр #значение по умолчанию: -1 #тип - целое число disk = 180 #максимальное количество отправленных/полученных сетевых узлов #опциональный параметр #значение по умолчанию: -1 #тип - целое число ext_traffic = 21 #максимальное количество назначенных общедоступных IP-адресов #опциональный параметр #значение по умолчанию: -1 #тип - целое число ext_ips = 29 } ``` #### Внутренние сети vins 1. resource `dynamix_vins` - В блоке `nat_rule` поля `int_ip` и `ext_port_start` стали обязательными. Ранее были опциональными. Необходимо их заполнить. ```go nat_rule { #ip внутренний #обязательный параметр #тип - строка int_ip = "192.168.0.28" #начало диапазона внешних портов #обязательный параметр #тип - целое число ext_port_start = 8001 } ``` #### Виртуальные машины KVM KVMVM 1. resource `dynamix_kvmvm` - Необходимо полностью удалить удалить блок `disks` из конфигурационного файла. Теперь диски нужно создавать через функцию `dynamix_disk`. В `dynamix_kvmvm` их можно указать в поле `extra_disks` - Блоки `affinity_rules`, `anti_affinity_rules`, `network`, `tags`,`port_forwarding`, `user_access`, `snapshot`, `rollback`, `cd`, стали атрибутами и теперь их следует задавать через знак равно. ##### Было ```go affinity_rules { #тип правила #обязательный параметр #возможные значения - compute или node #тип - строка topology = "compute" #строгость правила #обязательный параметр #возможные значения - RECOMMENDED и REQUIRED #тип - строка policy = "RECOMMENDED" #режим проверки #обязательный параметр #возможные значения - ANY, EQ, NE #тип - строка mode = "ANY" #ключ правила #обязательный параметр #тип - строка key = "testkey" #ключ правила #необязательный параметр #тип - строка value = "testvalue" } ``` ##### Стало ```go affinity_rules = [{ #тип правила #обязательный параметр #возможные значения - compute или node #тип - строка topology = "compute" #строгость правила #обязательный параметр #возможные значения - RECOMMENDED и REQUIRED #тип - строка policy = "RECOMMENDED" #режим проверки #обязательный параметр #возможные значения - ANY, EQ, NE #тип - строка mode = "ANY" #ключ правила #обязательный параметр #тип - строка key = "testkey" #ключ правила #опциональный параметр #тип - строка value = "testvalue" }] ``` ##### Было ```go anti_affinity_rules { #тип правила #обязательный параметр #возможные значения - compute или node #тип - строка topology = "compute" #строгость правила #обязательный параметр #возможные значения - RECOMMENDED и REQUIRED #тип - строка policy = "RECOMMENDED" #режим проверки #обязательный параметр #возможные значения - ANY, EQ, NE #тип - строка mode = "ANY" #ключ правила #обязательный параметр #тип - строка key = "testkey" #ключ правила #необязательный параметр #тип -строка value = "testvalue" } ``` ##### Стало ```go anti_affinity_rules = [{ #тип правила #обязательный параметр #возможные значения - compute или node #тип - строка topology = "compute" #строгость правила #обязательный параметр #возможные значения - RECOMMENDED и REQUIRED #тип - строка policy = "RECOMMENDED" #режим проверки #обязательный параметр #возможные значения - ANY, EQ, NE #тип - строка mode = "ANY" #ключ правила #обязательный параметр #тип - строка key = "testkey" #ключ правила #опциональный параметр #тип -строка value = "testvalue" }] ``` ##### Было ```go network { #тип сети VINS/EXTNET (для любого драйвера) и VFNIC (для KVM_X86) #обязательный параметр #тип - строка net_type = "VINS" #id сети #обязательный параметр #тип - целое число net_id = 1234 #ip адрес входящий в сеть #опциональный параметр #тип - строка ip_address = "127.0.0.1" } ``` ##### Стало ```go network = [{ #тип сети VINS/EXTNET (для любого драйвера) и VFNIC (для KVM_X86) #обязательный параметр #тип - строка net_type = "VINS" #id сети #обязательный параметр #тип - целое число net_id = 1234 #ip адрес входящий в сеть #опциональный параметр #тип - строка ip_address = "127.0.0.1" }] ``` ##### Было ```go tags { #Ключ для тэга #Обязательный параметр #тип - строка key = "key" #значения тэга #обязательный параметр #тип - строка value = "value" } ``` ##### Стало ```go tags = [{ #ключ для тэга #обязательный параметр #тип - строка key = "key" #значения тэга #обязательный параметр #тип - строка value = "value" }] ``` ##### Было ```go port_forwarding { #номер внешнего начального порта для правила #Обязательный параметр #тип - целое число public_port_start = 2023 #номер внешнего последнего порта для правила #опциональный параметр #тип - целое число #по умолчанию - -1 public_port_end = 2023 #номер внутреннего базового порта #обязательный параметр #тип - целое число local_port = 80 #сетевой протокол #Обязательный параметр #тип - строка proto = "tcp" } ``` ##### Стало ```go port_forwarding = [{ #номер внешнего начального порта для правила #Обязательный параметр #тип - целое число public_port_start = 2023 #номер внешнего последнего порта для правила #опциональный параметр #тип - целое число #по умолчанию - -1 public_port_end = 2023 #номер внутреннего базового порта #обязательный параметр #тип - целое число local_port = 80 #сетевой протокол #Обязательный параметр #тип - строка proto = "tcp" }] ``` ##### Было ```go user_access { #имя юзера, которому предоставляем доступ #обязательный параметр #тип - строка username = "kasim_baybikov_1@decs3o" #права: 'R' - только на чтение, 'RCX' - чтение/запись, 'ARCXDU' - админ #обязательный параметр #тип - строка access_type = "ARCXDU" } ``` ##### Стало ```go user_access = [{ #имя юзера, которому предоставляем доступ #обязательный параметр #тип - строка username = "kasim_baybikov_1@decs3o" #права: 'R' - только на чтение, 'RCX' - чтение/запись, 'ARCXDU' - админ #обязательный параметр #тип - строка access_type = "ARCXDU" }] ``` ##### Было ```go snapshot { #лейбл снапшота #обязательный параметр #тип - строка label = "label1" } ``` ##### Стало ```go snapshot = [{ #лейбл снапшота #обязательный параметр #тип - строка label = "label1" }] ``` ##### Было ```go rollback { #Лейбл снапшота #Обязательный параметр #тип - строка label = "label1" } ``` ##### Стало ```go rollback = { #Лейбл снапшота #Обязательный параметр #тип - строка label = "label1" } ``` ##### Было ```go cd { #id образа диска CD rom #обязательный параметр #тип - целое число cdrom_id = 344 } ``` ##### Стало ```go cd = { #id образа диска CD rom #обязательный параметр #тип - целое число cdrom_id = 344 } ```