Функция доступна в версии провайдера 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                                                                |
| 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 |

## Возвращаемые значения
В случае успешного выполнения _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

| Параметр | Тип | Описание |
| --- | --- | --- |
| 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 = "test desc"
  
    # Список 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"

    # Включение/Выключение внешней сети
    # Опциональный параметр (default = true)
    # Тип - булев
    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
    }
    
    # ID stack на который происходит миграция
    # Опциональный параметр
    # Тип - число
    migrate = 1
    
    # Перезапустить сеть
    # Опциональный параметр 
    # Тип - булев
    restart = true
}
```

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