标签:fabric
一.初识:
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 语法
常用选项参数:
-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 指定其他脚本文件。
标签:fabric
原文地址:http://wyh550.blog.51cto.com/10089932/1833447