0

我正在寻找向现有剧本添加一个步骤,该步骤将在找到 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 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并使第一个代码示例工作?

谢谢

4

1 回答 1

1

所以基本上我试图编辑一个现有的用于修补主机的剧本,并通过查找定义的变量的存在以及它是否存在来检查主机是否已经被修补(那天)var_file "{{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

patch.yml如果上面找到一个尚未修补的主机(当天)并修补它,上面将调用任务,否则跳过它。

可能不是最聪明的方法 - 但它似乎有效:)

于 2020-06-11T14:09:42.433 回答