Функция доступна в провайдере версии 2.0 и выше.

_Resource_ функция **decort_k8s_wg** служит для управления worker groups (рабочики группами, wg) кластера.

### Работа с cloud_init
Доступно в версии провайдера 4.4.1 и выше.

Cloud Init позволяет запустить ноды worker группы с предустановленными настройками. Подробнее про настройку cloud_init можно прочесть по [ссылке](https://cloudinit.readthedocs.io/en/latest/reference/examples.html).

**Пароли, указанные в cloud_init не сохраняются на платформе и не отображаются в API!**

Для использования cloud_init конфигурации, следует:

1. Создать файл с расширением `.tftpl` в рабочей директории.
2. Описать в созданном файле конфигурацию cloud_init в формате YAML:

#### initconfig.tftpl

```
---
users:
- groups: users, wheel
  name: user
  plain_text_passwd: examplePassword
  primary_group: user
  ssh_authorized_keys:
  - ssh-rsa EXAMPLE%id_rsa.pub
  sudo: ALL=(ALL) NOPASSWD:ALL
runcmd:
- echo 12345 > /home/user/test
```

3. Указать путь до файла `initconfig.tftpl` в качестве значения параметра `cloud_init` в ресурсе `decort_k8s_wg`:

```terraform
resource "decort_k8s_wg" "wg1" {
   # ...

   cloud_init = file("initconfig.tftpl")

   # ...
}
```

4. Выполнить `terraform apply`

## Изменения в 3.3.0

Добавлены описания IP адресов для группы воркеров.  
Добавлены описания IP адресов виртуальной сети, которая присоеденена к группе воркеров.  
Добавлена возможность импорта k8s_wg.

## Импортирование ресурса

Так как ресурс k8s_wg является подресурсом k8s, то для его импорта необходимо указать ID кластера, а так же само имя ресурса.  
Общая схема:

```terraform
terraform import decort_k8s_wg.<var> <wg_id>#<k8s_id>
```

Пример:

```
terraform import decort_k8s_wg.wg 777#888
```

## Ограничение на наименование ресурса

Ресурс не должен содержать в названии символ `#`

## Работа в параллельном режиме

Рекомендуется создавать одновременно не более одного экземпляра ресурса.
В случае необходимости создания нескольких ресурсов одновременно, необходимо запускать `terraform apply/plan` в режиме `-parallelism=1`.

## Аргументы

_Resource_ функция **decort_k8s_wg** для создания worker group принимает следующие аргументы:

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| k8s_id | int | :heavy_check_mark: | ID экземпляра k8s |
| name | string | :heavy_check_mark: | Наименование worker group |
| storage_policy_id | int | :heavy_check_mark: | ID политики хранения |
| num | int | :x: | Количество worker node для создания<br/>по - умолчанию - 1 |
| cpu | int | :x: | Количество cpu для 1 worker node<br/>по - умолчанию - 1 |
| ram | int | :x: | Количество RAM для одной worker node в Мбайтах, <br/>по умолчанию - 1024 |
| chipset | string | Тип эмулируемой системы |
| disk | int | :x: | Размер загрузочного диска для worker node, в Гбайтах<br/>по - умолчанию - 0<br/>если установлен параметр 0, то размер диска будет равен размеру образа |
| labels | []string | :x: | Список lables |
| annotations | []string | :x: | Список annotations |
| taints | []string | :x: | Список taints |
| worker_sep_id | int | :x: | ID SEP'а для создания загрузочных дисков для группы worker node по умолчанию, если не указан, используется sep_id образа |
| worker_sep_pool | string | :x: | Pool для использования, если установлен worker_sep_id, если не указан, выбиравется системой |
| cloud_init | file | :x: | Используется на этапе создания нод worker группы.<br/>Параметры для утилиты _cloud_init_, которая используется на платформе DECORT для первичного конфигурирования нод worker группы |
| chipset | string | Тип эмулируемой системы |

## Возвращаемые значения

В случае успешного выполнения _resource_ функция **decort_k8s_wg** возвращает в указанную при вызове переменную следующие значения:
| Параметр | Тип | Описание |
| --- | --- | --- |
| wg_id | int | ID группы воркеров |
| detailed_info | []Struct{} [см. ниже](#описание-структуры-detailed_info) | Детальная информация о группе воркеров |
| labels | []string | Лейблы группы воркеров |
| guid | int | ID ресурса |
| annotations | []string | Аннотации группы воркеров |
| taints | []string | Ограничения для группы воркеров |
| storage_policy_id | int | ID политики хранения |

### Описание структуры detailed_info

| Параметр | Тип | Описание |
| --- | --- | --- |
| compute_id | int | ID компьюта, входящего в группу воркеров |
| name | string | Имя компьюта |
| status | string | Статус компьюта |
| tech_status | string | Технический статус |
| interfaces | []Struct{} [см. ниже](#описание-структуры-interfaces) | Информация о интерфейсах компьюта |
| natable_vins_ip | string | IP виртуальной сети |
| natable_vins_network | string | Сеть vins |

### Описание структуры interfaces

| Параметр | Тип | Описание |
| --- | --- | --- |
| def_gw | string | Шлюз по умолчанию |
| ip_address | string | IP адрес компьюта |

## Пример использования

Пример вызова _resource_ функции **decort_k8s_wg**:

```terraform
resource "decort_k8s_wg" "wg" {
  #id экземпляра k8s
  #обязательный параметр
  #тип - целое число
  #используется при создании
  k8s_id = 1234

  #имя worker group
  #обязательный параметр
  #тип - строка
  #используется при создании
  name = "workers-2"

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

  #количество worker node
  #опциональный параметр
  #тип - целое число
  #по умолчанию - 1
  #используется при создании и обновлении
  #num = 2

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

  #количество RAM для одной worker node, в МБ
  #опциональный параметр
  #тип - целое число
  #по умолчанию - 1024
  #используется при создании
  #ram = 1024

  #тип эмулируемой системы
  #опциональный параметр
  #тип - строка
  #возможные значения: "i440fx", "Q35"
  #по умолчанию - Q35
  #используется при создании
  #chipset = "Q35"

  #размер загрузочного диска для worker node, в ГБ
  #опциональный параметр
  #тип - целое число
  #по умолчанию - 0
  #если установлен параметр 0, то размер диска будет равен размеру образа
  #используется при создании
  #disk = 10

  #перечень аргументов для cloud-init для виртуальных машин worker групп
  #опциональный параметр
  #тип - файл с форматом в виде yaml
  #используется при создании и обновлении
  #cloud_init = file("initconfig.tftpl")

}
```

После успешного завершения такого вызова **decort_k8s_wg** в переменной `decort_k8s_wg.wg` будут сохранены возвращаемые значения.В частности, для получения идентификатора k8s_wg следует использовать конструкцию `decort_k8s_wg.wg.id`
