Ansible使用不同的变量文件多次运行相同的角色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible使用不同的变量文件多次运行相同的角色相关的知识,希望对你有一定的参考价值。
我有一个服务器用于服务一个静态网站(例如catpics.com
)。使用Ansible,我有一个base
角色(用于设置防火墙,时间,用户帐户等),letsencrypt
角色(获取网站的TLS证书)和webserver
角色(为网站创建Web根目录)。
现在我想在同一台服务器上托管另一个网站(例如snakepics.com
)。有了这个新的补充,base
角色仍然需要运行一次,但letsencrypt
和webserver
角色现在需要运行两次。此时,我有两个变量文件:
vars/catpics.com
:
---
domain_name: catpics.com
# and other variables...
...
vars/snakepics.com
:
---
domain_name: snakepics.com
# and other variables...
...
现在我有这两个变量文件,如何同时运行letsencrypt
和webserver
角色两次? (一旦使用vars/catpics.com
变量文件,并且一次使用vars/snakepics.com
变量文件)
您可以使用不同的Host Groups使其针对每种类型运行并实现您的目标。主机有两种类型的变量。
- 主机变量,特定于组内的单个主机
- 组变量,用于整个主机组
库存/主机文件。
[catpics]
catpics.com http_port=301
morecatpics.com http_port=80
[snakepics]
snakepics.com
moresnakepics.com
请注意,http_port=
是一个与主机名声明内联的主机变量,以空格分隔
然后在同一个文件中,使用host:vars
命名格式,定义适用于整个组的组变量。因此所有snakepics
主机都将拥有这些变量,并且所有catpics
主机都将拥有它们,但保留其各自的主机变量即。 http_port=
[snakepics:vars]
FQDN= https://www.snake.com
VAR2= something2
[catpics:vars]
FQDN= https://www.cat.com
VAR2= something2
太棒了,现在我们已经设置了主机,我们可以定义为每个主机运行的角色。将运行相同的角色
- hosts: catpics
roles:
- letsencrypt
- webserver
- hosts: snakepics
roles:
- letsencrypt
- webserver
或者在这种情况下,主机可以简单地看起来像- hosts: all
,它将获得与每种类型的主机(蛇和猫)相对应的变量。
在角色中运行任务时,调用变量就像任何其他ansible变量fetch {{ variable_name }}
一样:
-name: Show how variables like this work
domain_name: "{{ FQDN }}"
some_other_task_variable: "{{VAR2}}"
现在,这将以最快的方式解决您的问题。当前的best practice for using group and host variables在group_vars/*role_name_file*
目录中使用一个单独的文件来自动获取每个主机组的所有变量
以上是关于Ansible使用不同的变量文件多次运行相同的角色的主要内容,如果未能解决你的问题,请参考以下文章