从 ansible 2.10 升级到 ansible 2.12(从 ansible 5)后,包含不安全变量值的 Playbook 会中断

从 ansible 2.10 升级到 ansible 2.12(从 ansible 5)后,包含不安全变量值的 Playbook 会中断

我已使用 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

看起来这是一个已报告给项目的错误,他们正在努力寻找解决方案:

模板(查找插件)通过 to_nice_json 添加双引号 #76443

相关内容