Хосты не найдены: Fabric - PullRequest
       4

Хосты не найдены: Fabric

15 голосов
/ 03 апреля 2011

когда я запускаю свой код Python, он запрашивает хост.

Хосты не найдены. Пожалуйста, укажите (одну) строку хоста для подключения:

У меня есть следующий код:

from fabric.api import *
from fabric.contrib.console import confirm

env.hosts = [ 'ipaddress' ]

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

remoteRun();

Я даже пытался запустить fab с опцией -H, и я получаю то же сообщение Я использую Ubuntu 10.10, любая помощь приветствуется. Кстати, я новичок в Python.

Ответы [ 6 ]

15 голосов
/ 19 августа 2012

Чтобы заставить хосты работать в сценарии вне утилиты командной строки fab и fabfile.py, вам придется использовать execute () :

from fabric.api import run
from fabric.tasks import execute

def mytask():
    run('uname -a')

results = execute(mytask)
15 голосов
/ 25 мая 2011

Если это только один хост, вы можете использовать env.host_string = 'somehost or ipaddress'.

Вам также не нужен ; в конце вашего remoteRun.

from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
from fabric.api import env, run

env.host_string = 'ipaddress'

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

remoteRun()
6 голосов
/ 03 апреля 2011

Я не совсем уверен, что remoteRun(); должен делать в вашем примере.

Это часть вашего fabfile или ваша терминальная команда для запуска скрипта?

В вашей оболочке будет правильная команда:

fab remoteRun

Как правило, лучше указать конкретные хосты, на которых ваша команда должна работать, так:

def localhost():
    env.hosts = [ '127.0.0.1']

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

Вы можете запустить его так из терминала (при условии, что вы находитесь в каталоге, в котором находится ваш файл):

fab localhost remoteRun

В качестве альтернативы вы можете указать хост с параметром -H:

fab -H 127.0.0.1 remoteRun

Если у вас есть список хостов, для которых вы хотите вызвать команду, сделайте это следующим образом: http://readthedocs.org/docs/fabric/latest/usage/execution.html

С учетом вашего примера:

env.hosts = [ 'localhost', '127.0.0.1']

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

И звонил через: fab remoteRun

Таким образом, remoteRun выполняется на всех хостах в env.hosts.

5 голосов
/ 08 июля 2012

@ Nerdatastic подходит просто: не используйте env.hosts, вместо этого используйте env.host_string. например,

def setup_db_server
  env.host_string = 'db01.yoursite.com'   # or the ip address
  run("mysqladmin ...")
end 

и выполнение $ fab setup_db_server выполнит сценарий на целевом сервере.

4 голосов
/ 19 октября 2011

Nerdatastic прав, вам нужно указать env.host_string varaible для fabric, чтобы знать, какую строку хоста использовать.Я столкнулся с этой проблемой, пытаясь использовать подкласс Task и вызывать метод run ().Кажется, он игнорирует env.hosts, за исключением случаев использования execute из fabric.tasks в версии 1.3.

0 голосов
/ 06 апреля 2011

У меня та же проблема.

Я думаю, что это ошибка.Потому что все работают до сегодняшнего дня.Я храню свой env в .fabricrc.

Теперь у меня такое же сообщение, как и у вас.Не знаю почему.

...