/*
Пример использования
Управление vins
Ресурс позволяет:
1. Создавать vins
2. Удалять vins
3. Восстанвливать vins
4. Добавлять и убирать подключение к внешней сети
5. Резервировать и освобождать ip для vins
6. Добавлять и удалять natrule
7. Перезапускать и редеплоить vnfdev
*/

#Раскомментируйте этот код,
#и внесите необходимые правки в версию и путь,
#чтобы работать с установленным вручную (не через hashicorp provider registry) провайдером
/*
terraform {
  required_providers {
    decort = {
      source  = "basis/decort/decort"
      version = "<VERSION>"
    }
  }
}
*/

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
}


resource "decort_vins" "vins" {
  #имя создаваемого ресурса
  #обязательный параметр
  #тип - строка
  #используется при создании
  name = "Test_name"

  #id ресурсной группы для создания ресурса
  #должен быть указан или rg_id или account_id
  #опциональный параметр
  #тип - целое число
  #используется при создании
  rg_id = 10101

  #id аккаунта для создания ресурса
  #должен быть указан или rg_id или account_id
  #опциональный параметр
  #тип - целое число
  #используется при создании
  account_id = 2023

  #id внешней сети для подключения к ней ресурса
  #опциональный параметр
  #тип - целое число
  #используется при создании и обновлении
  #ext_net_id = 2222

  #ip внешней сети для подключения к нему ресурса
  #опциональный параметр
  #тип - строка
  #используется при создании
  #ext_ip_addr = "1.1.1.1"

  #private network IP CIDR
  #опциональный параметр
  #тип - строка
  #используется при создании
  #ipcidr = "192.168.0.1"

  #количество зарезервированных адресов на момент создания
  #опциональный параметр
  #тип - целое число
  #используется при создании
  #pre_reservations_num = 2

  #grid (platform) ID
  #опциональный параметр
  #тип - целое число
  #используется при создании
  #gid = 2002

  #описание
  #опциональный параметр
  #тип - строка
  #используется при создании и обновлении
  #desc = "Description"

  #ручное подключение и отключение ресурса
  #опциональный параметр
  #тип - булев
  #используется при создании и обновлении
  #enable = true

  #флаг для удаления VINS, без возможности восстановления
  #опциональный параметр
  #тип - булев
  #используется при удалении
  #permanently = true

  #удаляет за собой все зависимые ресурсы
  #опциональный параметр
  #тип - булев
  #используется при удалении
  #force = true

  #блок для резервирования ip
  #опциональный параметр
  #тип - блок ip
  #используется при создании и обновлении
  #ip {
    #тип подключения
    #обязательный параметр
    #тип - строка
    #type = "DHCP"

    #ip который необходимо зарезервировать
    #опциональный параметр
    #тип - строка
    #ip_addr = "192.168.5.5"

    #mac который необходимо зарезервировать
    #опциональный параметр
    #тип - строка
    #mac_addr = "ff:ff:ff:ff:ff:ff"
  #}

  #блок для добавления natRule
  #опциональный параметр
  #тип - блок правил nat
  #используется при создании и обновлении
  #nat_rule {
    #ip внутренний
    #опциональный параметр
    #тип - строка
    #int_ip = "192.168.0.28"

    #внутренний порт
    #опциональный параметр
    #тип - целое число
    #int_port = 80

    #начало диапазона внешних портов
    #опциональный параметр
    #тип - целое число
    #ext_port_start = 8001

    #конец диапазона внешних портов
    #опциональный параметр
    #тип - целое число
    #ext_port_end = 8001

    #протокол natRule
    #опциональный параметр
    #тип - строка
    #proto = "tcp"
  #}

  #восстановление ресурса
  #опциональный параметр
  #тип - булев
  #используется при обновлении
  #restore = true

  #перезапуск vnfDev
  #опциональный параметр
  #тип - булев
  #используется при обновлении
  #vnfdev_restart = true

  #редеплой vnfDev
  #опциональный параметр
  #тип - булев
  #используется при обновлении
  #vnfdev_redeploy = true

  #список dns
  #опциональный параметр
  #если при создании указать пустой список, то ресурс создается с полем vnfs.dhcp.config.dns, имеющим значение по умолчанию
  #если при обновлении указать пустой список, то ресурс обновит в модели поле vnfs.dhcp.config.dns с текущего значения на пустой список
  #тип - список строк
  #используется при создании и обновлении
  #dns = ["1.1.1.1", "2.2.2.2"]

}

output "test" {
  value = decort_vins.vins
}
