Ansible中如何将hostvar分配给playbook的主机

80次阅读
没有评论

问题描述

在使用Ansible时,有一个需求是将hostvar分配给playbook的主机。他在执行playbook时遇到了错误,并且想知道是否有更好的方法来实现相同的目标。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

要评估变量,必须使用双花括号引用变量,例如:

- hosts: "{{ hostvars.localhost.aws_instance_host_group }}"

使用点表示法可以简化代码。

方案2

以下是一个最小可复现示例:

- hosts: localhost
  gather_facts: false
  tasks:
    - set_fact:
        aws_instance_host_group: aws_instance
    - add_host:
        name: 10.1.0.61
        groups: "{{ aws_instance_host_group }}"
- hosts: "{{ hostvars.localhost.aws_instance_host_group }}"
  gather_facts: false
  tasks:
    - debug:
        var: groups
    - debug:
        var: inventory_hostname

在上面的示例中,我们首先使用set_fact任务设置了一个名为aws_instance_host_group的变量,并将其值设置为aws_instance。然后,使用add_host任务将一个名为10.1.0.61的主机添加到aws_instance_host_group组中。
接下来,我们使用hosts指定了一个动态的主机组,即{{ hostvars.localhost.aws_instance_host_group }}。这将确保只有在aws_instance_host_group组中的主机才会执行后续的任务。
请注意,这只是一个示例,你需要根据自己的实际情况进行相应的调整。

方案3

如果你的需求更加复杂,你可以考虑使用Ansible的动态主机功能。这将允许你根据特定的条件动态地生成主机清单。
你可以编写一个脚本或插件来生成动态清单,并根据需要将主机分配给不同的组。然后,在playbook中使用这个动态清单来指定主机。
这种方法可以帮助你更灵活地管理主机和组,并根据需要动态地分配变量。
请注意,这种方法可能需要更多的配置和编码工作,但它可以提供更大的灵活性和可扩展性。
以上是几种常见的方法,你可以根据自己的需求选择适合你的方法。希望能帮助到你!

正文完