Ansible提示和check_mode

时间:2016-09-19 15:56:02

标签: ansible ansible-playbook

我为“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)并回答truefalse时,测试按预期工作,但当我使用“是”和“否”时(作为{{ 3}}文件提及),我收到这个错误:

The conditional check 'check_mode' failed. The error  was: error
while evaluating conditional (check_mode): 'no' is undefined

这是文档中的错误,还是我在check_mode子句中使用when变量的方式?我的印象是真实/是和假/否都是自动处理的。

2 个答案:

答案 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_modedocumentation显示了此示例:

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 }}"