tentakel

ネタ元

BSD Hacks ―プロが使うテクニック & ツール 100選

BSD Hacks ―プロが使うテクニック & ツール 100選

Hack#52:"コマンドを分散して実行"

複数のサーバを管理している場合,全サーバに同じタスクを入れることはよくある.毎回各サーバに ssh で潜って,毎回同じコマンドを入力するか? コレはかなり面倒だ.しかも繰り返し作業は慣れによるオペミスを招きやすい.ということでコマンドを分散実行するのだ.

Environment

ホストは3台ある.2台をサーバ,1台を管理用端末としよう.

ネタ元が BSD Hacks なのに何故か Linux を使っているのは,某お仕事で使うのが Linux だから.

Install

FC4 で tentakelをインストールする.Official Site からダウンロードをたどっていくと

へたどり着くはず.Fedora 向けのは FC3 までのバイナリがあったので試しにそれ(tentakel-2.2-1.1.fc3.rf.noarch.rpm)を入れてみたのだが,python module のインストールパスが python2.3 向けに作ってあったのでコケる(FC4 は python2.4).SRPM から rebuild するのがよさそうだ.

Experiment

設定ファイルはサンプル (/usr/share/doc/tentakel-2.2/tentakel.conf.examp) を元にこんな感じにしておく.

$ cat ~/.tentakel/tentakel.conf
set ssh_path="/usr/bin/ssh"
set method="ssh"
set format="%d\n%o\n"

group servers(user="username")
        +sv-win +sv-bsd

group local ()
        +127.0.0.1

さて,実行してみよう.ssh-agent を動かしてパスワードを省略できる状態にしておくとこんな感じで動く.

$ tentakel -g servers "uname -a"
sv-bsd
FreeBSD sv-bsd.example.jp 6.0-RELEASE FreeBSD 6.0-RELEASE #0: Thu Nov  3 09:36:13 UTC 2005
root@x64.samsco.home:/usr/obj/usr/src/sys/GENERIC  i386
sv-win
CYGWIN_NT-5.1 sv-win 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin         

二つのサーバで同時にコマンドが実行できているのがわかる.今回は全然別のプラットフォームなのでアレなのだが,実際仕事で使う場合はある程度同じ環境の機械を多数扱うことになるはず.そうなるとこのように分散実行できるというのはとても作業効率が上がるはずだ.

対話モードでもやってみよう.

$ tentakel
tentakel: unknown group: 'default'
interactive mode
tentakel(default)> use servers
tentakel(servers)>  exec mount
sv-bsd
/dev/ad0s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad0s1e on /tmp (ufs, local, soft-updates)
/dev/ad0s1f on /usr (ufs, local, soft-updates)
/dev/ad0s1d on /var (ufs, local, soft-updates)
devfs on /var/named/dev (devfs, local)
sv-win
C:\cygwin\bin on /usr/bin type system (binmode)
C:\cygwin\lib on /usr/lib type system (binmode)
C:\cygwin on / type system (binmode)
c: on /c type system (binmode,noumount)
d: on /d type system (binmode,noumount)
e: on /e type system (binmode,noumount)
f: on /f type system (binmode,noumount)
tentakel(servers)> quit
$

default グループを消してしまったものだから最初に unknown といわれてしまっている.

ちなみに,ssh公開鍵認証 + ssh-agent を使っていない場合はサーバにログインするたびにパスワード(もしくはパスフレーズ)の入力を要求されてとても疲れる.ssh 回りの設定をしないと楽しさ半減といったところだろうか.