Ansible剧本:逃脱'$';在Linux路径中

Ansible剧本:逃脱'$';在Linux路径中,ansible,ansible-2.x,Ansible,Ansible 2.x,我有一条路径,看起来像这样- base\u dir/123/path/to/G\$/子目录/html/ 当我试图在Ansible playbook中设置此路径时,它会抛出错误。如果将\$添加到转义“\”,则会引发意外的失败错误 PlaybBook- - hosts: localhost vars: account_id: 123 tasks: - name: Add \ to path debug: var: "base_dir/{{ account_id

我有一条路径,看起来像这样-

base\u dir/123/path/to/G\$/子目录/html/

当我试图在Ansible playbook中设置此路径时,它会抛出错误。如果将\$添加到转义“\”,则会引发意外的失败错误

PlaybBook-

- hosts: localhost
  vars:
    account_id: 123
  tasks:
  - name: Add \ to path
    debug:
      var: "base_dir/{{ account_id }}/path/to/G\\$/subdirectory/html/"
结果-

TASK [Gathering Facts] *************************************************************************************************************************************************
task path: /playbooks/example_path.yml:2
ok: [localhost]
META: ran handlers

TASK [Add \ to path] ***************************************************************************************************************************************************
task path: /playbooks/exmaple_path.yml:6
fatal: [localhost]: FAILED! => {
    "msg": "Unexpected failure during module execution."
}

PLAY RECAP *************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1
如模块文档中所述,
var
选项需要变量名,而不是输出的标量。您将收到一个错误,因为变量名中不应包含
\
。使用
-vvv
运行剧本将为您提供更多的解释

在这种情况下,您需要使用
msg
选项

- hosts: localhost
  gather_facts: false
  vars:
    account_id: 123
  tasks:
    - name: Add \ to path
      debug:
        msg: "base_dir/{{ account_id }}/path/to/G\\$/subdirectory/html/"
结果

PLAY [localhost] ***************************************************************

TASK [Add \ to path] ***********************************************************
ok: [localhost] => {
    "msg": "base_dir/123/path/to/G\\$/subdirectory/html/"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

下一个选项是使用。请参见下面的示例

- hosts: localhost
  vars:
    my_dir1: "/scratch/tmp/G1\\$"
    my_dir2: '/scratch/tmp/G2\$'
  tasks:
    - file:
        state: directory
        path: "{{ item }}"
      loop:
        - "{{ my_dir1 }}"
        - "{{ my_dir2 }}"

# ls -1 /scratch/tmp/
'G1\$'
'G2\$'