Собственные типы полномочий#
Automation Controller позволяет создавать собственные типы полномочий.
При создании собственного типа полномочий используются следующие понятия:
Входные данные – данные, которые вводит пользователь при создании полномочия. В качестве входных данных могут использоваться имена пользователей, пароли, приватные ключи SSH и GPG, токены и тому подобное.
Инжектор – механизм, выполняющий преобразование данных полномочия в нужный формат.
Инжекция – процесс передачи данных полномочия в среду исполнения при выполнении задания.
Создание собственного типа полномочий имеет следующие особенности:
Каждый собственный тип полномочий должен содержать описание полей входных данных и настройки инжектора.
Контроллер не проверяет наличие коллизий названий переменных окружения, дополнительных переменных Ansible и пространств имен.
Следует избегать использования названий переменных, начинающихся с
ANSIBLE_
, поскольку они зарезервированы.
Работа контроллера с собственными типами полномочий показана на схеме:
При создании собственного типа полномочий администратор задает настройки входных данных и инжектора.
Пользователи создают необходимые экземпляры полномочий собственного типа.
При запуске заданий введенные пользователями данные полномочия передаются в инжектор.
Инжектор передает данные полномочия в среду исполнения.
Возможны следующие способы передачи данных полномочия в среду исполнения:
переменная окружения;
дополнительная переменная (extra vars) Ansible;
текстовый файл, в том числе с возможностью генерации содержимого с использованием шаблонизатора Jinja.
Способ передачи данных определяется настройками инжектора. Одни и те же данные полномочия могут быть переданы в среду исполнения сразу несколькими способами, например, в переменной окружения, дополнительной переменной Ansible и содержимом текстового файла.
Настройка входных данных#
Настройки входных данных типа полномочий определяют параметры полей ввода, используемых при вводе данных полномочия.
При создании поля необходимо указать его идентификатор и тип. Также можно указать дополнительные атрибуты, влияющие на поведение поля формы и обработку введенного пользователем значения.
Типовые настройки входных данных состоят из обязательного блока fields
и опционального блока required
.
В блоке fields
содержится список записей с описанием полей ввода данных полномочия.
Каждая запись может состоять из следующих полей:
id
– идентификатор поля. Значение, указанное в этом поле, используется для передачи данных в инжектор.type
– тип поля:string
– строка;boolean
– логическое.
default
– значение по умолчанию.format
– дополнительная проверка корректности значения, указанного в поле.Поддерживаются следующие значения:
ssh_private_key
– приватный ключ SSH;url
– URI.
label
– название поля при заполнении сведений о полномочии через графический интерфейс.help_text
– подсказка, которая выводится рядом с полем при заполнении сведений о полномочии через графический интерфейс.secret
– если равноtrue
, вводимое значение является секретом.Для защиты секретов в полях ввода используется маскировка символов, а в таблице базы данных Automation Controller – защитное преобразование.
multiline
– логическое значение для полей типаstring
. При значенииtrue
поле позволяет вводить многострочный текст.choices
– массив доступных значений для полей типаstring
. Если массив не пуст, при заполнении поля через графический интерфейс значение нужно выбрать из списка, а не вводить вручную.
В блоке required
содержится список идентификаторов полей, обязательных для заполнения.
Конфигурация инжектора#
Для доступа к значению, полученному из входных данных, следует в двойных фигурных скобках указать идентификатор соответствующего поля, например:
---
extra_vars:
auth_token: '{{ auth_token }}'
Дополнительной переменной Ansible auth_token
присваивается значение поля входных данных с идентификатором auth_token
.
Настройки инжектора могут содержать следующие блоки:
file
– шаблон, на основе которого генерируется содержимое временного файла.Имя файла генерируется случайным образом. Оно хранится в переменной Ansible
tower.filename
.Если используется несколько полей для загрузки файлов, их следует описать в отдельных переменных, названия которых начинаются с префикса
template.
. Для получения имени файла следует обратиться к соответствующему значению словаряtower.filename
, например:--- file: template.cert_file: '{{ tls_cert }}' template.key_file: '{{ tls_key }}' env: TLS_CERT_FILE_NAME: '{{ tower.filename.cert_file }}' TLS_KEY_FILE_NAME: '{{ tower.filename.key_file }}'
Здесь для хранения сертификата и соответствующего ему ключа создаются два временных файла, имена которых сохраняются в переменных
tower.filename.cert_file
иtower.filename.key_file
соответственно.env
– список названий переменных окружения и соответствующих им значений.extra_vars
– список названий дополнительных переменных Ansible и соответствующих им значений.Подробности о порядке присвоения значений переменным см. в документе Переменные.
Примеры#
Пусть для работы с некоторым сервисом необходимы следующие учетные данные:
Название учетной записи пользователя – строка, хранится в открытом виде.
Значение передается в среду исполнения через переменную окружения
API_USERNAME
.Токен – строка, хранится в зашифрованном виде.
Значение передается в среду исполнения через переменную окружения
API_TOKEN
в следующем формате:Bearer-Token: <token>
Уровень доступа – строка, может принимать значения
low
,medium
иhigh
. Значение по умолчанию –low
.Значение передается в среду исполнения через дополнительную переменную Ansible
api_access_level
.Приватный ключ SSH для защиты соединения.
Значение передается в среду исполнения в виде файла, имя которого хранится в переменной окружения
API_PRIVATE_SSH_KEY
.
Для хранения указанных данных в Automation Controller следует использовать поля со следующими свойствами:
Параметр |
Идентификатор |
Тип |
Обязательное |
Название учетной записи |
|
|
Да |
Токен |
|
|
Да |
Уровень доступа |
|
|
Да |
Ключ SSH |
|
|
Нет |
Настройки собственного типа полномочий в этом случае можно задать следующим образом:
---
fields:
- id: username
type: string
label: Username
- id: token
type: string
label: Token
secret: true
help_text: A string of 32 charactes long.
- id: access_level
type: string
label: Access level
choices:
- low
- medium
- high
default: low
- id: ssh_key
type: string
label: SSH private key
format: ssh_private_key
secret: true
required:
- username
- token
- access_level
---
env:
API_USERNAME: '{{ username }}'
API_TOKEN: 'Bearer-Token:: {{ token }}'
API_PRIVATE_SSH_KEY: '{{ tower.filename.private_ssh_key }}'
extra_vars:
api_access_level: '{{ access_level }}'
file:
template.private_ssh_key: '{{ ssh_key }}'
Примечание
Два двоеточия в строке с параметром API_TOKEN
необходимы для соблюдения корректности синтаксиса YAML.
При передаче данных строка будет преобразована в указанный выше формат с одним двоеточием.
В графическом интерфейсе Automation Controller форма для создания полномочий этого типа имеет следующий вид: