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

非内置Python模块,需要手动安装:pip install fabric
如果安装失败,可以尝试yum安装:yum install fabric
Fabric常用API:


当我们写好fabric脚本后,需要用fab命令调用执行任务。
命令格式:fab [options][:arg1,arg2=val2,host=foo,hosts=’h1;h2’,…] …
fab命令有以下常用选项:

示例:

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全局设定,类似于变量。还有一些常用的属性:

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模块,更擅长远程执行命令,文件传输,可灵活的嵌入到运维系统中。

©著作权归作者所有:来自51CTO博客作者mob604756e5abbc的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Linux基础-18day-Linux系统磁盘管理(du/df/mount命令)
  2. VScode编辑器设置中文的教程,超详细的
  3. Composer常用指令、安装组件、自动加载器使用方式与更新方法
  4. 运维少年系列 python and cisco (1)
  5. 运维少年系列 - ansible and cisco(1)
  6. 运维少年系列 python and cisco (4)
  7. 2021-03-11:go中,协程内部再启用协程,它们是没关系,对吧?外部协程奔溃
  8. 记一次Oracle数据更新经历
  9. python3 paramiko 巡检网络设备

随机推荐

  1. 引用 Android的DTMF处理(ToneGenerator)
  2. Android Bundle类(简单实例)
  3. Android上使用Chrome DevTools 远程调试W
  4. Android SystemProperty
  5. Android adb shell 常用命令
  6. Android(安卓)Camera——拍照
  7. Android根据经纬度获取地址
  8. 向Android模拟器发短信打电话
  9. zxing-client-android 导入Android Studi
  10. android Content Provider的使用