自动化运维管理fabric

自动化日常管理任务和部署">如何使用fabric 自动化日常管理任务和部署

自动化,批量化是作为管理员,或者运维人员必须面临的问题。自动化和批量化也有很多方式,可以用单一工具也可以自己写shell脚本,甚至可以开发出来一套完备的任务管理系统。其实我们大多时候可以在一台主机上面通过ssh来控制所有机器,来完成我们的任务工作。是否有这样的工具来支持我们呢?

devops

fabric 常用接口

fabric是对ssh的一个集成工具,对我们而言只需要使用相应的接口,来高效的完成工作,我们常用到的功能基本是 : 本地或者远端执行命令, 分发文件,收集文件,还有一些权限相关的操作。 这些fabric都给我们提供了对应的接口。
如下所示:

fabric 还提供了上下文管理器

接口部分提供了命令运行的方式,不过都无法保持上下文关系,为了解决这个问题,fabric的context manager 就派上了用场:

fabric 安装

fabric 编程模型介绍

由于fabric是基于python的,所以写fabric脚本就是写python脚本,你可以像写python脚本一样,可以依赖其他模块或者其他工具来完成工作。Fabric 脚本,通过fab工具运行fabric python脚本。fab工具默认执行fabfile.py ,也可以通过-f 参数指定 脚本文件名。fabric优势多多,简单,方便,日志输出清晰,命令
中可以使用AWK 命令 下面我们看一个 hello world 程序。

执行命令(其中参数的传递直接跟在任务后跟变量名和参数):

fabric主要接口方法

我们已经看了一个简单例子下面我们来看一下fabric的主要接口。

run (fabric.operations.run)

Fabric 中使用最多的就是 run 方法了。run是用来在一台或者多台远程主机上面执行shell 命令。

  • 方法的返回值是可以通过变量来进行捕获
  • 可以通过变量的.failed 和 .succeeded 来检查命令是否执行成功
  • 还有一个很赞的就是 run 方法中执行命令的时候,可以支持awk 很给力

使用方法:

sudo (fabric.operations.sudo)

使用 sudo 命令执行对顶的命令。使用方法与run 类似。

local (fabric.operations.local)

local 命令是执行本机的命令或者脚本.使用方法和run 还有sudo类似,但是有一个区别
就是: 捕获结果的时候,是通过指定 capture=False 或者capture=True来确定。来看
实例:

get (fabric.operations.get)

get 方法是从远程主机 copy file 到本地,功能跟scp一样。可以从远程主机下载
备份,或者日志文件等等。

  • 通过参数 remote_path 指定远程文件的路径
  • 通过参数 local_path 指定远程文件的路径

使用方法如下:

put (fabric.operations.put)

某些需要上传和分发文件的时候,put命令就派上了用场,使用方式类似 get。也同样可以
通过.failed .succeeded进行命令是否执行成功的判断。

  • local_path - 本地路径
  • remote_path - 远程路径
  • mode - 文件属性

如下例子:

并行执行

目前官方来看 1.X 版本的fabric 并行执行的时候不是thread safe的。如果需要并行执行task。需要在方法上面使用注解 @parallel 为了防止管控机器上面过多的并发任务可以通过 @parallel(pool_size=5)来设置. 并行的执行输出都会输出到一个终端上面,比较混乱。最好是写到日志,以task为维度。跟下面的代码类似。

MySQL 安装实例

安装步骤如下

  • 获取主机ip
  • check主机可达性
  • 检查linux平台详情
  • 是否有运行的mysql实例
  • 如果有获取对应的端口
  • 检查是否和要安装的端口冲突
  • 处理mysql用户以及属组
  • 处理安装相关目录和权限
  • copy 安装包到目标机
  • 解压处理,将主要软件工具软连接到path路径中
  • 生成对应标准配置文件并分发到目标机对应目录
  • 初始化数据库
  • 启动数据库
  • 基本步骤安装完毕

基本脚本如下:

script 1 sub task :

script 2 whole task :

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: