带参数

时间:2017-11-29 10:56:27

标签: python automation ansible

所以这就是我想要做的事情我想要像这样运行一本剧本

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。

我怎么能做到这一点?

2 个答案:

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

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

答案 1 :(得分:0)

创建虚拟环境:

  • virtualenv env_name
  • source dir / bin / activate

我假设你想做这样的事情:

python some_script.py param1 param2

要将参数传递给Python脚本,需要使用sys。

import sys
param1 = sys.argv[1]
param2 = sys.argv[2]

在python中使用getpass()在命令行中接受密码。