我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python 模块之fabric

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python 模块之fabric

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

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


Fabric的优点:


角色定义

代码易读

封装了本地、远程操作

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

完整的日志输出


在Linux下安装方法:

使用pip来安装 

yum install python-pip -y
pip install fabric


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

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

-l    显示可用的task

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

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

-P    并分数,默认是串行

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

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


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选项

env.exclude_hosts=['10.1.6.159'] 排除10.1.6.159 

fabric.operations.open_shell() 打开远程shell界面。

get 是下载

put 是上传


下面来一些例子:

#/usr/bin/python
#coding:utf8
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
 
env.hosts=['10.1.6.186','10.1.6.159']
env.password='xxxxxx'
 
def task1():
    with cd('/home/guol'):
        run('ls -l')

不同的机器执行不同的task:

#!/usr/bin/python
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
 
env.roledefs={'web1':['10.1.6.186'],'web2':['10.1.6.159']}
env.password='xxxxxx'  ##需要配置密码相同,,,,
 
@roles('web1')
def task1():
    with cd('/home/guol'):
        run('ls -l')
@roles('web2')
def task2():
    print(green("I'm fabric"))
 
def deploy():
    execute(task1)
    execute(task2)
执行结果:
root@vm11:/tmp# fab deploy
[10.1.6.186] Executing task 'task1'
[10.1.6.186] run: ls -l
[10.1.6.186] out: total 0
[10.1.6.186] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 186-local
[10.1.6.186] out: 
 
[10.1.6.159] Executing task 'task2'
I'm fabric
 
Done.
Disconnecting from 10.1.6.186... done.


farbic的环境变量:

fabric的环境变量有很多,存放在一个字典中,

fabric.state.env,而它包含在fabric.api中。

为了方便,我们一般使用env来指代环境变量。

env环境变量可以控制很多fabric的行为,一般通过env.xxx可以进行设置。

 

fabric默认使用本地用户通过ssh进行连接远程机器,不过你可以通过env.user变量进行覆盖。

当你进行ssh连接时,fabric会让你交互的让你输入远程机器密码,如果你设置了env.password变量,则就不需要交互的输入密码。

下面介绍一些常用的环境变量:

abort_on_prompts    设置是否运行在交互模式下,例如会提示输入密码之类,默认是false

connection_attempts    fabric尝试连接到新服务器的次数,默认1次

cwd    目前的工作目录,一般用来确定cd命令的上下文环境

disable_known_hosts    默认是false,如果是true,则会跳过用户知道的hosts文件

exclude_hosts    指定一个主机列表,在fab执行时,忽略列表中的机器

fabfile    默认值是fabfile.py在fab命令执行时,会自动搜索这个文件执行。

host_string    当fabric连接远程机器执行run、put时,设置的user/host/port等

hosts    一个全局的host列表

keepalive    默认0 设置ssh的keepalive

loacl_user    一个只读的变量,包含了本地的系统用户,同user变量一样,但是user可以修改

parallel    默认false,如果是true则会并行的执行所有的task

pool_size    默认0 在使用parallel执行任务时设置的进程数

password    ssh远程连接时使用的密码,也可以是在使用sudo时使用的密码

passwords    一个字典,可以为每一台机器设置一个密码,key是ip,value是密码

path    在使用run/sudo/local执行命令时设置的$PATH环境变量

port    设置主机的端口

roledefs    一个字典,设置主机名到规则组的映射

roles    一个全局的role列表

shell    默认是/bin/bash -1 -c 在执行run命令时,默认的shell环境

skip_bad_hosts    默认false,为ture时,会导致fab跳过无法连接的主机

sudo_prefix    默认值"sudo -S -p '%(sudo_prompt)s' " % env 执行sudo命令时调用的sudo环境

sudo_prompt    默认值"sudo password:"

timeout    默认10 网络连接的超时时间

user   ssh使用哪个用户登录远程主机


设置主机列表的方法:


hosts,在上下文环境中我们称hosts为"host strings"

strings指定了username、hostname、port等 

组合username@hostname:port。username和port可以省略,则默认使用本地用户和22端口。

 

strings映射单个主机,但是有时候你想把一批主机加入一个组中

roles则提供了一个定义一系列主机的方法,这个映射可以通过env.rolesdefs来设置

它必须通过fabfile进行设置才可以使用。env.roledefs['webservers'] = ['www1', 'www2', 'www3']


fabric 中传参数的类型,下面是一个例子:

#!/usr/bin/python
from fabric.api import *
import fabric.operations
from fabric.colors import *
from fabric.context_managers import *
import datetime
 
env.passwords = {'root@192.168.1.1:22':'redhat123456','root@192.168.1.2:22':'redhat'}
 
@hosts('root@192.168.1.1:22')
def task1():
    filename = run('ls /root/my/') #查看远程目录上的文件(此例子中这个目录下只有一个a.txt) 把这个文件名传到task2上中去
    get('/root/my/*','/root/my') #下载到本地的/root/my目录下
    local('fab task2:name=%s' % filename) #执行本地命令,并传递filename这个参数给task2
@hosts('root@192.168.1.2:22')
def task2(name=''): #定义带参数的函数
    put('/root/my/%s' % name, '/root/my') #把本地的/root/my/a.txt上传到192.168.1.2的/root/my目录下
 
 
####
运行:
fab task1
单独运行task2的命令:
fab task2:name='a.txt'


最后再来一个例子:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
from fabric.api import env,run,local,hosts,put,puts, cd
import fabric.operations
from fabric.colors import *
import datetime
 
 
# env.hosts =  []
#下面定义三个主机
env.passwords = {'root@192.168.10.91:22':'password',
                 'root@11.44.119.2:22':'password',
                 'root@11.44.119.1:22':'password'}
 
@hosts('root@192.168.10.91:22')
def uploadmusic():
    put('./data/*.mp3','/var/www/html/music/') #把本地/data/目录下的mp3文件上传到192.168.10.91
 
@hosts('root@11.44.119.2:22')
def rsyncmusic():
    with cd("/usr/local/tomcat/webapps/"):  #远程执行cd 命令,,下面是run执行的命令
        run('pwd')
        run('ls /root/')
        bak_webapi = 'tar -zcf webapi_%s.tar.gz webapi' % datetime.datetime.now().strftime("%Y%m%d%H%M")
        run(bak_webapi)
        put("./data/*.txt","webapi/WEB-INF/classes/data/")
        run("rm -rf webapi/WEB-INF/classes/data/index")
        run("echo ''>/usr/local/tomcat/webapps/webapi/WEB-INF/classes/data/a.txt")
        #fabric.operations.open_shell("python /root/zhou.py")
 
@hosts('root@11.44.119.1:22')
def shellhost():
    fabric.operations.open_shell() #远程到119.1上,并打开shell




免责声明:

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

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

Python 模块之fabric

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python 模块之fabric

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

Python Fabric 模块 介绍及

来源:《Python自动化运维》Fabric的安装Fabric支持pip、easy_install或源码安装方式,很方便解决包依赖的问题,具体安装命令如下(根据用户环境,自行选择pip或easy_install):pip install f
2023-01-31

python中Fabric模块怎么用

这篇文章给大家分享的是有关python中Fabric模块怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。基础一:#!/usr/bin/env pythonfrom fabric.api import *env
2023-06-04

Python模块学习之IPy模块

IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直接影响路由协议算法的效率,包括网络性能、可扩展性等方面,在这个过程当中,免不了要计算大量的IP地址,包括网段、网络掩码、广播地址、子网数、IP类型等。Python提供了一个强大的第三
2023-01-31

Python 之 shutil模块

shutil模块用于执行高级的文件操作,如复制,移动重命名等。>>> shutil.shutil.Error shutil._samefileshutil.__all__ shutil.abspa
2023-01-31

python之shutil模块

shutil:高级的 文件、文件夹、压缩包 处理模块shutil.copyfileobj(fsrc, fdst[, length])(copyfileobj方法只会拷贝文件内容)将文件内容拷贝到另一个文件中import shutilshut
2023-01-30

python模块之hashlib

hashlib模块实现了多种安全哈希和信息摘要算法的通用接口,包括FIPS中定义的SHA1, SHA224, SHA256, SHA384, SHA512以及RFC 1321中定义的MD5注意点:1. adler32及crc32哈希由zli
2023-01-31

python模块之subprocess

subprocess.run()运行并等待args参数指定的指令完成,返回CompletedProcess实例。参数:(*popenargs, input=None, capture_output=False, timeout=None,
2023-01-31

python模块之base64

base64模块提供了在二进制数据和可打印ASCII字符间编解码的功能,包括RFC3548中定义的Base16, Base32, Base64, Ascii85, Base85等编码。RFC3548中定义的编码适用于将二进制数据编码后,在邮
2023-01-31

python之selectors模块

selectors模块是在python3.4版本中引进的,它封装了IO多路复用中的select和epoll,能够更快,更方便的实现多并发效果。  官方文档见:https://docs.python.org/3/library/selecto
2023-01-31

python模块之functools

functools模块提供了某些高阶函数(high-order function)。functools.cmp_to_key(func)比较函数是接收两个参数进行比较的函数,返回一个负数表示<,返回0表示=,返回一个正数表示>。key函数接
2023-01-31

Python 之 paramiko 模块

paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接1.安装#paramiko模块的安装需要先安装PyCrypto模块wget https://pypi.python.org
2023-01-31

Python 之os模块

os模块提供了访问多个操作系统服务的功能,os模块的子模块os.path模块也包含了一些文件目录常用操作的函数。access(path, mode) :检测对文件的访问权限。>>> os.access('/root/zhu.txt', os
2023-01-31

python模块之collections

计数器 Counter计数元素迭代器 elements()计数对象拷贝 copy()计数对象清空 clear()from collections import Counter#import collectionsd = Counter("a
2023-01-30

python模块之configparse

configparserconfigParser 模块用于操作配置文件注:Parser汉译为“解析”之意。配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值或者键:值)。为了
2023-01-31

Python模块之: configobj

原来也有写过一篇文章Python模块之: ConfigParser 用来解析INI文件,但是在使用过程中存在一些问题。比如:1,不能区分大小写。2,重新写入的ini文件不能保留原有INI文件的注释。3,重新写入的ini文件不能保持原有的顺序
2023-01-31

python之sys模块

sys.argv 命令行参数List,第一个元素是程序本身路径;类似于shell的位置参数sys.argv[0] 表示程序自身sys.argv[1] 表示程序的第一个参数sys.argv[2] 表示程序的第二个参数#!/usr/bin/
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录