同名主机目标之间的 Ansible 切换

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

在我们的剧本中,我们有一个名为:

backupserver
的主机 假设我们有一个很大的库存清单 +- 100。 现在我们有了一个新的备份服务器,所以我们最终有 2 个不同的主机:

  • backupserver-1
  • backupserver-2

对于每个库存,我们要指定使用哪一个。 例如

  • inventory-1 应连接到 backupserver-1
  • inventory-2 应连接到 backupserver-2
  • inventory-3 应连接到 backupserver-2
  • inventory-4 应连接到 backupserver-1

但是他们使用相同的剧本,其中我们指向备份服务器。

例如

delegate_to: backupserver

我们的目标是仅在清单文件中设置正确的备份服务器,我们不想更改剧本。 是否可以制作类似别名的东西来从库存中指向? 我的想法(以下是一个组,所以不是单个委托选项,并且不起作用)

库存 1

hosts:
 backupserver:
    backupserver1 

库存2

hosts:
 backupserver:
    backupserver2

假设我们要更改 backupserver2 的 IP 地址,我们不想更新所有库存文件,但希望有 1 个共享的 backupserver2 定义,因此我们可以从 1 个位置更新它,例如使用

host_vars
。 我脑海中所想象的: enter image description here

或者还有另一种有意义的方法,我们可以在清单文件中拥有不同的目标,但在剧本中拥有相同的名称。

ansible
1个回答
0
投票

假设我们想要更改 backupserver2 的 IP 地址,但我们不想 更新所有清单文件,但想要有 1 个定义 backupserver2 是共享的,因此我们可以从 1 个位置更新它,例如 与主机变量。

如果

backupserver-1
backupserver-2
names,而不是 ip 地址,则您建议的语法很接近,但不正确;你会想要在清单 1 中添加这样的东西:

all:
  hosts:
    backupserver:
      ansible_host: backupserver-1

在库存2中:

all:
  hosts:
    backupserver:
      ansible_host: backupserver-2

等等

如果您使用 IP 地址(为什么要这样做?),您可以利用“库存文件”实际上可以是多个文件这一事实。将备份服务器的条目放在单独的文件中。也就是说,使用以下命令创建

backupserver1.yaml

all:
  hosts:
    backupserver:
      ansible_host: backupserver-1

现在你可以像这样运行ansible:

ansible-playbook playbook.yaml -i inventory1.yaml -i backupserver1.yaml

或者如果您正在使用库存 2:

ansible-playbook playbook.yaml -i inventory2.yaml -i backupserver2.yaml

无论哪种情况,如果

backupserver1
的地址发生变化,您只需更新一个位置的值,其他服务器也类似。


或者,如果您与备份服务器的唯一交互是通过委托,那么可能有一个更简单的解决方案。只需将所有备份服务器放在一个清单文件中即可:

backupservers:
  hosts:
    backupserver1:
    backupserver2:

设置库存变量以识别该库存的适当备份服务器,例如在

inventory1.yaml

servers:
  hosts:
    node0:
    node1:
  vars:
    backupserver: backupserver1

在您的剧本中,使用

delegate_to
选项中的变量:

- hosts: servers
  tasks:
  - name: mumble backup server mumble
    delegate_to: "{{ backupserver }}"
    command: date

然后始终包含您的“目标”库存和备份服务器库存:

ansible-playbook playbook.yaml -i inventory1.yaml -i backupservers.yaml
© www.soinside.com 2019 - 2024. All rights reserved.