- Authors
- Name
Overview
Pythonコードで動作するDjangoで動的インベントリ、動的変数を使いたかったが、幸いにもansible-runnerというモジュールを見つけることができた。Ansible RunnerはPythonからAnsibleを実行できるようにするPythonモジュールだ。使ってみると、実行されるansibleのバージョンに関係なく同じ実行結果を保証する機能もあり、イベントコールバックを登録してリアルタイムで出力を表示する時にも便利だった。公式サイトに詳しい説明が記載されている。
実行方法
以下のようにansible_runnerをインポートした後、runを呼び出しながら引数としてprivate_data_dir、playbook、inventoryを渡せば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でも実行が可能だ。