如何将带有特殊字符的密码从 ansible 发送到 Python 脚本?

如何将带有特殊字符的密码从 ansible 发送到 Python 脚本?

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

相关内容