我有一个非常简单的 ansible 剧本,如下所示:
- hosts: myhost
tasks:
- include_vars:
file: ./resolved.yml
- name: resolve placeholders
tags: resolution
template:
src: "./placeholders.yml"
dest: "/tmp/res.yml"
给定以下带有占位符的 YAML:
---
test:
config: {{ prop.resolveme }}
以及以下机密 YAML 文件:
---
prop:
resolveme:
- 8.8.8.8
- 1.1.1.1
- 192.168.0.1
解析后的 YAML 文件如下所示:
---
test:
config: [u'8.8.8.8', u'1.1.1.1', u'192.168.0.1']
(注意:如果我仅使用逗号分隔的列表,它就会按预期工作)。
为什么会发生这种情况?我在 YAML 规范中找不到任何可以解释此行为的内容,所以我认为这一定是 Ansible 解析器所做的事情(似乎与 unicode 有关?)。是否可以使用 Ansible 参数插值来获取我想要的列表结构,还是我应该更喜欢以逗号分隔的项目列表?
答案1
我无法在 Linux 中ansible [core 2.11.6]
使用python version = 3.8.5
和重现您的问题jinja version = 3.0.1
。请尝试显式转换为细绳.下面的模板
---
test:
config: {{ prop.resolveme }}
config: {{ prop.resolveme|map('string') }}
给出
---
test:
config: ['8.8.8.8', '1.1.1.1', '192.168.0.1']
config: ['8.8.8.8', '1.1.1.1', '192.168.0.1']
如果这没有帮助,你可以尝试暴力破解
---
test:
config: [{% for i in prop.resolveme %}'{{ "%s"|format(i) }}'{% if not loop.last %}, {% endif%}{% endfor %}]