我为“check_mode”选项设置了“vars_prompt”:
---
- name: Test check_mode from prompt
hosts: localhost
vars_prompt:
- name: "check_mode"
prompt: "Check mode: yes(default)=check-only, no=execute commands"
private: no
default: true
tasks:
- name: msg="False test | {{ check_mode }}"
debug: var=check_mode
when: not check_mode
- name: msg="True test | {{ check_mode }}"
debug: var=check_mode
when: check_mode
当我运行剧本(ansible-playbook -i myhosts test.yml
)并回答true
或false
时,测试按预期工作,但当我使用“是”和“否”时(作为{{ 3}}文件提及),我收到这个错误:
The conditional check 'check_mode' failed. The error was: error
while evaluating conditional (check_mode): 'no' is undefined
这是文档中的错误,还是我在check_mode
子句中使用when
变量的方式?我的印象是真实/是和假/否都是自动处理的。
答案 0 :(得分:0)
在过去六个月与Ansible合作之后,我再次遇到了自己的问题,但这次我有自己的答案。
问题是"是"和"不" Ansible不会自动将字符串转换为布尔值true / false。要强制转换,请使用" | bool"像这样过滤:
tasks:
- debug: msg="False test | {{ check_mode }}"
when: not check_mode|bool
- debug: msg="True test | {{ check_mode }}"
when: check_mode|bool
答案 1 :(得分:0)
从Ansible 2.1开始,有一个bool类型的新变量ansible_check_mode
。 documentation显示了此示例:
tasks:
- name: this task will be skipped in check mode
git: repo=ssh://git@github.com/mylogin/hello.git dest=/home/mylogin/hello
when: not ansible_check_mode
- name: this task will ignore errors in check mode
git: repo=ssh://git@github.com/mylogin/hello.git dest=/home/mylogin/hello
ignore_errors: "{{ ansible_check_mode }}"