![如何将带有特殊字符的密码从 ansible 发送到 Python 脚本?](https://linux22.com/image/751251/%E5%A6%82%E4%BD%95%E5%B0%86%E5%B8%A6%E6%9C%89%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E7%9A%84%E5%AF%86%E7%A0%81%E4%BB%8E%20ansible%20%E5%8F%91%E9%80%81%E5%88%B0%20Python%20%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
我正在从 ansible playbook 调用一个 python 脚本。调用时,我将凭据作为参数传递给 python 脚本。密码有一些特殊字符。
但在 Python 脚本中,我收到的密码没有特殊字符。因此密码不正确,并且我收到未经授权的错误。
我在 Ansible Tower 中拥有此凭证。因此,我将 ansible playbook 和 python 脚本都保存在 Git 中,并在 Ansible Tower 中作为作业运行。
- hosts: localhost
gather_facts: false
vars:
username: '{{ lookup("env","CREDS_TEST_PWD_USERNAME") }}'
password: '{{ lookup("env","CREDS_TEST_PWD_PASSWORD") }}'
tasks:
- debug: var=password
- name: Invoking python script
script: python_script.py {{username}} {{password}}
args:
executable: python
register: user_response
delegate_to: perbhd01
- debug: var=user_response
以上是将调用 Python 脚本的 Ansible 剧本。假设实际用户名和密码是“ADMIN”和“Oracle$123!”。但我在 Python 脚本中得到的是“ADMIN”和“Oracle123!”
这就是我在 python 脚本中检索凭据的方法。
import requests
import json
import warnings
import sys
user_name=sys.argv[1]
password=sys.argv[2]
print (password +"****from ansible****")
如果您对我所面临的这个问题有任何想法,请告诉我。
答案1
像这样添加一个变量“credential_password”并运行剧本。这个 regex_escape() 将有助于转义特殊字符。
username: '{{ lookup("env","CREDS_TEST_PWD_USERNAME") }}'
password: '{{ lookup("env","CREDS_TEST_PWD_PASSWORD") }}'
credential_password: "{{ password | regex_escape() }}"