ansible.builtin.ini inventory – 使用 Ansible INI 文件作为清单来源。

注意

此清单插件是 ansible-core 的一部分,并包含在所有 Ansible 安装中。在大多数情况下,您可以使用简短的插件名称 ini。但是,我们建议您使用 完全限定集合名称 (FQCN) ansible.builtin.ini 来方便链接到插件文档并避免与可能具有相同清单插件名称的其他集合冲突。

概要

  • 基于 INI 文件的清单,部分是组或具有特殊 :modifiers 的与组相关的部分。

  • 部分 [group_1] 中的条目是主机,是组的成员。

  • 主机可以将变量定义为内联键/值对,这些对用 = 分隔。

  • children 修饰符表示该部分包含组。

  • vars 修饰符表示该部分包含分配给组成员的变量。

  • 在部分之外找到的任何内容都被视为“未分组”主机。

  • 使用 key=value 语法在 INI 格式中传递的值根据它们在清单中声明的位置进行不同的解释。

  • 在主机内联声明时,INI 值由 Python 的 ast.literal_eval 函数(https://docs.pythonlang.cn/3/library/ast.html#ast.literal_eval)处理,并解释为 Python 文字结构(字符串、数字、元组、列表、字典、布尔值、None)。如果您希望数字被视为字符串,则必须将其加引号。主机行每行接受多个 key=value 参数。因此,他们需要一种方法来指示空格是值的一部分,而不是分隔符。

  • :vars 部分中声明时,INI 值被解释为字符串。例如 var=FALSE 将创建一个等于 FALSE 的字符串。与主机行不同, :vars 部分每行只接受一个条目,因此 = 之后的所有内容都必须是条目的值。

  • 不要依赖定义期间设置的类型,在使用变量时,请确保您在需要时使用过滤器指定类型。

  • 请参阅示例以了解正确的引号用法,以防止变量类型的更改。

备注

注意

  • 默认情况下在配置中启用。

  • 考虑切换到 YAML 格式的清单来源,以避免对变量的实际类型产生混淆。YAML 清单插件始终如一且正确地处理变量值。

示例

# fmt: ini
# Example 1
[web]
host1
host2 ansible_port=222 # defined inline, interpreted as an integer

[web:vars]
http_port=8080 # all members of 'web' will inherit these
myvar=23 # defined in a :vars section, interpreted as a string

[web:children] # child groups will automatically add their hosts to parent group
apache
nginx

[apache]
tomcat1
tomcat2 myvar=34 # host specific vars override group vars
tomcat3 mysecret="'03#pa33w0rd'" # proper quoting to prevent value changes

[nginx]
jenkins1

[nginx:vars]
has_java = True # vars in child groups override same in parent

[all:vars]
has_java = False # 'all' is 'top' parent

# Example 2
host1 # this is 'ungrouped'

# both hosts have same IP but diff ports, also 'ungrouped'
host2 ansible_host=127.0.0.1 ansible_port=44
host3 ansible_host=127.0.0.1 ansible_port=45

[g1]
host4

[g2]
host4 # same host as above, but member of 2 groups, will inherit vars from both
      # inventory hostnames are unique

提示

每种条目类型的配置条目具有从低到高的优先级顺序。例如,列表中较低的变量将覆盖列表中较高的变量。