Setup/Contraints
我想运行位于/tmp/run_tests.yml 的 ansible play,我想在 python 脚本中执行运行,而不是命令行(这些是我正在处理的问题的一般约束)。我已经尝试了几种不同的方法,这些方法都感觉像是对 Runner 类进行逆向工程的猜测工作,但没有成功。我希望找出这是否可能以及代码会是什么样子。
如果我想运行单个命令,我可以简单地使用 Ansible API 的运行器:
works.py(将 Runner 与模块一起使用的简单示例)
ansible.runner.Runner(**{
"pattern": '*',
"module_name": 'ping',
"inventory": webInventory,
"remote_user": self.username,
"private_key_file": self.private_key
}).run()
doesnotwork.py(尝试在播放中使用跑步者)
hosts = ["127.0.0.0.1"] #dummy ip address
webInventory = ansible.inventory.Inventory(hosts)
runner = ansible.runner.Runner(pattern="*", )
response = runner.run(**{
"pattern": '*',
"module_name": "/tmp/run_tests.yml",
"inventory": webInventory,
"remote_user": "ubuntu",
"private_key_file": "~/.ssh/id_rsa"
})
产生错误
{'contacted': {}, 'dark': {'127.0.0.1': {'failed': True, 'msg': 'module is missing interpreter line'}}}
从源头来看,该错误表明缺少 shebang,并且由于我是 ansible 的新手,我推测传递 yml 文件不适合module_name文件。为了运行我的 python 游戏,runner 命令必须是什么样子?
您在 3+ 个月后已经弄清楚了这一点,但 Ansible Runner
对象中的module_name
应该是 Ansible 模块索引中可用的模块,例如"apt"或"service"。
我认为您正在寻找 Ansible 的 ansible-playbook
等价物,它有自己的run
类方法。
看起来以编程方式运行 Playbook 的工作示例可能在这里。
您可以在 Ansible 的 github 存储库中找到 CLI ansible-playbook
的示例以及如何使用它。