ree*_*ode 5 python automation ansible
所以这就是我想做的我想运行这样的剧本
ansible-playbook playbookX.yml --ask-vault-pass [host or hostgroup]
Run Code Online (Sandbox Code Playgroud)
该剧本应该运行带有参数的本地(在ansible服务器上)python脚本
python scriptname.py Parameter1 Parameter2
Run Code Online (Sandbox Code Playgroud)
Parameter1:一个应该加密且不可见的秘密,即使用 ps -aufx ,我应该从保管库文件中获取密码。也许我应该在 python 脚本中解密它?
Parameter2:主机或主机组中指定的主机名(注意:当剧本与主机组一起运行时,应该为每个主机运行该脚本)
另请注意:python 脚本最好在 virtual_env 中执行,同时环境应安装 urllib3。
我怎样才能做到这一点?
您可以使用 pip 模块验证 venv 中是否存在 urllib3: http://docs.ansible.com/ansible/latest/pip_module.html
我认为您需要将主机/主机组作为命令行上的 var 传递给剧本:
ansible-playbook playbookX.yml -e "myhosts=[host or hostgroup]" --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)
我建议在任务中使用 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
Run Code Online (Sandbox Code Playgroud)
您可以创建模板 scriptname.py.j2,在需要的地方添加“{{ my_encrypted_password }}”,然后创建 tmp scriptname.py,执行并删除 tmp 文件。那是它不会用 ps 显示,但会在 tmp .py 文件中。
最后的建议是将其放入 .py scipt 中并使用 ansible-vault 对其进行加密。