Хозяева не найдены: Ткань

когда я запускаю свой код на 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, любая помощь приветствуется. Btw Я новичок в Python.

Ответы

Ответ 1

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

Является ли это частью вашего файла fabfile или это ваша команда терминала для вызова script?

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

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.

Ответ 2

Если это только один хост, вы можете использовать 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()

Ответ 4

@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 будет выполнять script на целевом сервере.

Ответ 5

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

Ответ 6

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

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

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