Ansible templates 使用介绍
环境信息
- ansible-core 2.16
- Docker image python:3.12.3
Ansible 使用 Jinja2 模板语言对变量或者 Facts 进行模板化。 [1]
模板数据处理
Filters
使用 Filters
可以进行数据转换(如 JSON
–> YAML
)、URL 分割等操作。 [2]
为变量提供默认值
在模板中使用的变量未定义的情况下,可能会导致 Ansible 处理失败,为了以更优雅的方式处理此类问题,可以在模板中为变量提供 默认值
{{ some_variable | default(5) }} |
也可以在变量计算值为空或者 false
时使用默认值
{{ lookup('env', 'MY_USER') | default('admin', true) }} |
配置变量为可选变量
默认情况下,Ansible Template 中所有的变量都必须有值,否则会抛出异常。假如需要在模板中的部分变量没有值或未定义的情况下也可以正常部署,可以将其配置为 可选(optional)
要将变量配置为 **可选(optional)**,可以将其 默认值(default value) 设置为特殊变量 omit
- name: Touch files with an optional mode |
变量类型
如果需要对变量类型进行转换,可以参考以下方法
获取变量类型
2.3 以上版本中,可以使用 type_debug
显示变量类型
{{ myvar | type_debug }} |
字典转换为列表
New in version 2.6.
{{ dict | dict2items }} |
原始字典数据:
tags: |
使用 {{ dict | dict2items }}
转换后的列表数据:
- key: Application |
转换后的列表默认以关键字 key
指示之前的字典中的 key
值,以关键字 value
指示之前的字典中的 value
值。如果想要自定义 key 名称,dict2items
接受关键字参数 key_name
和 value_name
Dictionary data (before applying the ansible.builtin.dict2items filter): |
列表转换为字典
{{ tags | items2dict }} |
List data (before applying the ansible.builtin.items2dict
filter):
tags: |
Dictionary data (after applying the ansible.builtin.items2dict
filter):
Application: payment |
假如 List Data 中的关键字不是 key
和 value
,此时必须使用参数 key_name
和 value_name
指定
{{ fruits | items2dict(key_name='fruit', value_name='color') }} |
强制类型转换
使用以下语法强制转换变量数据类型 [5]
some_string_value | bool |
YAML 和 JSON 数据转换
可以使用以下语法将数据转换为 JSON 或者 YAML 格式
{{ some_variable | to_json }} |
可以使用以下语法将数据转换为方便人类阅读 JSON 或者 YAML 格式
{{ some_variable | to_nice_json }} |
制定行首缩进程度
{{ some_variable | to_nice_json(indent=2) }} |