--user = root似乎没有覆盖fabric env.user,怎么来的?

时间:2012-07-12 06:16:28

标签: fabric

我有一个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时,这是有效的。所以显然可以覆盖设置,但似乎我无法从正常的命令行标志。我做错了吗?

3 个答案:

答案 0 :(得分:1)

目前无法以我想要的方式从命令行覆盖默认设置。 <{3}}虽然有一张票,但它似乎已经修好了。

答案 1 :(得分:0)

你有一个ticket open for this,我还展示了更像你在这里展示的例子。我的猜测是你不能事先在文件中设置env.user,因为那是一个显式的硬编码。

答案 2 :(得分:0)

我认为你在寻找:

fab infra:hosts=root@somehost

我不清楚相同的username@...模式是否适用于角色或角色定义。

http://docs.fabfile.org/en/1.2.0/usage/execution.html