博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python运维自动化开发之Fabric模块
阅读量:6793 次
发布时间:2019-06-26

本文共 3714 字,大约阅读时间需要 12 分钟。

本章讲解fabric模块,与上一章的paramiko模块功能类似,fabric是在paramiko基础上又做了一层封装,操作起来更方便。主要用于多台服务器批量执行任务。

非内置Python模块,需要手动安装:pip install fabric

如果安装失败,可以尝试yum安装:yum install fabric
Fabric常用API:

API类

描述

示例

local

执行本地命令

local('uname -s')

lcd

切换本地目录

lcd('/opt')

run

执行远程命令

run('uname -s')

cd

切换远程目录

cd('/opt')

sudo

sudo方式执行远程命令

sudo('/etc/init.d/httpd start')

put

上传本地文件或目录到远程主机

put(remote_path, local_path)

get

从远程主机下载文件或目录到本地

put(local_path, remote_path)

open_shell

打开一个shell,类似于SSH连接到了远程主机

open_shell("ifconfig  eth0")

prompt

获得用户输入信息

prompt('Please input user  password: ')

confirm

获得提示信息确认

confirm('Continue[Y/N]?')

reboot

重启远程主机

reboot()

@task

函数装饰器,引用说明函数可调用,否则不可见

 

@runs_once

函数装饰器,函数只会执行一次

 

当我们写好fabric脚本后,需要用fab命令调用执行任务。

命令格式:fab [options][:arg1,arg2=val2,host=foo,hosts=’h1;h2’,…] …
fab命令有以下常用选项:

选项

描述

-l

打印可用的命令(函数)

--set=KEY=VALUE,...

逗号分隔,设置环境变量

--shortlist

简短打印可用命令

-c PATH

指定本地配置文件

-D

不加载用户known_hosts文件

-f PATH

指定fabfile文件

-g HOST

逗号分隔要操作的主机

-i PATH

指定私钥文件

-k

不加载来自~/.ssh下的私钥文件

-p PASSWORD

使用密码认证and/or  sudo

-P

默认为并行执行方法

--port=PORT

指定SSH连接端口

-R ROLES

根据角色操作,逗号分隔

-s SHELL

指定新shell,默认是'/bin/bash -l -c'

--show=LEVELS

以逗号分隔的输出

--ssh-config-path=PATH

SSH配置文件路径

-t N

设置连接超时时间,单位秒

-T N

设置远程命令超时时间,单位秒

-u USER

连接远程主机用户名

-x HOSTS

以逗号分隔排除主机

-z INT

并发进程数

示例:

1、本地执行命令

from fabric.api import localdef command():    local('ls')# fab command[localhost] local: lsfabfile.py  fabfile.pyc  tab.py  tab.pycDone.

使用fab命令调用,默认寻找当前目录的fabfile.py文件。

2、远程执行命令

from fabric.api import rundef command():    run('ls')# fab -H 192.168.1.120 -u user command[192.168.1.120] Executing task 'command'[192.168.1.120] run: ls[192.168.1.120] Login password for 'user':[192.168.1.120] out: access.log  a.py[192.168.1.120] out:Done.Disconnecting from 192.168.1.120... done.

如果在多台主机执行,只需要-H后面的IP以逗号分隔即可。

3、给脚本函数传入位置参数

from fabric.api import rundef hello(name="world"):    print("Hello %s!" % name)# fab -H localhost hello[localhost] Executing task 'hello'Hello world!Done.# fab -H localhost hello:name=Python[localhost] Executing task 'hello'Hello Python!Done.

4、主机列表组

from fabric.api import run, envenv.hosts = ['root@192.168.1.120:22', 'root@192.168.1.130:22']env.password = '123.com'env.exclude_hosts = ['root@192.168.1.120:22']   # 排除主机def command():   run('ls')

env作用是定义fabfile全局设定,类似于变量。还有一些常用的属性:

env属性

描述

示例

env.hosts

定义目标主机

env.hosts = ['192.168.1.120:22']

env.exclude_hosts

排除指定主机

env.exclude_hosts =  '[192.168.1.1]'

env.user

定义用户名

env.user='root'

env.port

定义端口

env.port='22'

env.password

定义密码

env.password='123'

env.passwords

定义多个密码,不同主机对应不同密码

env.passwords =  {'root@192.168.1.120:22': '123'}

env.gateway

定义网关

env.gateway='192.168.1.2'

env.roledefs

定义角色分组

env.roledef =  {'web':['192.168.1.11'], 'db':['192.168.1.12']}

env.deploy_release_dir

自定义全局变量,格式:env.+  '变量名'

env.var

5、定义角色分组

# vi install.pyfrom fabric.api import run, envenv.roledefs = {    'web': ['192.168.1.10', '192.168.1.20'],    'db': ['192.168.1.30', '192.168.1.40']}env.password = '123'@roles('web')def task1():   run('yum install httpd -y')@roles('db')def task2():   run('yum install mysql-server -y')def deploy():   execute(task1)   execute(task2)# fab -f install.py deploy

6、上传目录到远程主机

from fabric.api import *env.hosts = ['192.168.1.120']env.user = 'user'env.password = '123.com'def task():   put('/root/abc', '/home/user')   run('ls -l /home/user')# fab task

7、从远程主机下载目录

from fabric.api import *env.hosts = ['192.168.1.120']env.user = 'user'env.password = '123.com'def task():   get('/home/user/b', '/opt')   local('ls -l /opt')# fab task

8、打印颜色,有助于关键地方醒目

from fabric.colors import *def show():   print green('Successful.')   print red('Failure!')   print yellow('Warning.')# fab show

经过上面示例,有没有觉得fabric模块很适合批量自动部署呢!没错,通过编写简单的脚本,即可完成复杂的部署操作。

而paramiko模块,更擅长远程执行命令,文件传输,可灵活的嵌入到运维系统中。

转载地址:http://veego.baihongyu.com/

你可能感兴趣的文章
使用 Screen 创建并管理多个 shell
查看>>
adobe acrobat professional9.0中的PDF/A模式是什么意思
查看>>
【码云周刊第 30 期】打造场景化的图片特效处理工具
查看>>
fedora的官方镜像地址列表
查看>>
about socket
查看>>
我的友情链接
查看>>
本地YUM源配置与简单用法
查看>>
Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果强化版
查看>>
not 与整数
查看>>
学习使用资源文件[3] - 用 Image 显示资源中的图片
查看>>
机器突然重启导致Mantis错误
查看>>
mysql基础(二) 常用SQL语句
查看>>
redhat 6.5 php 升级到5.6
查看>>
oracle数据库清理和回收system和sysaux表空间
查看>>
STL实例
查看>>
CCNP sla,route-map结合应用实现负载均衡和冗余
查看>>
大学生微信卖吃喝月入10万,创业因女友娇气
查看>>
VC非ASCII语言复制到剪切板乱码问题
查看>>
QT+OPENCV摄像头的三种效果显示
查看>>
ant编译乱码
查看>>