什么是fabric?如果你还不知道请自己找度娘解释,如果不理解,我想也不必理解了,估计也是不是干运维这行的,这篇文章主要针对搞运维开发的兄弟快速学习用的,大家都知道,干运维经常有需要自动批量处理的命令脚本,机器一旦上百,基本要自动化了,不可能一台一台维护了,我入道的时候,就管理4台机器,那时候根本不用什么自动化,有问题,我连接4个session,就搞定了,像fabric这个高级玩意儿,根本用不到,我写这篇文章前也上网搜了下相关文章,写的基本大同小异,代码也都一样,有的写的的确不错,看了几篇,但都缺少对fabric整体功能的介绍,还有都是写的password登录,我还是说一句,在实际工作中可能让你把明文密码写到代码么?,所以呢,还是自己上手,自己花了些时间把官方文档基本浏览了一遍,对核心的功能使用做了整体的一个了解,这里我并给出简单的例子,加速大家对fabric的了解,对英文不好的兄弟,你不用上官网了,看这个实例,基本就能满足你所有要求了,好了,不多说了,前戏太长了,赶紧上真货…….., 好了,废话少说,开始上干货:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#!/usr/bin/env python # from fabric.api import settings, cd, run, env, prompt, sudo, hide, show, prefix, get, local, open_shell, put,reboot,parallel,roles def remote_server(): env.hosts = ['x.x.x.x'] env.user = 'user' #env.sudo_user = 'user' env.key_filename = '/root/bicher.pem' env.shell = '/bin/sh' #env.roledefs = { #'testserver': ['x.x.x.x'] # } def task(): with settings(hide('warnings', 'running', 'stdout', 'stderr'), warn_only=True): sudo('cat show_cpuinfo.py') # def task1(): with settings(hide('everything'), warn_only=True): run('ls -l') def task2(): with prefix('source /etc/profile'): sudo('sh /root/who.sh') def task3(): get('show_cpuinfo.py') def task4(): local('ls') def task5(): open_shell('cat show_cpuinfo.py') def task6(): prompt('enter your name:') def task7(): put('fabfile.py') def task8(): reboot('5') @parallel(5) def task9(): sudo('sh /root/who.sh') #@roles('testserver') #def task10(): # sudo('sh /root/who.sh') def add_arg(name): print 'your name %s' %name def ex_sh(file): #with cd('/root/user'): run(file) |
接下来一个一个函数说明:
remote_server():这个函数是设置环境变量,env有很多参数,我估计至少有几十个,实际用到了再查文档,我上面定义的基本够用了,如果你真是密码验证,请用env.password,网上的案例基本都是密码验证的,我这里使用的key认证,这个函数很重要,基本要把你要连接的机器基本信息都定义好了,说了这还的多提一句,fabric的执行方式跟其他模块不一样,他是先把程序写到fabfile.py里,然后用fab来调用这个脚本中的函数来执行操作,一会我会给实际例子 。
task():这个函数用了上下问管理的hide功能,隐藏了所有显示,默认状况下你执行命令会在终端回显出来,如果你用了hide,就没有了,直接告诉你Done,跟 context_managers.quiet功能一样,sudo是用root执行命令。
task1():显示跟task一样,只是调用了run,在远程机器上执行一个shell命令。
task2():使用上下问的prefix功能连接执行命令,这个函数执行想source /etc/profile && sh /root/who.sh
task3():get ,从远程主机上下载一个文件
task4():local,在本机运行命令。
task5():打开一个交换shell,执行完命令会登录到远程系统中
task6():promt,相当与raw_input()
task7():put,向远程主机上传一个文件。
task8():重启远程主机,参数是要等待的秒数
task9():并行执行命令,parallel装饰器参数为并行几个执行。
task10():定义主机角色,这个功能很有用,如果你有不同的主机组,可以根据角色不同在不同的主机运行不同的脚本或命令。
add_arg():带参数执行,调用为fab remote_server add_arg:name=bicher,结果为your name bicher
ex_file():这个功能也非常有用,可以调用远程机器的一个脚本,这样就可以将fabric写的fabfile.py文件当做一个总控端,总控确定要执行什么,怎么执行,执行的具体内容可以是 shell脚本,这样在一个团队里开发就比较快,可以互相分工,调用方式为:
fab remote_server ex_sh:w.sh ,其中w.sh就是远程主机的脚本文件。
好了,基本就到这了,这个篇文档主要是为要快速上手fabric 兄弟用的,所以没有写很复杂的逻辑,具体的实现各位看客可以根据自己的需求自己去写,但以上基本就是fabric大部分的功能了,如果都能用好,基本也够用了,今天就到这里,要睡觉了,明天还的早起。