Fabric的使用-创新互联

一.初识:

成都创新互联公司长期为1000多家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为巫山企业提供专业的成都网站建设、网站设计,巫山网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

Fabric是python下的一个库,是可通过ssh批量管理多台主机的一种方式。不需要在远程主机上安装客户端,这点跟Ansible挺像,在使用上也感觉更方便,会python语言就没其它的问题了。

二.安装(centos):

1.通过包管理器: yum install python-pip

        pip install fabric

这种方式很快捷,在源码安装会碰到的许多依赖问题,都可以快速过。

2.通过下源码包,编译安装(好处是可以自定义文件目录了,这种方式的话可以python也一并重新装了,系统自带的往往较旧了)

I:下载python压缩包解压进入相应目录执行:

./configure --prefix=/data/soft/python2

make

make install

mv /usr/bin/python /usr/bin/python_old

ln -s /data/soft/python2/bin/python /usr/bin/python

II:安装setuptools工具 : 进入解压后的文件目录,执行 :  python setup.py install

III:安装pip: 进入pip包解压后的文件目录:执行 python setup.py build & python setup.py instll

IV:安装fabric: pip install fabric

三.Fabric 语法

  1. 常用选项参数:

    -l:显示定义好的任务函数名称

    -f:指定fab入口文件,默认文件名为fabfile.py(即与fabfile.py 在同级目录下,可直接省略-f选项)

    -g:指定网关

    -H:指定主机名,多主机使用逗号隔开

    -P:以异步并行方式运行多主机任务,缺省情况下同步运行;

    -R:指定role以角色区分不同业务组设备;

    -t:设置主机连接TimeOut时间(Second);

    -T:设置远程主机命令执行Timeout时间

    -w:当命令执行失败,发出街区,而非默认中止命令。

    -p:连接主机的密码

2.几个关键全局属性:

env.host:定义目标主机,以Python列表的形式定义,如env.host=['host01', 'host02']

env.exclude_hosts:排队指定主机

env.user:定义远程用户名

env.port:定义远程端口

env.password:定义远程密码

env.passwords:与上功能一致,区别在于不同主机不同密码的应用场景,需要注意的是,配置passwords时需要配置用户、主机、端口等信息,如:

env.passwords = {

  'root@host01:22' : 'cccid'

  'root@host02:22' : 'aabcd'

}

env.gateway:定义网关(中转、堡垒机)IP,如env.gateway='192.168.19.21'

env.deploy_release_dir:自定义全局变量,格式:env.+variable_name,如:env.deploy_release_dir、env.age、env.sex等

env.roledefs:定义角色分组,如web组与DB组区别出来:

env.roledefs = {

   'webservers' : ['192.168.1.24', '192.168.1.27']

   'dbservers' : ['192.168.2.24', '192.168.2.25']

}

3.重要接口:

I:run  用来在一台或者多台远程主机上面执行shell 命令。

使用方式如: run('ls /data')

II:local  执行本机的命令或脚本

使用方式如:local(‘ifconfig')

III: get  从远程主机拷贝文件到本地

get下有两个属性:

remote_path ; local_path

使用方式如:get(remote_path="/tmp/xxx.log", local_path="/tmp/xxx.log")  其中的remote_pat 与 local_path 可以省略。

IV:  put  从本地传文件到远程主机

put下有三个属性:

remote_path ; local_path;mode

使用方式:如:upload = put("requirements.txt", "requirements.txt", mode=664)

注:属性名均可省略不写

V: sudo   执行远程主机乌版图下 的sudo命令

VI:cd  执行远程主机的切换目录命令

使用方式如:  cd('/data')

使用方式如: sudo ('cat /etc/passwd')

VII: lcd  执行本地切换目录的命令

使用方式如:lcd('/tmp')

4.官方文档下的简易例子:

官网提供了一个简单的例子:

# vi fabfile.py

#!/usr/bin/env python

from fabric.api import run

def host_type():

  run('uname -s')

执行方式:  fab -H 192.168.198.202  host_type

fab 命令缺省情况下引用当前目录下的fabfile.py,若非此文件名,须加上-f参数

5. fabric 的API的所有模块:

from fabric.api import abort, cd, env, get, hide, hosts, local, prompt,

  put, require, roles, run, runs_once, settings, show, sudo, warn

四.附加例子-文件上传,多主机批量执行命令与脚本

#! /usr/bin/env python

from fabric.api import env,roles,run,execute,cd,put

## 也可以 from fabric.api import *  这样省事便捷

env.roledefs={

    'server1':['root@119.29.93.15:22',],

    'server2':['root@119.29.21.85:22',]

}

env.passwords={

    'root@119.29.93.15:22':'*******' ,

    'root@119.29.21.85:22':'********'

}

def sendfile():

    put('/data/wyh/test/haha.sh','/data')

@roles('server1')

def task1():

    run ('ls /data -l |wc -l')

    with cd('/data'):

        run ('ls ')

        sendfile()

        run('/bin/sh haha.sh')

@roles('server2')

def task2():

    run('df -lh')

    with cd('/data'):

        run('ls ')

        sendfile()

        run('/bin/sh haha.sh')

def test():

    execute(task1)

    execute(task2)

执行方式:fab test

备注:脚本文件名为fabfile.py 执行的时候,应先进入脚本所在目录。或者加参数 -f 指定其他脚本文件。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:Fabric的使用-创新互联
本文网址:http://hbruida.cn/article/cecgeh.html