15 Stimmen

Keine Hosts gefunden: Fabric

Wenn ich meinen Python-Code ausführe, wird nach dem Host gefragt.

Keine Hosts gefunden. Bitte geben Sie einen (einzelnen) Hoststring für die Verbindung an:

Ich habe den folgenden Code:

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();

Ich habe sogar versucht, fab mit der Option -H auszuführen und erhalte die gleiche Meldung. Ich benutze Ubuntu 10.10 jede Hilfe wird geschätzt. Btw Ich bin ein Neuling in Python.

16voto

Gringo Suave Punkte 27545

Damit Hosts in einem Skript außerhalb des fab-Kommandozeilen-Tools und fabfile.py funktionieren, müssen Sie execute() verwenden :

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

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

results = execute(mytask)

15voto

Colin Wood Punkte 465

Wenn es nur ein Host ist, können Sie env.host_string = 'somehost or ipaddress' .

Sie brauchen auch nicht die ; am Ende Ihrer 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()

6voto

arie Punkte 18225

Ich bin nicht genau sicher, was remoteRun(); in Ihrem Beispiel tun soll.

Ist dies ein Teil Ihrer Fabdatei oder ist dies Ihr Terminalbefehl zum Aufrufen des Skripts?

Der richtige Weg wäre ein Befehl wie dieser in Ihrer Shell:

fab remoteRun

Im Allgemeinen ist es besser, die konkreten Hosts, auf denen Ihr Befehl ausgeführt werden soll, wie folgt anzugeben:

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

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

Sie können es wie folgt von einem Terminal aus starten (vorausgesetzt, Sie befinden sich in dem Verzeichnis, das Ihre fabfile enthält):

fab localhost remoteRun

Alternativ können Sie den Host auch mit dem Parameter -H angeben:

fab -H 127.0.0.1 remoteRun

Wenn Sie eine Liste von Hosts haben, für die Sie den Befehl aufrufen möchten, gehen Sie folgendermaßen vor: http://readthedocs.org/docs/fabric/latest/usage/execution.html

Angepasst an Ihr Beispiel:

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

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

Und über angerufen: fab remoteRun

Auf diese Weise wird die remoteRun wird auf allen Hosts in env.hosts .

5voto

Siwei Punkte 16939

@Nerdatastic hat Recht, für einfach: verwenden Sie nicht env.hosts, verwenden Sie stattdessen env.host_string. z.B.

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

und Laufen $ fab setup_db_server wird das Skript auf dem Zielserver ausgeführt.

4voto

Edvinas Punkte 675

Nerdatastic hat Recht, Sie müssen die Variable env.host_string angeben, damit fabric weiß, welcher Hoststring zu verwenden ist. Ich bin auf dieses Problem gestoßen, als ich versuchte, eine Unterklasse von Task zu verwenden und die run()-Methode aufzurufen. Es schien env.hosts zu ignorieren, außer bei der Verwendung von execute from fabric.tasks in Version 1.3.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X