Ansible 退出$sign-in Playbook变量
我有一个使用URI模块通过RESTAPI调用处理资源调配的剧本 为了获得API的身份验证,我请求一个授权令牌,就像大多数RESTAPI的工作一样 当返回的令牌具有“$”字符时,它将被转义,因此我的playbook将失败,因为授权被拒绝 我可以在没有URI模块的情况下复制: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
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在双引号字符串中计算变量,而不是在单引号字符串中计算变量。