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

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

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

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | :---: | --- |
| rg_id | int | :heavy_check_mark: | ID ресурсной группы |
| name | string | :heavy_check_mark: | Название балансировщика |
| start | bool | :heavy_check_mark: | Флаг запуска балансировщика. По умолчанию - 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 для балансировщика |  


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

| Параметр | Тип | Описание |
| --- | --- | --- |
| ha_mode | bool | Флаг, показывающий, включен ли режим haproxy |
| backends | []Struct{} [см. ниже](#описание-структуры-backend) | Список бекендов |
| created_by | string | Аккаунт, создавший балансировщик |
| created_time | int | Время создания |
| deleted_by | string | Кем балансировщик был удален |
| deleted_by | int | Время удаления |
| desc | string | Описание |
| dp_api_user | string | Имя пользователя для работы |
| extnet_id | int | ID внешней сети |
| frontends | []Struct{} [см. ниже](#описание-структуры-фронтенда) | Список фронтендов |
| gid | int | Grid ID балансировщика |
| guid | int | ID балансировщика |
| lb_id | int | ID балансировщика |
| manager_id | int | ID ресурса, к которому принадлежит данный балансировщик |
| manager_type | string | Тип ресурса, к которому принадлежит данный балансировщик |
| image_id | int | ID образа |
| milestones | int | Вехи |
| name | string | Имя балансировщика |
| part_k8s | bool | Является ли балансироващик частью кластера |
| primary_node | Struct{} [см. описание узлов](#описание-структуры-узлов) | Главный узел |
| rg_id | int | ID ресурсной группы |
| rg_name | string | Имя ресурсной группы |
| secondary_node | Struct{} [см. описание узлов](#описание-структуры-узлов) | Второй узел |
| status | string | Статус |
| tech_status | string | Технический статус |
| updated_by | string | Кем балансировщик был обновлен |
| updated_time | string | Время последнего обновления |
| user_managed | bool | Флаг указывающий, может ли пользователь управлять балансировщиком напрямую |
| vins_id | int | ID виртуальной сети |


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

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

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

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

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

### Описание структуры узлов
| Параметр | Тип | Описание |
| --- | --- | --- |
| backend_ip | string | IP адрес бекенда |
| compute_id | int | ID виртуальной машины |
| frontend_ip | string | IP адрес фронтенда |
| mgmt_ip | string | IP адрес |
| network_id | int | ID сети |

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


## Пример использования
Пример вызова _resource_ функции **decort_lb**:
```terraform
resource "decort_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 = [{text = "1", text = "some"}]
}
```

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