Python 系统管理利器Fabric
#!/usr/bin/env python#encoding: utf-8
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
import os
#定义目标主机信息
env.user='root'
env.hosts=['192.168.0.141',]
env.password='redhat'
#定义目录结构
LocalDir = "/home/saltroot/gameroot"
RemoteDir = "/home/saltclient/gameroot/"
LocalFile = os.path.join(LocalDir,"script.tar.gz")
RemoteFile = os.path.join(RemoteDir,"script.tar.gz")
#打包文件
def tar_task():
with lcd(LocalDir):
local("tar -zcf script.tar.gz script")
#上传文件
def put_task():
run("mkdir -p %s" % RemoteDir)
with settings(warn_only=True):#put上传出现异常时继续执行,非终止
result = put(LocalFile,RemoteFile)
if result.failed and not confirm("put file failed, Continue?"):
abort("Aborting file put task!")#出现异常时,确认是否继续,(Y继续)
#校对文件
def check_task():
with settings(warn_only=True):
lmd5=local("md5sum %s" % LocalFile,capture=True).split(' ')
rmd5=run("md5sum %s" % RemoteFile).split(' ')
if lmd5==rmd5:#对比本地及远程文件的md5信息
print yellow("OK")
else:
print red("ERROR")
#初始化
def agent_task():
with cd(RemoteDir):
run("tar -zxf script.tar.gz")
with cd("script/"):
run("./init.sh")
#4个功能一起实现
@task#限定只有go函数对fab可见
def go():
print yellow("program start ...")
tar_task()
put_task()
check_task()
agent_task()
print green("program sucessful ...")
############################################
# 命令执行方式
# fab go
# 额外的命令
# @roles('new')
# def show():
# print green('success')
# print red('fail')
# print yellow('yellow')
#定义业务角色
#env.user='root'
#env.roledefs = {
# 'new': ['192.168.0.100',],
# 'ios': ['192.168.0.130','192.168.0.101'],
# 'Andorid': ['192.168.0.200', '192.168.0.201', '192.168.0.230']
#}
#
#env.passwords = {
# 'root@192.168.0.100:22': 'redhat',
# 'root@192.168.0.120:22': 'redhat'
#}
############################################
页:
[1]