【问题标题】:How can I run an ansible play programmatically while still using a local file as my play?如何在仍然使用本地文件作为我的游戏的同时以编程方式运行 ansible 游戏?
【发布时间】:2014-12-31 07:14:13
【问题描述】:

设置/限制

我想运行一个位于 /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(尝试使用 runner 来玩)

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 命令必须是什么样子?

【问题讨论】:

    标签: python ansible ansible-runner


    【解决方案1】:

    我确定您在 3 个多月后已经弄明白了,但是 Ansible Runner 对象中的 module_name 应该是 Ansible 的 module index 提供的模块,例如“apt”或“service” .

    我认为您正在寻找Ansible's ansible-playbook equivalent,它有自己的run 类方法。

    它看起来像working example of running a Playbook programmatically might be here

    您可以找到CLI ansible-playbook and how it's used in Ansible's github repository 的示例。

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 2016-01-14
      • 2023-03-11
      • 1970-01-01
      • 2022-01-12
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多