/*
Пример использования
Ресурса extnet
Ресурс позволяет:
1. Создавать extnet
2. Удалять extnet
3. Получать информацию о extnet
4. Предоставлять доступ аккаунтов к extnet
5. Удалять доступ аккаунтов к extnet
*/

#Раскомментируйте этот код,
#и внесите необходимые правки в версию и путь,
#чтобы работать с установленным вручную (не через 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_cb_extnet" "new_extnet" {
  #наименование внешней сети
  #обязательный параметр
  #тип - строка
  #используется при создании
  name = "test_extnet"

  #id платформы
  #обязательный параметр
  #тип - целое число
  #используется при создании
  gid = 500

  #cidr
  #обязательный параметр
  #тип - строка
  #используется при создании
  ipcidr = "192.168.0.0/24"

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

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

  #cписок DNS адресов
  #опциональный параметр
  #тип - массив строк
  #используется при создании и обновлении
  #dns = ["8.8.8.8", "9.9.9.9"]

  #список NTP адресов
  #опциональный параметр
  #тип - массив строк
  #используется при создании и обновлении
  #ntp = ["ntp0.ntp-servers.net", "ntp1.ntp-servers.net"]

  #ip-адреса для проверки доступности сети
  #опциональный параметр
  #тип - массив строк
  #используется при создании
  #check_ips = ["191.255.0.0,", "191.255.0.0,"]

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

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

  #начало диапазона IP-адресов
  #опциональный параметр
  #тип - строка
  #используется при создании
  #start_ip = "191.255.0.0"

  #окончание диапазона IP-адресов
  #опциональный параметр
  #тип - строка
  #используется при создании
  #end_ip = "191.255.0.40"

  #ip с которым будет создан vnfdev
  #опциональный параметр
  #тип - строка
  #используется при создании
  #vnfdev_ip = "191.255.0.20"

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

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

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

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

  #список исключенных IP адресов
  #опциональный параметр
  #тип - массив строк
  #используется при создании и обновлении
  #excluded_ips = ["192.168.0.4", "192.168.0.5"]

  #диапазон исключенных IP адресов
  #опциональный параметр
  #тип - блок
  #тип вложенных полей - строка
  #используется при создании и обновлении
  #excluded_ips_range {
    #начало диапазона
    #обязательный параметр
    #тип - строка
    #ip_start = "192.168.0.4"

    #окончание диапазона
    #обязательный параметр
    #тип - строка
    #ip_end = "192.168.0.50"
  #}

  #список id аккаунтов, которым предоставлен доступ к extnet
  #опциональный параметр
  #тип - массив целых чисел
  #используется при создании и обновлении
  #shared_with = [112, 123]

  #изменение настроек ограничения трафика сети
  #по умолчанию - 0, т.е. без ограничений
  #опциональный параметр
  #тип - блок,
  #тип вложенных полей - целое число
  #используется при обновлении
  #default_qos {
    #ограничение внутреннего трафика в кбит
    #опциональный параметр
    #тип - целое число
    #in_rate = 0

    #ограничение внутреннего burst трафика в кбит
    #опциональный параметр
    #тип - целое число
    #in_burst = 0

    #ограничение внешнего трафика в кбит
    #опциональный параметр
    #тип - целое число
    #e_rate = 0
  #}

  #список зарезервированных IP или пула адресов
  #опциональный параметр
  #тип - блок
  #используется при создании и обновлении
  #reserved_ip {
    #идентификатор аккаунта, для которого резервируются ресурсы
    #обязательный параметр
    #тип - целое число
    #account_id = 11111

    #количество резервируемых IP
    #опциональный параметр
    #тип - целое число
    #ip_count = 15

    #список резервируемых IP
    #опциональный параметр
    #тип - массив строк
    #ips = ["192.168.10.10", "192.168.10.20"]
  #}

  #id stack на который происходит миграция
  #опциональный параметр
  #тип - целое число
  #используется при обновлении
  #migrate = 1

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

output "extnet" {
  value = decort_cb_extnet.new_extnet
}