文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Fabric:Python远程部署工具

2023-01-31 00:56

关注

关于Fabric


Fabric是一个Python库和命令行工具,旨在为应用部署和系统管理任务的SSH的流水线式操作,使之更加高效和方便。Fabric提供了一套基本的执行本地和远程shell命令、上传和下载文件的操作,包括一些辅助函数,例如驱动正在运行的用户输入或者放弃执行。

Fabric通过把大量频繁使用的SSH操作写入到一个脚本中(fabric.py),来远程执行一些应用部署或者系统维护的任务。Fabric是类似paramiko的一个库,是对paramiko的再次封装,所以比使用paramiko更简单。

Fabric的优点:

1. 角色定义

2. 代码易读

3. 封装了本地、远程操作

4. 参数灵活,能偶动态指定host/role等,还有并发执行(基于multiprocessing)

5. 完整的日志输出


安装Fabric


Fabric的安装很简单,可以直接使用pip或者easy_install安装到当前Python环境中,或者下载最新的源码使用"python setup.py xxx"的方式来安装:

#pip install fabric


使用Fabric


1 Fabric通过命令行工具fab来执行定义在fabfile.py中的任务,常用的配置和函数如下


1. 常用的fab命令选项和参数:

-l    显示可用的task

-H    指定host,多个host用逗号分开

-R    指定role,多个role用逗号分开

-P    并分数,默认是串行

-w    warn_only,默认为遇到异常直接放弃执行并退出

-f    指定入口文件,fab默认入口文件是:fabfile/fabfile.py


2. fabfile.py文件中常用配置和函数:

env.host        主机ip,也可以使用fab选项-H参数来指定

env.password    SSH密码,若已经设置好无密码登录,则可以忽略

env.roledefs    角色分组,如:{'web': ['x', 'y'], 'db': ['z']}

local('pwd')    执行本地命令

lcd('/tmp')        切换本地目录

cd('/tmp')        切换远程目录

run('uname -s')        执行远程命令

sudo('service httpd restart')    执行远程sudo,注意pty选项


2 任务函数


Fabric中的任务就是一个个Python函数,通过将上述的函数封装到某一个函数中来执行相应的任务

示例:

#cat fabfile.py

from fabric.api import run

def host_type():

   run('uname -s')


def hello(name="jayzhou"):

   print("Hello %s!" % name)


def combine(name="jayzhou"):

   hello(name)

   host_type()

在执行任务的时候,可以通过fab的命令行参数为任务函数传递参数:

#fab hello:name=Rango


3. 管理远程服务


1. 获取远程服务器版本信息

#cat fabfile.py

from fabric.api import env

from fabric.api import cd

from fabric.api import run

from fabric.api import local

from fabric.api import get

from fabric.api import put


env.hosts = ['192.168.56.101', '192.168.56.102']

env.user = 'root'

env.password = "password"


def get_version():

   local('cat /etc/issue')

   run('cat /etc/issue')

   with cd('/root/'):

       put('/home/rango/test.txt', 'test.txt', mode=0755)

       get('hello_world.txt')

   run('ls')


def get_host_name():

   run('hostname')

运行:

#fab -f fabfile.py get_version


2. 管理远程httpd服务:

#cat fabfile.py

from fabric.api import *

env.hosts = ['192.168.56.101', '192.168.56.102']

env.user = 'root'

env.password = "password"


@task

def httpd_start():

   ''' httpd start '''

   sudo('service httpd start')


@task

def httpd_stop():

   ''' httpd stop '''

   sudo('service httpd stop')

查看可用命令:

#fab -f fabfile.py --list

Available commands:

   httpd_start  httpd start
   httpd_stop   httpd stop

执行:

#fab -f fabfile.py httpd_start


3. 基于角色

#cat fabfile.py

#!/usr/bin/env python
#coding:utf-8

from fabric.api import *
env.roledefs = {'httpd': ['192.168.56.101', '192.168.56.102'], 'mysql': '192.168.56.103'}

@task
def mysql_start():
   '''mysql start'''
   sudo('/etc/init.d/mysql start')

@task
def httpd_start():
   '''httpd start'''
   sudo('/etc/init.d/httpd start')

@task
def httpd_stop():
   '''httpd stop'''
   sudo('/etc/init.d/httpd stop')

查看可用命令:

#fab -f fabfile.py --list

Available commands:

   httpd_start  httpd start
   httpd_stop   httpd stop
   mysql_start  mysql start

执行:

#fab -f fabfile.py -R httpd httpd_start
#fab -f fabfile.py -R mysql mysql_start


4. 直接使用Fabric库

#cat fabfile.py

#!/usr/bin/env python
#coding:utf-8

from fabric.state import env, connections
from fabric.tasks import execute
from fabric.api import run

env.user = 'root'
env.password = 'password'
hosts = ['192.168.56.101', '192.168.56.102']

def myls(path):
   run('ls %s' % path)

execute(myls, path='/root/', hosts=hosts)

for key in connections.keys():
   connections[key].close()
   del connections[key]

在这一段代码中使用env来获取和设置环境参数,使用execute执行自定义的函数,然后使用connections来管理连接。其中execute通过传递参数可以在fab命令中指定目录。

执行:

#fab -f fabfile.py myls:path=/root

                                                                                                                               ——游响云停



阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯