使用模式为主机定义ansible-host变量

时间:2019-03-25 08:37:54

标签: ansible ansible-2.x

给出以下内容:

all:
  ...
  children:
     node[01-05]:

如何对ansible-host中的每一个应用node(毫无疑问)不同的值?

如果ansible-host值遵循类似的模式,该怎么办?这会有效吗?

  node[01-05]:
    ansible-host: servers.node[01-05].example.com

如果ansible-host的值完全不同怎么办?

This question似乎可以代替变量文件,但是我不确定这是否可以应用于我的主机文件并解决了我的问题。

1 个答案:

答案 0 :(得分:0)

  • 您上面的示例没有声明主机,而是一个组。
  • 如果要声明主机范围,则语法为prefix[start:end]suffix。就您而言:
all:
  children:
    my_nodes:
      hosts:
        "node[01:05]":

需要使用范围内的引号使yaml知道标识符的结尾

*编辑* 并为您节省了为每个节点设置ansible主机的麻烦,您可以直接使用其适当的名称声明它们:

all:
  children:
    my_nodes:
      hosts:
        "servers.node[01:05].example.com":

如果您仍然确实需要一个不同于ansible_host的ventory_host名称,则可以基于整个组的库存来设置var

all:
  children:
    my_nodes:
      vars:
        ansible_host: "servers.{{ inventory_hostname }}.example.com"
      hosts
        "node[01:05]":
  • 不可能列出某个范围的各个主机变量。如果要将这些变量保留在清单中,则必须重新列出该范围内的每个主机(例如,直接在“ all”组中),并将变量放置在那里。 (因此失去了首先使用范围的好处)。如果您有很多主机/组,直接在清单中列出var会很快成为一场噩梦(文档不建议这样做)。您应该依靠host_vars/group_vars目录,并为每个需要的服务器/组创建一个hostname.yml/groupname.yml文件。查看该文档以获取有关此主题的更多信息:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#splitting-out-host-and-group-specific-data