【Ansible】Inventoryファイルを利用せずにansibleコマンドを実行する
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 グループ