在具有不同值的父角色中调用Ansible任务

时间:2019-04-13 13:14:12

标签: ansible ansible-role

我创建了两个非常简单的Ansible角色,分别为basewebweb依赖于base,并且此依赖关系在web/meta/main.yml中定义。

basebase/tasks/main.yml中定义了以下任务:

- name: install required packages
  apt:
    name: "{{ install_packages }}"
    update_cache: "{{ apt_update_cache }}"
    cache_valid_time: "{{ apt_cache_valid_time }}"

base中的变量在base/defaults/main.yml中定义:

apt_update_cache: yes
apt_cache_valid_time: 3600

install_packages:
  - ufw
  - sshguard

web中的变量在web/defaults/main.yml中定义:

install_packages:
 - nginx

我想做的是:

  1. 使用install required packages中的base变量以及install_packages中的baseapt_update_cache,从apt_cache_valid_time调用base
  2. 使用install required packages中的web变量以及install_packages中的webapt_update_cache,从apt_cache_valid_time调用base(因为我没有在web中覆盖这两个。

这有可能吗,如果可以的话,我将如何去做呢?或者,是否有一种“更好”的方法来达到相同的结果,而又不会在每个依赖角色中重复执行该任务(我可能会创建几个其他依赖于base的任务,并且它们都将扮演自己的角色-也有具体任务)?

1 个答案:

答案 0 :(得分:2)

这是一个选择。

为清楚起见,将len(try_block.handlers)中的install_packages重命名为roles/base/defaults/main.yml

base_packages

--- base_packages: - ufw - sshguard 中重写软件包安装任务,使其看起来像这样:

roles/base/main.yml

--- - name: install required packages apt: name: "{{ base_packages + extra_packages|default([]) }}" update_cache: "{{ apt_update_cache }}" cache_valid_time: "{{ apt_cache_valid_time }}" 中,定义roles/web/defaults/main.yml

web_packages

然后在--- web_packages: - nginx 中,这样声明您的依赖关系:

roles/web/meta/main.yml

如果我将--- dependencies: - role: base vars: extra_packages: "{{ web_packages }}" 任务替换为apt任务:

debug

并使用此剧本:

- name: install required packages
  debug:
    msg:
      apt:
        name: "{{ base_packages + extra_packages|default([]) }}"
        update_cache: "{{ apt_update_cache }}"
        cache_valid_time: "{{ apt_cache_valid_time }}"

我得到以下输出:

---
- hosts: localhost
  gather_facts: false
  roles:
    - web

如您所见,这将同时安装以PLAY [localhost] ****************************************************************************** TASK [base : install required packages] ******************************************************* ok: [localhost] => { "msg": { "apt": { "cache_valid_time": 3600, "name": [ "ufw", "sshguard", "nginx" ], "update_cache": true } } } PLAY RECAP ************************************************************************************ localhost : ok=1 changed=0 unreachable=0 failed=0 角色声明的软件包以及来自base角色的软件包。