# 03.04 Модуль decort_pfw
## Обзор модуля decort_pfw
Модуль decort_pfw предназначен для управления правилами трансляции сетевых портов для указанного экземпляра Compute (например, для виртуального сервера, созданного с помощью decort_kvmvm).
##Параметры модуля decort_pfw
Ниже в алфавитном порядке приведен полный список параметров для модуля decort_pfw. Актуальную информацию по параметрам, которые поддерживает версия модуля, установленного на вашем Ansible-сервере, можно получить командой:
`ansible-doc -t module decort_pfw`
| Параметр | Тип, допустимые значения | Описание|
| ------ | ------ | ------ |
|app_id | (string) | Идентификатор приложения, использующийся для подключения к контроллеру облачной платформы DECORT в режиме authenticator: oauth2. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_APP_ID`.|
|app_secret | (string) | Секретный ключ приложения, который используется для подключения к контроллеру облачной платформы DECORT в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Так как он содержит секретную информацию, то его не рекомендуется задавать непосредственно в playbook. Если параметр не задан в playbook, то модуль будет использовать значение переменной окружения `DECORT_APP_SECRET`.|
| authenticator | Значения:
`legacy`
`oauth2`
`jwt` <- default | Режим аутентификации при подключении к контроллеру облачной платформы DECORT. |
|compute_id | (int) | Идентификатор экземпляра Compute (напр., виртуального сервера), для которого требуется настроит правила.|
|controller_url | (string) | URL контроллера, соответствующего экземпляру облачной платформы DECORT, в рамках которого должен быть создан (или уже существует) данный виртуальный сервер. Данный параметр является обязательным.|
|jwt | (string) | JSON Web Token (JWT), который будет использоваться для подключения к контроллеру облачной платформы DECORT в режиме authenticator: jwt Данный параметр является обязательным для указанного режима. Так как он содержит потенциально секретную информацию, а сам JWT, как правило, имеет ограниченное время жизни, то его не рекомендуется задавать непосредственно в playbook. Если этот параметр не определен в playbook, то модуль будет использовать значение переменной окружения `DECORT_JWT`.|
|oauth2_url | (string) | URL авторизационного сервера, работающего по протоколу Oauth2, который должен использоваться в режиме `authenticator: oauth2`. Данный параметр является обязательным для указанного режима. Если параметр не задан в playbook, модуль будет использовать значение переменной окружения `DECORT_OAUTH2_URL`.|
|rules | (list of dicts) | Список словарей, задающих правила трансляции сетевых портов. Правила могут задавать как трансляцию "один к одному", так и "диапазон в диапазон". Структура словаря: (int) public_port_start - номер внешнего порта (на публичном интерфейсе ViNS, заданного параметром vins_id) для начала диапазона. (int) public_port_end - номер внешнего порта для конца диапазона. Если требуется правило "один к одному", то public_port_end можно не указывать или указать равным public_port_start. (int) local_port - номер порта на интерфейсе экземпляра Compute, заданного параметром compute_id. Если задаётся правило "диапазон в диапазон", то local_port становится началом диапазона для трансляции. В случае правила "один к одному" public_port_start просто транслируется в local_port (string) proto - протокол, tcp или udp.|
| state | Значения:
`present` <- default
`absent`
`check`
| Целевое состояние правил.
Если `state=absent`, то будут удалены все правила для указанного `compute_id` независимо от содержания параметра `rules`. В противном случае набор правил на выходе из модуля будет соответствовать тому, который содержится в параметре `rules`.
Если задан `state=check`, то модуль запускается в режиме read-only и возвращает текущие настройки правил трансляции сетевых портов для указанных `compute_id` и `vins_id`. |
| verify_ssl | (bool)
`True` <- default
`False` | Позволяет отключить проверку SSL сертификатов при выполнении API вызовов в адрес контроллера облачной инфраструктуры, например, при работе с изолированной облачной инфраструктурой, использующей самоподписанные сертификаты.
Применяйте данный параметр с осторожностью, предпочтительно в защищенных средах. |
|vins_id | (int) | Идентификатор виртуального сетевого сегмента (Virtual Network Segment, ViNS), в рамках которого настраиваются правила трансляции сетевых портов. Экземпляр Compute, заданный в параметре `compute_id`, должен быть уже подключён к данному ViNS.|
| workflow_callback | (string) | URL, по которому вышестоящее приложение (например, пользовательский портал или оркестратор верхнего уровня, инициирующий запуск Ansible playbook) ожидает API вызова, в параметрах которого модуль будет оперативно передавать информацию о своем статусе и текущей фазе исполнения. Данный параметр является опциональным. Функциональность callbacks в текущей версии модуля не реализована. |
|workflow_context | (string) | Контекстная информация, которая будет содержаться в параметрах API вызова, адресованного к `workflow_callback` URL. Данная информация призвана однозначно идентифицировать задачу, выполняемую модулем в настоящий момент, чтобы оркестратор верхнего уровня мог сопоставить получаемые через вызов `workflow_callback` данные со своим внутренним состоянием и отслеживать инициированные им задачи. Параметр является опциональным и имеет значение только при условии, что также задан `workflow_callback`. Функциональность callbacks в текущей версии модуля не реализована.|
## Возвращаемые значения модуля decort_pfw
Модуль decort_pfw возвращает информацию о правилах трансляции сетевых портов и сопутсвтующую информацию в виде словаря facts со следующими ключами:
|Ключ | Тип данных | Описание|
| ------ | ------ | ------ |
|compute_id | int | Идентификатор compute, для которого настроены перечисленные правила трансляции.|
|public_ip | string |IP адрес на внешнем сетевом интерфейсе ViNS. Перечисленные ниже правила трансляции настраиваются на этом интерфейсе.|
|rules | list of dict | Список словарей, описывающих правила трансляции сетевых портов. Структура словаря: (int) id - идентификатор правила. (int) publicPortStart - номер внешнего порта (на публичном интерфейсе ViNS, см. public_ip) для начала диапазона. (int) publicPortEnd - номер внешнего порта для конца диапазона. Если требуется правило "один к одному", то publicPortEnd можно не указывать или указать равным publicPortStart. (int) localPort - номер порта на интерфейсе экземпляра Compute, заданного параметром compute_id. Если задаётся правило "диапазон в диапазон", то localPort указывает начало диапазона для трансляции. В случае правила "один к одному" publicPortStart просто транслируется в localPort. (string) protocol - протокол, tcp или udp.|
|state | string | Статус правил. Для корректно отработавшего модуля это поле должно иметь значение "PRESENT".|
|vins_id | int | Идентификатор виртуального сетевого сегмента (ViNS), в котором настроены перечисленные выше правила трансляции.|
## Пример использования модуля decort_pfw
В данном примере для ранее созданного экземпляра KVM VM compute (идентифицируется по compute_id), подключённого к указанному виртуальному сетевому сегменту (идентифицируется по vins_id) настраиваются два правила трансляции сетевых портов:
- Правило "один к одному": внешний порт 30022 -> внутренний порт 22, протокол tcp.
- Правило "диапазон в диапазон": внешние порты с 30080 по 30085 включительно -> внутренние порты начиная с 30080, протокол tcp.
```
- name: manage port forwarding rules
decort_pfw:
authenticator: oauth2
app_id: "{{ my_app_id }}"
app_secret: "{{ my_app_secret }}"
oauth2_url: "https://sso.digitalenergy.online"
controller_url: "https://cloud.digitalenergy.online"
compute_id: "{{ my_kvmvm.facts.id }}"
vins_id: "{{ my_vins01.facts.id }}"
rules:
- public_port_start: 30022
local_port: 22
proto: tcp
- public_port_start: 30080
public_port_end: 30085
local_port: 30080
proto: tcp
state: present
register: my_pfw
delegate_to: localhost
```
В данном примере результат выполнения модуля decort_pfw записывается в переменную my_pfw. Для доступа к списку правил используйте следующую конструкцию:
`"{{ my_pfw.facts.rules }}"`