Ansible 访问结果列表中的变量
我希望在现有playbook中添加一个步骤,当它找到var_file.yml中指定的特定目录时,该步骤将停止/失败Ansible 访问结果列表中的变量,ansible,Ansible,我希望在现有playbook中添加一个步骤,当它找到var_file.yml中指定的特定目录时,该步骤将停止/失败 --- - include_vars: file: var_file.yml - name: Check if instance has been Patched stat: path: '{{ item }}' register: patchDir loop: "{{ work_dir }}" - fail: msg="This system ha
---
- include_vars:
file: var_file.yml
- name: Check if instance has been Patched
stat:
path: '{{ item }}'
register: patchDir
loop: "{{ work_dir }}"
- fail: msg="This system has already been patched today!"
loop: "{{ patchDir.results }}"
when: (stat['exists'], true)
loop_control:
label: 'patchDir'
var_file.yml:
---
work_dir:
- /var/tmp/patching_{{ansible_date_time.date}}
如果我以静态方式设置路径,而不是从var_file.yml读取路径,那么下面的代码可以完美地工作:
- name: Check if instance has been Patched
stat:
path: /var/tmp/patching_2020-06-10
register: patchDir
- fail: msg="This system has already been patched today!"
when: patchDir.stat.exists
是否有办法保留var_file.yml中定义的变量的使用,并使第一个代码示例工作
感谢因此,本质上我试图编辑一个用于修补主机的现有剧本,并通过查找var_文件{{work_dir}}中定义的变量的存在性来检查主机当天是否已修补,如果确实存在,则跳过此主机上的修补 最后得出以下结论,这似乎是可行的:
---
- include_vars:
file: var_file.yml
- name: Check if for existance of patch dir
stat:
path: '{{ item }}'
register: patchDir
with_items: "{{ work_dir }}"
- name: Skip host if it has already patched today
include_tasks: patch.yml
loop: "{{ patchDir.results }}"
when: not patch.stat.exists
loop_control:
label: "patchDir"
loop_var: patch
如果上面的任务发现了当天尚未修补的主机,则将调用task patch.yml对其进行修补,否则将跳过它
这可能不是最聪明的方法,但似乎有效:不清楚什么不适合你。在包含的\u vars文件中使用var应该是可行的。你的when看起来很奇怪,我觉得应该是when:item.stats.exists你在这里的输入很有帮助-when:item.stats.exists是我想要的,尽管我没有很好地解释它!:非常感谢。