1

セットアップ/制約

/tmp/run_tests.yml にある ansible play を実行したいのですが、コマンドラインではなく Python スクリプトで実行したいと考えています (これらは、私が取り組んでいる問題に対する一般的な制約です)。私はいくつかの異なるアプローチを試しましたが、いずれも Runner クラスのリバース エンジニアリングに関する当て推量のように感じましたが、うまくいきませんでした。これが可能かどうか、そしてコードがどのようになるかを知りたいと思っていました。

単一のコマンドを実行したい場合は、Ansible API のランナーを使用するだけです。

works.py (モジュールでランナーを使用する簡単な例)

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'}}}

ソースから、エラーはシバンが欠落していることを示唆しています。私のpythonプレイを実行するには、ランナーコマンドはどのように見える必要がありますか?

4

1 に答える 1

2

3 か月以上経ってからこのことを理解したと思いますがmodule_name、Ansible オブジェクト内の は、「apt」や「service」など、 Ansible のモジュール インデックスRunnerから利用可能なモジュールである必要があります。

独自のクラスメソッドを持つAnsible のansible-playbook同等のものを探していると思います。run

Playbook をプログラムで実行する実例がここにあるようです。

CLIansible-playbookの例とその使用方法は、Ansible の github リポジトリ で確認できます。

于 2015-03-25T15:34:10.473 に答える