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

_Resource_ функция **decort_bservice_group** служит для управления группой базового (basic service). Базовый сервис служит шаблоном для создания вычислительных мощностей (computes) по заданным правилам. Все вычислительные мощности объединяются в вычислительные группы, с помощью которых мощностями можно управлять.

### Работа с cloud_init

Cloud Init позволяет запустить ВМ с предустановленными настройками пользователя, группами и доступами. Подробнее про настройку 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
```

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

```terraform
resource "decort_bservice" "service1" {
   # ...

   cloud_init = file("initconfig.tftpl")

   # ...
}
```

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

**Конфигурация cloud_init применяется только при создании компьюта, во всех остальных случаях - игнорируется**

## Аргументы
После создания ресурса, необходимо **обязательно** в файле .tf, в котором описана группа, заполнить поле compgroup_id, чтобы продолжить работу с группами.
_Resource_ функция **decort_bservice_group** принимает следующие аргументы:

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | :---: | --- |
| service_id | int | :heavy_check_mark: | ID сервиса, на базе которого будет создана группа<br/>Используется при создании |
| compgroup_name | string | :heavy_check_mark: | Название вычислительной группы<br/>Используется при создании и редактировании |
| comp_count | int | :heavy_check_mark: | Кол-во мощностей в группе<br/>Используется при создании и редактировании<br/>При редактировании используется вместе с полем mode |
| cpu | int | :heavy_check_mark: | Кол-во используемых ядер в каждой мощности<br/>Используется при создании и редактировании |
| ram | int | :heavy_check_mark: | Размер RAM, МБ, каждой мощности<br/>Используется при создании и редактировании |
| disk | int | :heavy_check_mark: | Размер диска, ГБ, каждой мощности<br/>Используется при создании и редактировании |
| image_id | int | :heavy_check_mark: | ID образа каждой мощности<br/>Используется при создании |
| driver | string | :heavy_check_mark: | Драйвер<br/>Используется при создании |
| sep_id | int | :x: | ID storage endpoint provider |
| sep_pool | string | :x: | Название SEP pool'а |
| cloud_init | string | :x: | Используется на этапе создания вм.<br/>Параметры для утилиты _cloud_init_, которая используется в платформе DECORT для первичного конфигурирования виртуальной машины после её создания.
| role | string | :x: | Роль(тег) группы<br/>Используется при создании и редактировании |
| timeout_start | int | :x: | Таймаут начала работы групп<br/>Используется при создании |
| vinses | []int | :x: | Список ID виртуальных сетей<br/>Используется либо vinses, либо extnets<br/>Используется при создании и редактировании |
| extnets | []int | :x: | Список ID внешних сетей<br/>Используется либо vinses, либо extnets<br/>Используется при создании и редактировании |
| start | bool | :x: | Флаг запуска групп<br/>Используется при редактировании<br/>По-умолчанию: false |
| force_stop | bool | :x: | Флаг принудительной остановки групп<br/>Используется при редактировании<br/>Используется вместе с флагом start |
| mode | string | :x: | Режим изменения числа групп<br/>Используется при редактировании<br/>Возможные значения: RELATIVE и ABSOLUTE |
| force_update | bool | :x: | Флаг принудительного обновления мощностей<br/>Используется при редактировании<br/>Используется при изменении полей: ram, disk, compgroup_name, cpu, role |
| remove_computes | []int | :x: | Список id вычислительных мощностей для удаления<br/>Используется при редактировании |
| parents | []int | :x: | Список ID групп-родителей<br/>Используется при редактировании |
| compgroup_id | id | :x: | ID вычислительной группы<br/>Поле является **обязательным** при редактировании группы<br/>Так же применяется для формирования .tfstate - файла, при наличии группы в платформе |

## Возвращаемые значения
В случае успешного выполнения _data source_ функция **decort_bservice_group** возвращает в указанную при вызове переменную элемент, который состоит из следующих параметров:

| Параметр | Тип | Описание |
| --- | --- | --- |
| account_id | int | ID аккаунта |
| account_name | string | Название аккаунта |
| computes | []Struct{<br/>id int<br/>ip_addresses []string<br/>name string<br/>os_users []Struct{<br/>login string<br/>password string<br/>}  <br/>} | Вычислительные мощности<br/>ID вычислительной мощности<br/>Список IP-адресов<br/>Название вычислительной мощности<br/>Пользователи системы<br/>Логин пользователя<br/>Пароль пользователя<br/>&nbsp;<br/>&nbsp;<br/> |
| compgroup_id | int | ID вычислительной группы |
| compgroup_name | string | Название вычислительной группы |
| consistency | bool | Флаг, последовательность |
| cpu | int | Кол-во ядер |
| created_by | string | Кем создан сервис |
| created_time | int | Время создания сервиса |
| deleted_by | string | Кем удален сервис |
| deleted_time | int | Время удаления сервиса |
| disk | int | Кол-во используемого места на дисках, ГБ |
| driver | string | Используемый драйвер |
| extnets | []int | Список ID внешних сетей |
| gid | int | Grid id |
| guid | int | Внутренний ID группы |
| image_id | int | ID образа, который используется в вычислительной группе |
| milestones | int | Вехи |
| service_id | int | ID сервиса |
| parents | []int | Список родительских групп |
| ram | int | Кол-во RAM, МБ |
| rg_id | int | ID ресурсной группы |
| rg_name | string | Название ресурсной группы |
| role | string | Роль(тег) группы |
| sep_id | int | ID sep |
| seq_no | int | Номер последовательности |
| status | string | Статус сервиса |
| tech_status | string | Технический статус сервиса |
| timeout_start | int | Таймаут перед стартом |
| updated_by | string | Кем сервис был обновлен |
| updated_time | int | Время последнего обновления |
| vinses | []int | Список ID виртуальных сетей |



## Пример использования
Пример вызова _resource_ функции **decort_bservice**:
```terraform
resource "decort_bservice_group" "bsg" {
  #id basic service
  #обязательный параметр
  #тип - целое число
  service_id = 444444

  #название группы
  #обязательный параметр
  #тип - строка
  compgroup_name = "tf_group_rename"

  #id группы
  #необязательный параметр
  #тип - целое число
  #применяется при редактировании группы, либо при создании .tfstate - файла, если группа имеется в плафторме
  compgroup_id = 33333

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

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

  #кол-во оперативной памяти на выч. ресурс, в МБ
  #обязательный параметр
  #тип - целое число
  #используется так же для редактирования группы
  ram = 256

  #размер диска для выч. ресурса, в ГБ
  #обязательный параметр
  #тип - целое число
  #используется так же для редактирования группы
  disk = 11

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

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

  #id Storage endpoint provider 
  #необязательный параметр
  #тип - целое число
  sep_id = 3

  #Наименование SEPPool используется если установлен sepId, также может быть пустым
  #необязательный параметр
  #тип - строка
  sep_pool = "name"

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

  #id сетей extnet
  #необязательный параметр
  #тип - массив целых чисел
  #должен быть использован vins или extnets
  extnets = [1111, 2222]

  #id сетей vinses
  #необязательный параметр
  #тип - массив целых чисел
  #должен быть использован vins или extnets
  vinses        = [1111, 2222]

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

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

  #id групп родителей
  #необязательный параметр
  #тип - массив целых чисел
  #используется при редактировании ресурса
  #parents = [2222]

  #принудительное обновление параметров выч. мощностей  (ram,disk,cpu) и имени группы
  #необязательный параметр
  #тип - булев
  #используется при редактировании ресурса
  #по-умолчанию - false
  #force_update   = true

  #старт/стоп вычислительных мощностей
  #необязательный параметр
  #тип - булев
  #используется при редактировании ресурса
  #по-умолчанию - false
  #start = false

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

  #удаление вычислительных мощностей
  #необязательный параметр
  #тип - массив целых чисел
  #используется при редактировании
  #remove_computes = [32287]

  #режим увеличения числа выч. мощностей
  #необязательный параметр
  #тип - строка
  #используется в связке с comp_count при редактировании группы
  #возможные варианты - RELATIVE и ABSOLUTE
  #по-умолчанию - "RELATIVE"
  #mode = "RELATIVE"

}
```

Данный пример подразумевает, что ранее по тексту tf-файла выполнена корректная инициализация провайдера (подробнее об инициализации Terraform провайдера DECORT см. соответствующий [раздел](https://repository.basistech.ru/BASIS/terraform-provider-decort/src/branch/main/wiki/4.7.0/04.02-Инициализация-Terraform-провайдера-DECORT.md)). 

После успешного завершения такого вызова **decort_bservice_group** в переменной `decort_bservice_group.bsg` будут сохранены возвращаемые значения.
