読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

FabricでWindows Server 2012を簡単操作

サーバー担当の山内です。
今回は、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  

※あらかじめWindows Serverで動作するsshサーバーをインストールしておくことと、 スタートアップ時に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と同様です。