fabric2実行環境をdocker内に構築してローカルPCからリモートサーバにコマンドを投げる
fabric構築
Python実行環境
code:Dockerfile
FROM python:3.6
RUN pip install fabric
RUN mkdir /root/src /root/.ssh
WORKDIR /root/src
これでPython3.6とfabricがインストールされる
下記のコードで確認
code:bash
docker run -it TAG python --version
docker run -it TAG pip --version
docker run -it TAG fab --version
SSH接続設定
$HOME/.ssh/configに接続に必要な情報を全部書く
Pythonスクリプト実装
リモートのホスト名を確認してみる
code:src/fabfile.py
from invoke import task, Exit, run
from fabric import Connection, Config
Config.ssh_config_path = '/root/.ssh/config'
@task
def dev(c):
# app-devという名前でssh_configに登録している前提
c = Connection("app-dev")
c.run('hostname')
Docker経由でfabricを実行
最終的に下記のディレクトリ構造になる
code:dir
.
./src
./src/fabfile.py
./Dockerfile
このファイル構成の状態で下記のコマンドを実行する。
docker run -v $(pwd)/src:/root/src -v $HOME/.ssh:/root/.ssh fab dev
app-devのホスト名が出力される
所感
fabric1系使ったほうがまだ楽
fabric2はできることがまだ少ない
ググるのが非常にダルい
pythonバージョンの違いはDockerでラッピングしてしまっているので最悪2系を使い続けることも可能
以上