在烦人的剧本中,我经常会执行“创建目录,然后在其中执行某些操作”之类的步骤,例如:
- name: Create directory
file:
path: "{{ tomcat_directory }}"
state: directory
- name: Extract tomcat
unarchive:
src: 'tomcat.tar.gz'
dest: '{{ tomcat_directory }}'
当我运行此剧本时,它的运行情况非常好。但是,当我以检查模式运行此剧本时,第一步成功(将创建文件夹),但第二步失败,因为该文件夹不存在。
有什么办法可以编写这样的步骤来创建文件夹,然后在其中进行操作,同时还能够以检查模式运行剧本(无需跳过此类步骤)?
答案 0 :(得分:2)
检查模式可能会有些麻烦。您实际上只有两个选择:
1)将条件添加到任务中,以在检查模式下跳过它们,您不想这样做。供参考:
when: not ansible_check_mode
2)您可以在检查模式下更改任务的行为。如果在任务上设置check_mode: no
,则在检查模式下,其行为将与正常运行中的行为相同。也就是说,尽管您指定了检查模式,但实际上它仍将执行任务并创建目录(如果尚不存在)。如果您愿意让给定的任务在检查模式下真正运行,则必须做出选择,因此它往往仅适用于低风险的任务,但确实为您提供了一种继续测试您的剧本其余部分的途径取决于相关步骤。
答案 1 :(得分:0)
一个选项是“ 注册:结果”并测试“ 何时:定义了result.state ”
- name: Create directory
file:
path: "{{ tomcat_directory }}"
state: directory
register: result
- name: Extract tomcat
unarchive:
src: 'tomcat.tar.gz'
dest: '{{ tomcat_directory }}'
when: result.state is defined
答案 2 :(得分:0)
仅当在检查模式下运行时,才可以使用ignore_errors
任务选项以及ansible_check_mode
变量来忽略Extract tomcat
任务的错误,例如:
- name: Create directory
file:
path: "{{ tomcat_directory }}"
state: directory
- name: Extract tomcat
unarchive:
src: 'tomcat.tar.gz'
dest: '{{ tomcat_directory }}'
ignore_errors: "{{ ansible_check_mode }}"
在检查模式下运行此命令将显示Extract tomcat
任务由于dest
不存在而失败。但是,代替失败的是剧本,任务失败将被标记为忽略,并且剧本的执行将继续。