Ansible:如何创建一个类似的函数

use*_*834 9 ansible ansible-playbook

我有一个像这样的重复模式::

- name: =code_01= clone repository
  git: repo=gitolite@git.site.net:/code_01
       dest=/tmp/code_01
       update=yes
       force=yes
       accept_hostkey=yes
       version=master
  sudo: true
  sudo_user: "{{ user }}"

- name: =code_01= egg build
  shell: . {{ home }}/{{ venv_name }}/bin/activate && make egg
  args:
    chdir: "/tmp/code_01"
  sudo_user: "{{ user }}"
  sudo: true

- name: =code_01= egg get
  command: find /tmp/code_01/dist -type f -iname '*.egg'
  register: code_01eggs

- name: =code_01= egg install in {{ venv_name }} venv
  shell: . {{ home }}/{{ venv_name }}/bin/activate && easy_install {{ item }}
  args:
    chdir: "{{ home }}"
  with_items: "{{ code_01eggs.stdout_lines }}"
  sudo_user: "{{ user }}"
  sudo: true

- name: =code_01= cleanup
  file: path=/tmp/code_01 state=absent
  sudo: true
Run Code Online (Sandbox Code Playgroud)

我有这个: code_02, code_03, code_04,...,code_0n

我怎样才能"分解"这个?

Wto*_*wer 12

您可以将逻辑移动到第二YML文件,并使用include具有with_items:

- include: factored.yml
  with_items:
    - code_01
    - code_02
    - code_03
Run Code Online (Sandbox Code Playgroud)

而在第二个文件替换code_01{{ item }}.

有用的链接:Ansible docs:循环和包含

注意:如果您有嵌套循环,则可以set_fact在Ansible 2.0之后使用设置outter 循环项.有关更多信息,请参阅上述文档.