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

_Resource_ функция **decort_cb_extnet** служит для управления внешними сетями.

**Для того чтобы использовать данную Resource функцию требуются права администратора!**

## Аргументы
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| name | string | :heavy_check_mark: | Наименование внешней сети |
| gid | int | :heavy_check_mark: | ID платформы |
| ipcidr | string | :heavy_check_mark: | CIDR адресация |
| vlan_id | int | :heavy_check_mark: | ID виртуальной локальной сети |
| gateway | string | :x: | Опциональный IP шлюза |
| dns | []string | :x: | Список DNS адресов |
| ntp | []string | :x: | Список NTP адресов |
| check_ips | []string | :x: | IP адреса для проверки доступности сети |
| virtual | bool | :x: | При значении true DHCP сервер **не** будет создан |
| desc | string | :x: | Текстовое опиание внешней сети |
| start_ip | string | :x: | Начало диапазона включенных IP адресов |
| end_ip | string | :x: | Конец диапазона включенных IP адресов |
| vnfdev_ip | string | :x: | IP адрес для VNFDev |
| pre_reservations_num | int | :x: | Кол-во резерваций |
| ovs_bridge | string | :x: | Наименование моста OpenvSwitch внешней сети |
| enable | bool | :x: | Включить/Выключить внешнюю сеть |
| set_default | bool | :x: | При значении true - внешняя сеть становится дефолтной на платформе (невозможно отменить) |
| excluded_ips | []string | :x: | Список исключенных IP адресов |
| excluded_ips_range | []Struct [см. ниже](#описание-блока-excluded_ips_range-args) | :x: | Задать диапазон исключенных IP адресов |
| default_qos | Struct [см. ниже](#описание-блока-default_qos-args) | :x: | Стандартные значения QOS |
| reserved_ip | Struct [см. ниже](#описание-блока-reserved_ip-args) | :x: | Cписок зарезервированных IP или пула адресов |
| restart | bool | :x: | Флаг перезапуска сети |
| migrate | int | :x: | ID stack на который происходит миграция |
| shared_with | []int | :x: | Список id аккаунтов, которым предоставлен доступ к extnet |

### Описание блока excluded_ips_range args
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| ip_start | string | :heavy_check_mark: | Начало диапазона IP, который должен быть явно исключен |
| ip_end | string | :heavy_check_mark: | Конец диапазона IP, который должен быть явно исключен |

### Описание структуры default_qos args
| Параметр | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| e_rate | int | :x: | E rate |
| in_brust | int | :x: | In brust |
| in_rate | int | :x: | In rate |

### Описание структуры reserved_ip args
| Параметр | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| account_id | int | :x: | Идентификатор аккаунта, для которого резервируются ресурсы |
| ip_count | int | :x: | Количество резервируемых IP<br>Если поле ips не заполнено или список меньше параметра ip_count резервируются IP в случайном порядке. Не может быть меньше, чем длина списка ips |
| ips | []string | :x: | Список резервируемых IP.<br>1. Если список резервируемых IP меньше, чем параметр ip_count, то будут зарезервированы IP из списка, остальное количество IP, недостающее до ip_count будет зарезервировано в случайном порядке <br>2. При добавлении IP в список, необходимо так же увеличить параметр ip_count на количество добавленных адресов, иначе будут отключены IP которые были подключены в случайном порядке(не из списка).<br>3. При удалении IP из списка, необходимо так же уменьшить параметр ip_count на количество удаленных адресов, иначе IP из списка будет удален и добавлено недостающее до ip_count количество адресов, в случайном порядке|

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| ckey | string | CKey |
| meta | []string | Meta |
| default | bool | Является ли внешняя сеть дефолтной |
| default_qos | Struct{} [см.ниже](#описание-блока-default_qos) | Стандартные значения QOS |
| free_ips | int | Кол-во свободных IP адресов |
| guid | int | ID внешней сети на платформе |
| extnet_id | int | ID внешней сети | 
| milestones | int | Вехи |
| network_id | int | ID сети |
| pri_vnfdev_id | int | Pri_VNFDev ID |
| pre_reservations_num | int | Кол-во резерваций |
| ovs_bridge | string | Наименование моста OpenvSwitch внешней сети |
| shared_with | []int | ID объектов, использующих сеть |
| status | string | Статус внешней сети |
| vnfs | []Struct{} [см.ниже](#описание-блока-vnfs) | Список VNFs |
| excluded | []Struct{} [см.ниже](#описание-блока-excluded) | Список исключенных клиентов |
| network | string | Сеть |
| prefix | int | Префикс |
| routes | []Struct{} [см. ниже](#описание-структуры-routes) | Список статических маршрутов |
| reservations | []Struct{} [см.ниже](#описание-блока-reservations) | Резервации |

### Описание блока default_qos

| Параметр | Тип | Описание |
| --- | --- | --- |
| e_rate | int | Egress Rate |
| guid | string | Grid Unique ID |
| in_rate | int | Ingress Rate |
| in_burst | int | Ingress Burst |

### Описание блока vnfs

| Параметр | Тип | Описание |
| --- | --- | --- |
| dhcp | int | ID DHCP |

### Описание блока excluded

| Параметр | Тип | Описание |
| --- | --- | --- |
| client_type | string | Тип клиента |
| domain_name | string | Имя домена |
| hostname | string | Имя хоста |
| ip | string | IP адрес клиента |
| mac | string | MAC адрес клиента |
| type | string | Тип исключения |
| vm_id | int | VM ID |

### Описание структуры routes
| Параметр | Тип | Описание |
| --- | --- | --- |
| compute_ids | []int | Список ID compute, которым предоствавлен доступ |
| route_id | int | ID статического маршрута |
| guid | string | ID ресурса |
| destination | string | IP целевой сети |
| netmask | string | Маска сети |
| gateway | string | IP шлюза |

### Описание блока reservations

| Параметр | Тип | Описание |
| --- | --- | --- |
| account_id | int | ID аккаунта |
| client_type | string | Тип клиента |
| domain_name | string | Имя домена |
| desc | string | Описание |
| hostname | string | Имя хоста |
| ip | string | IP адрес клиента |
| mac | string | MAC адрес клиента |
| type | string | Тип исключения |
| vm_id | int | VM ID |

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

```terraform
resource "decort_cb_extnet" "new_extnet" {
  #наименование внешней сети
  #обязательный параметр
  #тип - строка
  #используется при создании
  name = "test_extnet"

  #id платформы
  #обязательный параметр
  #тип - целое число
  #используется при создании
  gid = 500

  #cidr
  #обязательный параметр
  #тип - строка
  #используется при создании
  ipcidr = "192.168.0.0/24"

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

  #ip-адрес шлюза внешней сети
  #опциональный параметр
  #тип - строка
  #используется при создании
  #gateway = "1.1.1.1"

  #cписок DNS адресов
  #опциональный параметр
  #тип - массив строк
  #используется при создании и обновлении
  #dns = ["8.8.8.8", "9.9.9.9"]

  #список NTP адресов
  #опциональный параметр
  #тип - массив строк
  #используется при создании и обновлении
  #ntp = ["ntp0.ntp-servers.net", "ntp1.ntp-servers.net"]

  #ip-адреса для проверки доступности сети
  #опциональный параметр
  #тип - массив строк
  #используется при создании
  #check_ips = ["191.255.0.0,", "191.255.0.0,"]

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

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

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

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

  #ip с которым будет создан vnfdev
  #опциональный параметр
  #тип - строка
  #используется при создании
  #vnfdev_ip = "191.255.0.20"

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

  #имя bridge Openvswitch для подключения к внешней сети
  #опциональный параметр
  #тип - строка
  #используется при создании
  #ovs_bridge = "some"

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

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

  #список исключенных IP адресов
  #опциональный параметр
  #тип - массив строк
  #используется при создании и обновлении
  #excluded_ips = ["192.168.0.4", "192.168.0.5"]

  #диапазон исключенных IP адресов
  #опциональный параметр
  #тип - блок
  #тип вложенных полей - строка
  #используется при создании и обновлении
  #excluded_ips_range {
    #начало диапазона
    #обязательный параметр
    #тип - строка
    #ip_start = "192.168.0.4"

    #окончание диапазона
    #обязательный параметр
    #тип - строка
    #ip_end = "192.168.0.50"
  #}

  #список id аккаунтов, которым предоставлен доступ к extnet
  #опциональный параметр
  #тип - массив целых чисел
  #используется при создании и обновлении
  #shared_with = [112, 123]

  #изменение настроек ограничения трафика сети
  #по умолчанию - 0, т.е. без ограничений
  #опциональный параметр
  #тип - блок,
  #тип вложенных полей - целое число
  #используется при обновлении
  #default_qos {
    #ограничение внутреннего трафика в кбит
    #опциональный параметр
    #тип - целое число
    #in_rate = 0

    #ограничение внутреннего burst трафика в кбит
    #опциональный параметр
    #тип - целое число
    #in_burst = 0

    #ограничение внешнего трафика в кбит
    #опциональный параметр
    #тип - целое число
    #e_rate = 0
  #}

  #список зарезервированных IP или пула адресов
  #опциональный параметр
  #тип - блок
  #используется при создании и обновлении
  #reserved_ip {
    #идентификатор аккаунта, для которого резервируются ресурсы
    #обязательный параметр
    #тип - целое число
    #account_id = 11111

    #количество резервируемых IP
    #опциональный параметр
    #тип - целое число
    #ip_count = 15

    #список резервируемых IP
    #опциональный параметр
    #тип - массив строк
    #ips = ["192.168.10.10", "192.168.10.20"]
  #}

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

  #перезапустить сеть
  #опциональный параметр
  #тип - булев
  #используется при обновлении
  #restart = true
}
```

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