本章讲解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模块执行批量上传/下载/执行命令/查看服务器列表

DNS处理模块dnspython

Python运维自动化开发之Fabric模块的更多相关文章

  1. Python运维自动化psutil 模块详解(超级详细)

    psutil 模块 参考官方文档:https://pypi.org/project/psutil/ 一.psutil简介 psutil是一个开源且跨平台(http://code.google.com/ ...

  2. python运维之使用python进行批量管理主机

    1. python运维之paramiko 2. FABRIC 一个与多台服务器远程交互的PYTHON库和工具 3. SSH连接与自动化部署工具paramiko与Fabric 4. Python批量管理 ...

  3. 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 ...

  4. 运维自动化神器ansible之user模块

    运维自动化神器ansible之user模块 一.概述   user模块 可管理远程主机上的 用户,比如创建用户.修改用户.删除用户.为用户创建密钥对等操作. 二.参数介绍   name: 用于指定操作 ...

  5. Python 运维

    1.python解释器提供提供的小工具 1.1 一秒钟启动一个下载服务器 进入要下载文件的目录(shift+鼠标右键可以很快的在当前目录打开一个cmd) python2: python2 -m Sim ...

  6. Ansible 运维自动化 ( 配置管理工具 )

    背景 出差背景,要搞项目的自动化部署.因为只直接对接生产分发,机器又非常多,这样以往使用的bat只能作为应急方案了,还是得考虑使用专业化的工具来做这个事情! 当下有许多的运维自动化工具( 配置管理 ) ...

  7. Ansible运维自动化

    Ansible运维自动化 一.Ansible-playbook的初步使用 playbook的使用,playbook可以把ansible的模块进行组合 ln -s /usr/local/python/b ...

  8. 运维自动化之salt笔记

    1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...

  9. Python运维编程

    Python运维编程 作者:Danbo  2015-10-11 什么是Python,为什么要使用Python? 这个大家自行谷歌,不过看看知乎你就知道Python有多么强大:http://www.zh ...

随机推荐

  1. NotesDocument 作为函数返回值的问题

    如下代码 Set recipientDoc = getDocInNAB(“search string”) If Not recipientDoc Is Nothing Then ‘In debug I ...

  2. Spring Cloud Edgware Release Notes

    Spring Cloud Edgware builds on Spring Boot 1.5.x. Renamed starters A number of starters did not foll ...

  3. 搭建 Node.js 环境

    安装 Node.js 环境 任务时间:5min ~ 10min Node.js 是运行在服务端的 JavaScript, 是基于 Chrome JavaScript V8 引擎建立的平台. 下载并安装 ...

  4. 分布式交易系统的并发处理, 以及用Redis和Zookeeper实现分布式锁

    交易系统 交易系统的数据结构 支付系统API通常需要一个“订单号”作为入参, 而实际调用API接口时使用到的往往不是真正意义的业务订单号, 而是交易订单号.  支付系统的API会使用“商户号+订单号” ...

  5. windows7下安装apache+PHP5.3

    Apache+PHP 安装与配置 最近在学习PHP,所以就在windows7下安装了PHP的开发环境.之所以没有选择集成的软件,如WAMP.AppServ等套件,是为了单独安装这些软件,有助于更加深入 ...

  6. docker-compose 管理多个docker容器实例

    Compose 安装 运行此命令下载最新版本的Docker Compose $ curl -L https://github.com/docker/compose/releases/download/ ...

  7. [转载]Ubuntu 安装 万能五笔 输入法

    原文地址:Ubuntu 安装 万能五笔 输入法作者:庖丁解牛 paul@paul-desktop:~/scripts$ cat ins-ibus-wnwb.sh #!/bin/sh set -e cd ...

  8. wordpress搭建博客上传begin主题The themes is locked to another domain

    如题, 在使用wordpress搭建个人博客过程中, 上传begin主题, 出现如下弹框的错误, 而且样式有误. 环境: Los Angeles CentOS 7 x64 nginx+mysql 解决 ...

  9. 理解bleu

    bleu全称为Bilingual Evaluation Understudy(双语评估替换),是2002年提出的用于评估机器翻译效果的一种方法,这种方法简单朴素.短平快.易于理解.因为其效果还算说得过 ...

  10. MATLAB R2018a 安装教程

    1.下载相应的 MATLAB  R2018a  版本如下:[matlab2018的百度云盘:链接:https://pan.baidu.com/s/1OV242y6EV6auvG3DvvqD8A 密码: ...