fabricでトンネルする

最近fabricを使っていろいろ作業しています。

で、踏み台サーバごしにアクセスする必要があるマシンがあるのですが、fabricの中でトンネルを作って作業したいなと思いました、ちょっと調べてみると https://gist.github.com/856179 にcodeがありましたので、それを利用させてもらいました。ありがとうございます。

具体的には以下のような感じにしました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from fabric.api import run, env

# 事前にtunnel.pyを https://gist.github.com/856179 から入手
from tunnel import make_tunnel

def staging():
    env.hosts = ['example1']

def get_hostname():
    with make_tunnel('your_tunnel_host_name') as t:
        run('hostname')

なお、env.host_stringを使っている場合は、tunnelの中でenv.host_stringを127.0.0.1に書き換えてしまいますので、withの前で別のところにとっておきましょう。