サーバー担当の山内です。
今回は、Fabricを使ってWindows Server 2012に対する管理作業を自動化します。
自動化するといっても下にある3つの単純な作業です。
- 再起動
- SFTP転送
- ファイルを開く
1. Fabricについて
Fabricはサーバーの遠隔管理やアプリケーションのデプロイを自動化するシンプルなツールです。
すべてpythonで記述します。
Linuxサーバーに対して使うケースがほとんどだと思いますが、今回はWindowsに対してです。
2. Fabricのインストール
Welcome to Fabric! - http://www.fabfile.org/
オフィシャルサイトにもあるようにpipによるインストールが推奨されています。
$ pip install fabric
スタートアップ時にsshサーバーを起動させておく必要がありますが、本エントリーでは説明を割愛させていただきます。
3. fabfile.pyのソース
3台のマシンに対して並列処理を走らせる例です。
# -*- coding: utf-8 -*- from fabric.api import * from fabric.colors import * from fabric.decorators import runs_once, roles from fabric.contrib.console import confirm import datetime import locale import os import sys # 1 env.roledefs = {'clients': [ "192.168.15.1", "192.168.15.2", "192.168.15.3", ], } env.user = 'wonder' env.password = 'pass' env.ftproot_path = 'c:\\ftproot\\' env.shell='cmd.exe /c' env.port = 22 env.parallel = True # 2 @task def help(): print(yellow("fab deploy")) print(yellow("fab start")) print(yellow("fab stop")) print(yellow("fab reboot")) # 3 def _run_shell_command(command): return run(command, pty=False) # 4 @roles('clients') @task def reboot(): _run_shell_command("shutdown -r -d p:0:0") # 5 @roles('clients') @task def deploy(): with cd(env.ftproot_path): put("./hoge.zip") _run_shell_command("{0}UnZipper.exe {0}hoge.zip".format(env.ftproot_path)) # 6 @roles('clients') @task def start(): _run_shell_command("{0}start.bat".format(env.ftproot_path)) # 7 @roles('clients') @task def stop(): _run_shell_command("{0}stop.bat".format(env.ftproot_path))
# 1
操作するWindows ServerのIP、sshの接続情報、ftpサーバーのルートパスを設定します。
Cドライブ直下にFTPサーバーのルートディレクトリ、ftprootがあるという仮定です。
今回はWindowsなのでcmd.exeをシェルに指定します。(デフォルトはbashです。)
env.parallel = Trueとすることですべてのタスクを並列実行することができます。
# 2
ヘルプ情報です。実行方法を忘れないために。
# 3
渡されたコマンドを実行します。
# 4
Windowsを再起動(計画済)します。
Fabricではrolesデコレータで各タスクにロールを紐付けられます。
これによってタスクごとに実行するマシンを指定することができます。
# 5
Windows Serverに架空のzip解凍ソフトUnZipper.exeがあるとして、
SFTP転送したhoge.zipをUnZipper.exeで解凍する作業です
# 6
あらかじめ用意したstart.batを開きます。
# 7
6と同様です。