Python

如何將帶有特殊字元的密碼從ansible發送到Python腳本?

  • April 21, 2020

我正在從 ansible playbook 呼叫 python 腳本。在呼叫時,我將憑據作為參數傳遞給 python 腳本。密碼有一些特殊字元。

但是在 Python 腳本中,我收到的密碼沒有特殊字元。所以密碼不正確,我收到未經授權的錯誤。

我在 Ansible 塔中擁有此證書。所以我將 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****")

如果您對我面臨的這個問題有任何想法,請告訴我。

像這樣再添加一個變數“credential_password”並執行劇本。這個 regex_escape() 將有助於轉義特殊字元。

username: '{{ lookup("env","CREDS_TEST_PWD_USERNAME") }}'
password: '{{ lookup("env","CREDS_TEST_PWD_PASSWORD") }}'
credential_password: "{{ password | regex_escape() }}"

引用自:https://serverfault.com/questions/1013318