我想有条件地执行一组任务.是否有任何语法可以让我执行一组任务,其中每个整个组都评估一次条件(比如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)
您可以将任务放在新的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)
从 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
| 归档时间: |
|
| 查看次数: |
6635 次 |
| 最近记录: |