我有一个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
时,这是有效的。所以显然可以覆盖设置,但似乎我无法从正常的命令行标志。我做错了吗?
答案 0 :(得分:1)
目前无法以我想要的方式从命令行覆盖默认设置。 <{3}}虽然有一张票,但它似乎已经修好了。
答案 1 :(得分:0)
你有一个ticket open for this,我还展示了更像你在这里展示的例子。我的猜测是你不能事先在文件中设置env.user,因为那是一个显式的硬编码。
答案 2 :(得分:0)
我认为你在寻找:
fab infra:hosts=root@somehost
我不清楚相同的username@...
模式是否适用于角色或角色定义。