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-Инструкция-по-миграци...

24 KiB

Инструкция по миграции с 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 не забудьте изменить права доступа к файлу
chmod u+x install.sh
  1. Дождаться сообщения об успешной установке. Установщик выведет актуальный блок конфигурации провайдера, скопируйте его
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"
    }
  }
}
  1. Теперь вам необходимо отредактировать ваши конфигурационные .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.2.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

  1. 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
      }
      

Ресурсная группа rg

  1. 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

  1. 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

  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, стали атрибутами и теперь их следует задавать через знак равно.

      Было
      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
      }