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

_Resource_ функция **decort_cb_vins** служит для управления виртуальными сетевыми сегментами (Virtual Network Segment) в платформе DECORT.

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

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| name | string | :heavy_check_mark: | Имя виртуального сетевого сегмента (ViNS), по которому требуется получить информацию. Имя не может быть пустым.<br/>ViNS идентифицируется по комбинации имени и идентификатора ресурсной группы (`rg_id`) или подписчика (`account_id`).<br>Обратите внимание, что имя ViNS является уникальным в рамках "account" и ресурсной группы. |
| account_id | int | :heavy_check_mark: | ID аккаунта, в котором будет создан vins. Для создания vins должен быть указан или account_id, или rg_id. |
| rg_id | int | :heavy_check_mark: | Идентификатор ресурсной группы, в которой будет создан vins. Для создания vins должен быть указан или account_id, или rg_id. |
| dns | []string | :x: | Список IP адресов DNS |
| ext_net_id | int | :x: | Идентификатор внешней сети, в которую должен быть подключён ViNS. ViNS, созданные на уровне "account", не могут иметь подключений к внешним сетям.<br/>-1 – не подключаться к extnet;<br/>0 – автоматический выбор;<br/>1+ – extnet ID.<br/>Значение по умолчанию -1. |
| ext_ip | string | :x: | IP внешней сети, относится только к extNetId >= 0 |
| ipcidr | string | :x: | IP CIDR, который требуется присвоить внутреннему сегменту данного ViNS. <br/>Данный параметр не является обязательным и принимается во внимание только на стадии создания нового ViNS. Если он не задан, то платформа установит значение самостоятельно. |
| pre_reservations_num | int | :x: | Количество предварительно созданных резерваций. Значение по умолчанию 32. |
| gid | int |:x:| ID кластера | 
| description | string | :x: | Текстовое описание vins. |
| routes | []Struct [см. ниже](#описание-структуры-routes) | :x: | Список статических маршрутов. |
| default_qos | Struct [см. ниже](#описание-структуры-default_qos) | :x: | Обновить значения QoS по умолчанию.|
| enable | bool | :x: | Флаг включения внутренней сети |
| permanently | bool | :x: | Флаг для удаления ресурса vins без возможности восстановления. |
| force | bool | :x: | Флаг для принудительного удаления ресурса vins. |
| ip | []Struct [см. ниже](#описание-структуры-ip) | :x: | Создать/удалить резервирование DHCP на внутренней сети. |
| nat_rule | []Struct [см. ниже](#описание-структуры-nat_rule)  | :x: | Добавить/удалить правило NAT (переадресации портов) для внутренней сети. Правила NAT можно указать только для зарезервированных IP. Если создается resourse_decort_cb_vins и resourse, который будет использовать данный vins, то поле nat_rule необходимо указать только после подключения данной сети к resourse и резервирования ip адреса |
| vnfdev_start | bool | :x: | Флаг запуска основного виртуального маршрутизатора внутренней сети. |
| vnfdev_restart | bool | :x: | Флаг перезагрузки основного виртуального маршрутизатора внутренней сети. |
| vnfdev_reset | bool | :x: | Флаг сброса основного виртуального маршрутизатора внутренней сети. |
| vnfdev_redeploy | bool | :x: | Флаг повторного разворачивания основного виртуального маршрутизатора внутренней сети. |

### Описание структуры routes
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| destination | string | :heavy_check_mark: | IP-адрес сети назначения |
| gateway | string | :heavy_check_mark: | Шлюз по умолчанию. IP-адрес из пула свободных IP-адресов внутренней сети. |
| netmask | string | :heavy_check_mark: | Маска сети назначения в формате 255.255.255.255 |

### Описание структуры default_qos
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| e_rate | int | :x: | Скорость исходящего трафика |
| in_burst | int | :x: | Размер буфера входящего трафика |
| in_rate | int | :x: | Скорость входящего трафика |

### Описание структуры ip
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| type | string | :heavy_check_mark: | Тип резервирования |
| ip_addr | string | :x: | Используемый IP-адрес. Для типа "EXCLUDED" требуется непустая строка. Игнорируется для типов "DHCP" и "VIP". |
| mac_addr | string | :x: | MAC-адрес для связи с резервированием IP-адресов. Игнорируется для типа "EXCLUDE", непустая строка требуется для "DHCP" и "VIP" |
| compute_id | int | :x: | ID виртуальной машины, связанной с этим резервированием типа "DHCP". Игнорируется для других типов. |

### Описание структуры nat_rule
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| int_ip | string | :heavy_check_mark: | Внутренний IP, для NAT правила |
| int_port | int | :x: | Внутренний порт, для NAT правила |
| ext_port_start | int | :heavy_check_mark: | Начало диапазона внешних портов, для NAT правила |
| ext_port_end | int | :x: | Конец диапазона внешних портов, для NAT правила |
| proto | string | :x: | Протокол для NAT. tcp или udp. Значение по умолчанию tcp. |

Пользователь облачной платформы, от лица которого происходит обращение к данной функции, должен иметь доступ к указанной учётной записи ("account") и/или ресурсной группе. В противном случае возникнет ошибка доступа.

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

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| vins_id | int | id vins |
| vnf_dev | []Struct [см. ниже](#описание-структуры-vnf_dev) | Виртуальный маршрутизатор внутренней сети |
| account_id | int | ID подписчика ("account"), которому принадлежит ViNS. |
| account_name | string | Имя подписчика ("account"), которому принадлежит ViNS. |
| created_by | string | Аккаунт, создавший vins |
| created_time | int | Время создания vins |
| default_gw | string | Шлюз по умолчанию |
| default_qos | Struct [см. ниже](#описание-структуры-default_qos) | QOS по умолчанию |
| deleted_by | string | Пользователь, удаливший vins |
| deleted_time | int | Время удаления vins |
| description | string | Текстовое описание ViNS. |
| gid | int | GRID ID |
| guid | int | ID ресурса |
| lock_status | string | Статус доступности |
| manager_id | int | Manager id |
| manager_type | string | Type of manager |
| milestones | int | Вехи |
| name | string | Имя ViNS. |
| netmask | int | Маска сети |
| network | string | Информация о сети |
| pre_reservations_num | int | Кол-во зарезервированных ip адресов |
| redundant | bool | Redudant |
| rg_id | int | Идентификатор ресурсной группы, на уровне которой создан ViNS. Для ViNS, существующих на уровне "account", данный параметр будет равен 0. |
| rg_name | string | Имя ресурсной группы |
| sec_vnf_dev_id | int | ID sec внутренней сети для разработки |
| status | string | Статус vins |
| updated_by | string | Кем был обновлен vins |
| updated_time | int | Время последнего обновления vins |
| user_managed | bool | Флаг, управляется ли пользователем |
| vnfs | []Struct [см. ниже](#описание-структуры-vnfs) | Список VNFs |
| vxlan_id | int | Идентификатор vxlan |
| computes | []Struct [см. ниже](#описание-структуры-computes) | Информация о компьютах (виртуальных машинах) |

### Описание структуры computes 
| Параметр | Тип | Описание |
| --- | --- | --- |
| id | int | Идентификатор компьюта |
| name | string | Имя компьюта |

### Описание структуры vnf_dev
| Параметр | Тип | Описание |
| --- | --- | --- |
| ckey | string | CKey |
| meta | []string | Мета информация |
| account_id | int | ID учетной записи |
| capabilities | []string | Возможности vnf_dev |
| config | []Struct [см. ниже](#описание-структуры-vnf_dev_config) | Конфигурация |
| config_saved | bool | Флаг, отвечающий за то сохранен ли конфиг |
| custom_precfg | bool | Флаг, отвечающий за то, есть ли кастомный пре-конфиг |
| description | string | Описание |
| gid | int | GRID ID |
| guid | int | ID ресурса |
| id | int | ID виртуального маршрутизатора внутренней сети |
| interfaces | []Struct [см. ниже](#описание-структуры-interfaces) | Список интерфейсов подключений |
| lock_status | string | Статус доступности |
| milestones | int | Вехи |
| name | string | Название виртуального маршрутизатора внутренней сети |
| status | string | Статус виртуального маршрутизатора внутренней сети |
| tech_status | string | Технический статус | 
| type | string | Тип виртуального маршрутизатора внутренней сети |
| vins | []int | Список виртуальных сетей |

### Описание структуры vnf_dev_config
| Параметр | Тип | Описание |
| --- | --- | --- |
| mgmt | []Struct [см. ниже](#описание-структуры-mgmt) | Config Mgmt |
| resources | []Struct [см. ниже](#описание-структуры-resources) | Ресурсы |

### Описание структуры mgmt
| Параметр | Тип | Описание |
| --- | --- | --- |
| ip_addr | string | ip-адрес |
| password | string | Пароль |
| ssh_key | string | Публичный SSH ключ |
| user | string | Имя пользователя |

### Описание структуры resources
| Параметр | Тип | Описание |
| --- | --- | --- |
| cpu | int | Количество CPU |
| ram | int | Количество RAM |
| stack_id | int | id стэка |
| uuid | string | UUID ресурса |

### Описание структуры interfaces
| Параметр | Тип | Описание |
| --- | --- | --- |
| conn_id | int | ID подключения |
| conn_type | string | Тип соединения |
| def_gw | string | Шлюз по умолчанию |
| enabled | bool | Флаг доступности |
| flipgroup_id | int | ID группы с плавающим ip-адресом |
| guid | string | ID ресурса |
| ip_address | string | IP адрес |
| listen_ssh | bool | открыт ли ssh connect |
| mac | string | MAC адрес интерфейса |
| mtu | string | Максимальный объём данных, который может быть передан за одну итерацию |
| name | string | Название интерфейса |
| net_id | int | ID сети |
| net_mask | int | Маска подсети |
| net_type | string | Тип сети |
| node_id | int | ID узла |
| pci_slot | int | id pci слота |
| bus_number | int | Номер шины |
| qos | []Struct [см. ниже](#описание-структуры-qos) | QOS |
| target | string | Цель сети |
| type | string | Тип интерфейса |
| vnfs | []int | Список VNFs |
| libvirt_settings | []Struct{}[см. ниже](#описание-структуры-libvirt_settings) | Параметры libvirt virtio интерфейса |

### Описание структуры libvirt_settings

| Параметр | Тип | Описание |
| --- | --- | --- |
| guid | string | GUID |
| txmode | string | TX mode |
| ioeventfd | string | IO event |
| event_idx | string | Event ID |
| queues | int | Количество очередей |
| rx_queue_size | int | Длина очереди RX |
| tx_queue_size | int | Длина очереди TX |

### Описание структуры qos
| Параметр | Тип | Описание |
| --- | --- | --- |
| e_rate | int | Egress Rate |
| guid | string | ID ресурса |
| in_brust | int | In brust |
| in_rate | int | In rate |

### Описание структуры default_qos
| Параметр | Тип | Описание |
| --- | --- | --- |
| e_rate | int | Egress Rate |
| guid | string | ID ресурса |
| in_brust | int | In brust |
| in_rate | int | In rate |

### Описание структуры vnfs
| Параметр | Тип | Описание |
| --- | --- | --- |
| dhcp | []Struct [см. ниже](#описание-структуры-dhcp) | Информация о DHCP |
| gw | []Struct [см. ниже](#описание-структуры-gw) | Информация о шлюзе |
| nat | []Struct [см. ниже](#описание-структуры-nat) | NAT |

### Описание структуры nat
| Параметр | Тип | Описание |
| --- | --- | --- |
| ckey | string | CKey |
| meta | []string | Мета информация |
| account_id | int | Уникальный идентификатор подписчика-владельца ViNS. |
| created_time | int | Время создания |
| config | Struct{} [см. ниже](#описание-структуры-nat_config) | Информация о конфиге |
| devices | []Struct{} [см. ниже](#описание-структуры-devices) | Информация о девайсах |
| gid | int | GRID ID |
| guid | int | ID ресурса |
| id | int | ID NAT |
| lock_status | string | Статус доступа виртуальной сети |
| milestones | int | Milestones |
| owner_id | int | ID владельца |
| owner_type | string | Тип владельца |
| pure_virtual | bool | Флаг, показывающий является ли ресурс чисто виртуальным |
| status | string | Статус |
| tech_status | string | Технический статус |
| type | string | Тип ресурса |
| routes | []Struct{} [см. ниже](#описание-структуры-routes) | Список статических маршрутов |

### Описание структуры nat_config
| Параметр | Тип | Описание |
| --- | --- | --- |
| net_mask | int | Маска сети |
| network | string | Сеть |
| rules | []Struct{} [см. ниже](#описание-структуры-rules) | Правила NAT |

### Описание структуры rules
| Параметр | Тип | Описание |
| --- | --- | --- |
| rule_id | int | ID правила |
| local_ip | string | Локальный IP адрес |
| local_port | int | Локальный порт |
| protocol | string | Протокол |
| public_port_end | int | Конец диапазона портов |
| public_port_start | int | Начало диапазона портов |
| vm_id | int | ID виртуальной машины |
| vm_name | string | Имя виртуальной машины |

### Описание структуры gw
| Параметр | Тип | Описание |
| --- | --- | --- |
| ckey | string | CKey |
| meta | []string | Мета информация о шлюзе |
| account_id | int | Уникальный идентификатор владельца |
| config | Struct{} [см. ниже](#писание-структуры-gw_config) | Информация о конфиге |
| created_time | int | Время создания |
| devices | []Struct{} [см. ниже](#описание-структуры-devices) | Информация о девайсах |
| gid | int | Grid ID |
| guid | int | ID ресурса |
| id | int | ID gw |
| lock_status | string | Статус доступа gw |
| milestones | int | Вехи |
| owner_id | int | ID владельца |
| owner_type | string | Тип владельца |
| pure_virtual | bool | Флаг, показывающий является ли ресурс чисто виртуальным |
| routes | []Struct{} [см. ниже](#описание-структуры-routes) | Список статических маршрутов |
| status | string | Статус gw |
| tech_status | string | Технический статус gw |
| type | string | Тип gw |

### Описание структуры gw_config
| Параметр | Тип | Описание |
| --- | --- | --- |
| default_gw | string | Шлюз по умолчанию |
| ext_net_id | int | ID внешней сети |
| ext_net_ip | string | IP внешней сети |
| ext_netmask | int | Маска внешней сети |
| qos | Struct{} [см. ниже](#описание-структуры-qos) | QOS |

### Описание структуры dhcp
| Параметр | Тип | Описание |
| --- | --- | --- |
| ckey | string | CKey |
| meta | []string | Мета информация о dhcp |
| account_id | int | id аккаунта |
| config | []Struct [см. ниже](#описание-структуры-dhcp_config) | Конфигурация dhcp |
| created_time | int | Время создания |
| devices | []Struct{} [см. ниже](#описание-структуры-devices) | Информация о девайсах |
| gid | int | Grid ID |
| guid | int | ID ресурса |
| id | int | ID dhcp |
| lock_status | string | Статус доступа dhcp |
| milestones | int | Вехи |
| owner_id | int | ID владельца |
| owner_type | string | Тип владельца |
| pure_virtual | bool | Флаг, показывающий является ли ресурс чисто виртуальным |
| routes | []Struct{} [см. ниже](#описание-структуры-routes) | Список статических маршрутов |
| status | string | Статус dhcp |
| tech_status | string | Технический статус dhcp |
| type | string | Тип dhcp |

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

### Описание структуры devices
| Параметр | Тип | Описание |
| --- | --- | --- |
| primary | Struct{} [см. ниже](#описание-структуры-primary) | Первичная информация |

### Описание структуры primary
| Параметр | Тип | Описание |
| --- | --- | --- |
| dev_id | int | ID dev |
| iface01 | string | Интерфейс 1 |
| iface02 | string | Интерфейс 2 |

### Описание структуры dhcp_config
| Параметр | Тип | Описание |
| --- | --- | --- |
| default_gw | string | Шлюз по умолчанию |
| dns | []string | Список dns |
| ip_end | string | Конец диапазона IP адресов |
| ip_start | string | Старт диапазона IP адресов |
| lease | int | Срок |
| net_mask | int | Маска подсети |
| network | string | Информация о сети |
| reservations | []Struct [см. ниже](#описание-структуры-reservations) | Информация о резервациях |

### Описание структуры reservations
| Параметр | Тип | Описание |
| --- | --- | --- |
| client_type | string | Тип клиента |
| description | string | Описание |
| domain_name | string | Имя домена |
| host_name | string | Имя хоста |
| ip | string | IP адрес |
| mac | string | MAC адрес |
| type | string | Тип сети |
| vm_id | int | ID виртуальной машины |

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

```terraform
resource "decort_cb_vins" "my_vins" {
  #обязательный параметр
  #имя создаваемого ресурса
  #тип - строка
  name = "Test_name"

  #id аккаунта для создаения ресурса
  #опциональный параметр
  #внимание, для создания ресурса обязательно должен быть указан или rg_id, или account_id
  #тип - целое число
  account_id = 2023

  #id ресурсной группы для создаения ресурса
  #опциональный параметр
  #внимание, для создания ресурса обязательно должен быть указан или rg_id, или account_id
  #тип - целое число
  rg_id = 10101

  #id внешней сети для подключения к ней ресурса
  #опциональный параметр
  #тип - целое число
  #ext_net_id  = 2222

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

  #приватная сеть IP CIDR
  #опциональный параметр
  #тип - строка
  #ipcidr = "192.168.0.1"

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

  #grid (platform) ID
  #опциональный параметр
  #тип - целое число
  #gid = 2002

  #описание
  #опциональный параметр
  #тип - строка
  #description = "Description"

  #блок для указания списка routes
  #опциональный параметр
  #тип - список routes
  #routes = [{
  #ip целевой сети
  #опциональный параметр
  #тип - строка
  #destination = "DHCP"

  #сетевая маска в формате 255.255.255.255
  #опциональный параметр
  #тип - строка
  #netmask  = "192.168.5.5"

  #шлюз по умолчанию
  #опциональный параметр
  #тип - строка
  #gateway = "192.168.5.5"
  #}]

  #default qos
  #опциональный параметр
  #блок для указания default_qos
  #тип - список qos
  #default_qos = {
  #внутренний трафик, Кбит
  #опциональный параметр
  #тип - целое число
  #in_rate = 1

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

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

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

  #удаление навсегда
  #опциональный параметр
  #тип - булев
  #permanently = true

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

  #блок для резервирования ip
  #опциональный параметр
  #тип - список параметров ip
  #ip {
  #тип подключения
  #обязательный параметр
  #тип - строка
  #type = "DHCP"

  #ip который необходимо зарезервировать
  #опциональный параметр
  #тип - строка
  #ip_addr  = "192.168.5.5"

  #mac который необходимо зарезервировать
  #опциональный параметр
  #тип - строка
  #mac = "ff:ff:ff:ff:ff:ff"

  #compute_id, ассоциируемый с типом DHCP
  #опциональный параметр
  #тип - целое число
  #compute_id = 1234

  #}

  #блок для добавления natRule
  #опциональный параметр
  #тип - список параметров natRule
  #nat_rule {
  #ip внутренний
  #обязательный параметр
  #тип - строка
  #int_ip = "192.168.0.28"

  #внутренний порт
  #опциональный параметр
  #тип - целое число
  #int_port = 80

  #начало диапазона внешних портов
  #обязательный параметр
  #тип - целое число
  #ext_port_start = 8001

  #конец диапазона внешних портов
  #опциональный параметр
  #тип - целое число
  #ext_port_end = 8001

  #протокол natRule: разрешенные значения "tcp", "udp"
  #опциональный параметр
  #тип - строка
  #proto = "tcp"
  #} 

  #vnf dev start, stop
  #опциональный параметр
  #true: старт vnfDev; false: стоп vnfDev
  #тип - булев
  #vnfdev_start = true

  #перезапуск vnfDev
  #опциональный параметр
  #тип - булев
  #vnfdev_restart  = true

  #ресет vnfDev
  #опциональный параметр
  #тип - булев
  #vnfdev_reset  = true

  #редеплой vnfDev
  #опциональный параметр
  #тип - булев
  #vnfdev_redeploy = true

  #список dns
  #опциональный параметр
  #применяется при создании и редактировании ресурса
  #если при создании указать пустой список, то ресурс создается с полем vnfs.dhcp.config.dns, имеющим значение по умолчанию
  #если при обновлении указать пустой список, то ресурс обновит в модели поле vnfs.dhcp.config.dns с текущего значения на пустой список
  #тип - список строк
  #dns = ["1.1.1.1", "2.2.2.2"]

}
# Once the above directive completes, ViNS ID will be accessible as
# decort_cb_vins.my_vins.id
```

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

После успешного завершения такого вызова **decort_cb_vins** в переменной `data.decort_cb_vins.my_vins` будут сохранены возвращаемые значения. В частности, для получения идентификатора ViNS следует использовать конструкцию `data.decort_cb_vins.my_vins.id`
