python部署工具fabric
两台机器:10.1.6.186、10.1.6.159。fabric部署在10.1.6.186上面
1 执行和1相同的任务,不过排除掉10.1.6.159这台机器
1 #!/usr/bin/python
2 from fabric.api import *
3 from fabric.context_managers import *
4
5 env.hosts=['10.1.6.186','10.1.6.159']
6 env.password='xxxxxx'
7 env.exclude_hosts=['10.1.6.159']
8
9 def task1():
10 with cd('/home/guol'):
11 run('ls -l') fab task1
2 执行和2相同任务,再增加一个task2,并且把taskN伪装成meta任务执行
#!/usr/bin/python
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'
env.exclude_hosts=['10.1.6.159'] def task1():
with cd('/home/guol'):
run('ls -l') def task2():
print(green("I'm fabric")) def deploy():
execute(task1)
execute(task2) ##执行
root@vm11:/tmp# fab deploy
3 不同的机器执行不同的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
4 把159的/home/guol/159-remote拉取到186的 /home/guol/目录下
#!/usr/bin/python
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
env.hosts=['10.1.6.159']
env.password='xxxxxx' def task1():
print(green("I'm 186 /home/guol/"))
local('ls -l /home/guol')
def task2():
print(green("I'm get 159's 159-remote file to 186"))
get('/home/guol/159-remote','/home/guol')
print(yellow("I'm 186 /home/guol/"))
local('ls -l /home/guol') def deploy():
execute(task1)
execute(task2) ##执行
root@vm11:/tmp# fab deploy
[10.1.6.159] Executing task 'deploy'
[10.1.6.159] Executing task 'task1'
I'm 186 /home/guol/
[localhost] local: ls -l /home/guol
total 0
-rw-r--r-- 1 root root 0 Dec 21 13:32 186-local
[10.1.6.159] Executing task 'task2'
I'm get 159's 159-remote file to 186
[10.1.6.159] download: /home/guol/159-remote <- /home/guol/159-remote
I'm 186 /home/guol/
[localhost] local: ls -l /home/guol
total 0
-rw-r--r-- 1 root root 0 Dec 21 14:28 159-remote
-rw-r--r-- 1 root root 0 Dec 21 13:32 186-local Done.
Disconnecting from 10.1.6.159... done.
5 把186的/home/guol/ 186-local推送到159的 /home/guol/目录下
#!/usr/bin/python
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
env.hosts=['10.1.6.159']
env.password='xxxxxx' def task1():
print(green("I'm 159 /home/guol/"))
with cd('/home/guol'):
run('ls -l')
def task2():
print(green("I'm put 186's 186-local file to 159"))
put('/home/guol/186-local','/home/guol')
print(yellow("I'm 159 /home/guol/"))
with cd('/home/guol'):
run('ls -l')
def deploy():
execute(task1)
execute(task2) ##执行
root@vm11:/tmp# fab deploy
[10.1.6.159] Executing task 'deploy'
[10.1.6.159] Executing task 'task1'
I'm 159 /home/guol/
[10.1.6.159] run: ls -l
[10.1.6.159] out: total 0
[10.1.6.159] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 159-remote
[10.1.6.159] out: [10.1.6.159] Executing task 'task2'
I'm put 186's 186-local file to 159
[10.1.6.159] put: /home/guol/186-local -> /home/guol/186-local
I'm 159 /home/guol/
[10.1.6.159] run: ls -l
[10.1.6.159] out: total 0
[10.1.6.159] out: -rw-r--r-- 1 root root 0 Dec 21 13:32 159-remote
[10.1.6.159] out: -rw-r--r-- 1 root root 0 Dec 21 14:33 186-local
[10.1.6.159] out: Done.
Disconnecting from 10.1.6.159... done.
7 在186上打开一个159的交互式的shell
#!/usr/bin/python
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
env.hosts=['10.1.6.159']
env.password='xxxxxx'
def task3():
open_shell("ifconfig eth0|grep '10.1.6.159'")
def deploy():
execute(task3)
##执行
root@vm11:/tmp# fab deploy
[10.1.6.159] Executing task 'deploy'
[10.1.6.159] Executing task 'task3'
Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-17-generic x86_64)
Last login: Fri Dec 21 14:39:39 2012 from 10.1.6.186
ifconfig eth0|grep '10.1.6.159'
root@vm12:~# ifconfig eth0|grep '10.1.6.159'
inet addr:10.1.6.159 Bcast:10.1.6.255 Mask:255.255.255.0
python部署工具fabric的更多相关文章
- Python自动化运维工具-Fabric部署及使用总结
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- Python自动化运维工具fabric的安装
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- 20180903 - Python Pip 工具下载whl包与离线安装
20180903 - Python Pip 工具下载whl包与离线安装 1. 我的Blog 博客园 https://www.cnblogs.com/piggybaba 个人网站 http://pigg ...
- Python模块学习 - fabric
简介 fabric是一个Python的库,同时它也是一个命令行工具.使用fabric提供的命令行工具,可以很方便地执行应用部署和系统管理等操作. fabric依赖于paramiko进行ssh交互,fa ...
- 轻量级自动化运维工具Fabric的安装与实践
一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...
- Openstack部署工具
Openstack发展很猛,很多朋友都很认同,2013年,会很好的解决OpenStack部署的问题,让安装,配置变得更加简单易用. 很多公司都投入人力去做这个,新浪也计划做一个Openstack的is ...
- Python生态工具、文本处理和系统管理(虚拟)
一.Python生态工具 一.Python内置小工具 1.秒级启动一个下载服务器 Python 内置了一个下载服务器就能够显著提升效率了 . 例如, 你的同事要让你传的文件位于某一个目录下,那么,你可 ...
- 阿里云运维部署工具AppDeploy详细教程
AppDeploy是一个通过SSH实现的命令行工具,可完成应用部署和远程运维管理.当前工具实现为两个版本:普通版(伪代码描述语言)和Python版.Python版使用Python语法规则,可实现您的各 ...
- python模块之 fabric
Python模块之Fabric Fabric简介 Fabric是一个Python库,可以通过SSH在多个host上批量执行任务.你可以编写任务脚本,然后通过Fabric在本地就可以使用SSH在大量 ...
随机推荐
- Context-Aware Network Embedding for Relation Modeling
Context-Aware Network Embedding for Relation Modeling 论文:http://www.aclweb.org/anthology/P17-1158 创新 ...
- [转] Socket心跳包异常检测的C语言实现,服务器与客户端代码案例
转载自:zxh2075的专栏 在Socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能较大.本文实现的是由客户端给服务器发送心跳包,服务器不必返 ...
- for in 对象时,属性为非负整数的情况
在我做一个需求的时候 for in 一个对象,对象的属性都是数字 但是我想给这个对象加一个默认的属性跟值 原对象是{5446:"广州市"}.....类似于下去 然后我想给我页面展示 ...
- Django 定制验证码
一.图片验证码 方式一: def get_validCode_img(request): path=os.path.join(settings.BASE_DIR,'static','image','1 ...
- 01 java 基础:jdk jre path classpath 相关问题
JRE : Java 运行环境 JDK : Java 开发工具包,其中包括 JRE (javac.java.javap.jar.javadoc .javah 等命令) JVM : Java 虚拟机 ...
- 215. Kth Largest Element in an Array【Medium】【找到第 k 大的元素】
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...
- python之IO model
一.事件驱动模型 在介绍协程时,遇到IO操作就切换,但什么时候切换回来,怎么确定IO操作结束? 很多人可能会考虑使用“线程池”或“连接池”.“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的 ...
- JNDI Tomcat
1.JNDI的诞生及简介简介 1)服务器数据源配置的诞生 JDBC阶段: 一开始是使用JDBC来连接操作数据库的: 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Cl ...
- hdu 2196(Computer 树形dp)
A school bought the first computer some time ago(so this computer's id is 1). During the recent year ...
- [BZOJ 1855] 股票交易
Link: BZOJ 1855 传送门 Solution: 比较明显的$dp$模型 令$dp[i][j]$为第$i$天持有$j$支股票时的最大利润 对其购买股票和售出股票分别$dp$,这里以购买为例: ...