python fabric模块

fabfile
1.
fab 为fabric 命令行入口
-l  显示定义好的任务函数名
-f  指定fab入口文件,默认fabfile.py
-g	网关设备,如堡垒机
-H	指定目标主机多台用,分离
-R	指定role,以role区分不同业务组
-P	异步并行运行多主机任务,默认串行
-t	连接超时时间s
-T	远程执行命令超时时间
-w	执行失败是,发出警告

2.
evn全局设定,支持多个属性,包括目标主机,用户,密码,角色等

	env.host=['192.168.1.10','192.168.1.11']
	env.exclude_hosts=['192.168.1.10','192.168.1.11'] #排除主机
	env.user='root'
	env.port='22'
	env.password='password_key'
	env.passwords{
		'root@192.168.1.11:22':'key',
		'root@192.168.1.12:22':'key',
		'root@192.168.1.13:22':'key',
		}
	env.gateway='192.168.1.1'
	env.roledefs={
		'web':['192.168.1.10','192.168.1.11','192.168.1.13']
		'tomcat':['192.168.1.10','192.168.1.11']
		'db':['192.168.1.10','192.168.1.11']
		}
	角色引用示例:
	@roles('web')
	def webtask():
		run('/etc/init.d/nginx start')
	@roles('db')
	def dbtask():
		run('/etc/init.d/mysql start')
	@roles('db','web')
	def publictask():
		run('uptime')
	def deploy():
		execute(webtask)
		execute(dbtask)
		execute(publictask)

	例子:
	fab -H 192.168.1.86,192.168.1.156 -f fabfile.py host_type  

	fabfile.py如下                            
	#!/usr/bin/env python
	#--coding:utf8--
	from fabric.api import run
	def host_type():
		run('hostname')   
3.API
	fabric 提供一组强大的fabric.api命令集
	local('hostname') 执行本地命令
	lcd('/home')		切换本地目录
	cd('/')				远程执行
	run('ifconfig')		远程执行
	sudo('/etc/init.d/httpd restart')	sudo 远程执行
	put(localpath,remotepath)	上传
	get(remotepath,localpath)	下载
	reboot()					重启
	@task			该函数为fab可调用,非标记对fab不可见
	@runs_once	函数修饰符只执行一次不受多台主机影响
	
	例子:1
		#!/usr/bin/env python
		#--coding:utf8--
		from fabric.api import *

		env.user='root'
		env.hosts=['192.168.1.86','192.168.1.116']
		#env.password='pass_key'
		def host_type():
			run('hostname')
		@runs_once
		def local_task():
				local('hostname')

		def remote_task():
				with cd('~'):
					run('ls -l')
                          
	例子:2
		#!/usr/bin/env python
		#--coding:utf8--
		from fabric.api import *

		env.user='root'
		env.hosts=['192.168.1.86','192.168.1.116']
		#env.password='pass_key'

		@runs_once
		def input_raw():
			return prompt("input directory name:",default="/home")
		def worktask(dirname):
			run("ls -l "+dirname)
			
		@task 
		def go():
			getdirname=input_raw()
			worktask(getdirname)
			
		执行
		 H1#fab -f fabfile.py go
			[192.168.1.86] Executing task 'go'
			input directory name: [/home] ~
			[192.168.1.86] run: ls -l ~
	例子3.
		from  fabric.api import *
		from  fabric.context_managers import *
		from  fabric.contrib.console import confirm
		env.user='root'
		env.hosts=['192.168.1.116','192.168.1.86']

		@task
		@runs_once
		def tar_task():
			with lcd("/upload/"):
				local("tar -czf web_html.tar.gz web_html")
		@task
		def put_task():
			run("mkdir -p /var/www/html")
			with cd("/upload/"):
				with settings(warn_only=True):#出现异常继续上传,而非终止
					result=put("/upload/web_html.tar.gz","/upload/web_html.tar.gz")
				if  result.failed and not confirm("put file failed,Continue[Y/N]")
					abort("aborting file put task!") # 出现异常是提示是否继续
		@task
		def check_task():
			with settings(warn_only=True):
				#本地local命令 需要配置 capture=Ture 才能捕获返回码
				lmd5=local("md5sum /upload/web_html.tar.gz",capture=True).split(" ")[0]
				'''
				#md5sum v1.tar.gz
				d01edeea9e56be808d33487ee86f91b6  v1.tar.gz
				'''
				rmd5=run("md5sum /upload/web_html.tar.gz").split(" ")[0]
			if lmd5 == rmd5:
				print("local_md5 == remote_md5!")
			else:
				print("error")

		@task
		def go():
			tar_task()
			put_task()
			check_task()

















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值