如何在ansible上有条件地执行任务组?

Ada*_*ski 6 ansible

我想有条件地执行一组任务.是否有任何语法可以让我执行一组任务,其中每个整个组都评估一次条件(比如if编程语言中的语句)?

看一下下面的代码片段.我知道差异很小,但第一个代码更好地表达了我的意图,而没有用额外的变量(user_home_result2)污染命名空间.

我想做的伪代码:

- name: Capturing user's home directory
  shell: "getent passwd {{ user }} | awk -F: '{ print $6 }'"
  register: user_home_result

- set_fact: user_home={{ user_home_result.stdout }}

- when:  user_home != ''  

  - name: Setting up user {{ user }}
    user: >
      generate_ssh_key=yes
      name="{{ user }}"

  - name: Capturing user's home directory
    shell: "getent passwd {{ user }} | awk -F: '{ print $6 }'"
    register: user_home_result

  - set_fact: user_home={{ user_home_result.stdout }}
Run Code Online (Sandbox Code Playgroud)

随便走走:

- name: Capturing user's home directory
  shell: "getent passwd {{ user }} | awk -F: '{ print $6 }'"
  register: user_home_result

- set_fact: user_home={{ user_home_result.stdout }}

- name: Setting up user {{ user }}
  user: >
    generate_ssh_key=yes
    name="{{ user }}"
  when: user_home != ''

- name: Capturing user's home directory
  shell: "getent passwd {{ user }} | awk -F: '{ print $6 }'"
  register: user_home_result2
  when: user_home != ''

- set_fact: user_home={{ user_home_result2.stdout }}
  when: user_home != ''
Run Code Online (Sandbox Code Playgroud)

Seb*_*ler 9

您可以将任务放在新的yml文件中并使用条件包括:

# subtasks.yml
---
- name: Setting up user {{ user }}
  user: >
    generate_ssh_key=yes
    name="{{ user }}"

- name: Capturing user's home directory
  shell: "getent passwd {{ user }} | awk -F: '{ print $6 }'"
  register: user_home_result

- set_fact: user_home={{ user_home_result.stdout }}
Run Code Online (Sandbox Code Playgroud)

在剧本中:

- name: Capturing user's home directory
  shell: "getent passwd {{ user }} | awk -F: '{ print $6 }'"
  register: user_home_result

- set_fact: user_home={{ user_home_result.stdout }}

- include: subtask.yml
  when:  user_home != ''  
Run Code Online (Sandbox Code Playgroud)

  • 在ansible 2.0中将是一个新的语法(块),然后将做你想要的http://docs.ansible.com/ansible/playbooks_blocks.html (6认同)

sne*_*tch 9

从 2.1 版开始,ansible 具有用于逻辑任务分组的块。块允许您只为几个任务指定一次常见的东西,包括when条件。前任:

- block:

    - name: put a file somewhere
      copy: src=asdf dest=asdf

    - name: put another file somewhere
      template: src=asdf.j2 dest=asdf

  when: bool_is_true
Run Code Online (Sandbox Code Playgroud)

以上相当于将 a 附加when: bool_is_true到块内的两个任务。

更多信息请访问https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html