我正在使用 Ansible Tower 来展示游戏。用户对调用 REST API 的工作加注星标,并且她/他提供了一些额外变量。我必须根据其他一些变量来验证提供的变量。例如:用户提供主机名,我在库存变量中有:allowed_hostnames。问题是 extra_vars 胜过一切,所以用户总是可以覆盖允许值列表的变量,并且测试没有意义。在 Tower 中有一个 Survey 功能,可用于限制用户允许更改的变量,但启用 Survey 将阻止 dict 变量,我需要它。
问问题
860 次
2 回答
1
问:“问题是 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 ..."
下一个选项可能是管道、redis、modgodb ...查找插件、自定义过滤器或自定义查找插件。
于 2019-10-21T12:21:23.823 回答
0
根据@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
于 2019-10-21T21:59:39.833 回答