概要
複数 VM に同じコマンドを実行するために、fabric を使ってみたら便利だった。
Fabric とは
Welcome to Fabric’s documentation! Fabric とは、Python 製の deploy やシステム管理を SSH 経由で行えるツールである。
なりゆき
私は、自宅のサーバーで幾つか Ubuntu server の VM を立てており、セキュリティーアップデートは自動で実行する設定にしている。 (AutomaticSecurityUpdates) だが、パッケージのアップデートはセキュリーアップデート以外にも存在するわけで、セキュリティーアップデート以外のアップデートは、実際にアップデートされるパッケージを確認して適用したい。 また、VM は複数あるので管理の手間を減らしたい。
実際に使ってみる
例として、以下の様な fabfile.py を用意する。
from fabric.api import env, run, sudo
## ~/.ssh/config を有効にする
env.use_ssh_config = True
## 接続先ホストを定義する(コマンド実行時に -H でも指定可能)
env.hosts = ['server1', 'server2']
## hostname を実行するコマンドを定義
def hostname():
run("hostname")
## date を実行するコマンドを定義
def date():
run("date")
## aptitude update を実行するコマンドを定義
def aptitude_update():
sudo("aptitude -q update")
## aptitude full-upgrade (dry run) を実行するコマンドを定義
def aptitude_upgrade_dryrun():
sudo("aptitude -syq full-upgrade")
## aptitude full-upgrade を実行するコマンドを定義
def aptitude_upgrade():
sudo("aptitude -yq full-upgrade")
aptitude update を各 VM で実行するには、fabfile.py ファイルを置いたディレクトリで以下のように実行する。 sudo で必要なパスワードはプロンプトが出るのでインタラクティブに入力することができる。
% fab aptitude_update
aptitude full-upgrade を行うには以下を実行する。
% fab aptitude_upgrade_dryrun
% fab aptitude_upgrade