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

提示

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