You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform-provider-dynamix/wiki/1.2.0/05.07-Инструкция-по-миграци...

698 lines
24 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## Инструкция по миграции с 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.<br/>
*Для запуска `install.sh` не забудьте изменить права доступа к файлу*
```bash
chmod u+x install.sh
```
6. Дождаться сообщения об успешной установке. Установщик выведет актуальный блок конфигурации провайдера, скопируйте его
```bash
DYNAMIX provider version 1.2.0 has been successfully installed
Copy this provider configuration to main.tf file:
terraform {
required_providers {
dynamix = {
source = "basistech.ru/tf/dynamix"
version = "1.2.0"
}
}
}
```
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.0"
}
}
}
```
Измените блок настройки провайдера. Замените название провайдера с `decort` на `dynamix`.
##### Было
```go
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
}
```
##### Стало
```go
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`.
##### Было
```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 инициализирует провайдер и будет готов к дальнейшей работе.<br/>
Для ресурсов, которые описаны ниже необходимо сделать несколько дополнительных изменений.
#### Аккаунты 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
}
```