source: n4d-server-plugins/trunk/fuentes/server-install-files/usr/share/n4d/python-plugins/ServerBackupManager.py @ 1868

Last change on this file since 1868 was 1868, checked in by Juanma, 4 years ago

Fix ipxebbot symlink

File size: 4.6 KB
Line 
1# -*- coding: utf-8 -*-
2import sys
3import os
4import tarfile
5import tempfile
6import time
7import ConfigParser
8
9class ServerBackupManager:
10
11        def __init__(self):
12               
13                self.backup_list=["VariablesManager","Hostname","NetworkManager","Dnsmasq","N4dProxy","SlapdManager","PamnssPlugin","SambaManager"]
14                #self.backup_list=["VariablesManager","Hostname","NetworkManager","Dnsmasq","N4dProxy","SlapdManager","PamnssPlugin","SambaManager","NetFoldersManager","MysqlManager","CupsManager","ApacheManager"]
15               
16        #def init
17
18        def backup(self,path=None,service_list=None,netfolders_list=None):
19               
20                return self.server_basics_backup(path,service_list,netfolders_list)
21               
22        #def backup
23       
24        def get_basic_services_list(self):
25               
26                return self.backup_list
27               
28        #def get_basic_services_list
29               
30       
31        def server_basics_backup(self,path=None,service_list=None,netfolders_list=None):
32
33
34                if service_list==None:
35                        service_list=self.backup_list
36               
37                if path==None:
38                        cur_date=time.strftime("%d%m%Y")
39                        path="/backup/%s"%cur_date
40                        if not os.path.exists(path):
41                                os.makedirs(path)
42               
43                if os.path.exists(path):
44                       
45                        file_name=path+"/"+get_backup_name("ServerBackup")
46                        tar=tarfile.open(file_name,"w:gz")
47                       
48                        f=open(path+"/backup_files.conf","w")
49                        f.write("[ServerBackupManager]\n")
50                       
51                        ret={}
52                        for service in service_list:
53                                try:
54
55                                        if service=="NetFoldersManager":
56                                                ret[service]=objects[service].backup(netfolders_list,path)
57                                        else:
58                                                ret[service]=objects[service].backup(path)
59                                               
60                                        if ret[service][0]:
61                                                fname=ret[service][1].split("/")[-1]
62                                                tar.add(ret[service][1],arcname=fname)
63                                                f.write("%s=%s\n"%(service,fname))
64                                                os.remove(ret[service][1])     
65                       
66                                except Exception as e:
67                                        ret[service]=[False,str(e)]
68                                        f.write("# [!] %s FAILED: %s\n"%(service,str(e)))
69                               
70               
71                        f.close()
72                       
73                        os.system("lliurex-version -n > %s/lliurex-version"%path)
74                        tar.add(path+"/backup_files.conf",arcname="backup_files.conf")
75                        tar.add(path+"/lliurex-version",arcname="lliurex-version")
76                        os.remove(path+"/backup_files.conf")
77                        os.remove("%s/lliurex-version"%path)
78                        tar.close()
79                       
80                        os.system("chmod 660 %s"%file_name)
81                        os.system("chown root:admins %s"%file_name)
82                       
83                        return [True,ret,file_name]
84                       
85                else:
86                       
87                        return [False,ret,"Backup file not found"]
88               
89        #def backup
90       
91        def restore(self,file_name):
92               
93                return self.server_basics_restore(file_name)
94       
95        def server_basics_restore(self,file_name):
96               
97                if os.path.exists(file_name):
98               
99                        tmp_dir=tempfile.mkdtemp()
100                        tar=tarfile.open(file_name,"r")
101                        tar.extractall(tmp_dir)
102                        tar.close()
103                        if os.path.exists(tmp_dir+"/backup_files.conf"):
104                                try:
105                                        cfg=ConfigParser.ConfigParser()
106                                        cfg.optionxform=str
107                                        cfg.read(tmp_dir+"/backup_files.conf")
108                                        ret={}
109                                       
110                                        self.restoring_version=None
111                               
112                                        if os.path.exists(tmp_dir+"/lliurex-version"):
113                                                f=open(tmp_dir+"/lliurex-version")
114                                                self.restoring_version=f.readline().strip("\n")
115                                                self.restoring_version=".".join(self.restoring_version.split(".")[0:2])
116                                        for items in cfg.items("ServerBackupManager"):
117                                                key,value=items
118                                                try:
119                                                        if key in objects:
120                                                                ret[key]=objects[key].restore(tmp_dir+"/"+value)
121
122                                                        else:
123                                                                ret[key]=[False,"Plugin not found"]
124                                                except Exception as e:
125                                                        print e
126                                                        ret[key]=str(e)
127                                                       
128                                        #Fix ipxeboot symlink restore
129                                        ipxeLinkPath=("/var/www/ipxeboot")
130                                        ipxeRealPath=os.path.realpath(ipxeLinkPath)
131                                        try:
132                                                if not(os.path.exists(ipxeRealPath)):
133                                                        print ("Fixing ipxeboot symlink...")
134                                                        os.remove(ipxeLinkPath)
135                                                        os.symlink("/usr/share/llxbootmanager/www-boot",ipxeLinkPath)
136                                        except Exception as e:
137                                                print e
138                                                ret[key]=str(e)
139                                       
140                                        self.final_operations()
141                                        self.restoring_version=None
142                                        return [True,ret]
143                                       
144                                except Exception as e:
145                                        return [False,str(e)]
146                                       
147                        else:
148                                return [False,{},"File not found"]
149                       
150                else:
151                        return [False,{},"File not found"]
152                       
153       
154                return [False,{},"Failed. Did nothing"]
155               
156               
157        #def server_basics_restore
158       
159       
160        def final_operations(self):
161               
162
163                try:
164                        objects["Golem"].startup(None)
165                        objects["NetFoldersManager"].startup(None)
166                                               
167                        for item in objects["Golem"].light_get_user_list():
168                               
169                                user_info={}
170                                user_info["profile"]=item[5]
171                                user_info["uid"]=item[1]
172                                user_info["uidNumber"]=item[2]
173                                try:
174                                        objects["Golem"].exist_home_or_create(user_info)
175                                except:
176                                        pass
177                                               
178                        objects["Golem"].restore_groups_folders()
179
180
181                        objects["ZeroServerWizardManager"].end_operations()
182                                       
183                except Exception as e:
184                               
185                        print e
186
187               
188        #def final_operations
189
190#class ServerBackupManager
191
192
193if __name__=="__main__":
194       
195        golem=ServerBackupManager()
Note: See TracBrowser for help on using the repository browser.