手順書を幸せにする

デスマももうちょいで終わります


リリースのために手順書かけって言われること多いと思いますweb系な方。
もしdeployも自動化されてるなら本当に素晴らしい事だと思うのですが、
ソースコードのdeployだけではなく、設定ファイルの更新だったり新ホストの追加だったりすると、
どうしても自分で手順を書かなきゃ行けない場合がありますよね。
そこで、最近知って便利だな、と思った物をいくつか紹介します。

1.長い名前のファイルをリネームしたい時

たとえばとあるサーバのService outを行いたい時。
たいていの場合はなんらかのhealthcheckを探しに行き、なければSoutしているんだな。って判定していると思います

mv healthcheck _healthcheck

こんくらいだったら良いんですが、healthcheckの名前がドメイン含まれててくっそ長い時とか結構めんどうです

mv healthcheck{,_bk}

こうすると、省略してかけて便利です。cpとかでもよく使えます


2.capやブロードキャストを利用して各サーバに、ホストごとにホスト名に関する処理を行う時

capistranoってめちゃくちゃ便利ですよね。サーバ台数が二台とかいう弱小サービスの方はあまり恩恵受けないかもしれませんが、
三台超えてくるともうヒューマンエラーの入り込む余地ありまくりです。三回繰り返すなら自動化しろ、とは良くいった物ですね。

cap command="hoge-command" TARGET=hosts

設定とかにもよるんですがこれでhostsに対してhoge-commandを実行出来ます。
ただ、例えばconfファイルの名前はそれぞれのホスト名にして、ちゃんと確認したいだの、
このホストからだけ同期されている事を確認したいなんて時に、「いや同じ操作しかできないんだからどうすんだよ」って悩みました

cap command="touch `hostname`" TARGET=hosts

例えばこれで対象のhostsに対して、それぞれhostnameの実行結果=ホスト名のファイル作成を行えます。
shellscriptのバッククォートという機能です。知らない人はぜひぐぐっておくと幸せになります。
ちなみにbash/kshでは$(command)でバッククォートと同じ動作が出来ますが、shellという環境依存になってしまうので、指向に併せてどうぞ、と言われました。

3.上2つを組み合わせてちょいとおしゃれな事がしたかった

ホストごとにバックアップファイルが作りたかったんだか、良く覚えていないんですが、こんなことがしたかったんです。

cap command="cd HOGE_DIR && cp -r *.conf{,_bk}" TARGET=hosts

(多分、どこかに移動して、そこにあるconfファイルのバックアップをとる的な
(いや同じディレクトリでバックアップとるなって話はおいといて。


これ実行しようとすると、

cd HOGE_DIR
cp -r *.conf *.conf_bk

どうやら内部では*.conf_bkこいつが解釈されずにエラーだして悲しみました。
いや*.conf_bkあるけど!みたいな。*を解釈してくれないんですね。二回目は。

で、どうやったかっていうと

cap command="cd HOGE_DIR && ls *.conf | xargs -I@ cp -r @{,_bk}" TARGET=hosts

こんな感じで書きましたとさ。xargsでlsの結果をひとつずつ渡して行くイメージですね。
(2使ってないってことに気づいた。もうぐだぐだだよぉ...




結論
capとshellすごい