More Related Content Similar to Fabricでサーバー管理をDRYにしよう Similar to Fabricでサーバー管理をDRYにしよう (20) Fabricでサーバー管理をDRYにしよう1. Fabricでサーバー管理を
DRYにしよう
2012.09.01 kyoto.py in 高槻
Kojima Takanori (max747)
5. SSH公開 の配備
$ scp foo.pub serverA:.
$ ssh serverA
$ sudo mv foo.pub /etc/ssh/keys/
$ chown root:root /etc/ssh/keys/foo.pub
$ exit
6. • Web/APサーバー
• DBサーバー
• リポジトリサーバー
• TracとかRedmineとか動かすサーバー
• CIサーバー
• 実験用サーバー
• 仮想化ホストサーバー
• etc...
7. $ ssh <web/ap server>
$ sudo yum update
...
$ exit
$ ssh <db server>
$ sudo yum update
• ssh serverA
...
$ exit
• sudo yum update
$ ssh <scm server>
$ sudo yum update
...
$ exit
• お茶を飲んで待つ
$ ssh <pm server>
$ sudo yum update
...
• exit
$ exit
$ ssh <ci server>
• 以下5回繰り返し
$ sudo yum update
...
$ exit
...
8. $ scp foo.pub <web/ap server>:.
$ ssh <web/ap server>
$ sudo mv foo.pub /etc/ssh/keys/
$ chown root:root /etc/ssh/keys/foo.pub
$ exit
• ssh serverA
$ scp foo.pub <db server>:.
$ ssh <db server>
$ sudo mv foo.pub /etc/ssh/keys/
• sudo yum update
$ chown root:root /etc/ssh/keys/foo.pub
$ exit
$ scp foo.pub <scm server>:.
• お茶を飲んで待つ
$
$
$
$
ssh <scm server>
sudo mv foo.pub /etc/ssh/keys/
chown root:root /etc/ssh/keys/foo.pub
exit
• exit
$
$
scp foo.pub <pm server>:.
ssh <pm server>
• 以下5回繰り返し
$ sudo mv foo.pub /etc/ssh/keys/
$ chown root:root /etc/ssh/keys/foo.pub
$ exit
...
22. 実行
$ fab -H localhost,linuxbox host_type
[localhost] run: uname -s
[localhost] out: Darwin
[linuxbox] run: uname -s
[linuxbox] out: Linux
Done.
Disconnecting from localhost... done.
Disconnecting from linuxbox... done.
24. 定義済みタスクの表示
# coding: utf8 $ fab -l
u"""
max747.org の管理用
max747.org の管理用
"""
Available commands:
from fabric.api import sudo, task
@task package_update パッケージをアップデートします.
def package_update():
u"""パッケージをアップデートします.""" reboot マシンをリブートします.
distro = _get_distro() shutdown マシンをシャットダウンします.
if distro == "Debian":
sudo("apt-get -y upgrade")
elif distro == "Redhat":
sudo("yum -y update")
def _get_distro():
...
return "Debian"
@task
def shutdown():
u"""マシンをシャットダウンします."""
sudo("shutdown -h now")
@task
def reboot():
u"""マシンをリブートします."""
sudo("reboot")
27. ファイルの存在チェック
from fabric.api import sudo, put
from fabric.contrib.files import exists
def upload_keys():
if exists(“/etc/ssh/keys”):
put(“keys”, “/tmp”)
sudo(“mv /tmp/keys/* /etc/ssh/keys”)
28. カレントディレクトリの保持
from fabric.api import cd, sudo
def package_update():
with cd(“/usr/local/src”):
sudo(“tar xvf foo-1.0.tar.gz”)
with cd(“/usr/local/src/foo-1.0”):
sudo(“./configure”)
sudo(“make”)
sudo(“make install”)
Editor's Notes \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n