おはげようございます。

tl;dr

fabric で何がしたかったか?

  • ssh の config ファイルに定義したホスト名を利用したい
  • ついでに ssh の config ファイルのデフォルト(.ssh/config)以外を利用したい

参考

http://fabric-ja.readthedocs.org/ja/latest/usage/env.html#the-environment-dictionary-env

超ざっくり fabric とは…

  • Python 製のデプロイツール
  • Ruby 製で言うと Capistrano にあたると思っている

サンプル(1)

ssh の config ファイル(~/.ssh/config)を利用したい場合。

from fabric.api import local, run, put, env

env.use_ssh_config = True

def upload():
  put('from/file', 'to/file')
  • env.use_ssh_config = True を指定する

以下、雑なデモ。

# config ファイルを確認
$ cat ~/.ssh/config
Host centos01
    HostName        127.0.0.1
    Port            32768
    IdentityFile    /path/to/key
    User            ansible

# fabric スクリプトを確認
$ cat test.py
from fabric.api import local, run, put, env

env.use_ssh_config = True

def upload():
  put('sample', 'sample')

# デプロイ(ファイルをアップロード)
$ fab -H centos01 -f test.py upload
[centos01] Executing task 'upload'
[centos01] put: sample -> sample

Done.
Disconnecting from ansible@127.0.0.1:32768... done.

# 確認
$ ssh centos01 'ls'
sample

サンプル(2)

ついでに config ファイルを別ファイルに指定する場合。

from fabric.api import local, run, put, env

env.use_ssh_config = True
env.ssh_config_path = "/path/to/other_ssh_config"

def upload():
  put('from/file', 'to/file')
  • env.use_ssh_config = True を指定する
  • env.ssh_config_path = "/path/to/other_ssh_config" で別ファイルを指定する

以下、雑なデモ。

# config ファイルを確認
$ cat ~/.ssh/sample_config
Host centos01
    HostName        127.0.0.1
    Port            32768
    IdentityFile    /path/to/key
    User            ansible

# fabric スクリプトを確認
$ cat test.py
from fabric.api import local, run, put, env

env.use_ssh_config = True
env.ssh_config_path = "~/.ssh/sample_config"

def upload():
  put('sample', 'sample')

# デプロイ(ファイルをアップロード)
$ fab -H centos01 -f test.py upload
[centos01] Executing task 'upload'
[centos01] put: sample -> sample

Done.
Disconnecting from ansible@127.0.0.1:32768... done.

以上。

元記事はこちら

(超メモ)fabric で ssh の config ファイルを指定する、利用する