Ansible (14) 対象サーバを制限してAnsibleを実行する

こんにちは。

グローバルソリューション事業部の吉村です。

 

Ansibleを利用していると、inventory ファイルに記載のある全てのサーバに対して、

同じPlaybookを実行するという機会はなかなか少ないです。

必ず何かしらの条件がつきまとうので、Ansibleを器用に利用していかないといけません。

そこで、Ansible まとめ14, 15回は

条件ごとにどのようにAnsibleを実行すべきか

をご紹介しようと思います。

 

 


 

 

条件1.実行サーバを限定する

これには、いくつか方法があるので、それぞれ紹介します。

 

1-1 「”-i  オプション”で別のinventoryファイル利用する」

通常、Ansible は、/etc/ansible/hosts ファイルに書かれたホストのみ実行が可能です。

例えば、/etc/ansible/hosts に以下の様にサーバのIPアドレスが書かれているとします。

この場合、普通にAnsibleのコマンドを実行できるのは.181~.183の3台だけです。

例として、.184にAnsibleコマンドを実行してみましょう。

「そんなホスト無いよ。」と言われて寂しい気持ちになります。

 

そこで、inventory ファイルを別に作ってあげて、それを指定してAnsibleコマンドを実行してみましょう!

hosts というファイルを作ってあげて、

その inventory ファイルを指定して実行すると、

成功しました。

このように別の inventory ファイルを作って、指定する方法です。

 

 

1-2 「”-l  オプション”で直接指定する」

↑の方法だと、「毎度 inventoryファイルを作るの面倒くさい・・・」ということになってしまうかもしれません。

その場合は、-l オプションで、inventory ファイルの中から実行するサーバを指定することができます。

先ほどの /etc/ansible/hosts ファイルで考えると、デフォルトでは、/etc/ansible/hosts ファイルに

記載されている.181~.183 全てにPlaybookを実行することになります。

example.yml を実行するホストはどれよ!?  と、–list-host オプションで確認すると、こんな感じ。

 

そこで、-l オプションで、.183にだけ実行するように指定してみましょう!

そうすると、.183だけが実行対象になりましたね。

また、-l オプションは1つのIPアドレス単位でなく、サブネット単位でも指定ができるので、このネットワーク範囲に実行という風にも条件が付けられます。

 

 

1-3 「ホストグループで指定する」

クラウド時代。

「サーバをホスト名で管理するのを辞めよう!役割毎に管理だ!」

という話題が良く出ますね。

こういった、目的別管理に向いているのが、

inventoryファイルでサーバをグルーピング後、特定のグループに対してのみ Ansible コマンドを実行する

というやり方です。

先の /etc/ansible/hosts ファイルを以下のように変更しました。

3つのグループ(hiphop、grime、garage) に分けました。

 

では、この中で、hiphop グループのみ Playbookを実行してみましょう!

 

まずはさっき使った、-l オプションでも指定可能です。

 

2つ目は、Playbookの中で、指定することも可能です。

「 hosts: hiphop」と指定して、何もオプションを付けずにPlaybookを実行すると、

きちんと hiphop グループの .181 のみに実行しました。

 


 

Ansibleでは、このようにして、実行サーバを限定していくことが可能です。

 

今回はここまで。

次回は、gather_facts を利用して、OS毎に実行内容を変更する。

というような条件分岐をご紹介します。

お楽しみに!

 

Share on LinkedIn
LINEで送る
Pocket

吉村

吉村

クララオンライン グローバルビジネスストラテジー部でマーケティング担当として働いています。 クラウド関連技術と中国関連の情報をお届けしてます。 たまに DJ とかします。日本語RAPが大好きです。