Как заблокировать переопределение переменных с помощью extra_vars в Ansible? - PullRequest
2 голосов
/ 21 октября 2019

Я использую Ansible Tower для демонстрации игры. Пользователь помечает работу, вызывая REST API, и он / она предоставляет несколько extra_vars. Я должен проверить предоставленную переменную с некоторыми другими переменными. Например: пользователь предоставляет имя хоста, а я в переменной инвентаризации: allow_hostnames. Проблема в том, что extra_vars превосходит все, поэтому пользователь всегда может переопределить переменную для списка разрешенных значений, и тестирование не имеет смысла. В Tower есть функция Survey, которую можно использовать для ограничения переменных, разрешенных для изменения пользователем, но включение Survey блокирует переменные dict, и мне это нужно.

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Q: "Проблема в том, что extra_vars превосходит все"

A: Избегайте переменных. Например, задача

- debug:
    msg: "{{ my_host|default('') }} is allowed to ..."
  when: "my_host|default('') in  lookup('file', 'allowed_hosts.yml')|from_yaml"

с данными

$ cat allowed_hosts.yml
  - host1
  - host2
  - host3
  - host9

дает

$ ansible-playbook play.yml -e 'my_host=host2'

    "msg": "host2 is allowed to ..."


Следующие параметры могут быть pipe, redis, modgodb... поиск плагины , пользовательский фильтр или пользовательский поиск плагин .
0 голосов
/ 22 октября 2019

На основании ответа @Vladimir я сделал это так:

- name: Check variables
  fail:
  when: "{{ {'restricted_variables':restricted_variables} != lookup('file', 'restricted_variables.yml')|from_yaml }}"

где restricted_variables.yml:

restricted_variables:
  variable1: somevalue
  variable2:
    var1: 1
    var2: 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...