我如何获得没有找到主机.请指定(单个)主机字符串进行连接:
如何解决面料问题?
def bootstrap():
host = 'ec2-54-xxx.xxx.xxx.compute-1.amazonaws.com'
env.hosts = [host]
env.user = "ubuntu"
env.key_filename = "/home/ubuntu/omg.pem"
> command run
>> fab bootstrap
> No hosts found. Please specify (single) host string for connection:
Run Code Online (Sandbox Code Playgroud) 当我运行我的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的新手.
我刚刚偶然发现了Fabric,文档并没有真正说明它是如何工作的.
我有根据的猜测是你需要在客户端和服务器端安装它.Python代码存储在客户端,并在运行命令时通过Fabric的wire-protocol传输.服务器通过~/.ssh/authorized_keys当前用户(或特殊用户,或在fab命令的主机名中指定)的文件接受使用OpenSSH SSH守护程序的连接.
这是否正确?如果没有,它是如何工作的?
我正在使用Fabric 1.01,在我的fabfile中我正在使用put命令.这条线是:
put('file.tar.gz', '~/file.tar.gz')
Run Code Online (Sandbox Code Playgroud)
服务器位于env.hosts列表中. file.tar.gz与fabfile位于同一目录中,我正在运行此目录中的代码.
当我运行代码时,它会达到运行此put命令的程度.在失败之前输出是:
[uname@site.com] put: file.tar.gz -> ~/file.tar.gz
Fatal error: put() encountered an exception while uploading 'file.tar.gz'
Underlying exception message:
No such file
Run Code Online (Sandbox Code Playgroud)
谁知道这是从哪里来的?该文件肯定存在于我的本地机器上,我也尝试将第二个put()参数作为'/ server/path/to /',我尝试使用该文件的绝对路径进行第一次put()争论,一切都无济于事.
我正在尝试使用fabric自动部署应用程序.
应用程序代码托管在GitHub上,推出一个新版本非常简单 - 只需要'git pull'就可以了.该应用程序托管在100台服务器上,因此我希望自动部署.Fabfile.py:
def deploy():
code_path = '/home/myuser/myapp'
with cd(code_path):
run('git pull')
run('git submodule update --init --recursive')
Run Code Online (Sandbox Code Playgroud)
问题是,在每个git命令我得到一个promt Enter passphrase for key '/home/myuser/.ssh/id_rsa::
有没有办法自动输入密码?它在每台服务器上都是一样的,与sudo密码相同
我曾尝试过访问库,但我想知道是否有更好的(即标准的)方法.
我遇到了面料模块 - 非常酷.这对我来说很有用.现在我有一个问题,如何从结构脚本中收集输出?
# cat fabfile.py
from fabric.api import *
from fabric.contrib.console import confirm
env.hosts = ['localhost' , '172.16.10.112','172.16.10.106']
env.user='testuser'
env.password = 'testuser'
@parallel
def uptime():
run('uname -a')
Run Code Online (Sandbox Code Playgroud)
我想使用带有结构的日志记录模块并在代码本身内使用它们.-不想使用正常的重定向,如"fab uptime&> log.out"
我将通过编写一个简单的fabfile 来安装check_mk插件:
from fabric.api import env, run, roles, execute, parallel
env.roledefs = {
'monitoring': ['192.168.3.118'],
'mk-agent': ['192.168.3.230', '192.168.3.231', '192.168.3.232']
}
@roles('monitoring')
def mk():
run('[ -f check_mk-1.1.12p7.tar.gz ] || wget http://mathias-kettner.de/download/check_mk-1.1.12p7.tar.gz')
run('[ -d check_mk-1.1.12p7 ] || tar zxvf check_mk-1.1.12p7.tar.gz')
run('cd check_mk-1.1.12p7 && sudo ./setup.sh')
@parallel
@roles('mk-agent')
def mk_agent():
run('[ `rpm -qa | grep -c xinetd` -eq 0 ] && sudo yum -y install xinetd.x86_64')
run('sudo rpm -ivh http://mathias-kettner.de/download/check_mk-agent-1.2.0b2-1.noarch.rpm')
def check_mk():
execute(mk)
execute(mk_agent)
Run Code Online (Sandbox Code Playgroud)
但是,正如您可以猜到的,如果xinetd已经安装了软件包,Fabric将停止并出现以下错误:
Fatal error: run() received …Run Code Online (Sandbox Code Playgroud) 我在一个相当标准化的目录结构中对不同的项目(我是一名科学家)做了很多工作.例如:
project
/analyses/
/lib
/doc
/results
/bin
Run Code Online (Sandbox Code Playgroud)
我将所有各种实用程序脚本放在/ bin /中,因为清洁度与敬虔相关.但是,我必须硬编码路径(例如../../x/y/z)然后我必须在./bin/中运行它们或者它们会中断.
我已经使用了Django,它有/manage.py运行各种django-things并自动处理路径.我还使用了fabric来运行各种用户定义的函数.
问题:我该如何做类似的事情?什么是最好的方式?我可以很容易地在/manage.py中写一些内容来将root目录注入sys.path等,但是我希望能够执行"./manage.py foo"运行/bin/foo.py.或者是否可以让Fabric从某个目录中调用可执行文件?
基本上 - 我想要一些简单和低维护的东西.我希望能够将可执行脚本/文件/删除到./bin/中,而不必处理路径问题或导入问题.
做这个的最好方式是什么?
fabric ×10
python ×8
django ×1
exitstatus ×1
git ×1
logging ×1
passphrase ×1
pexpect ×1
ssh-keys ×1