2011年10月24日月曜日

PHPで外部テキストを変数展開

スズキです。

いろいろあってNagiosのアラートメール通知を、
サービスごとに行えるようにしているところです。

このような仕組みを作るときは、メールテンプレートをどうしようか?
と悩むところだと思いますが、今回は可能な限りシンプルに仕様と思い、
外部ファイルのテキストを"eval"で変数展開する方法を試してみました。

まずは下記のようなメールテンプレートを用意しておきます。

$NOTIFICATIONTYPE $CONTACTGROUPNAME $HOSTNAME $HOSTSTATE

TYPE     : $NOTIFICATIONTYPE($HOSTSTATE)
ACCOUNT  : $CONTACTGROUPNAME
HOST     : $HOSTNAME($HOSTADDRESS)
DATETIME : $LONGDATETIME
OUTPUT   : $HOSTOUTPUT

これを下記のスクリプトで変数展開します。

$CONTACTGROUPNAME = $argv[1];
$HOSTNAME         = $argv[2];
$NOTIFICATIONTYPE = $argv[3];
$HOSTSTATE        = $argv[4];
$HOSTADDRESS      = $argv[5];
$LONGDATETIME     = $argv[6];
$HOSTOUTPUT       = $argv[7];

$template = file_get_contents("/opt/cloudpack//conf/$CONTACTGROUPNAME/nagios/mail/host/$HOSTNAME.txt");
$eval = "return <<<EVAL\n{$template}EVAL;\n";
file_put_contents("/tmp/sample.txt", eval($eval));

ごちゃごちゃしていますが、要点としては、外部テキストを
return <<<EVAL
外部テキスト
EVAL;
といった感じに調整して、"eval"しています。
※タイトルとは関係ないですが外部ファイルは取得は引数によって変更する形です。

そして下記のように実行すると、

./tmp-nagios-notify-host "admin_cloudpack.jp" "admin-a" "RECOVER" "UP" "xxx.xxx.xxx.xxx" "2011/11/11 11:11:11" ""

ちゃんと変数展開されて、次のようなファイルが出力されます。

RECOVER admin_cloudpack.jp admin-a UP

TYPE     : RECOVER(UP)
ACCOUNT  : admin_cloudpack.jp
HOST     : admin-a(xxx.xxx.xxx.xxx)
DATETIME : 2011/11/11 11:11:11
OUTPUT   : 

次は上記で作成したメール本文をSESで送るところです。

SES、久しぶりだ...
--------
http://www.suz-lab.com

0 コメント: