我有一个需要传递的 Ansible 剧本--extra-vars
,并且想知道是否有任何方法可以根据--extra-vars
变量内的值验证主机名。
示例手册test.yml
- hosts: localhost
gather_facts: false
vars:
prg:
prod_mgmt_network: "{{ ['prodsrv00']|product(range(prod_start,prod_end))|map('join')|list }}"
test_mgmt_network: "{{ ['testsrv00']|product(range(test_start,test_end))|map('join')|list }}"
prod_start: 4281
prod_end: 4283
test_start: 8281
test_end: 8283
tasks:
- debug:
var: prg.prod_mgmt_network, prg.test_mgmt_network
命令示例
ansible-playbook --extra-vars hostname=['prodsrv004281', 'prodsrv004282', 'testsrv008281', 'testsrv008282', 'testsrv008283', 'testsrv008284'] test.yml
如果主机名不在变量中,我希望任务失败。例如,testsrv008283
并且testsrv008284
应该使任务失败。
第一个问题是额外变量的格式。请参阅在运行时定义变量。key=value (INI) 语法始终被解释为字符串。您可能想测试一下。例如下面的播放
给出(删节)
关于如何获取列表还有更多选项:
然后,你会得到
然后,下面的游戏给出了相同的结果
为了测试您的案例,最简单的选择是将列表放入文件中
问:“如果主机名不在变量内,则失败。例如,testsrv008283 和testsrv008284 应该失败。”
A:选择主机列表并比较差异。例如,
给出
网络的评估给出
下面的断言将通过
但是,这个会失败
用于测试的完整剧本示例