fanjp666888

先上一段简单的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/ 

 

分类:

技术点:

相关文章:

  • 2021-04-28
  • 2021-11-21
  • 2021-04-11
  • 2021-06-22
  • 2021-07-04
  • 2021-07-05
  • 2022-01-01
  • 2022-01-01
猜你喜欢
  • 2021-05-17
  • 2022-12-23
  • 2021-06-19
  • 2022-01-01
  • 2022-01-09
  • 2021-10-21
  • 2021-08-18
相关资源
相似解决方案