Чуть менее элегантно, чем ответ Варуна , но может быть более практичным, если по умолчанию запускаться на локальной машине, если не указан другой селектор среды.
from fabric.api import *
# default to running on localhost
env.hosts = ["localhost"]
DEPLOYMENT_PATH = "/some/path/{}/"
def local_or_remote(*args, **kwargs):
func = local if env.host == "localhost" else run
return func(*args, **kwargs)
@task
def live():
"""
Select live environment
"""
env.hosts = ["host1", "host2"]
env.path = DEPLOYMENT_PATH.format("live")
@task
def beta():
"""
Select beta environment
"""
env.hosts = ["host1", "host2"]
env.path = DEPLOYMENT_PATH.format("beta")
@task
def host_info():
local_or_remote("uname -a")
Затем выполнить локально как1006 *
fab host_info
или удаленно с:
fab live host_info
PS.Вот проблема Github на эту тему.