带参数的 Ansible 本地 Python 脚本

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。

我怎样才能做到这一点?

Chr*_*a A 3

您可以使用 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_pa​​ssword }}”,然后创建 tmp scriptname.py,执行并删除 tmp 文件。那是它不会用 ps 显示,但会在 tmp .py 文件中。

最后的建议是将其放入 .py scipt 中并使用 ansible-vault 对其进行加密。