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

问题描述 投票:2回答:1

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

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

vars/catpics.com

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

vars/snakepics.com

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

现在我有这两个变量文件,如何同时运行letsencryptwebserver角色两次? (一旦使用vars/catpics.com变量文件,并且一次使用vars/snakepics.com变量文件)

ansible
1个回答
1
投票

您可以使用不同的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}}"

供参考:Host and Group variables

现在,这将以最快的方式解决您的问题。当前的best practice for using group and host variablesgroup_vars/*role_name_file*目录中使用一个单独的文件来自动获取每个主机组的所有变量

© www.soinside.com 2019 - 2024. All rights reserved.