zoukankan      html  css  js  c++  java
  • Fabric SSH链接时关于找不到主机的问题

    先上一段简单的fabric代码:

    from __future__ import with_statement
    from fabric.api import *


    env.user = 'zhangsan'

    env.hosts = ['192.168.1.1']
    env.password = '123456'

    with settings(warn_only=True):
    local('pwd')

    with cd('/home/jianping.fan'):
    run('ls')

     当执行代码后出现:No hosts found. Please specify (single) host string for connection:

    出现该错误的原因是fabric的环境env有hosts和hosts_string俩种方法,前者是连接多台机器,而后者是单台链接,按官方文档的说法,使用hosts指定主机,会遍历该列表中主机ip,但实际执行中并没有这样做,猜测也许与fabric的版本有关系.我安装的版本号是:1.14.0

    因此,将env.hosts = ['192.168.1.1] 改成env.hosts_string = '192.168.1.1'即可解决单台机器的连接问题. 

     附Fabric env对象和常用API

     env对象:

    env.hosts   #定义目标主机,可以用IP或主机名表示,以python的列表形式定义。如env.hosts=['192.168.1.21','192.168.1.22']
    env.exclude_hosts   #排除指定主机,如env.exclude_hosts=['192.168.1.21']
    env.user   #定义用户名,如env.user='root'
    env.port   #定义端口,默认为22,如env.port='22'
    env.password   #定义密码,如env.password='123456'
    env.passwords  #定义多个密码,不同主机对应不同密码,如:env.passwords = {'root@192.168.1.21:22':'123456','root@192.168.1.22:22':'654321'}
    env.gateway   #定义网关(中转、堡垒机)IP,如env.gateway='192.168.1.23
    env.roledefs   #定义角色分组,比如web组合db组主机区分开来:env.roledefs = {'webserver':['192.168.1.21','192.168.1.22'],'dbserver':['192.168.1.25','192.168.1.26']}
    env.deploy_release_dir   #自定义全局变量,格式:env. + '变量名称',如env.age,env.sex等

    env.roledefs的使用方法实例:

    env.roledefs = {'webserver':['192.168.1.21','192.168.1.22'],'dbserver':['192.168.1.25','192.168.1.26']}
    #引用分组时使用python装饰器方式来进行,如:
    @roles('webserver')
    def webtask():
        run('/usr/local/nginx/sbin/nginx')
    
    @roles('webserver','dbserver')
    def publictask():
        run('uptime'

    -----------------------------------------华丽的分割线----------------------------------------------------------------------------------------

     常用API:

    local    #执行本地命令,如local('uname -s')
    lcd      #切换本地目录,如lcd('/home')
    cd       #切换远程目录
    run     #执行远程命令
    sudo   #sudo方式执行远程命令,如sudo('/etc/init.d/httpd start')
    put     #上次本地文件导远程主机,如put('/home/user.info','/data/user.info')
    get     #从远程主机下载文件到本地,如:get('/data/user.info','/home/user.info')
    prompt  #获得用户输入信息,如:prompt('please input user password:')
    confirm  #获得提示信息确认,如:confirm('Test failed,Continue[Y/N]?')
    reboot   #重启远程主机,如:reboot()
    
    @task   #函数修饰符,标识的函数为fab可调用的,非标记对fab不可见,纯业务逻辑
    @runs_once   #函数修饰符,标识的函数只会执行一次,不受多台主机影响

    更多详细用法请移步官网: https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html 

           git:   https://github.com/fabric/fabric/ 

  • 相关阅读:
    BZOJ3752 : Hack
    XIV Open Cup named after E.V. Pankratiev. GP of SPb
    XIII Open Cup named after E.V. Pankratiev. GP of Ukraine
    BZOJ2087 : [Poi2010]Sheep
    BZOJ2080 : [Poi2010]Railway
    BZOJ2082 : [Poi2010]Divine divisor
    Moscow Pre-Finals Workshop 2016. National Taiwan U Selection
    XIII Open Cup named after E.V. Pankratiev. GP of Asia and South Caucasus
    XIII Open Cup named after E.V. Pankratiev. GP of Azov Sea
    XIII Open Cup named after E.V. Pankratiev. GP of SPb
  • 原文地址:https://www.cnblogs.com/fanjp666888/p/10844643.html
Copyright © 2011-2022 走看看