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

如何在ansible上有条件地执行一组任务?,ansible,Ansible,我想有条件地执行一组任务。是否有任何可用的语法可以让我执行一组任务,其中每个组对条件进行一次评估(如编程语言中的if语句) 请看下面的代码片段。我知道差别很小,但第一个代码更好地表达了我的意图,而不会用其他变量(user\u home\u result2)污染名称空间 我想做什么的伪代码: 演练: 您可以将任务放入新的yml文件中,并使用条件include: # subtasks.yml --- - name: Setting up user {{ user }} user: >

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

请看下面的代码片段。我知道差别很小,但第一个代码更好地表达了我的意图,而不会用其他变量(
user\u home\u result2
)污染名称空间

我想做什么的伪代码: 演练:
您可以将任务放入新的yml文件中,并使用条件include:

# 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 }}
在剧本中:

- 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 != ''  

从版本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
上述操作相当于在:bool_为真时将
附加到块内的两个任务


ansible 2.0中

的更多信息将是一种新的语法(块),它将执行您想要的操作
- 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 != ''  
- 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