pgup12 发表于 2018-8-7 08:57:21

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]
查看完整版本: Python 系统管理利器Fabric