Python之Fabric
【Fabric】
Fabric是一个用Python开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署。
安装
- wget https://bootstrap.pypa.io/get-pip.py
- python get-pip.py
- pip install fabric
fabric常用参数
- -l : 显示定义好的任务函数名
- -f : 指定fab入口文件,默认入口文件名为fabfile.py
- -H : 指定目标主机,多台主机用","号分割
fabric常用API
- local : 执行本地命令,如:local('uname -s')
- lcd : 切换本地目录,如:lcd('/home')
- cd : 切换远程目录,如:cd('/etc')
- run : 执行远程命令,如:run('free -m')
- sudo : sudo方式执行远程命令,如:sudo('touch /test')
- put : 上传本地文件到远程主机,如:put('/hello', '/home/yanjun_wang/hello')
- get : 从远程主机下载文件到本地,如:get('/home/python/world', '/home/yanjun_wang/world')
- reboot : 重启远程主机,如:reboot()
- @task : 函数装饰器,标识的函数为fab可调用的,非标记的对fab不可见,纯业务逻辑
- @runs_once : 函数装饰器,标识的函数只会执行一次,不受多台主机影响
fabric全局属性设定
- env.host : 定义目标主机,如:env.host=['192.168.56.1', '192.168.56.2']
- env.user : 定义用户名,如:env.user="root"
- env.port : 定义目标主机端口,默认为22,如:env.port="22"
- env.password : 定义密码,如:env.password="passwd"
- env.passwords : 不同的主机不同的密码,如:env.passwords={'root@192.168.56.1:22':'passwd', 'root@192.168.56.2:22':'python'}
示例:上传文件并执行
- from fabric.api import *
- env.user = 'mysql'
- env.hosts = ['192.168.56.1', '192.168.56.2']
- #env.password = '1qaz@WSX'
- env.passwords = {
- 'root@192.168.56.1:22':'1qaz@WSX',
- 'root@192.168.56.2:22':'1qaz@WSX',
- }
- @task
- @runs_once
- def tar_task():
- with lcd('/home/mysql/yanjun_wang'):
- local('tar zcvf hello.tar.gz hello_world.py')
- @task
- def put_task():
- run('mkdir -p /home/mysql/yanjun_wang')
- with cd('/home/mysql/yanjun_wang'):
- put('/home/mysql/yanjun_wang/hello.tar.gz', '/home/mysql/yanjun_wang/hello.tar.gz')
- @task
- def check_task():
- lmd5 = local('md5sum /home/mysql/yanjun_wang/hello.tar.gz', capture=True).split(' ')[0]
- rmd5 = run('md5sum /home/mysql/yanjun_wang/hello.tar.gz').split(' ')[0]
- if lmd5 == rmd5:
- print('OK ...')
- else:
- print('ERROR ...')
- @task
- def run_task():
- with cd('/home/mysql/yanjun_wang'):
- run('tar zxvf hello.tar.gz')
- run('python hello_world.py')
- @task
- def execute():
- print('start ...')
- tar_task()
- put_task()
- check_task()
- run_task()
- print('end ...')
Python之Fabric的更多相关文章
- python使用Fabric模块实现自动化运维
简介:Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行.文件上传.下载及完整 ...
- python之fabric(二):执行模式(转)
执行模式 执行模式可以让你在多个主机上执行多个任务. 执行策略: 默认fabric是单个有序地执行方法,其行为如下: 1. 创建一系列任务,通过fab任务执行要执行的任务: 2. 根据主机列表定义,去 ...
- Python之Fabric模块
Fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括:命令执行.文件上传.下载及完整执行日 ...
- python之fabric(一):环境env
原文:https://my.oschina.net/indestiny/blog/289587 1. fabric有很多可配置的环境,如: user:默认用于ssh登录的本地用户名. password ...
- python之fabric(一):环境env (转)
原文地址:https://my.oschina.net/indestiny/blog/289587 1. fabric有很多可配置的环境,如: user:默认用于ssh登录的本地用户名. passwo ...
- Python自动化运维工具-Fabric部署及使用总结
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- Python fabric实践操作
前面学习了理论,下面该练练手了.两台机器:10.1.6.186.10.1.6.159.fabric部署在10.1.6.186上面. 1 执行一个简单的task任务,显示两台机器的/home/guol ...
- python部署工具fabric
两台机器:10.1.6.186.10.1.6.159.fabric部署在10.1.6.186上面 1 执行和1相同的任务,不过排除掉10.1.6.159这台机器 1 #!/usr/bin/pytho ...
- 9.python 系统批量运维管理器之Fabric模块
前面介绍了paramiko,pexpect模块,今天来说比较适合大型应用自动化部署的模块,或者执行系统命令的模块Fabric. Fabric 是一个 Python 的库,同时它也是一个命令行工具.它提 ...
随机推荐
- Java并发编程:并发容器之ConcurrentHashMap(转)
本文转自:http://www.cnblogs.com/dolphin0520/p/3932905.html Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载 ...
- Javascript中的函数数学运算
1.Math函数与属性使用语法 Math.方法名(参数1,参数2,...); Math.属性; 说明 Math函数可以没有参数,比如Math.random()函数,或有多个参数,比如Math.max( ...
- C/C++结构体总结
1 #include"iostream" 2 using namespace std; 3 4 struct TestStruct 5 { 6 ...
- Mysql主从架构报错-Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work...
在搭建Mysql主从架构过程中,由于从服务器是克隆的主服务器系统,导致主从mysql uuid相同, Slave_IO无法启动,报错如下: The slave I/O thread stops bec ...
- Python3.x:Selenium+PhantomJS爬取带Ajax、Js的网页
Python3.x:Selenium+PhantomJS爬取带Ajax.Js的网页 前言 现在很多网站的都大量使用JavaScript,或者使用了Ajax技术.这样在网页加载完成后,url虽然不改变但 ...
- Vue 组件间传值
前言 Vue 作为现在比较火的框架之一,相信您在使用的过程中,也会遇到组件间传值的情况,本文将讲解几种 Vue 组件间传值的几种方法,跟着小编一起来学习一下吧! 实现 注意: 学习本文,需要您对 Vu ...
- 安卓Android第三方登录-QQ登录
要实现QQ第三方登录,其实只需要一个封装类:QQLoginManager 几乎 三行代码 就实现QQ登录功能 这里先给出Github开源项目地址,项目下有详细的使用说明 下面就开始详细说一说怎么实 ...
- PHP中的_FILE_和_DIR_的区别
<?php$dir = dirname(__FILE__);?>在PHP5.3中,增加了一个新的常量__DIR__,指向当前执行的PHP脚本所在的目录.例如当前执行的PHP文件为 /www ...
- 混合开发的大趋势之一React Native之页面跳转(2)+物理返回+特定平台代码
转载请注明出处:这里写链接内容 今天是10月份的最后一天,我加了3个月来的第一个班,挤出了这篇. 废话不多先安利,然后继续学习 RN 有好东西都往里面丢,努力做好归纳 https://github.c ...
- Oracle归档的开启和关闭
--1.开启归档 [步骤] a.一致性关闭数据库(shutdown [immediate | transactional |normal]) b.启动到mount阶段(startup mount) c ...