2

我正在使用 Ansible Tower 来展示游戏。用户对调用 REST API 的工作加注星标,并且她/他提供了一些额外变量。我必须根据其他一些变量来验证提供的变量。例如:用户提供主机名,我在库存变量中有:allowed_hostnames。问题是 extra_vars 胜过一切,所以用户总是可以覆盖允许值列表的变量,并且测试没有意义。在 Tower 中有一个 Survey 功能,可用于限制用户允许更改的变量,但启用 Survey 将阻止 dict 变量,我需要它。

4

2 回答 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 回答