在具有不同值的父角色中调用Ansible任务
我创建了两个非常简单的Ansible角色,分别是在具有不同值的父角色中调用Ansible任务,ansible,ansible-role,Ansible,Ansible Role,我创建了两个非常简单的Ansible角色,分别是base和webweb依赖于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: "{{ a
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 }}"
apt_update_cache: yes
apt_cache_valid_time: 3600
install_packages:
- ufw
- sshguard
install_packages:
- nginx
base
中的变量在base/defaults/main.yml
中定义:
- name: install required packages
apt:
name: "{{ install_packages }}"
update_cache: "{{ apt_update_cache }}"
cache_valid_time: "{{ apt_cache_valid_time }}"
apt_update_cache: yes
apt_cache_valid_time: 3600
install_packages:
- ufw
- sshguard
install_packages:
- nginx
web
中的变量在web/defaults/main.yml
中定义:
- name: install required packages
apt:
name: "{{ install_packages }}"
update_cache: "{{ apt_update_cache }}"
cache_valid_time: "{{ apt_cache_valid_time }}"
apt_update_cache: yes
apt_cache_valid_time: 3600
install_packages:
- ufw
- sshguard
install_packages:
- nginx
我想做的是:
base
中的install\u packages
变量和apt\u update\u cache
和apt\u cache\u valid\u time
从base
调用install required packages
web
调用install required packages
,使用web
中的install\u packages
变量和apt\u update\u cache
和apt\u cache\u valid\u time
从base
调用install\u packages
(因为我在web
中没有重写这两个变量)base
,它们也都有自己的特定于角色的任务)?这里有一个选项
为清楚起见,请将角色/base/defaults/main.yml中的安装程序包
重命名为基本程序包
:
---
base_packages:
- ufw
- sshguard
---
web_packages:
- nginx
在角色/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 }}"
---
dependencies:
- role: base
vars:
extra_packages: "{{ web_packages }}"
在roles/web/defaults/main.yml
中,定义web\u包
:
---
base_packages:
- ufw
- sshguard
---
web_packages:
- nginx
在roles/web/meta/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 }}"
---
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
如您所见,这将安装在基本角色中声明的包以及web角色中声明的包。这里有一个选项
为清楚起见,请将角色/base/defaults/main.yml中的安装程序包
重命名为基本程序包
:
---
base_packages:
- ufw
- sshguard
---
web_packages:
- nginx
在角色/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 }}"
---
dependencies:
- role: base
vars:
extra_packages: "{{ web_packages }}"
在roles/web/defaults/main.yml
中,定义web\u包
:
---
base_packages:
- ufw
- sshguard
---
web_packages:
- nginx
在roles/web/meta/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 }}"
---
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
如您所见,这将安装在基本角色中声明的包以及web角色中声明的包。谢谢您的回答。但是,如果我有多个角色依赖于base
,这会起作用吗?如果我最终创建的角色依赖于web
,会发生什么?我试图避免让家长角色意识到孩子角色。谢谢你的回答。但是,如果我有多个角色依赖于base
,这会起作用吗?如果我最终创建的角色依赖于web
,会发生什么?我试图避免让父角色意识到子角色。