如何在ansible中循环执行一系列任务

时间:2018-05-04 13:38:25

标签: ansible ansible-2.x

我正在尝试使用下面的playbook卸载文件系统。

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

我正在努力实现以下目标。

  1. lazy unmount只返回错误“device is busy”的文件系统。我无法看到如何从上面的调试中读取包含字符串“device is busy”的变量以及如何仅卸载返回此错误的文件系统。

1 个答案:

答案 0 :(得分:0)

您可以做的是将任务放在任务文件中,并使用unmountlist循环遍历任务文件。

这就是你的任务文件(umounts_tasks.yml)的样子 - tasks file

然后在你的游戏中你可以使用include_tasks包含上面的任务文件并使用unmountlist循环它。所以你的游戏看起来像这样 - play.yml

如果有效,请告诉我。 :)