Ansible-Playbook

從 ansible 2.10 升級到 ansible 2.12(從 ansible 5)後,包含不安全變數值的劇本會中斷

  • December 29, 2021

我已在 Mac OS 上使用自製軟體將我的 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

playbook 包含不應模板化的不安全變數值,因為它們的值應傳遞到寫入磁碟的 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. 這可能只是一個巧合。

看起來這是一個已報告給項目的錯誤,他們正在研究解決方案:

模板(查找外掛)通過 to_nice_json 添加雙引號 #76443

引用自:https://serverfault.com/questions/1088378