我有一个fabfile:
env.user = 'deploy'
def infra():
"""You need to use a user that can root itself, deploy cannot without a
password."""
put('conf.d/etc/nginx/sites-available/www.foo.hk',
'/etc/nginx/sites-available/www.foo.hk', use_sudo=True)
sudo('nginx -s reload',)
我喜欢跑fab infra -Rservers
。
--user=root or -u root
所以我想我可以在运行时覆盖用户,fab infra --user=root
但它仍然要求我输入密码。但是,如果我改变env.user
它env.user = 'root'
不会。我还可以使用设置上下文管理器,例如:
def infra(user):
"""You need to use a user that can root itself, deploy cannot without a
password."""
with settings(user=user):
put('conf.d/etc/nginx/sites-available/www.foo.hk',
'/etc/nginx/sites-available/www.foo.hk', use_sudo=True)
sudo('nginx -s reload',)
当我这样做时,它会起作用fab infra:root -Rservers
。很明显,可以覆盖设置,但似乎我不能从正常的命令行标志。难道我做错了什么?