saltstack之远程触发文件备份、回滚

最近作一个平台,远程触发文件的备份,替换,修改,回滚;想到用到salt,并非使用他的统一配置功能,由于需求是每次都不同,也不是批量,更关注灵活性,与统一配置概念有所出入,因此只是使用他的远程触发功能,
远程触发远端的机器作文件的替换备份工做,

另外salt比puppet最大的好处就是他是使用python写源代码的(由于本人只会python), python

那样底层的方法什么的都看得懂,也能本身定义方法
为了方便反复使用,我定义了salt的模块方法

一、建立模块方法文件
   mkdir /srv/salt/_modules   默认没有此文件,本身生成一个

   下面的py文件本身定义,下面是我写的两个方法:   服务器

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys,string,shutil
import os,tarfile
import datetime,time

tn=datetime.datetime.today()
time_now=tn.strftime("%Y-%m-%d")
data_bak='/data/databak'
data_tmp='/data/databak/tmp/%s' % time_now
com_f="%s/%s" % (data_bak,time_now)
if not os.path.exists(com_f):
     os.makedirs(com_f)

def CpFile():
     id = sys.argv[1]
     dir = sys.argv[2]            #传入两个变量,任务自动生成的id与要替换的文件
     filename = '%s/%s.tar' % (com_f, id)
     mode = 'w:tar'
     os.chdir(data_bak)                                                                                                                                                
     w_file=open("/tmp/tmp.list",'w')      
     w_file.write(id+" "+dir)              #记录每次备份的id与相对应的备份目录或文件的路径
     w_file.close()
     file = tarfile.open( filename, mode )
     file.add( '/tmp/tmp.list' )
     file.add( dir )    
     file.close()
     return 'ok'       #测试过程,就先让返回ok吧,以后再作判断

                                                                                          
def RollBack():
     id = sys.argv[1]        #想要回滚到的版本id
     if not os.path.exists(data_tmp):
          os.makedirs(data_tmp)
     filename = '%s/%s.tar' % (com_f, id)
     tar = tarfile.open("%s" % filename)
     for b in tar:
          tar.extract(b,path="%s" % data_tmp)
     tar.close()
     for line in open('%s/tmp/tmp.list' % data_tmp):
          id = line.split(" ")[:1][0]
          dir = line.split(" ")[1:][0]       #读取备份时的路径
          backup_dir='%s/%s' % (data_tmp,dir)
          os.system('\cp -rp %s %s' % (backup_dir,dir))
          return 'ok'
二、测试:

   master上同步方法脚本到节点 测试

   salt '*' saltutil.sync_all spa

   而后先测试备份 方法 code

   salt '*' cp_bakfile.CpFile 1234  /tmp/test    #id + 路径 orm

   上节点服务器上查看,存在

   把/tmp/test下内容删除,测试回滚操做 utf-8

   salt '*' cp_bakfile.RollBack 1234    同步

   没问题,成功!
相关文章
相关标签/搜索