Fabric的使用

原创
2016/09/05 23:04
阅读数 414

一.初识:

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 指定其他脚本文件。

展开阅读全文
打赏
0
2 收藏
分享
加载中
更多评论
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部