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    同步

   沒問題,成功!
相關文章
相關標籤/搜索