避免在Ansible任务列表中的多个命令中重复

时间:2016-02-17 19:26:24

标签: ansible ansible-playbook

我有一个重复很多的任务文件。这些shell命令中的每一个都倾向于需要在虚拟环境中,特定工作目录内以及特定用户下工作。例如,我的任务看起来像这样:

- name: Build thing
  shell: source ~/project/venv/bin/activate; ./thing build chdir=~/project
  sudo_user: "{{ thing_user }}"

- name: Register thing
  shell: source ~/project/venv/bin/activate; ./thing register chdir=~/project
  sudo_user: "{{ thing_user }}"

有什么方法可以避免在任务级别重复自己?理想情况下,我可以声明一次工作目录,虚拟环境和sudo_users。我很难在角色或剧本层面上做这件事。

1 个答案:

答案 0 :(得分:2)

由于它们之间的唯一区别是命令,您可以使用Loops,因此它将变为

- name: Build thing
  shell: source ~/project/venv/bin/activate; ./thing {{ item }} chdir=~/project
  sudo_user: "{{ thing_user }}"
  with_items:
    - build
    - register