在单个命名任务中执行多个步骤

时间:2019-10-29 17:37:55

标签: ansible

我是Ansible的新手,现在正在构建我的第一本剧本。在我的其中一部剧本中,我想确保在安装之前已具备应用程序的所有先决条件,其中一个先决条件包括一些需要的自定义脚本要出现在应用程序用户的主目录中,我想知道是否可以像这样堆叠多个任务(希望是正确的选择):

 - name: Check for file and move to /home/user with correct owner and permission
   stat: path=/path/to/{{ item }}
   register: {{ item }}_stat
   command: mv /path/to/{{ item }}  /home/user/{{ user }}
   file: path=/home/user/{{ item }} state=file mode=0755 owner=user group=group
   when {{ item }}.stat.exists
   with_items:
      - file1
      - file2
      - file3 

我可以将其分解为多个任务/步骤,并且可以执行,但是当我将其移到适当的角色时,我希望使剧本保持精简。 预先感谢

1 个答案:

答案 0 :(得分:0)

每个任务只能服务一个模块。

可以将“子功能”任务放到一个单独的文件中并循环 include_tasks 。例如

- name: Check for file and move to /home/user with correct owner and permission
  include_tasks: loop-tasks.yml
  loop:
    - file1
    - file2
    - file3 

$ cat loop-tasks.yml
- stat:
    path: "/path/to/{{ item }}"
    register: result
- block:
    - command: "mv /path/to/{{ item }} /home/user/{{ user }}"
    - file:
        path: "/home/user/{{ item }}"
        state: "file"
        mode: "0755"
        owner: "user"
        group: "group"
  when result.stat.exists

(未经测试)

相关问题