在Playbook变量中使用Escape $号

时间:2018-11-30 03:07:48

标签: ansible

我有一本使用URI模块的剧本,用于处理通过REST API调用进行的配置。

要获得对API的身份验证,我需要像大多数REST API的工作一样要求授权令牌。

当返回的令牌具有'$'字符时,它将被转义,因此我的剧本因授权被拒绝而失败。

我可以在没有URI模块的情况下进行复制:

ansible-playbook -i hosts -e IPAM_TOKEN="Hj6E5HsSZ$LLQFlmMkhtTW6f" IPAM/b2b_global_alloc_dual_cpe.yml

PLAY [Playbook to allocate B2B Global Subnet from IPAM on Dual CPE] ************************************************************************************************************************************************************

TASK [Test] ********************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Hj6E5HsSZ"
}

我试图在变量中添加Jinja安全过滤器,但仍然以某种方式转义了'$'字符:

- name: Test
    debug:
        msg: "{{ IPAM_TOKEN | safe }}"

有什么建议吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

使用URI模块进行测试:

---
- name: Retry url until xml content equals certain value
  hosts: 127.0.0.1
  connection: local
  tasks:
    - name: Retrieve token
      uri:
          url: "https://httpbin.org/anything"
          method: POST
          timeout: 10
          validate_certs: no
          headers:
            token: "Hj6E5HsSZ$LLQFlmMkhtTW6f"
      register: token_response_body

    - name: debug token_response_body
      debug: var=token_response_body.json.headers.Token
...

输出:

TASK [debug token_response_body] ***********************************************************************************************************************************************************************************************************

ok: [127.0.0.1] => {
    "token_response_body.json.headers.Token": "Hj6E5HsSZ$LLQFlmMkhtTW6f"
}

答案 1 :(得分:1)

好吧,我认为在Ansible剧本有机会看到它之前,'$'已经被外壳转义了。

以下作品:

ansible-playbook -i hosts -e IPAM_TOKEN="Hj6E5HsSZ\$LLQFlmMkhtTW6f" IPAM/b2b_global_alloc_dual_cpe.yml

    PLAY [Playbook to allocate B2B Global Subnet from IPAM on Dual CPE] ************************************************************************************************************************************************************

    TASK [Test] ********************************************************************************************************************************************************************************************************************
    ok: [localhost] => {
        "msg": "Hj6E5HsSZ$LLQFlmMkhtTW6f"
    }