Ansible使用不同的变量文件多次运行同一角色

Ansible使用不同的变量文件多次运行同一角色,ansible,Ansible,Supose我有一个服务器,用于服务一个静态网站(例如,catpics.com)。使用Ansible,我有一个base角色(用于设置防火墙、时间、用户帐户等)、一个letsencrypt角色(获取网站的TLS证书)和一个webserver角色(为网站创建web根目录) 现在我想在同一台服务器上托管另一个网站(例如,snakepics.com)。有了这个新的添加,base角色仍然需要运行一次,但是letsencrypt和webserver角色现在需要运行两次。此时,我有两个变量文件: vars/c

Supose我有一个服务器,用于服务一个静态网站(例如,
catpics.com
)。使用Ansible,我有一个
base
角色(用于设置防火墙、时间、用户帐户等)、一个
letsencrypt
角色(获取网站的TLS证书)和一个
webserver
角色(为网站创建web根目录)

现在我想在同一台服务器上托管另一个网站(例如,
snakepics.com
)。有了这个新的添加,
base
角色仍然需要运行一次,但是
letsencrypt
webserver
角色现在需要运行两次。此时,我有两个变量文件:

vars/catpics.com

---
domain_name: catpics.com
# and other variables...
...
---
domain_name: snakepics.com
# and other variables...
...
vars/snakepics.com

---
domain_name: catpics.com
# and other variables...
...
---
domain_name: snakepics.com
# and other variables...
...

现在我有了这两个变量文件,如何两次运行
letsencrypt
webserver
角色?(一次使用
vars/catpics.com
变量文件,一次使用
vars/snakepics.com
变量文件)

您可以使用不同的使其针对每种类型运行并实现您的目标。主机有两种类型的变量

  • 特定于组内单个主机的主机变量
  • 用于整个主机组的组变量
目录/主机文件

[catpics]
catpics.com http_port=301
morecatpics.com http_port=80

[snakepics]
snakepics.com
moresnakepics.com
注意
http\u port=
是一个主机变量,与主机名声明内联,用空格分隔

然后在同一个文件中,使用
host:vars
命名格式,为整个组定义组变量。因此,所有
snakepics
主机都将有这些变量,所有
catpics
主机都将有它们的变量,但保留它们各自的主机变量,即
http\u 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
,它将获得对应于每种类型主机(snake和cat)的变量

在角色中运行任务时,调用变量与任何其他ansible变量fetch
{{variable_name}}
类似:

-name: Show how variables like this work
domain_name: "{{ FQDN }}"
some_other_task_variable: "{{VAR2}}"
供参考:


现在,这将以最快的方式解决您的问题。当前使用
group\u vars/*role\u name\u file*
目录中的单独文件自动获取每个主机组的所有变量

谢谢!关于如何安排主机文件以使
base
角色只运行一次的任何线索?该基本角色将在何处准确运行?它是否指向其他主机各自指向的服务器?您可以使它在
-主机上运行:所有
使它在每个主机上运行,或者运行一次,指向另一个服务器/vm,每个主机已配置为指向
catpics.com
snakepics.com
位于同一物理服务器上
base
需要在该物理服务器上运行一次。是的,因此请为物理服务器提供自己的主机组
[physical server]
,并为此运行物理服务器的
base
角色,就像我们在主机组
[catpics]
上运行
letsencrypt
时所做的那样[snakepics]