Хозяева не найдены: Ткань
когда я запускаю свой код на 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()
Ответ 3
Чтобы заставить хосты работать в script за пределами инструмента командной строки fab и файла fabfile.py, вам нужно будет использовать выполнить():
from fabric.tasks import execute
def mytask():
run('uname -a')
results = execute(mytask)
Ответ 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.
Теперь у меня есть такое же сообщение, что и у вас. Не знаю, почему.