找不到主机:Fabric

bon*_*nzi 15 python fabric

当我运行我的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();
Run Code Online (Sandbox Code Playgroud)

我甚至尝试使用-H选项运行fab,我收到相同的消息.我正在使用Ubuntu 10.10任何帮助表示赞赏.顺便说一下,我是Python的新手.

Col*_*ood 15

如果它只是一个主机,您可以使用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()
Run Code Online (Sandbox Code Playgroud)


Gri*_*ave 15

为了让主机在fab命令行工具和fabfile.py之外的脚本中工作,你必须使用execute():

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

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

results = execute(mytask)
Run Code Online (Sandbox Code Playgroud)


ari*_*rie 6

我不确定remoteRun();你的例子应该做什么.

它是fabfile的一部分还是这个调用脚本的终端命令?

正确的方法是在shell中使用这样的命令:

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)
Run Code Online (Sandbox Code Playgroud)

您可以从终端运行它(假设您在包含fabfile的目录中):

fab localhost remoteRun
Run Code Online (Sandbox Code Playgroud)

作为替代方法,您可以使用-H参数指定主机:

fab -H 127.0.0.1 remoteRun
Run Code Online (Sandbox Code Playgroud)

如果您有要为其调用命令的主机列表,请执行以下操作: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)
Run Code Online (Sandbox Code Playgroud)

并呼吁通过: fab remoteRun

这样就remoteRun可以在所有主机上执行env.hosts.


Siw*_*申思维 5

@Nerdatastic是对的,简单来说:不要使用env.hosts,而是使用env.host_string.例如

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

并且运行$ fab setup_db_server 将在目标服务器上执行脚本.