您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python自动化部署工具Fabric的简单上手指南

5b51 2022/1/14 8:19:18 python 字数 8004 阅读 386 来源 www.jb51.cc/python

Fabric是基于SSH协议的Python工具,相比传统的ssh/scp方式,用Python的语法写管理命令更易读也更容易扩展,管理单台或者多台机器犹如本地操作一般。

概述

Fabric 是基于 SSH 协议的 Python 工具,相比传统的 ssh/scp 方式,用 Python 的语法写管理命令更易读也更容易扩展,管理单台或者多台机器犹如本地操作一般。

官网地址:http://fabfile.org

安装
省略python、pip管理工具安装过程

pip install fabric

验证是否安装成功
进入python编辑模式,输入代码,无错即表示成功安装

from fabric.api import local

fabric版hello world
fabric 文件fabfile.py,当然如果不想用这个名字,需要加-f参数

创建fabfile.py文件

vim fabrile.py

编辑代码

#coding:utf-8
from fabric.api import local#
def hello():
   # local函数用来执行本地命令
   local('echo "hello wolrd!"')

执行代码

fab hello

可以通过fab -l查看可以执行的任务,当前为hello函数
运行结果

[localhost] local: echo "Hello World!"
Hello World!
Done.


传统维护方法

$ ssh x.x.x.x 'uname -a' -- 输出

Fabric 示例:

$ cat fabfile.py
from fabric.api import run
def uname():
  run('uname -a')

$ fab -H x.x.x.x uname -- 输出

肉眼直观看上去,貌似比 ssh 方式要写不少代码,但是基于 ssh 方式中间可控环节比较少,例如:你想判断某服务是否已经启动,没有启动则执行启动等等操作。ssh 命令式的做法稍显麻烦。(当然龌龊一点可以在被操作机器上写好一个脚本,ssh 调用这个脚本)

说几个 Fabric 的优点吧:

罗列的这些,其实日常工作里基本都有类似的封装了,但是有现成的一个成熟的工具,干啥不用呢?对吧。

常用的配置:

更多请参考:fab --help

常用的函数

示例1:管理远程 Nginx 服务

$ cat fabfile.py
from fabric.api import *
@task
def Nginx_start():
  ''' Nginx start '''
sudo('/etc/init.d/Nginx start')

@task
def Nginx_stop():
  ''' Nginx stop '''
  sudo('/etc/init.d/Nginx stop')

   

$ fab --list   -- 查看可用命令
Available commands:

  Nginx_start Nginx start 
  Nginx_stop  Nginx stop

$ fab -H x.x.x.x Nginx_start -- 启动 Nginx

示例2:基于角色

$ cat fabfile.py
from fabric.api import *
env.roledefs = {'Nginx': ['x.x.x.x','y.y.y.y'],'MysqL': 'z.z.z.z'}
@task
def MysqL_start()
  ''' MysqL start '''
  sudo('/etc/init.d/MysqL start')

   

$ fab --list   -- 查看可用命令
Available commands:

  Nginx_start Nginx start 
  Nginx_stop  Nginx stop
  MysqL_start MysqL start

$ fab -R Nginx Nginx_start -- 启动 Nginx
$ fab -R MysqL MysqL_start -- 启动 MysqL

示例3:混合本地和远程操作

$ cat fabfile
def hello():
  ''' test hello '''
  with lcd('/tmp'): # 切换到 /tmp 目录下
    local('svn co http://xxx xxx') # check 代码到本地
    local('tar czf xxx.tar.gz xxx/') # 压缩本地包
    put('xxx.tar.gz','/tmp') # 上传压缩包到远程 /tmp 目录下
  with cd('/tmp'):  # 切换到远程 /tmp 目录
    run('tar zxf xxx.tar.gz') # 远程解压

是不是看上去都是像本地一样?对吧。

示例4:多个目标服务器
相同密码或者手动输入:

env.hosts = ['root@ip1:22',root@ip2:22]

不同密码或者不想手动输入(此方法也可定义不角色一组服务器):

#coding:utf-8
from fabric.api import local,cd,put,lcd,env,run,execute,roles
env.roledefs = {
 'role1':['root@ip1:22',],'role2':['root@ip2:22',]
}
env.passwords={
 'root@ip1:22':'pwd1','root@ip2:22':'pwd2'
}
@roles('role1')
def role1():
 with cd('/tmp'):
   run('ls -l')
@roles('role2')
def role2():
 with cd('/tmp'):
   run('ls')
def task():
 execute(role1)
 execute(role2)

总结

以上是编程之家为你收集整理的Python自动化部署工具Fabric的简单上手指南全部内容,希望文章能够帮你解决Python自动化部署工具Fabric的简单上手指南所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶