如何循环ansible中的一系列任务
How to loop over a series of tasks in ansible
我正在尝试使用以下剧本卸载文件系统。
vars:
unmountlist:
- "/DATA1"
- "/DATA2"
tasks:
- name: unmount
mount:
path: "{{ item }}"
state: unmounted
with_items:
- "{{ unmountlist }}"
register: output
ignore_errors: true
- debug:
msg: "{{ output }}"
- name: YE unmount persistant
mount:
path: "{{ item }}"
state: absent
with_items:
- "{{ unmountlist }}"
- name: Lazy unmount
command: umount -l "{{ item }}"
when: output.changed == false
with_items: "{{ unmountlist }}"
调试部分如下所示:
ok: [host001] => {
"msg": "error is {'msg': u'All items completed', 'failed': True, 'changed': False, 'results': [{'_ansible_parsed': True, 'changed': False, '_ansible_no_log': False, 'item': u'/DATA1', '_ansible_item_result': True, u'failed': True, u'invocation': {u'module_args': {u'src': None, u'dump': None, u'boot': u'yes', u'fstab': None, u'passno': None, u'fstype': None, u'state': u'unmounted', u'path': u'/DATA1', u'opts': None}}, u'msg': u'Error unmounting /DATA1: umount.nfs: /DATA1: device is busy\n'}, {'_ansible_parsed': True, 'changed': False, '_ansible_no_log': False, 'item': u'/DATA2', '_ansible_item_result': True, u'failed': True, u'invocation': {u'module_args': {u'src': None, u'dump': None, u'boot': u'yes', u'fstab': None, u'passno': None, u'fstype': None, u'state': u'unmounted', u'path': u'/DATA2', u'opts': None}}, u'msg': u'Error unmounting /DATA2: umount.nfs: /DATA2: device is busy\n'}]}"
我正在努力实现以下目标。
- 延迟卸载唯一 returns 错误 "device is busy" 的文件系统。我看不到如何从上面的调试中读取包含字符串 "device is busy" 的变量以及如何仅卸载 returns 此错误的文件系统。
你可以做的是将任务放在任务文件中,然后使用 unmountlist
.
循环任务文件
这就是您的任务文件 (umounts_tasks.yml) 的样子 - tasks file
然后在您的游戏中,您可以使用 include_tasks
来包含上述任务文件并使用卸载列表对其进行循环。所以你的玩法会是这样的 - play.yml
让我知道这是否有效。 :)
我正在尝试使用以下剧本卸载文件系统。
vars:
unmountlist:
- "/DATA1"
- "/DATA2"
tasks:
- name: unmount
mount:
path: "{{ item }}"
state: unmounted
with_items:
- "{{ unmountlist }}"
register: output
ignore_errors: true
- debug:
msg: "{{ output }}"
- name: YE unmount persistant
mount:
path: "{{ item }}"
state: absent
with_items:
- "{{ unmountlist }}"
- name: Lazy unmount
command: umount -l "{{ item }}"
when: output.changed == false
with_items: "{{ unmountlist }}"
调试部分如下所示:
ok: [host001] => {
"msg": "error is {'msg': u'All items completed', 'failed': True, 'changed': False, 'results': [{'_ansible_parsed': True, 'changed': False, '_ansible_no_log': False, 'item': u'/DATA1', '_ansible_item_result': True, u'failed': True, u'invocation': {u'module_args': {u'src': None, u'dump': None, u'boot': u'yes', u'fstab': None, u'passno': None, u'fstype': None, u'state': u'unmounted', u'path': u'/DATA1', u'opts': None}}, u'msg': u'Error unmounting /DATA1: umount.nfs: /DATA1: device is busy\n'}, {'_ansible_parsed': True, 'changed': False, '_ansible_no_log': False, 'item': u'/DATA2', '_ansible_item_result': True, u'failed': True, u'invocation': {u'module_args': {u'src': None, u'dump': None, u'boot': u'yes', u'fstab': None, u'passno': None, u'fstype': None, u'state': u'unmounted', u'path': u'/DATA2', u'opts': None}}, u'msg': u'Error unmounting /DATA2: umount.nfs: /DATA2: device is busy\n'}]}"
我正在努力实现以下目标。
- 延迟卸载唯一 returns 错误 "device is busy" 的文件系统。我看不到如何从上面的调试中读取包含字符串 "device is busy" 的变量以及如何仅卸载 returns 此错误的文件系统。
你可以做的是将任务放在任务文件中,然后使用 unmountlist
.
这就是您的任务文件 (umounts_tasks.yml) 的样子 - tasks file
然后在您的游戏中,您可以使用 include_tasks
来包含上述任务文件并使用卸载列表对其进行循环。所以你的玩法会是这样的 - play.yml
让我知道这是否有效。 :)