Ansible 退出$sign-in Playbook变量

Ansible 退出$sign-in Playbook变量,ansible,Ansible,我有一个使用URI模块通过RESTAPI调用处理资源调配的剧本 为了获得API的身份验证,我请求一个授权令牌,就像大多数RESTAPI的工作一样 当返回的令牌具有“$”字符时,它将被转义,因此我的playbook将失败,因为授权被拒绝 我可以在没有URI模块的情况下复制: ansible-playbook -i hosts -e IPAM_TOKEN="Hj6E5HsSZ$LLQFlmMkhtTW6f" IPAM/b2b_global_alloc_dual_cpe.yml PLAY [Play

我有一个使用URI模块通过RESTAPI调用处理资源调配的剧本

为了获得API的身份验证,我请求一个授权令牌,就像大多数RESTAPI的工作一样

当返回的令牌具有“$”字符时,它将被转义,因此我的playbook将失败,因为授权被拒绝

我可以在没有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"
}
---
- 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
...
我尝试在变量中添加Jinja安全过滤器,但仍然以某种方式转义了“$”字符:

- name: Test
    debug:
        msg: "{{ IPAM_TOKEN | safe }}"
有什么建议吗


提前谢谢。

好的,我想在Ansible playbook有机会看到它之前,“$”已经被shell转义了

以下工作:

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"
    }

使用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"
}
---
- 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"
}

调用playbook并传入CLI参数时,必须转义
$
字符。试着运行这个:
ansible playbook-i hosts-e IPAM_TOKEN=“Hj6E5HsSZ\$llqflmkhttw6f”IPAM/b2b_global_alloc_dual_cpe.yml
我还测试了uri模块,它似乎对美元符号没有任何作用。谢谢Anant。问题是在通过shell传递变量值时。如果在shell中使用单引号,则不必转义$符号:
IPAM_-TOKEN='Hj6E5HsSZ$LLQFlmMkhtTW6f'
。Bash在双引号字符串中计算变量,而不是在单引号字符串中计算变量。