我有一个用于服务一个静态网站的服务器(例如catpics.com
)。使用Ansible,我有base
角色(用于设置防火墙,时间,用户帐户等),letsencrypt
角色(获取网站的TLS证书)和{{1} } role(为网站创建Web根目录)。
现在我想在同一台服务器上托管另一个网站(例如webserver
)。使用此新增功能,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
变量文件)
答案 0 :(得分:1)
您可以使用不同的 Host Groups 来为每种类型投放并实现目标。主机有两种类型的变量。
inventory / hosts文件。
[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*
目录中的单独文件自动获取每个主机组的所有变量