Python运维自动化开发之Fabric模块
来源:互联网 发布:乐视线刷软件 编辑:程序博客网 时间:2024/06/08 13:17
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 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模块,更擅长远程执行命令,文件传输,可灵活的嵌入到运维系统中。
- Python运维自动化开发之Fabric模块
- python使用Fabric模块实现自动化运维
- Python运维自动化开发之Paramiko模块
- 自动化运维工具之fabric
- python批量运维fabric模块
- python运维之fabric
- 自动化运维管理fabric
- python自动化运维学习之psutil模块
- python fabric模块
- python之使用Fabric自动化你的任务
- python 自动化部署工具-fabric
- 运维工具之轻量级自动化运维工具Fabric源码安装
- Python自动化第二周之数据模块
- python 自动化模块selenium + pyauotogui 模块结合实现有flash显示自动化运维
- 轻量级自动化运维工具fabric使用与安装
- Python自动化运维--系统基础信息模块
- python自动化运维学习-系统性能模块详解
- python Pexpect和Fabric模块对比分析
- CentOS下通过yum安装nodejs等
- leetcode 3Sum
- python_20171122_python3.6.1 pd.read_csv()输入中文路径OSError: Initializing from file failed
- NLTK自带的词干提取器
- PC端的神器软件
- Python运维自动化开发之Fabric模块
- idea 创建 java web项目(图文)
- 使用request-promise验证url的可访问性
- 增删改查
- 32位Linux系统的虚拟地址映射 <二>
- 剑指offer每日一刷-2017年11月22日
- netty源码分析之-ChannelHandler与ChannelContext详解(7)
- Flask-基本应用搭建模式
- Python学习(一)----Python3.6安装