【Ansible】Inventoryファイルを利用せずにansibleコマンドを実行する

2015.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Ansibleを利用するときの超小ネタです。

筆者の環境のAnsibleは1.9.0.1です。

コマンドラインでホスト指定

Ansibleコマンドを実行する際に、Ansible実行対象のホストであるInventoryファイル(通常はhostsファイル)に実行対象のホスト名を記載します。

ですが、ちょっとした動作確認時等の場合は、Inventoryファイルを作成せずにコマンドラインで直接実行対象のIPアドレスやホスト名を指定できるとより便利だと思いました。ですが、以下のような形式で実行するとエラーになってしまいます。

$ ansible -i 127.0.0.1 all -m ping --connection=local
ERROR: Unable to find an inventory file, specify one with -i ?

Inventoryファイルが見つからないというエラーですね。

解決策

解決策は単純で、-iオプションの後にIPアドレスを記載し、その末尾に,(コンマ)を付与してあげれば、コマンドラインで直接指定できます。

$ ansible -i 127.0.0.1, all -m ping --connection=local
127.0.0.1 | success >> {
    "changed": false,
    "ping": "pong"
}

コンマをIPアドレス毎に記載すれば、複数ホストに対する実行も可能です。

$ ansible -i 127.0.0.1,127.0.0.2, all -m ping --connection=local
127.0.0.2 | success >> {
    "changed": false,
    "ping": "pong"
}

127.0.0.1 | success >> {
    "changed": false,
    "ping": "pong"
}

これで、手元でのAnsibleの動作確認が少し便利になりました。

ここまで紹介してきましたが、この方法はAnsibleの作者であるMicheal DeHaan氏Googleグループの投稿で、非推奨であるという記述があります。将来的にこの方法で動かなくなる可能性もありますのでプロダクション用途には絶対に使わないようにしましょう。あくまでも現バージョン(1.9.0)で「たまたま動く」程度に捉えてください。

Yeah the trailing comma is a hack, we should not suggest it in most cases. Ansible without inventory? - Google グループ