Fabric入門の入門

Published: 2016年2月22日 by tomsato

◼︎ 概要

サーバ上で手順化されている作業を自動化してくれる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
 

◼︎ 参考

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧