|
# -*- coding: utf-8 -*
#!/usr/bin/env python
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
import time
import datetime
#backup server
env.user = 'root'
env.hosts= ['192.168.64.129']
env.password= '123456'
env.deploy_version = time.strftime("%Y%m%d")
#local backup
env.project_dev_source = ['/usr/local/nginx/','/usr/local/php/']
env.project_tar_source = '/backup/'
#backup server
env.deploy_project_dir = '/backup/'
env.deploy_address_ip = '192.168.64.128'
env.deploy_address_dir = env.deploy_project_dir + env.deploy_address_ip
@task
@runs_once
def tar_backup():
#在本地打包备份文件
print yellow("Creating backup package...")
local("mkdir -p %s" % env.project_tar_source)
for source in env.project_dev_source:
with lcd(source):
local("tar -czf %s-%s.tar.gz . " % ((env.project_tar_source + env.deploy_version),source.split('/')[-2]))
local("find /backup -name '*.tar.gz' -mtime +7|xargs rm -f")
print green("Creating backup package success!")
@task
def put_package():
#推送至备份服务器
print yellow("Start put package...")
run("mkdir -p %s "% env.deploy_address_dir)
with settings(warn_only=True):
for source in env.project_dev_source:
result = put(env.project_tar_source+env.deploy_version+"-"+source.split('/')[-2]+".tar.gz",env.deploy_address_dir)
print green("Put & backup package success!")
@task
@runs_once
def md5_check():
#通过md5对比备份服务器和本地备份文件的完整性
print yellow("check backup package...")
with lcd(env.project_tar_source):
lmd5 = local("md5sum %s%s*.gz|awk '{print $1}'"% (env.project_tar_source,env.deploy_version),capture=True).split()
rmd5 = run("md5sum %s/%s*.gz|awk '{print $1}'"% (env.deploy_address_dir,env.deploy_version)).split()
#将备份状态信息写入备份服务器的日志文本
if lmd5==rmd5:
status = '备份时间 : %-25s备份IP : %-30s备份状态 : 备份成功!'% (datetime.date.today(),env.deploy_address_ip)
run("echo '%s' >> %slogs/backup_%s.log"% (status,env.deploy_project_dir,env.deploy_version))
print green("backup package md5 contrast success!")
else:
status = '备份时间 : %-25s备份IP : %-30s备份状态 : 备份失败!'% (datetime.date.today(),env.deploy_address_ip)
run("echo '%s' >> %slogs/backup_%s.log"% (status,env.deploy_project_dir,env.deploy_version))
print green("backup package md5 contrast failure!")
@task
def back():
tar_backup()
put_package()
md5_check() |
|
|