我创建了两个非常简单的Ansible角色,分别为base
和web
。 web
依赖于base
,并且此依赖关系在web/meta/main.yml
中定义。
base
在base/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
我想做的是:
install required packages
中的base
变量以及install_packages
中的base
和apt_update_cache
,从apt_cache_valid_time
调用base
。 install required packages
中的web
变量以及install_packages
中的web
和apt_update_cache
,从apt_cache_valid_time
调用base
(因为我没有在web
中覆盖这两个。这有可能吗,如果可以的话,我将如何去做呢?或者,是否有一种“更好”的方法来达到相同的结果,而又不会在每个依赖角色中重复执行该任务(我可能会创建几个其他依赖于base
的任务,并且它们都将扮演自己的角色-也有具体任务)?
答案 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
角色的软件包。