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

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

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

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

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

  #электронная почта, на которую будет отправлена информация о доступе
  #опциональный параметр
  #тип - строка
  #применяется при создании аккаунта
  #используется при создании
  #emailaddress = "example@basis.ru"

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

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

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

    #кол-во используемой RAM в МБ
    #опциональный параметр
    #тип - целое число
    #если установлена -1 - кол-во неограниченно
    #cu_m = 1024

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

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

    #кол-во графических процессоров
    #опциональный параметр
    #тип - целое число
    #если установлена -1 - кол-во неограничено
    #gpu_units = 2
  #}

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

    #лимит ресурсов хранения в ГБ
    #опциональный параметр
    #тип - целое число
    #значение "-1", если не ограничено
    #limit = 111
  #}

  #добавление/редактирование/удаление пользователей, к которым привязан аккаунт
  #опциональный параметр
  #тип - блок, кол-во таких блоков не ограничено
  #используется при создании и обновлении
  #users {
    #id пользователя
    #обязательный параметр
    #тип - строка
    #user_id     = "username_2@decs3o"

    #тип доступа пользователя
    #обязательный параметр
    #тип - строка
    #возможные параметры:
    #R - чтение
    #RCX - запись
    #ARCXDU - админ
    #access_type = "R"
  #}


  #параметр распределения CPU 
  #опциональный параметр
  #тип - строка
  #если "strict" виртуальная машина не может быть запущена из-за нехватки ресурсов.
  #"loose" позволяет запускать виртуальную машину, если недостаточно ресурсов.
  #используется при создании и обновлении
  #cpu_allocation_parameter = "strict"

  #параметр коэффициента распределения CPU 
  #опциональный параметр
  #тип - целое число
  #один pCPU = коэффициент*vCPU (принимает нулевое или положительное значение)
  #используется при создании и обновлении
  #cpu_allocation_ratio = 1

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

  #флаг для восстановление аккаунта из корзины
  #опциональный параметр
  #тип - булев
  #используется при обновлении
  #restore = true
  
  #предоставление аккаунту доступа к конкретным образам
  #опциональный параметр
  #тип - массив целых чисел
  #используется при создании и обновлении
  #available_templates = [1,2]

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

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

  #управление зонами аккаунта
  #опциональный параметр 
  #тип - массив целых чисел 
  #используется при создании и обновлении
  #zone_ids = [1,2,3] 
}

output "test" {
  value = decort_cb_account.acc
}
