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

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

| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| name | string | :heavy_check_mark: | Имя виртуального сетевого сегмента (ViNS), по которому требуется получить информацию. Имя не может быть пустым.<br/>ViNS идентифицируется по комбинации имени и идентификатора ресурсной группы (`rg_id`) или аккаунта (`account_id`).<br>Обратите внимание, что имя ViNS является уникальным в рамках "account" и ресурсной группы. |
| rg_id | int | :x: | Идентификатор ресурсной группы, в которой должен находиться данный ViNS.<br>Если требуется создать ViNS на уровне аккаунта ("account"), то необходимо указать `rg_id = 0`.<br/>Обратите внимание, что попытка изменить `rg_id` у существующего ресурса приведёт к его пересозданию. |
| account_id | int | :x: | Данный параметр является обязательным независимо от того, создаётся ли ViNS на уровне аккаунта или на уровне ресурсной группы.<br/> Идентификатор аккаунта ("account"), в котором должен находиться данный ViNS.<br/>Обратите внимание, что попытка изменить `account_id` у существующего ресурса приведёт к его пересозданию. |
| dns | []string | :x: | Список IP адресов DNS |
| ext_net_id | int | :x: | Идентификатор внешней сети, в которую должен быть подключён ViNS. Если подключение во внешнюю сеть не требуется, то необходимо задать `ext_net_id = 0`.<br/>Обратите внимание, что из всех ViNS, созданных на уровне одной и той же ресурсной группы, только один может иметь подключение к внешней сети. ViNS, созданные на уровне "account", не могут иметь подключений к внешним сетям. |
| ext_ip_addr | string | :x: | IP внешней сети |
| ipcidr | string | :x: | IP CIDR, который требуется присвоить внутреннему сегменту данного ViNS. <br/>Данный параметр не является обязательным и принимается во внимание только на стадии создания нового ViNS. Если он не задан, то платформа установит значение самостоятельно. |
| pre_reservations_num | int | :x: | Кол-во IP адресов, которое будет зарезервировано при создании |
| gid | int | :x: | GRID ID |
| enabled | bool | :x: | Флаг, отвечающий за возможность переводить ресурс в состояния enable и disable |
| permanently | bool | :x: | Безвозвратное удаление диска. Используется при удалении |
| force | bool | :x: | Удаление ресурса, в случае если он к чему-то присоединен произойдет отсоединение его от других ресурсов и удаление |
| ip | Struct{} [см. ниже](#описание-структуры-ip) | :x: | Структура для резервирования IP адресов |
| nat_rule | Struct{} [см. ниже](#описание-структуры-nat_rule) | :x: | Структура для того, чтобы задавать правила NAT |
| desc | string | :x: | Текстовое описание данного ViNS.<br/>Данный параметр не является обязательным, значение по умолчанию - пустая строка. |
| restore | bool | :x: | Флаг, для восстановления ресурса |
| vnfdev_restart | bool | :x: | Флаг, для рестарта VNF |
| vnfdev_redeploy | bool | :x: | Флаг, для редеплоя VNF |

### Описание структуры ip
| Аргумент | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| type | string | :heavy_check_mark: | Тип резервирования IP адреса |
| ip_addr | string | :x: | IP адрес, который надо зарезервировать |
| mac_addr | string | :x: | MAC адрес, который надо зарезервировать |
| compute_id | int | :x: | ID компьюта, который надо зарезервировать |

### Описание структуры 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 |

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


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

| Параметр | Тип | Описание |
| --- | --- | --- |
| vnf_dev | []Struct{} [см. ниже](#описание-структуры-vnf_dev) | VNFDEV |
| \_ckey | string | CKey |
| account_id | int | Уникальный идентификатор аккаунта-владельца ViNS. |
| account_name | string | Имя аккаунта ("account"), которому принадлежит ViNS. |
| computes | []Struct{} [см. ниже](#описание-структуры-computes) | Информация о компьютах |
| default_gw | string | Шлюз по умолчанию |
| default_qos | []Struct{} [см. ниже](#описание-структуры-qos) | qos виртуальной сети |
| desc | string | Текстовое описание ViNS. |
| gid | int | Grid ID |
| guid | int | ID ресурса |
| lock_status | string | Статус доступа виртуальной сети |
| manager_id | int | ID manager |
| manager_type | string | Type of manager |
| milestones | int | Milestones |
| name | string | Имя ViNS. |
| net_mask | int | Маска подсети |
| network | string | Сеть Vins |
| 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 vnf |
| status | string | Статус |
| user_managed | bool | Флаг user managed |
| vnfs | []Struct{} [см. ниже](#описание-структуры-vnfs) | VNFS |
| vxlan_id | int | ID vxlan |
| routes | []Struct{} [см. ниже](#описание-структуры-routes) | Список статических маршрутов |

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

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| \_ckey | string | Ckey |
| account_id | int | ID аккаунта |
| capabilities | []string | Возможности vnf_dev |
| config | Struct{} [см. ниже](#описание-структуры-config) | Конфиг VNF |
| config_saved | bool | Флаг, отвечающий за то сохранен ли конфиг |
| custom_pre_cfg | bool | Custom |
| desc | string | Описание |
| gid | int | Grid ID |
| guid | int | ID ресурса |
| vnf_id | int | ID vnf |
| interfaces | []Struct{} [см. ниже](#описание-структуры-interfaces) | Информация о интерфейсах |
| lock_status | string | Статус доступа vnf_dev |
| milestones | int | Этапы |
| vnf_name | string | Имя VNF |
| status | string | Статус |
| tech_status | string | Технический статус |
| type | string | Тип vnf |
| vins | []int | Список виртуальных сетей |
| vnc_password | string | VNC пароль |

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

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

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

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

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| cpu | int | Кол-во cpu ресурса |
| ram | int | Кол-во ram ресурса |
| stack_id | int | ID stack ресурса |
| uuid | string | UUID ресурса |

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

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

### Описание структуры 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 |

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| compute_id | int | ID компьюта |
| compute_name | string | Имя компьюта |

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| e_rate | int | E rate |
| guid | string | ID ресурса |
| in_brust | int | In brust |
| in_rate | int | In rate |

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| dhcp | []Struct{} [см. ниже](#описание-структуры-dhcp) | информаиця о DHCP |
| gw | []Struct{} [см. ниже](#описание-структуры-gw) | GW |
| nat | []Struct{} [см. ниже](#описание-структуры-nat) | NAT |

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

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

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

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

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

| Параметр | Тип | Описание |
| --- | --- | --- |
| account_id | int | Тип ID аккаунта |
| ip | string | IP адрес |
| mac | string | MAC адрес |
| type | string | Тип |
| vm_id | int | ID виртуальной машины |


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

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

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

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

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

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

### Описание структуры nat
| Параметр | Тип | Описание |
| --- | --- | --- |
| \_ckey | string | CKey |
| account_id | int | Уникальный идентификатор аккаунта-владельца ViNS. |
| created_time | int | Время создания |
| config | Struct{} [см. ниже](#описание-структуры-nat-config) | Информация о конфиге |
| devices | []Struct{} [см. ниже](#описание-структуры-devices) | Информация о девайсах |
| gid | int | GRID ID |
| guid | int | ID ресурса |
| nat_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 | Тип ресурса |

### Описание структуры 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 | Имя виртуальной машины |


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    #протокол natRule
    #опциональный параметр
    #тип - строка
    #proto = "tcp"
  #}]

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

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

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

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

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