如何有条件地在ansible上执行一组任务?
How to conditionally execute group of tasks on ansible?
我想有条件地执行一组任务。是否有任何可用的语法可以让我执行一组任务,其中每组对条件进行一次评估(如编程语言中的 if
语句)?
看看下面的代码片段。我知道差别很小,但第一个代码更好地表达了我的意图,而没有用额外的变量污染命名空间 (user_home_result2
)。
我想做的伪代码:
- name: Capturing user's home directory
shell: "getent passwd {{ user }} | awk -F: '{ print }'"
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 }'"
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 }'"
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 }'"
register: user_home_result2
when: user_home != ''
- set_fact: user_home={{ user_home_result2.stdout }}
when: user_home != ''
您可以将任务放在新的 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 }'"
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 }'"
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
以上等同于将when: bool_is_true
附加到块内的两个任务。
更多信息请见https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html
我想有条件地执行一组任务。是否有任何可用的语法可以让我执行一组任务,其中每组对条件进行一次评估(如编程语言中的 if
语句)?
看看下面的代码片段。我知道差别很小,但第一个代码更好地表达了我的意图,而没有用额外的变量污染命名空间 (user_home_result2
)。
我想做的伪代码:
- name: Capturing user's home directory
shell: "getent passwd {{ user }} | awk -F: '{ print }'"
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 }'"
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 }'"
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 }'"
register: user_home_result2
when: user_home != ''
- set_fact: user_home={{ user_home_result2.stdout }}
when: user_home != ''
您可以将任务放在新的 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 }'"
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 }'"
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
以上等同于将when: bool_is_true
附加到块内的两个任务。
更多信息请见https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html