我已使用 Mac OS 上的 Homebrew 将我的 ansible 设置从 ansible 2.10 升级到 ansible 2.12(从 ansible 5 开始)。从那时起,剧本就不再产生工作结果。
- name: Assemble consul cluster
become: true
hosts: consul_nodes
roles:
- role: consul
vars:
consul_version: "1.11.1"
consul_install_upgrade: true
consul_group_name: "consul_nodes"
consul_addresses:
dns: !unsafe '169.254.1.1 127.0.0.1 {{ GetPrivateIP }} {{ GetInterfaceIP \"docker0\" }}'
http: !unsafe '169.254.1.1 {{ GetPrivateIP }} {{ GetInterfaceIP \"docker0\" }}'
https: !unsafe '127.0.0.1 {{ GetPrivateIP }}'
grpc: "127.0.0.1"
consul_client_address: "169.254.1.1"
consul_node_role: server
consul_bootstrap_expect_value: 3
consul_bootstrap_expect: true
剧本包含不安全的变量值,这些变量值不应被模板化,因为它们的值应该传递到写入磁盘的 JSON 配置文件。
在升级到 ansible 2.12 之前,它运行良好
ansible [core 2.12.1]
config file = None
configured module search path = ['/Users/martin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/Cellar/ansible/5.1.0/libexec/lib/python3.10/site-packages/ansible
ansible collection location = /Users/martin/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.10.1 (main, Dec 6 2021, 23:20:29) [Clang 13.0.0 (clang-1300.0.29.3)]
jinja version = 3.0.3
libyaml = True
现在剧本创建的整个 JSON 均无效。引号 (") 被转义为 (")。
我怀疑问题与不安全的变量有关,因为使用有效的 ansible 版本 2.10 时,如果不使用,我也会得到同样糟糕的结果!unsafe
。这可能只是巧合。
答案1
看起来这是一个已报告给项目的错误,他们正在努力寻找解决方案: