Skip to content
Published on

Ansible-Runner(PythonからAnsibleを実行する)

Authors
  • Name
    Twitter

Overview

Pythonコードで動作するDjangoで動的インベントリ、動的変数を使いたかったが、幸いにもansible-runnerというモジュールを見つけることができた。Ansible RunnerはPythonからAnsibleを実行できるようにするPythonモジュールだ。使ってみると、実行されるansibleのバージョンに関係なく同じ実行結果を保証する機能もあり、イベントコールバックを登録してリアルタイムで出力を表示する時にも便利だった。公式サイトに詳しい説明が記載されている。

実行方法

以下のようにansible_runnerをインポートした後、runを呼び出しながら引数としてprivate_data_dirplaybookinventoryを渡せばansible playbookを実行できる。 もちろんansible-runnerを実行するサーバーにansibleがインストールされている必要がある。私は次のようにpipを使ってインストールした。pip install ansible

import ansible_runner

def event_callback(event_data):
    # do something every event
    print(event_data)

def finished_callback(runner):
    #do something after finishing
    print runner
    return


r = ansible_runner.run(
    private_data_dir=os.path.join(
        settings.BASE_DIR,"private_directory"
    ),
    playbook=os.path.join(
        settings.BASE_DIR,"playbook_directory",
        "setup.yml"
    ),
    event_handler=event_callback,
    finished_callback=finished_callback,
    quiet=True,
)

ansibleで実行可能なplaybookであればansible_runnerでも実行が可能だ。