博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Fabric的使用
阅读量:6877 次
发布时间:2019-06-26

本文共 3312 字,大约阅读时间需要 11 分钟。

hot3.png

一.初识:

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 pythonfrom fabric.api import rundef 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 pythonfrom 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 指定其他脚本文件。

转载于:https://my.oschina.net/szwyh2014/blog/742787

你可能感兴趣的文章
学会倾听-情商培养
查看>>
教你快速查找ARP病毒源技巧三则
查看>>
客户端不能连接mysql的问题
查看>>
向PLIST文件中追加数据
查看>>
exchange2007配置发送、接收附件大小
查看>>
iOS 索引列 使用详解
查看>>
我的友情链接
查看>>
centos 安装
查看>>
我的友情链接
查看>>
2014 工作计划
查看>>
装饰器
查看>>
http_proxy_module模块常用参数
查看>>
jsp中c标签的使用
查看>>
LINUX安装详解
查看>>
struts2+json(4)
查看>>
mongodb数据库特点(包括评论、点赞的数据库字段设计)
查看>>
渺小的自己
查看>>
我的友情链接
查看>>
用PHP读取和编写XML DOM5
查看>>
win10安装net 3.5
查看>>