如何有条件地在ansible上执行任务组? [英] How to conditionally execute group of tasks on ansible?

查看:99
本文介绍了如何有条件地在ansible上执行任务组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想有条件地执行一组任务.

I want to conditionally execute a set of tasks. Is there any syntax available that would let me execute a group of tasks, where the condition is evaluated once per whole group (like in a if statement in programming languages)?

看看下面的代码片段.我知道差异很小,但是第一个代码更好地表达了我的意图,而不会用其他变量(user_home_result2)污染名称空间.

Take a look at the code snippets below. I know the difference is small, but the first code better expresses my intention without polluting the namespace with additional variables (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 }}

解决方法:

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

推荐答案

您可以将任务放入新的yml文件中,并使用条件包含:

You can put the tasks in a new yml file and use a conditional 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 != ''  

这篇关于如何有条件地在ansible上执行任务组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆