所以这就是我想要做的事情我想要像这样运行一本剧本
ansible-playbook playbookX.yml --ask-vault-pass [host or hostgroup]
playbook应该使用参数
运行本地(在ansible服务器上)python脚本python scriptname.py Parameter1 Parameter2
Parameter1
:一个应加密且不可见的秘密,例如ps -aufx,我应该从保险库文件中获取密码。也许我应该在python脚本中解密它?
Parameter2
:主机或主机组中指定的主机名
(注意:当playbook与主机组一起运行时,应该为每个主机运行脚本)
另一个注意事项:python脚本最好在virtual_env中执行,而环境应该安装urllib3。
我怎么能做到这一点?
答案 0 :(得分:2)
您可以使用pip模块验证venv中是否存在urllib3: http://docs.ansible.com/ansible/latest/pip_module.html
我认为您需要将主机/主机组作为var命令行传递给playbook:
ansible-playbook playbookX.yml -e "myhosts=[host or hostgroup]" --ask-vault-pass
我建议在任务上使用no_log来隐藏输出中的参数。我猜它仍会显示ps。
---
- name: Run on remote host
hosts: "{{ myhosts }}"
tasks:
- <my other tasks on remote host>
- name: run python script locally
local_action: command python scriptname.py "{{ my_ecrypted_password }}" "{{ myhosts }}"
no_log: True
你可以创建一个模板scriptname.py.j2,在需要的地方添加“{{my_encrypted_password}}”,然后创建你的tmp scriptname.py,执行并删除tmp文件。那是它不会用ps显示,但它将在tmp .py文件中。
最后的建议是将其放入.py scipt并使用ansible-vault加密它。
答案 1 :(得分:0)
创建虚拟环境:
我假设你想做这样的事情:
python some_script.py param1 param2
要将参数传递给Python脚本,需要使用sys。
import sys
param1 = sys.argv[1]
param2 = sys.argv[2]
在python中使用getpass()在命令行中接受密码。