/*
Пример использования
Ресурсов RG
Ресурс позволяет:
1. Создавать RG
2. Редактировать RG
3. Удалять RG
*/

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

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

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

  #тип сети по умолчанию для этой ресурсной группы
  #опциональный параметр
  #виртуальные машины, созданные в этой RG, по умолчанию будут подключены к этой сети
  #допустимые значения: PRIVATE, PUBLIC, NONE
  #по умолчанию: PRIVATE
  #тип - строка
  def_net_type = "NONE"

  #ip cidr частной сети, если сеть по умолчанию PRIVATE
  #опциональный параметр
  #тип - строка
  ipcidr = "1.1.1.1"

  #id внешней сети
  #опциональный параметр
  #тип - целое число
  ext_net_id = 123

  #ip внешней сети
  #опциональный параметр
  #тип - строка
  ext_ip = "1.1.1.1"

  #описание
  #опциональный параметр
  #тип - строка
  description = "qwerty"

  #флаг доступности ресурсной группы
  #опциональный параметр
  #тип - булев
  enable = true

  #имя пользователя
  #опциональный параметр
  #тип - строка
  owner = "name_user"

  #блок для предоставления прав на ресурсную группу
  #опциональный параметр
  #тип - блок прав доступа
  access {
    #имя юзера предоставляемому права
    #обязательный параметр при использовании блока
    #тип - строка
    user = "kasim_baybikov_1@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
  }

  #список названий pools
  #необязательный параметр
  #игнорируется при создании ресурса, применяется только при обновлении
  #тип - массив строк
  #uniq_pools = ["sep1_poolName1", "sep2_poolName2"]

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

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

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


output "output" {
  value = decort_resgroup.rg
}


