python fabric模块

来源:互联网 发布:如何下载bilbil软件 编辑:程序博客网 时间:2024/06/07 20:13
fabfile1.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 rundef host_type():run('hostname')   3.APIfabric 提供一组强大的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_oncedef 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_oncedef 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 confirmenv.user='root'env.hosts=['192.168.1.116','192.168.1.86']@task@runs_oncedef tar_task():with lcd("/upload/"):local("tar -czf web_html.tar.gz web_html")@taskdef 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!") # 出现异常是提示是否继续@taskdef 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.gzd01edeea9e56be808d33487ee86f91b6  v1.tar.gz'''rmd5=run("md5sum /upload/web_html.tar.gz").split(" ")[0]if lmd5 == rmd5:print("local_md5 == remote_md5!")else:print("error")@taskdef go():tar_task()put_task()check_task()

0 0
原创粉丝点击