fabfile用户信息要求

时间:2016-06-30 12:09:23

标签: python fabric

远程服务器正在通过ssh密钥禁用身份验证,因此当我部署新版本时,我需要输入我的密码(某些LDAP身份验证)。

但是,我的fabfile脚本将被许多开发人员使用。所以,每个人都必须以某种方式为脚本提供他的用户名。

我想到了这个:

def authenticate(login=None):
   if login is None:
      abort('You must provide your username')
   ...

@task
def deploy(username=None):
   authenticate(username)
   ...

@task
def init(username=None):
   authenticate(username)
   ...

@task
def rollback(username=None):
   authenticate(username)
   ...

@task
def restart_services(username=None, service=None):
   authenticate(username)
   ...

这很好但不是DRY

脚本用户authenticate是否有干净的方法?

1 个答案:

答案 0 :(得分:2)

如果您的问题是DRY,您可以使用装饰器

def authenticate(f):
    @functools.wraps(f) 
    def wrapper(login, *args, **kwargs):
       if login is None:
          abort('You must provide your username')
       return f(*args, **kwargs)
    return wrapper

然后

@task
@authenticate
def deploy(whatever):
    ....