_Resource_ функция **decort_vins** служит для управления виртуальными сетевыми сегментами (Virtual Network Segment) на платформе DECORT. ## Изменения в 3.3.0 Добавлена обработка статусов виртуальной сети. Если статус __DELETED__, то при попытке изменения конфигурационного файла, сеть будет автоматически восстановлена. Если статус __DESTROYED__, то при попытке изменения конфигурационного файла, сеть будет автоматически пересоздана. Начиная с версии 3.3.0, в ресурсе vins появляется опциональное поле `enabled`, которое принимает в себя булево значение. Поле отвечает за ручную регуляцию статуса доступности виртуальной сети, автоматическая регуляция так же имеется - восстановленная и вновь созданная виртуальная сеть переводится в режим `enabled = true`. Добавлена возможность добалять NAT правила через блок nat_rule. Добавлена возможность резервировать и освобождать IP адреса для виртуальной сети с помощью блока ip. Добавлена возможность ручного рестарта виртуальной сети, через опциональное поле `restore` которое принимает в себя булево значение. Добавлена возможность ручного рестарта VNF, через опциональное поле `vnfdev_restart` которое принимает в себя булево значение. Добавлена возможность ручного редеплоя VNF, через опциональное поле `vnfdev_redeploy` которое принимает в себя булево значение. Добавлена возможность удаления ресурса в корзину и полность, через опциональное поле `permanently` которое принимает в себя булево значение. Добавлена возможность удаления ресурса даже если к нему присоеденены другие ресурсы, которые будут отключены от виртуальной сети, через опциональное поле `force` которое принимает в себя булево значение. ## Аргументы _Resource_ функция **decort_vins** принимает следующие аргументы: | Аргумент | Тип | Обязательный | Описание | | --- | --- | --- | --- | | name | string | :heavy_check_mark: | Имя виртуального сетевого сегмента (ViNS), по которому требуется получить информацию. Имя не может быть пустым.
ViNS идентифицируется по комбинации имени и идентификатора ресурсной группы (`rg_id`) или аккаунта (`account_id`).
Обратите внимание, что имя ViNS является уникальным в рамках "account" и ресурсной группы. | | rg_id | int | :x: | Идентификатор ресурсной группы, в которой должен находиться данный ViNS.
Если требуется создать ViNS на уровне аккаунта ("account"), то необходимо указать `rg_id = 0`.
Обратите внимание, что попытка изменить `rg_id` у существующего ресурса приведёт к его пересозданию. | | account_id | int | :x: | Данный параметр является обязательным независимо от того, создаётся ли ViNS на уровне аккаунта или на уровне ресурсной группы.
Идентификатор аккаунта ("account"), в котором должен находиться данный ViNS.
Обратите внимание, что попытка изменить `account_id` у существующего ресурса приведёт к его пересозданию. | | dns | []string | :x: | Список IP адресов DNS | | ext_net_id | int | :x: | Идентификатор внешней сети, в которую должен быть подключён ViNS. Если подключение во внешнюю сеть не требуется, то необходимо задать `ext_net_id = 0`.
Обратите внимание, что из всех ViNS, созданных на уровне одной и той же ресурсной группы, только один может иметь подключение к внешней сети. ViNS, созданные на уровне "account", не могут иметь подключений к внешним сетям. | | ext_ip_addr | string | :x: | IP внешней сети | | ipcidr | string | :x: | IP CIDR, который требуется присвоить внутреннему сегменту данного ViNS.
Данный параметр не является обязательным и принимается во внимание только на стадии создания нового 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. Правила NAT можно указать только для зарезервированных IP. Если создается resourse_decort_vins и resourse, который будет использовать данный vins, то поле nat_rule необходимо указать только после подключения данной сети к resourse и резервирования ip адреса | | desc | string | :x: | Текстовое описание данного ViNS.
Данный параметр не является обязательным, значение по умолчанию - пустая строка. | | 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_ функция **decort_vins** возвращает в указанную при вызове переменную следующие значения: | Параметр | Тип | Описание | | --- | --- | --- | | vnf_dev | []Struct{} [см. ниже](#описание-структуры-vnf_dev) | VNFDEV | | \_ckey | string | CKey | | account_id | int | Уникальный идентификатор аккаунта-владельца ViNS. | | account_name | string | Имя аккаунта ("account"), которому принадлежит ViNS. | | computes | []Struct{} [см. ниже](#описание-структуры-computes) | Информация о компьютах | | created_by | string | Кем создан ресурс | | created_time | int | Время создания ресурса | | default_gw | string | Шлюз по умолчанию | | default_qos | []Struct{} [см. ниже](#описание-структуры-qos) | qos виртуальной сети | | deleted_by | string | Кем удален ресурс | | deleted_time | int | Время удаления ресурса | | desc | string | Текстовое описание ViNS. | | dns | []string | Список IP адресов DNS | | enabled | bool | Флаг, отвечающий за доступность ресурса | | ext_ip_addr | string | IP внешней сети, если задан | | ext_net_id | []int | Список внешних сетей, к которым подключен ресурс | | ext_net_id | int | Идентификатор внешней сети, в которую должен быть подключён ViNS по умолчанию. | | force | bool | Флаг принудительного удаления ресурса. | | gid | int | Grid ID | | guid | int | ID ресурса | | id | string | Идентификатор данной сети. | | ip | Struct{} [см. ниже](#описание-структуры-ip) | Структура для резервирования IP адресов | | ipcidr | string | IP CIDR, указанный при создании. | | lock_status | string | Статус доступа виртуальной сети | | manager_id | int | ID manager | | manager_type | string | Type of manager | | milestones | int | Milestones | | name | string | Имя ViNS. | | nat_rule | Struct{} [см. ниже](#описание-структуры-nat_rule) | Структура для того, чтобы задавать правила NAT. | | net_mask | int | Маска подсети | | network | string | Сеть Vins | | permanently | bool | Флаг безвозвратного удаление сети | | 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 | Статус | | updated_by | string | Юзернейм обновивший ресурс | | updated_time | int | Время обновления | | user_managed | bool | Флаг user managed | | vins_id | int | Идентификатор данной сети. | | vnf_dev | []Struct{} [см. ниже](#описание-структуры-vnf_dev) | VNFDEV | | vnfdev_restart | bool | Флаг, для рестарта VNF | | vnfdev_redeploy | bool | Флаг, для редеплоя VNF | | 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 ресурса | | interfaces | []Struct{} [см. ниже](#описание-структуры-interfaces) | Информация о интерфейсах | | lock_status | string | Статус доступа vnf_dev | | milestones | int | Этапы | | status | string | Статус | | tech_status | string | Технический статус | | type | string | Тип vnf | | vins | []int | Список виртуальных сетей | | vnc_password | string | vnc пароль | | vnf_id | int | ID vnf | | vnf_name | string | Имя VNF | ### Описание структуры 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 | Шлюз по умолчанию | | enabled | bool | Флаг доступности| | 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 | string | Максимальный объём данных, который может быть передан за одну итерацию | | 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 | Параметр | Тип | Описание | | --- | --- | --- | | event_idx | string | Event ID | | guid | string | GUID | | ioeventfd | string | IO event | | queues | int | Количество очередей | | rx_queue_size | int | Длина очереди RX | | tx_queue_size | int | Длина очереди TX | | txmode | string | TX mode | ### Описание структуры 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) | Информация о девайсах | | dhcp_id | int | ID dhcp | | gid | int | GRID ID | | guid | int | ID ресурса | | lock_status | string | Статус доступа виртуальной сети | | milestones | int | Milestones | | owner_id | int | ID владельца | | owner_type | string | Тип владельца | | pure_virtual | bool | Флаг, показывающий является ли ресурс чисто виртуальным | | routes | []Struct{} | Список статических маршрутов | | 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_net_id | int | ID внешней сети | | ext_net_ip | string | IP внешней сети | | ext_netmask | int | Маска внешней сети | | qos | Struct{} [см. ниже](#описание-структуры-qos) | QOS | ### Описание блока nat_rule | Аргумент | Тип | Описание | | --- | --- | --- | | int_ip | string | Внутренний IP, для NAT правила | | int_port | int | Внутренний порт, для NAT правила | | ext_port_start | int | Начало диапазона внешних портов, для NAT правила | | ext_port_end | int | Конец диапазона внешних портов, для NAT правила | | proto | string | Протокол для NAT. tcp или udp | ### Описание структуры 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 | Имя виртуальной машины | ### Описание структуры ip | Аргумент | Тип | Описание | | --- | --- | --- | | type | string | Тип резервирования IP адреса | | ip_addr | string | IP адрес, который надо зарезервировать | | mac_addr | string | MAC адрес, который надо зарезервировать | | compute_id | int | ID компьюта, который надо зарезервировать | ## Пример использования Пример вызова _Resource_ функции **decort_vins**: ```terraform resource "decort_vins" "vins" { #имя создаваемого ресурса #обязательный параметр #тип - строка #используется при создании name = "Test_name" #id ресурсной группы для создания ресурса #должен быть указан или rg_id или account_id #опциональный параметр #тип - целое число #используется при создании rg_id = 10101 #id аккаунта для создания ресурса #должен быть указан или rg_id или account_id #опциональный параметр #тип - целое число #используется при создании account_id = 2023 #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 #удаление навсегда #опциональный параметр #тип - булев #используется при удалении #permanently = true #удаляет за собой все зависимые ресурсы #опциональный параметр #тип - булев #используется при удалении #force = true #блок для резервирования ip #опциональный параметр #тип - блок ip #используется при создании и обновлении #ip { #тип подключения #обязательный параметр #тип - строка #type = "DHCP" #ip который необходимо зарезервировать #опциональный параметр #тип - строка #ip_addr = "192.168.5.5" #mac который необходимо зарезервировать #опциональный параметр #тип - строка #mac_addr = "ff:ff:ff:ff:ff:ff" #} #блок для добавления natRule #опциональный параметр #тип - блок правил nat #используется при создании и обновлении #nat_rule { #ip внутренний #опциональный параметр #тип - строка #int_ip = "192.168.0.28" #внутренний порт #опциональный параметр #тип - целое число #int_port = 80 #начало диапазона внешних портов #опциональный параметр #тип - целое число #ext_port_start = 8001 #конец диапазона внешних портов #опциональный параметр #тип - целое число #ext_port_end = 8001 #протокол natRule #опциональный параметр #тип - строка #proto = "tcp" #} #восстановление ресурса #опциональный параметр #тип - булев #используется при обновлении #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"] } ``` После успешного завершения такого вызова **decort_vins** в переменной `decort_vins.vins` будут сохранены возвращаемые значения. В частности, для получения идентификатора ViNS следует использовать конструкцию `decort_vins.vins.id`