另外salt比puppet最大的好處就是他是使用python寫源代碼的(由於本人只會python), python
下面的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 同步