一、背景环境

在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具。

这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事的最爱。

为了方便自动化运维,经常会将Fabric部署在跳板机上。之所以部署跳板机是基于几点考虑的:

1.1基于安全的考虑,只有跳板机上开放了公网IP和SSH Key登录,其他内部的业务机默认只允许内网登录,公网IP地址不对外开放。

1.2为了方便自动化运维部署,跳板机上做了免密码登录,可以直接通过SSH命令操作其他业务机器。

1.3设置了权限控制权限,跳板机上部署了几套key,分别对应于不同的权限分配,可以给公司的同事不同的私钥登录跳板机

Fabric是基于Python实现的ssh命令行工具,简化了ssh的应用程序部署及系统管理任务,它为系统提供了基础的操作组件,可以实现本地或远程Shell命令,包括文件上传、下载、脚本执行及完整执行日志输出等功能。

二、Fabric的安装

安装Fabric时,可以选择采用Python的pip、easy_install及源码安装方式,这些方式能够很方便的解决包依赖关系。

大家可以根据系统环境自行选择最优的安装方法,如果选择pip或easy_install安装方式,若是使用系统最小化安装,注意提前安装gcc、gcc+、make这些基础开发包和python-pip):

yum -y install make gcc gcc++ python-devel python-pip

pip是安装python包的工具,提供了安装包、列出已经安装的包、升级包及卸载包的功能,可以通过pip工具直接安装Fabric。

使用pip 安装 Fabric的命令:

pip install fabric

这是推荐使用源码安装的方式:

yum -y install python-setuptools
cd /usr/local/src
wget https://pypi.python.org/packages/source/F/Fabric/Fabric-1.3.0.tar.gz --no-check-certificate
tar -xvf Fabric-1.3.0.tar.gz
cd Fabric-1.3.0
python setup.py install

  

下载完成后,安装相关的软件包。

然后解压源码包,使用Python命令运行安装脚本,进行安装。

等待安装命令运行完毕后,就可以去验证了。

这里使用IPython进行验证,在交互解释器下,输入import fabric 查看是否导入模块成功,若无报错则表示fabric当前已经安装成功。

三、Fabric核心API

3.1 Fabric的核心API主要有7类:

带颜色的输出类(color output)、上下文管理类(context managers)、装饰器类(decorators)、网络类(network)、操作类(operations)、任务类(tasks)、工具类(utils)。

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:函数修饰符。新版本的Fabric对面向对象的特性和命名空间有很好的支持。面向对象的继承和多态特性,对代码的复用极其重要。新版本的Fabric定义了常规的模块级别的函数,并带有装饰器@task,这会直接将该函数转化为task子类。该函数名会被作为任务名,后面会举例说明@task的用法。

@runs_once:函数修饰符。标识此修饰符的函数只会执行一次,不受多台主机影响。

3.2 下面来看看@task的用法,它可以为任务添加别名,命令如下:

from fabric.api import task

@task(alias='dwm')

def deploy_with_migrations():

pass

用fab命令打印指定文件中存在的命令,如下:

fab -f /home/yhc/test.py --list

命令显示结果如下所示:

Available commands:

deploy_with_migrations

dwm

还可以通过@task来设置默认的任务,比如deploy(部署)一个子模块,命令如下:

from fabric.api import task

@task

def migrate():

pass

@task

def push()

pass

@task

def provision():

pass

@task(default=True)

def full_deploy():

provision()

push()

migrate()

fab -f /home/yhc/test.py --list

结果如下所示:

Available commands:

deploy

deploy.full_deploy

deploy.migrate

deploy.provision

deploy.push

也可以通过@task以类的形式定义任务,例如:

from fabric.api import task

from fabric.tasks import Task

class MyTask(Task):

name = "deploy"

def run(self, environment, domain="whatever.com"):

run("git clone foo")

sudo("service apache2 restart")

instance = MyTask()

下面采用@task方式的代码跟上面的代码效果是一样的:

from fabric.api import task

from fabric.tasks import Task

@task

def deploy(environment, domain="whatever.com"):

run("git clone foo")

sudo("service apache2 restart")

大家可以对比看看,是不是采用@task函数修饰器的方式更为简洁和直观呢?

关于@task修饰器的用法和其他fabric.api命令,请参考Fabric官方文档http://fabric-chs.readthedocs.org/zh_CN/chs/tutorial.html。

3.3这里举个例子说明一下@runs_once用法,源码文件/home/yhc/test.py文件内容如下所示:

#!/usr/bin/python

# -*- coding: utf-8 -*-

from fabric.api import *

from fabric.colors import *

env.user = "root" #定义用户名,env对象的作用是定义Fabric指定文件的全局设定

env.password = "redhat" #定义密码

env.hosts = ['192.168.1.204','192.168.1.205']

#定义目标主机

@runs_once

#当有多台主机时只执行一次

def local_task(): #本地任务函数

local("hostname")

print red("hello,world")

#打印红色字体的结果

def remote_task(): #远程任务函数

with cd("/usr/local/src"):

run("ls -lF | grep /$")

#with是Python中更优雅的语法,可以很好地处理上下文环境产生的异常,这里用了with以后相当于实现了"cd /var/www/html && ls -lsart"的效果。

通过fab命令调用local_task本地任务函数,命令如下:

fab -f test.py local_task

结果如下所示:

[192.168.1.204] Executing task 'local_task'

[localhost] local: hostname

client.cn7788.com

My hostname is client.cn7788.com

Hello,world!

Done.

上述命令显示的虽然不是本机的IP地址,但实际上并没有在主机192.168.1.204上面执行命令,而是在本地主机client.cn7788.com(IP为192.168.1.206的机器)上执行了命令,并以红色字体显示了 “hello,world”和“My hostname is client.cn7788.com”。

调用remote_task远程函数显示结果,分别在204和205的机器上打印/usr/local/src/下面存在的目录,结果如下:

[192.168.1.204] Executing task 'remote_task'

[192.168.1.204] run: ls -lF | grep /$

[192.168.1.204] out: drwxr-xr-x. 2 root root    4096 Nov 22 00:01 download/

[192.168.1.204] out: drwxr-xr-x. 9  501 games   4096 Nov 19 04:44 Fabric-1.3.0/

[192.168.1.204] out: drwxr-xr-x. 2 root root    4096 Nov 22 00:01 object/

[192.168.1.205] Executing task 'remote_task'

[192.168.1.205] run: ls -lF | grep /$

[192.168.1.205] out: drwxr-xr-x. 2 root root  4096 Nov 22 04:58 mysql/

[192.168.1.205] out: drwxr-xr-x. 2 root root  4096 Nov 22 04:58 puppet/

[192.168.1.205] out: drwxr-xr-x. 2 root root  4096 Nov 22 04:58 soft/

[192.168.1.205] out: drwxr-xr-x. 2 root root  4096 Nov  3 07:56 test/

Done.

Disconnecting from 192.168.1.204... done.

Disconnecting from 192.168.1.205... done.

转载于:https://www.cnblogs.com/yihr/p/10726587.html

轻量级自动化运维工具Fabric的安装与实践相关推荐

  1. Python自动化运维工具fabric的安装

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  2. 轻量级自动化运维工具ansible之一:初步介绍及简单运用

    一.常见的自动化运维工具: OS Provisioning:PXE, Cobbler OS Config:puppet, saltstack, chef, func Task Exec:fabric, ...

  3. 自动化运维工具ansible的安装管理以及模块介绍

    自动化运维工具ansible的安装管理以及模块介绍 目录 自动化运维工具ansible的安装管理以及模块介绍 一.ansible概述 1.几种常用运维工具比较 2.Ansible简介 3.Ansibl ...

  4. Centos7部署轻量级自动化运维工具pssh (亲测)

    下载pssh安装包 [root@localhost ~]# wget https://files.pythonhosted.org/packages/60/9a/8035af3a7d3d1617ae2 ...

  5. 自动化运维工具ansible(安装与模块介绍)

    自动化运维工具ansible(安装与模块介绍) 一.ansible运维工具概述 (一).ansible的特点 (二).ansible的原理 (三)ansible的优点 二.安装ansible 三.an ...

  6. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  7. Ansible自动化运维工具使用

    概述 本文描述自动化运维工具 Ansible 的安装及基础使用方法,包含: Centos 下的安装 主机配置 Ad-Hoc command(命令行执行) Playbook (任务剧本) Ansible ...

  8. 自动化运维工具——ansible安装及模块介绍

    ansbile 前言 一.主流自动化运维工具简介 1.1 Puppet 1.2 Saltstack 1.3 Ansible 二.Ansible 运维工具原理 三.Ansible安装 3.1 下载软件包 ...

  9. 常见的自动化运维工具介绍及特点、安装ansible

    常见的自动化运维工具介绍及特点.安装ansible 一.什么是自动化运维? 简单来说,自动化运维就是将日常重复性工作按照事先设定好的规则,在一定时间范围内自动化运行,而不需要人为参与. 将周期性.重复 ...

最新文章

  1. 庆祝博客积分成功上四位数!
  2. VC调试篇:减少运行时错误,中断所有异常
  3. 面向对象编程--之二
  4. 为什么销量总是做不好预测?或许你只差这一份强化资料包
  5. python根据相关系数绘制热力图
  6. python如何连接sql server数据库_Python连接SQLServer数据库
  7. Retrofit 使用flatmap操作符时处理错误、异常
  8. pythoncv2模块详细介绍_【Opencv】【Python】Python中opencv模块cv2一些函数用法及简介...
  9. 2021-0413梦笔记
  10. the problem was occurred when start ADT
  11. 广东联通光猫wo-27s华为HG8321R超级密码
  12. 织梦留言板模板 .php,织梦DEDECMS留言板功能制作及调用标签
  13. 计算机信息管理企业资源规划综合实训,企业资源规划(ERP)综合实训细则
  14. 排列组合解析与例题总结
  15. linux安装谷歌中文,CentOS 7安装谷歌拼音中文输入法
  16. wps怎么图片透明_wpsword如何设置图片透明度
  17. Python-Opencv 形态学+算子实现轮廓提取
  18. 如何添加或删除ubuntu用户和组
  19. 如何判断两个地址是否在同一网段
  20. 手把手带你搞定OPENSTACK

热门文章

  1. lvs 负载均衡原理及其配置之 nat 模式
  2. 与Susan Fowler探讨生产就绪微服务之问答
  3. Html5 学习系列(一)认识HTML5
  4. ASP.Net中省市级联有关
  5. 苹果内购和 Apple Pay
  6. HDU 6092 Rikka with Subset 思维 递推
  7. linux上的用户管理
  8. 控制网页的Panel是否显示
  9. [转]推荐国外SQL Server学习网站
  10. 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法