Ansible多行模式下路径斜杠转义及变量定义问题求助
Ansible 多行定义路径变量的空格/转义问题解决
你的问题本质是YAML多行字符串的解析规则导致的,以下是几种可行的解决方式:
方法1:使用折叠标量(>)并优化格式
折叠标量会把换行转为空格,通过>-可以去掉末尾的换行符,且不要给内容加多余引号:
path_var_fix_1: >- /tmp/ansible_test_file
方法2:使用字面量标量(|)(适合需保留换行的场景,路径也适用)
字面量标量会严格保留换行,用|-可以去掉末尾多余的换行:
path_var_fix_2: |- /tmp/ansible_test_file
方法3:保持多行但对齐缩进
让多行内容的开头和变量名对齐,避免缩进空格被保留:
path_var_fix_3: " /tmp/ansible_test_file"
或者用单引号:
path_var_fix_4: ' /tmp/ansible_test_file'
完整测试示例
把修正后的变量加入playbook:
--- - name: "Fix backslash in multiline" hosts: localhost connection: local tasks: - name: "Init path variable" ansible.builtin.set_fact: path_var_ok: "/tmp/ansible_test_file" path_var_fix_1: >- /tmp/ansible_test_file path_var_fix_2: |- /tmp/ansible_test_file path_var_fix_3: " /tmp/ansible_test_file" path_var_fix_4: ' /tmp/ansible_test_file' - name: "Debug" ansible.builtin.debug: msg: - "[{{ path_var_ok }}] <=path_var_ok" - "[{{ path_var_fix_1 }}] <=path_var_fix_1" - "[{{ path_var_fix_2 }}] <=path_var_fix_2" - "[{{ path_var_fix_3 }}] <=path_var_fix_3" - "[{{ path_var_fix_4 }}] <=path_var_fix_4"
执行后输出会显示所有修正后的变量都和path_var_ok一致:
... TASK [Debug] ****************************************************************************************************************** ok: [localhost] => { "msg": [ "[/tmp/ansible_test_file] <=path_var_ok", "[/tmp/ansible_test_file] <=path_var_fix_1", "[/tmp/ansible_test_file] <=path_var_fix_2", "[/tmp/ansible_test_file] <=path_var_fix_3", "[/tmp/ansible_test_file] <=path_var_fix_4" ] } ...
原失败写法的原因说明
path_var_fail_1/path_var_fail_2:多行字符串开头的缩进空格被YAML保留,导致变量值前多了空格path_var_fail_3:折叠标量里加了引号,导致引号被当作内容保留,且默认保留末尾换行符,所以输出带\n和转义引号
内容的提问来源于stack exchange,提问作者MortalFool
相关产品推荐
相关产品推荐

