Python运维自动化开发之Fabric模块
本章讲解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 local
def command():
local('ls')
# fab command
[localhost] local: ls
fabfile.py fabfile.pyc tab.py tab.pyc
Done.
使用fab命令调用,默认寻找当前目录的fabfile.py文件。
2、远程执行命令
from fabric.api import run
def 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 run
def 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, env
env.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.py
from fabric.api import run, env
env.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模块,更擅长远程执行命令,文件传输,可灵活的嵌入到运维系统中。
使用模块psutil获取系统cpu、内存、磁盘、网络、进程等信息
利用Paramiko模块执行批量上传/下载/执行命令/查看服务器列表
Python运维自动化开发之Fabric模块的更多相关文章
- Python运维自动化psutil 模块详解(超级详细)
psutil 模块 参考官方文档:https://pypi.org/project/psutil/ 一.psutil简介 psutil是一个开源且跨平台(http://code.google.com/ ...
- python运维之使用python进行批量管理主机
1. python运维之paramiko 2. FABRIC 一个与多台服务器远程交互的PYTHON库和工具 3. SSH连接与自动化部署工具paramiko与Fabric 4. Python批量管理 ...
- Ansible运维自动化工具19个常用模块使用实例【转】
一.模块列表 1.setup 2.ping 3.file 4.copy 5.command 6.shell 7.script 8.cron 9.yum 10.service 11.group 12.u ...
- 运维自动化神器ansible之user模块
运维自动化神器ansible之user模块 一.概述 user模块 可管理远程主机上的 用户,比如创建用户.修改用户.删除用户.为用户创建密钥对等操作. 二.参数介绍 name: 用于指定操作 ...
- Python 运维
1.python解释器提供提供的小工具 1.1 一秒钟启动一个下载服务器 进入要下载文件的目录(shift+鼠标右键可以很快的在当前目录打开一个cmd) python2: python2 -m Sim ...
- Ansible 运维自动化 ( 配置管理工具 )
背景 出差背景,要搞项目的自动化部署.因为只直接对接生产分发,机器又非常多,这样以往使用的bat只能作为应急方案了,还是得考虑使用专业化的工具来做这个事情! 当下有许多的运维自动化工具( 配置管理 ) ...
- Ansible运维自动化
Ansible运维自动化 一.Ansible-playbook的初步使用 playbook的使用,playbook可以把ansible的模块进行组合 ln -s /usr/local/python/b ...
- 运维自动化之salt笔记
1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...
- Python运维编程
Python运维编程 作者:Danbo 2015-10-11 什么是Python,为什么要使用Python? 这个大家自行谷歌,不过看看知乎你就知道Python有多么强大:http://www.zh ...
随机推荐
- V-rep学习笔记:ROSInterface
Ubuntu 14.04 上安装V-rep 3.4.0 进入VREP官网下载Linux版本的V-rep(注意V-rep 3.4.0只有64位的版本,因此操作系统也要与之对应,Ubuntu 32位系统就 ...
- Centos7 安装 docker-ce
本文参考官网地址:https://docs.docker.com/install/linux/docker-ce/centos/#os-requirements 1.卸载旧版本的docker $ su ...
- C++基础学习教程(六)----类编写的前情回想以及项目实战(1)
在開始类的编写之前我们依旧须要回想整理一下前面所说的内容,(前面尽管是一个自己定义数据类型的实现过程,可是内容有点繁杂). 先看一段代码: /** @file calssStruct.cpp */ / ...
- android 发送短信的两种方式,以及接收报告和发送报告
android发送短信,以及接收报告和发送报告 android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下: 一.调起系统发短信功能 ...
- servlet 中通过response下载文件
public class ResponseDemo3 extends HttpServlet { private static final long serialVersionUID = -52329 ...
- 安装 Linuxbrew
在 OS X 平台上非常流行的包管理器 Homebrew 最近正被移植到 Linux 上而成为 Linuxbrew.虽然各种 Linux 发行都带有自己的包管理工具,诸如 apt-get.yum.pa ...
- HDU 3820 Golden Eggs (SAP | Dinic)
Golden Eggs Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- Swift 封装
前言 封装主要有两大目的:一是为了我们使用数据更加方便,二是为了数据保护. 1.Swift 访问修饰符 在 Swift 语言中,访问修饰符也分为三类,分别是 private.internal.publ ...
- Oracle 12C -- Identity Columns(标识列)
Identity Columns很适合数据库中需要"surrogate keys"的场景.依赖sequence产生器,每行的标识列会被赋予一个自增或自减的值.缺省,标识列在创建的时 ...
- 【转】Scheme 编程环境的设置
Scheme 编程环境的设置 介绍了这么久的 Scheme,却没有讲过如何配置一个高效的 Scheme 的编程环境.有些人开始学习 Scheme 的时候感觉无从下手,所以今天讲一下它的配置. Sche ...