Aqui está um pequeno esboço para facilitar a execução de comandos ad-hoc dentro de instâncias do Vagrant:
from fabric.api import env, local, run
def vagrant():
"""Allow fabric to manage a Vagrant VM/LXC container"""
env.user = 'vagrant'
v = dict(map(lambda l: l.strip().split(),local('vagrant ssh-config', capture=True).split('n')))
# Build a valid host entry
env.hosts = ["%s:%s" % (v['HostName'],v['Port'])]
# Use Vagrant SSH key
if v['IdentityFile'][0] == '"':
env.key_filename = v['IdentityFile'][1:-1]
else:
env.key_filename = v['IdentityFile']
def uname():
"""Classic example"""
run('uname -a')
E aqui está o resultado:
$ fab vagrant uname
[localhost] local: vagrant ssh-config
[10.0.3.86:22] Executing task 'uname'
[10.0.3.86:22] run: uname -a
[10.0.3.86:22] out: Linux wheezy 3.8.0-23-generic #34-Ubuntu SMP Wed May 29 20:22:58 UTC 2013 x86_64 GNU/Linux
Done.
Disconnecting from 10.0.3.86... done.