2012-07-12 1 views
3

У меня есть fabfile с:--user = root, похоже, не переопределяет ткань env.user, как получилось?

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

какая версия ткани вы используете? – Morgan

ответ

1

Это не в настоящее время можно переопределить значение по умолчанию из командной строки так, как я хотел. Там есть билет, хотя https://github.com/fabric/fabric/issues/680, и похоже, что он будет исправлен.

0

У вас есть ticket open for this, я также показал пример там больше, как вы показали здесь. Я предполагаю, что вы не можете предварительно установить env.user в файл, так как это явное hardcoding.

0

Я думаю, что вы ищете:

fab infra:[email protected] 

Неясно мне, работает ли тот же [email protected] модель с ролями или roledefs.

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

+0

Я не могу указать хост в командной строке, потому что они меняются. Похоже, вы не можете этого сделать: https://github.com/fabric/fabric/issues/680 –