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