我正在从 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() }}"