百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 网站模板(百分百源码网)>电脑软件>服务器> 运维治理器Fabric运用要领
分享本文到:

运维治理器Fabric运用要领

发布时间:05/16 来源:未知 浏览: 关键词:

Fabric的安装

Fabric支撑pip,easy_install或源码方式安装,很利便解决包依赖题目,(依据会员环境,自行选中pip或ease_install)
pip install fabric
easy_install fabric

源码安装不介绍了。
校验安装效果,要是导入模块没有提醒异样,则注明安装成功:

root@Python_S6:~# python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import fabric
>>>

官网供给了一个简略的入门示例:

root@Python_S6:/home/chart7/test/fabric# cat farbic.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import run
 
def host_type(): #定义一个任务函数,通过run要领实现长途施行'uname -s'下令
  run('uname -s')

运转效果要是下图所示

wKioL1R32_KhwHwaAAK-ROg7uYQ972.jpg

下令援用默许文件名为fabfile.py,要是运用非默许文件名称,则需通过'-f'来拟定,如:fab -H 192.168.1.23,192.168.1.24 -f host_type.py host_type,要是治理机与指标主机未配置密钥认证信任,将提醒会输入指标主机对应账户登录密码。

一、fab的常用参数

fab作为Fabric程序的下令入口,供给了丰硕的参数调用,下令格局如下:
fab [options] <command>[:arg1,arg2=val2,host=foo,hosts='h1;h2',....]
下面列举了常用的几个参数,更多参数可运用fab -help查看.
-l,显示定义好的任务函数名;
-f,指定fab入口文件,默许入口文件名为fabfile.py;
-g,指定网关设施,比方营垒机环境,填写营垒机IP即可;
-H,指定指标主机,多台主机用','号分隔;
-P,以异步并行方式运转多个主机任务,默许为串交运行;
-R,指定role(角色),以角色名区分不一样业务组设施;
-t,设置设施连贯超时工夫;
-T,设置长途主机下令施行超时工夫;
-w,当下令施行失败,发出告诫,而非默许终止任务

二、fabfile的编写

fab下令是联合我们编写的fabfile.py(其他文件名必须增加-f filename援用)来搭配运用,局部下令行参数可以通过响应的要领来取代,使之更加灵活,列如"-H 192.168.1.23,192.168.1.24",我们可以通过定义env.hosts来实现,如"env.hosts=[192.168.1.23,192.168.1.24]".fabfile的主体由多个自定义的任务函数组成,不一样任务函数实现不一样的操纵逻辑,下面细致介绍

三、全局属性设定

env对象的作用是定义fabfile的全局设定,支撑多个属性,包括指标主机,会员,密码角色,各属性注明如下:

复制代码 代码如下:

env.host,定义指标主机,可以用IP或主机名表示,以Python的列表情势定义,如env.hosts=['192.168.1.23,192.168.1.24'].
env.exculde_hosts,排除指定主机,如env.exclude_hosts=['192.168.1.23']
env.user,定义会员名,如env.user="root"
env.port,定义指标主机端口,如env.port = '22'
env.password,定义密码,如env.password='123456'
env.passwords,与password功能同样,区别在于不一样主机不一样密码的利用场景,需要注意的是,配置passwords时需要配置会员,主机,端口等信息,如:env.passwords = {'root@192.168.1.21:22':'123456',
'root@192.168.1.23:22':'3234234',
'root@192.168.1.24:23':'09887',
}
env.gateway,定义网关(中转,营垒机)IP,如env.gateway = '192.168.1.1'
env.roledefs,定义角色分组,比方web组与db组主机区分开来,定义如下:
env.roledefs = {
'webservers':['192.168.1.21','192.168.1.22','192.168.1.23'],
'dbservers':['192.168.1.24','192.168.1.25'],
}

援用时运用python润饰符的情势进行,角色润饰符下面的任务函数为其作用域,下面来看一个示例:

@roles('webservers')
def webtask():
  run('/etc/init.d/nginx start')
@roles('dbservers'):
def dbtask():
  run('/etc/init.d/mysql start')
@roles('webservers','dbservers')
def publictask():
  run('uptime')
def deploy():
  execute(webtask)
  execute(dbtask)
  execute(publictask)

在下令施行fab deploy就可以实现不一样角色施行不一样的任务函数。

常用API

Fabric供给了一组简略但功能强大的fabric.api下令集,简略地调用这样API就能完成大局部利用场景需求,Fabric支撑常用的要领及注明如下:

复制代码 代码如下:

local,施行当地下令,如local:('uname -s');
lcd,切换当地目录,如lcd:('/home');
cd,切换长途目录,如cd:('/data/logs/');
run,施行长途下令,如:run('free -m')
sudo,sudo方式施行长途下令,如:sudo('/etc/init.d/httpd start');
put,上传当地文件到长途主机,如:put('/home/user.info','/data/user.info');
get,从长途主机下载文件到当地,如:get('/home/user.info','/data/user.info');
prompt,获得会员输入信息,如:prompt('please input user password:');
confirm,获得提醒信息确认,如:confirm('Test failed,Continue[Y/N]');
reboot,重新启动长途主机,如reboot();
@task,函数润饰符,标识符的函数为fab可调用,非标志对fab不可见,纯业务逻辑;
@runs_once,函数润饰符,标识符的函数只会施行一次,不挨多台主机影响;

示例1:查看当地与长途主机信息
本示例调用local()要领施行当地下令,增加"@runs_once"润饰保证该任务函数只施行一次。调用run()要领施行长途下令,

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.43','192.168.1.23','192.168.1.24']
env.port = '22'
env.password = '123456'
 
@runs_once #查看当地系统信息,当有多台主机时只运转一次
def local_task(): #当地任务函数
  local('uname -a')
 
def remote_task():
  with cd('/data'): #with的作用是让背面的表达式语句继承目前状态,实现cd /var && ls -l的结果
    run('ls -l')

通过fab下令离别调用local_task任务函数运转结果如下图所示

wKioL1R38guSh6BDAAGJEj-QZ_w798.jpg

效果中显示了[192.168.1.23] Executing task 'local_task',但事实上并非在主机192.168.1.23上施行任务,而是返回Fabric主机当地的'uname -a'的施行结果

调用remtoe_task任务函数的施行效果如下图所示

wKioL1R38lzBIxVoAALuZIpWH6A197.jpg

示例2;动态获取长途目录列表
本示例运用"@task"润饰符标记入口函数go()对外部可以,配合"@runs_once"符期待承受会员输入,最后调用worktask()任务函数实现长途下令施行,

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.23','192.168.1.24']
env.password = '123456'
@runs_once #在主机遍历历程中,只要一台出发此函数
def input_raw():
  return prompt("please input direcotry name:",default="/home")
 
 
def worktask(dirname):
  run("ls -l %s" %dirname)
 
@task
def go():
  getdirname = input_raw()
  worktask(getdirname)

该示例实现了一个动态输入长途目录名称,在获取目录列表的功能,因为我们只有求输入一次,再显示所有主机上该目录的列表信息,调用了一个子函数input_raw(同时配置)@runs_once润饰符来达到此目的,施行效果如下图

wKiom1R4C2-hQWSdAAMmREL62Zo996.jpg

文件上传与施行

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.hosts=['192.168.1.23','192.168.1.24']
#假设所有主秘密码都不同,可以通过env.passwords字典变量一一指定
env.passwords = {
  'root@192.168.1.23:22': '123456',
  'root@192.168.1.24:22': '123456',
}
 
lpackpath="/home/a.tar.gz"
rpackpath="/tmp/install"
 
@task
def put_task():
  run("mkdir -p /tmp/install")
  with settings(warn_only=True):
    result = put(lpackpath, rpackpath)
  if result.failed and not confirm("put file failed, Continue[Y/N]?"):
    abort("Aborting file put task!")
 
@task
def run_task():
  with cd("/tmp/install"):
    run("tar -zxvf a.tar.gz")
 
@task
def go():
  put_task()
  run_task()

热门标签:dede模板 / destoon模板 / dedecms模版 / 织梦模板
责任编辑:lAhv2
打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有153人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助



订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板