Fabric入門の入門

◼︎ 目次

  1. 概要
  2. Fabricとは
  3. インストール方法
  4. 使い方
  5. fabfileの書き方
  6. remoteホストに対して実行する
  7. 並列で実行する
  8. 参考

◼︎ 概要

サーバ上で手順化されている作業を自動化してくれるFabricについてまとめます

便利で簡単なので勉強して損は無いかと思います

自分としても使い方などが気になっていたため入門の入門としてまとめます

◼︎ Fabricとは

  • コマンドライン上で任意のPython関数を実行するツール
  • 関数なので1回コマンドを実行するだけで複数のコマンドを実行することができる
  • localホストのサーバへ実行することは勿論、remoteサーバに実行することができる
  • remoteサーバ3台に実行させたい場合、並列で実行することができる

◼︎ インストール方法

参考:fabricインストール(CentOS6.5)

$ sudo yum groupinstall "Development Tools" “Base”
$ sudo yum install zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel python-setuptools python-devel
$ sudo easy_install pip
$ sudo pip install fabric
$ sudo pip install setuptools --no-use-wheel --upgrade
$ sudo pip uninstall pycrypto
$ sudo pip install PyCrypto==2.3

動作確認

$ fab -V
Fabric 1.10.2
Paramiko 1.16.0

◼︎ 使い方

fabfileを用意する

$ cat fabfile.py
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.colors import *

def hello():
    # Hello world!を表示させるだけのタスク
    print("Hello world!")

def test_task1():
    # /tmp/testのファイルが何件あるか調べる
    run('ls -l /tmp/test | wc -l')

    # /tmp/testを作成(既に作成済みならタイムスタンプを更新)
    sudo('touch /tmp/test')

    # 完了した旨出力させる
    print(green("test_task1 complete!!"))

def test_task2():
    # /tmp/testを作成(既に作成済みならタイムスタンプを更新)
    sudo('touch /tmp/test')

    # /tmp/testtttttのファイルが作成されているか確認
    if int(run('ls -l /tmp/testttttt 2>/dev/null | wc -l')) != 1:
        # 無かったらエラーを出して終了
        abort(red("/tmp/testttttt file is not exists !!"))

    # 完了した旨出力させる
    print(green("test_task2 complete!!"))

このfileを用意したことで以下のタスクが存在する

$ fab -l
Available commands:

    hello
    test_task1
    test_task2

実際に使ってHellow world!を出力させる

// -I パスワードを最初に入力する
// -H ホストを記述
$ fab -I hello -H localhost
Initial value for env.password:
[localhost] Executing task 'hello'
Hello world!

Done.

コマンドを複数記述したtest_task1を実行させる
test_fab1
順次実行して「test_task1 complete!!」が緑色の文字色で出力されていることを確認

Python形式に書けるのでif文も含めることができる
test_fab2
/tmp/testのファイルを作成したので/tmp/testtttttがないのは当然
abortしたことによってその後の処理は続かない

◼︎ fabfileの書き方

構文など書き方としてはpythonで記述できる
サンプルで出した例を見てもらうとわかる通りrun(‘コマンド’)とsudo(‘rootまたは別ユーザとして実行させるコマンド’)さえ覚えていればほとんど困らない

◼︎ remoteホストに対して実行する

以下のfabfileを用意する

$ cat fabfile.py
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.colors import *
def test_remote():
    run('ls')

実行する

// -i 秘密鍵の指定
// -u SSHするユーザ名の指定
$ fab -I -H XXX.XXX.XXX.XXX -i ~/.ssh/id_rsa -u user test_remote
Initial value for env.password:
[52.193.114.144] Executing task 'test_remote'
[52.193.114.144] run: ls
[52.193.114.144] out: letsencrypt  mysql_history
[52.193.114.144] out:


Done.
Disconnecting from XXX.XXX.XXX.XXX ... done.

◼︎ 並列で実行する

-P オプションを付与させると並列で実行できる

// XXX.XXX.XXX.XXXとlocalhostに対して実行させる
$ fab -I -P -H XXX.XXX.XXX.XXX,localhost -u user test_remote
 

◼︎ 参考


Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です