python fabric模块
2016-01-23 17:51
405 查看
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()
相关文章推荐
- 网站渗透常用到的Python小脚本
- 网站渗透常用到的Python小脚本
- Python pyenv
- Python -- 文件处理
- Python环境的搭建
- python-opencv的一段比较稳定的摄像头视频读取代码
- python中numpy对函数进行矢量化转换
- Python操作MySQL案例
- python多进程
- leetcode之Merge k Sorted Lists
- python之字典
- python连接MySQL时,中文乱码解决方案
- 【Python】使用pypy加速
- Python操作SQLite/MySQL/LMDB/LevelDB
- Numpy之random模块
- python strip()函数 介绍
- Anaconda、Python和Theano之间的关系
- Python学习视频
- Python之面向对象进阶篇
- Python函数式编程Demo