/*
Пример использования
Ресурсов 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_cb_rg" "rg" {
  #имя ресурсной группы
  #обязательный параметр
  #тип - строка
  rg_name = "testing_rg_1"

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

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

  #лимиты ресурсов
  #опциональные параметры
  #тип - блок лимитов на ресурсы
  #resource_limits  {
    #максимальное количество ядер cpu
    #опциональный праметр
    #тип - целое число
    #cu_c = 12

    #максимальный размер агрегированных виртуальных дисков в ГБ
    #опциональный параметр
    #тип - целое число
    #cu_dm = 12

    #максимальное количество назначенных общедоступных IP-адресов
    #опциональный праметр
    #тип - целое число
    #cu_i = 12

    #максимальный объем памяти в МБ
    #опциональный праметр
    #тип - целое число
    #cu_m = 12

    #максимальный пиринг отправленных/принятых сетевых передач
    #опциональный праметр
    #тип - целое число
    #cu_np = 12
  #}

  #имя владельца ресурсной группы
  #опциональный параметр
  #тип - строка
  #owner = "owner name"

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

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

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

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

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

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

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

  #блок для предоставления прав на ресурсную группу
  #необязательный параметр
  #тип - блок прав пользователя
  access  {
    #имя юзера предоставляемому права 
    #обязательный праметр при использовании блока
    #тип - строка
    user = "kasim_baybikov_1@decs3o"

    #тип прав
    #обязательный параметр
    #тип - строка
    #разрешенные значения: "R", "RCX" or "ARCXDU"
    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
  }

  #может ли запуститься ВМ, если ресурсов CPU недостаточно
  #необязательный параметр
  #Допустимые значения: strict, loose.
  #тип - строка
  cpu_allocation_parameter = "loose"

  #CPU allocation ratio
  #необязательный параметр
  #one pCPU = ratio*vCPU (zero or positive value)
  #тип - целое число
  cpu_allocation_ratio = 1

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

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

  #флаг для принудительного удаления ресурсной группы
  #необязательный параметр
  #тип - булев
  #перед удалением следует перевести ресурсную группу в статус disabled, выставив enable = false
  force = true

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

  #доступ к дополнительным функциям управления ВМ
  #необязательный параметр
  #возможные значенния - "hugepages", "numa", "cpupin", "vfnic"
  #тип - массив строк
  #внимание - требуется указывать итоговое желаемое состояние для ресурсной группы (рг), так как поле compute_features не будет автоматически
  #наследоваться от аккаунта, в котором создается рг.
  compute_features = ["hugepages", "numa", "cpupin", "vfnic"]

}

output "output" {
  value = decort_cb_rg.rg
}
