/*
Пример использования
Ресурса k8s
Ресурс позволяет:
1. Создавать кластер
2. Редактировать кластер
3. Удалять кластер
4. Настроить мастер-узел
5. Изменить кол-во ВМ в мастер-узле
*/

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

provider "dynamix" {
  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 "dynamix_k8s_cp" "cp" {
  #название кластера
  #обязательный параметр
  #тип - строка
  name = "k8s-cp"

  #K8sCI ID
  #обязательный параметр
  #тип - целое число
  k8sci_id = 55

  #плагин сети (flannel, weavenet или calico)
  #обязательный параметр
  #тип - строка
  network_plugin = "flannel"

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

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

  #объем RAM мастер-узла
  #опциональный параметр
  #тип - целое число
  ram = 2048

  #кол-во ВМ мастер-узла (1, 3 или 5)
  #опциональный параметр
  #тип - целое число
  num = 1

  #размер диска мастер-узла
  #опциональный параметр
  #тип - целое число
  disk = 10

  #описание кластера
  #опциональный параметр
  #тип - строка
  desc = "<DESCRIPTION>"

  #id extnet
  #опциональный параметр
  #тип - целое число
  extnet_id = 0

  #id vins
  #опциональный параметр
  #тип - целое число
  vins_id = 1234

  #storage Endpoint ID
  #опциональный параметр
  #тип - целое число
  sep_id = 0

  #SEP Pool
  #опциональный параметр
  #тип - строка
  sep_pool = "pool"

  #старт/стоп кластера
  #опциональный параметр
  #тип - булев
  start = true

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

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

  #дополнительные SAN (Subject Alternative Names) для использования в процессе автоматического выписывания сертификата Кластера Kubernetes;
  #возможность взаимодействовать с кластером по FQDN
  #параметр получает список строк – IP-адреса и/или DNS (по формату RFC 1123 c поддержкой wildcard)
  #опциональный параметр
  #тип - массив строк
  additional_sans = ["192.168.201.0","192.168.201.1"]

  #используется для определения настроек и действий, которые должны быть выполнены перед запуском любого другого компонента в кластере
  #это позволяет вам настраивать такие вещи, как регистрация node, настройка network и другие задачи инициализации
  #опциональный параметр
  #тип - строка
  init_config = "{JSON string}"

  #используется для определения глобальных настроек и конфигураций для всего кластера
  #он включает в себя такие параметры, как имя кластера, настройки DNS, методы аутентификации и другие конфигурации в масштабах кластера
  #опциональный параметр
  #тип - строка
  cluster_config = "{JSON string}"

  #используется для настройки поведения и параметров Kubelet, который является агентом primary node, запускаемым на каждом node кластера
  #он включает в себя такие параметры, как IP-адрес node, распределение ресурсов, политики удаления модулей и другие конфигурации, специфичные для Kubelet
  #опциональный параметр
  #тип - строка
  kubelet_config = "{JSON string}"

  #используется для настройки поведения и параметров присоединения node к кластеру
  #он включает в себя такие параметры, как режим прокси-сервера, диапазоны IP-адресов кластера и другие конфигурации, специфичные для Kube-proxy
  #опциональный параметр
  #тип - строка
  kube_proxy_config = "{JSON string}"

  #используется для настройки поведения и параметров присоединения node к кластеру
  #он включает в себя такие параметры, как cluster's control plane endpoint, токен и ключ сертификата
  #опциональный параметр
  #тип - строка
  join_config = "{JSON string}"

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

  #добавить ssl-сертификат в формате x509 pem
  #необязательный параметр
  #тип - файл с форматом в виде x509 pem
  oidc_cert = file("ca.crt")

  #пользовательские значения sysctl для LB
  #опциональный параметр
  #тип - список мап
  lb_sysctl_params = [{text = "1", text = "some"}]

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

output "cp_out" {
  value = dynamix_k8s_cp.cp
}
