ansible.builtin.ini 清单 – 使用 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
提示
每个条目类型的配置条目具有从低到高的优先级顺序。例如,列表中较低的变量将覆盖较高的变量。