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

_Resource_ функция **decort_cb_lb** служит для управления балансировщиком нагрузки (load balancer). Балансировщики нагрузки служат для равномерного распределения сетевой нагрузки между подключенными к ним сервисами.

## Аргументы
_Resource_ функция **decort_cb_lb** принимает следующие аргументы:

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| rg_id | int | :heavy_check_mark: | ID ресурсной группы |
| name | string | :heavy_check_mark: | Название балансировщика |
| start | bool | :x: | Флаг запуска балансировщика. По умолчанию - true. Eсли load balancer был в статусе "stopped" (start = false), то для успешного старта, он должен быть доступен (enable = true) |
| extnet_id | int | :x: | ID внешней сети. extnet_id и vins_id не могут быть одновременно равны 0 |
| vins_id | int | :x: | ID виртуальной сети. extnet_id и vins_id не могут быть одновременно равны 0 |
| desc | string | :x: | Описание балансировщика |
| enable | bool | :x: | Флаг доступности балансировщика |
| restart | bool | :x: | Флаг перезагрузки балансировщика. Можно использовать только на созданном ресурсе. По умолчанию - false. Перезагрузка происходит только при смене флага с false на true |
| safe | bool | :x: | Флаг перезапуска первичных и вторичных узлов последовательно в режиме высокой доступности (HA mode) |
| config_reset | bool | :x: | Флаг сброса конфигурации балансировщика. По умолчанию - false. Сброс происходит только при изменении флага с false на true |
| ha_mode | bool | :x: | Использовать высокодоступную схему для развертывания LB |
| permanently | bool | :x: | Флаг моментального удаления балансировщика из платформы. по умолчанию - false. При необходимости, после изменения значения флага, необходимо выполнить `terraform apply` для изменения значения флага в состоянии терраформа, а после этого - `terraform destroy` |
| restore | bool | :x: | Флаг восстановления балансировщика после удаления. Восстановить возможно только балансировщики, удаленные с флагом permanently равным false. Предварительно, необходимо импортировать удаленный ресурс и изменить значение флага. После этого - выполнить `terraform apply`. |
| sysctl_params | []map[string]interface{} | :x: | Пользовательские значения sysctl для балансировщика, для применения настроек, необходимо перезагрузить балансировщик |  
| zone_id | int | :x: | Идентификатор экземпляра zone |


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

| Параметр | Тип | Описание |
| --- | --- | --- |
| ha_mode | bool | Флаг, показывающий, включен ли режим haproxy |
| ckey | string | CKey |
| meta | []string | Мета информация |
| acl | string | Cписок Acces Control |
| backend_haip | string | Backend highly available ip |
| backends | []Struct{} [см. ниже](#описание-структуры-backends) | Список бекендов |
| desc | string | Описание |
| dp_api_password | string | Пароль пользователя для работы |
| dp_api_user | string | Имя пользователя для работы |
| extnet_id | int | ID внешней сети |
| frontend_haip | string | Frontend highly available ip |
| frontends | []Struct{} [см. ниже](#описание-структуры-frontends) | Список фронтендов   
| gid | int | Grid ID балансировщика |
| guid | int | ID балансировщика |
| lb_id | int | ID балансировщика |
| image_id | int | ID образа |
| manager_id | int | ID ресурса, к которому принадлежит данный балансировщик |
| manager_type | string | Тип ресурса, к которому принадлежит данный балансировщик |
| milestones | int | Вехи |
| name | string | Имя балансировщика |
| part_k8s | bool | Является ли балансироващик частью кластера |
| primary_node | Struct{} [см. ниже](#описание-структуры-primary_node) | Главный узел |
| rg_id | int | ID ресурсной группы |
| secondary_node | Struct{} [см. ниже](#описание-структуры-secondary_node) | Второй узел |
| status | string | Статус |
| tech_status | string | Технический статус |
| user_managed | bool | Флаг указывающий, может ли пользователь управлять балансировщиком напрямую |
| vins_id | int | ID виртуальной сети |
| zone_id | int | Идентификатор экземпляра zone |

### Описание структуры backends
| Параметр | Тип | Описание |
| --- | --- | --- |
| algorithm | string | Алгоритм работы бекенда |
| guid | string | ID ресурса |
| name | string | Имя бекенда |
| server_default_settings | Struct{} [см. ниже](#описание-структуры-server_default_settings) | Описание настроек серверов бекенда по умолчанию |
| servers | []Struct{} [см. ниже](#описание-структуры-servers) | Список серверов |

### Описание структуры server_default_settings
| Параметр | Тип | Описание |
| --- | --- | --- |
| downinter | int | Интервал между проверками на недоступность сервера |
| guid | string | ID ресурса |
| inter | int | Интервал между проверками на доступность сервера |
| rise | int | Кол-во попыток, после которых, сервер будет вновь включен в схему балансирования |
| fall | int | Кол-во неудачных попыток, после которых, сервер получит статус "unavailable" |
| slowstart | int | Интервал, в мс, в через который сервер получит статус "available" |
| maxconn | int | Кол-во соединений к северу, при достижении этого кол-ва, сервера выходит из схемы балансирования |
| maxqueue | int | Кол-во соедений в очереди к серверу |
| weight | int | Вес сервера для работы алгоритма балансирования по весу |

### Описание структуры servers
| Параметр | Тип | Описание |
| --- | --- | --- |
| address | string | Адрес сервера |
| check | string | Включены ли проверки |
| guid | string | ID ресурса |
| name | string | Имя сервера |
| port | int | Порт сервера |
| server_settings | [см. ниже](#описание-структуры-server_settings) | Настройки сервера |

### Описание структуры server_settings
| Параметр | Тип | Описание |
| --- | --- | --- |
| downinter | int | Интервал между проверками на недоступность сервера |
| guid | string | ID ресурса |
| inter | int | Интервал между проверками на доступность сервера |
| rise | int | Кол-во попыток, после которых, сервер будет вновь включен в схему балансирования |
| fall | int | Кол-во неудачных попыток, после которых, сервер получит статус "unavailable" |
| slowstart | int | Интервал, в мс, в через который сервер получит статус "available" |
| maxconn | int | Кол-во соединений к северу, при достижении этого кол-ва, сервера выходит из схемы балансирования |
| maxqueue | int | Кол-во соедений в очереди к серверу |
| weight | int | Вес сервера для работы алгоритма балансирования по весу |

### Описание структуры frontends
| Параметр | Тип | Описание |
| --- | --- | --- |
| backend | string | Имя бекенда, к которому подключен фронтенд |
| guid | string | ID ресурса |
| name | string | Имя фронтенда |
| bindings | []Struct{} [см. ниже](#описание-структуры-bindings) | Привязки фронтенда |

### Описание структуры bindings
| Параметр | Тип | Описание |
| --- | --- | --- |
| address | string | Адрес, к которому привязан фронтенд |
| name | string | Имя привязки |
| port | int | Порт привязки |
| guid | string | ID ресурса |

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


## Пример использования
Пример вызова _resource_ функции **decort_cb_lb**:

```terraform
resource "decort_cb_lb" "lb" {
  #id ресурсной группы для создания балансировщика
  #обязательный параметр
  #тип - целое число
  #используется при создании
  rg_id = 1111

  #наименование load balancer
  #обязательный параметр
  #тип - строка
  #используется при создании
  name = "tf-test-lb"

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

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

  #флаг запуска load balancer
  #опциональный параметр
  #если load balancer был в статусе "stopped" (start = false), 
  #то для успешного старта, он должен быть доступен (enable = true)
  #по умолчанию - true
  #тип - булев
  #используется при создании и обновлении
  #start = true

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

  #описание
  #опциональный параметр
  #тип - строка
  #используется при создании и обновлении
  #desc= "temp super lb for testing tf provider"

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

  #флаг перезапуска load balancer
  #опциональный параметр
  #перезагрузка срабатывает только при изменении флага с false на true
  #тип - булев
  #используется при обновлении
  #restart = false

  #флаг сброса конфигурации load balancer
  #опциональный параметр
  #сброс срабатывает только при изменении флага с false на true
  #тип - булев
  #используется при обновлении
  #config_reset = false

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

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

  #флаг используемый при рестарте load balancer
  #опциональный параметр
  #по умолчанию - true, при данном значении рестарт производится на обоих нодах в HA mode
  #тип - булев
  #используется при обновлении
  #safe = true

  #пользовательские значения sysctl для LB
  #опциональный параметр
  #тип - список мап
  #используется при создании и обновлении
  #sysctl_params = [{ key1 = "value1", key2 = "value2" }]

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

}
```

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