Technical information

Kompiraジョブフローの基礎 複数サーバーに対してコマンドを実行する

運用業務において管理対象が1台のみという事は珍しく、通常は同じようなサーバーを複数台メンテナンスされていると思います。
ただ、1台ごとに個別のジョブフローを作成するのは現実的ではありませんので、本記事では同一のメンテナンスのコマンドをを複数のサーバーに渡って実施する場合の方法について説明します。

 
1. for文で繰り返し

ここでは例としてメンテナンス対象のサーバーが3台あるとします。各サーバーについて、ノード情報型のオブジェクト”server1″, “server2”, “server3″を用意します。
また、それぞれに合わせたアカウント情報型のオブジェクト”アカウント1″~ “アカウント3″を用意します。

接続先の指定は制御変数 “__node__” にノード情報型のオブジェクトを代入する事で行います。
ここまで準備できましたら、サーバーごとの繰り返し処理は、以下のような for文による繰り返し処理として記述できます。

for文のin の後に、配列型のデータとして”server1″ ~を指定します。変数”srv”には繰り返し処理毎にノード情報型のオブジェクト”server1″~が代入されて、コマンドが実行されます。

2行目の”srv.hostname”は、ノード情報型のフィールド”hostname”を参照しています。これはノード情報の画面上での「ホスト名」という値に対応しています。

 
2. テーブル型による繰り返しの記述

先の例では、繰り返し対象になるサーバーをfor文中に配列で指定しています。台数が少ないうちはこのような方法でも良いですが、台数が増えてきたりサーバーの追加や入れ替えが頻繁になるとジョブフローの管理が大変になります。
このため、管理対象のサーバーをテーブル型オブジェクトを利用して、ジョブフローとは別に管理します。

ここでは「メンテナンス対象」という名称のテーブル型のオブジェクトを作成します。テーブル作成時に”オブジェクト型”として”ノード情報”を指定しましょう。

テーブル型

上図の例では「サーバー1号機」のような各行はノード情報型のオブジェクトです。

さて、ノード情報型のテーブルが作成できたところで、先の繰り返し処理のジョブフローは次のように書き換える事が出来ます。

このようにfor文のinの後に、配列の代わりにテーブル型のオブジェクトを使用する事が出来ます。この場合、変数srvには”メンテナンス対象”テーブルに含まれるノード情報型の各要素が順に代入され、 “|” 以降の処理を繰り返し実行します。つまりサーバー構成に変更がある場合には”メンテナンス対象”オブジェクトが適切に修正されていれば、このジョブフローそのものを変更する必要が無くなるわけです。

実行するコマンドを実行時に任意に指定できるようのパラメータ”cmd”で指定するようにして、さらにコマンド実行時にエラーが発生した際には「エラーが発生しました」と表示されるように変更してみます。

1行目の”ls”コマンドはデフォルト値ですので、実行時に別のコマンドを指定することが出来ます。これでジョブフローを1度起動するだけで、”メンテナンス対象”テーブルに登録されているの全サーバーで指定したコマンドが実行できます。