系统批量运维管理器fabric

Posted on Posted in NoOps
Tips: 本文创建于2016年6月21日,已超过 2 年,内容或图片可能已经失效!

几个例子

> 查看本地远程信息

  1. #!/usr/bin/env python  
  2. from fabric.api import *  
  3.   
  4. env.user = 'root'  
  5. env.hosts=['127.0.0.1', '192.168.38.114']  
  6. env.password='123456'  
  7.   
  8. @runs_once  #查看本地系统信息,当有多台主机时只运行一次  
  9. def local_task():   #本地任务函数  
  10.     local("uname -a")  
  11.   
  12. def remote_task():  
  13.     with cd("/tmp"):    #with的含义,让后面的语句集成当前的状态,实现 cd /tmp && ls -l  
  14.         run("ls -l")  

> 获取远程目录列表

  1. #!/usr/bin/env python  
  2. from fabric.api import *  
  3.   
  4. env.user = 'root'  
  5. env.hosts=['127.0.0.1', '192.168.38.114']  
  6. env.password='123456'  
  7.   
  8. @runs_once  #主机遍历过程中,只有第一台触发此函数  
  9. def input_raw():  
  10.     return prompt("please input directory name:", default="/tmp")  
  11.   
  12. def worktask(dirname):  
  13.     run("ls -l "+dirname)  
  14.   
  15. @task   #限定go函数对fab命令可见  
  16. def go():  
  17.     getdirname = input_raw()  
  18.     worktask(getdirname)  

> 文件上传打包校验

  1. #!/usr/bin/env python  
  2. from fabric.api import *  
  3. from fabric.context_managers import *  
  4. from fabric.contrib.console import confirm  
  5.   
  6. env.user = 'root'  
  7. env.hosts = ['127.0.0.1','192.168.38.114']  
  8. env.password = '123456'  
  9.   
  10. @task  
  11. @runs_once  
  12. def tar_task():     #本地打包任务,只执行一次  
  13.     with lcd("/home/lhh/data"):  
  14.         local("tar -zcf a.tgz a.log")  
  15.   
  16. @task  
  17. def put_task():     #上传文件任务函数  
  18.     run("mkdir -p /data/logs")  
  19.     with cd("/data/logs"):  
  20.         with settings(warn_only=True):  #上传出现异常时继续执行,非终止  
  21.             result = put("/home/lhh/data/a.tgz", "/data/logs/a.tgz")  
  22.         if result.failed and not confirm("put file failed, Continue[Y/N]?"):  
  23.             abort("Aborting file put task!")    #出现异常,确实是否继续,Y继续  
  24.   
  25. @task  
  26. def check_task():   #校验文件任务函数  
  27.     with settings(warn_only=True):  
  28.         #本地local命令需要配置captrue为True才能获得返回值  
  29.         lmd5 = local("md5sum /home/lhh/data/a.tgz",capture=True).split(' ')[0]  
  30.         rmd5 = run("md5sum /data/logs/a.tgz").split(' ')[0]  
  31.     if lmd5==rmd5:  #对比本地远程文件md5值  
  32.         print('OK')  
  33.     else:  
  34.         print('Error')  
  35.   
  36. @task  
  37. def go():  
  38.     tar_task()  
  39.     put_task()  
  40.     check_task()  
» 转载请注明来源:呢喃 » 系统批量运维管理器fabric

Leave a Reply

Your email address will not be published. Required fields are marked *

five × one =