source: n4d-apache/trunk/fuentes/install-apache/usr/share/n4d/python-plugins/ApacheManager.py @ 5242

Last change on this file since 5242 was 5242, checked in by Juanma, 3 years ago

Ensure that proxy mods are enabled if pmb is in the backup

File size: 8.5 KB
Line 
1# npackage example  https://svn.lliurex.net/pandora/n4d-ldap/trunk
2# jinja2 http://jinja.pocoo.org/docs/templates
3
4from jinja2 import Environment
5from jinja2.loaders import FileSystemLoader
6from jinja2 import Template
7import tempfile
8import shutil
9import os
10import subprocess
11import tarfile
12import time
13import glob
14
15
16class ApacheManager:
17
18        def __init__(self):
19                #Load template file
20                self.tpl_env = Environment(loader=FileSystemLoader('/usr/share/n4d/templates/apache'))
21                self.backup_files=[]
22                self.backup_dirs=["/etc/apache2/","/var/www/","/net/server-sync/easy-sites"]
23
24        #def init
25       
26        def startup(self,options):
27                # executed when launching n4d
28                pass
29               
30        #def startup
31
32        def apt(self):
33                # executed after apt operations
34                pass
35               
36        #def apt
37       
38        # service test and backup functions #
39        def test(self):
40
41                pass
42
43        #def makedir
44        def makedir(self,dir=None):
45
46                if not os.path.isdir(dir):
47                        os.makedirs(dir)
48                return [True]
49
50        #def timestamp backup
51        def get_time(self):
52                return get_backup_name("ApacheManager")
53
54        #def backup
55        def backup(self,dir="/backup"):
56               
57                try:
58               
59                        self.makedir(dir)
60                        file_path=dir+"/"+self.get_time()
61                        tar=tarfile.open(file_path,"w:gz")
62                               
63                        for f in self.backup_files:
64                                if os.path.exists(f):
65                                        tar.add(f)
66
67                        for d in self.backup_dirs:
68                                if os.path.exists(d):
69                                        tar.add(d)
70                       
71                        self.list_easy_sites = glob.glob('/var/www/srv/'+'easy-'+'*') + glob.glob("/var/www/srv/links/easy-*")
72                        for j in self.list_easy_sites:
73                                if os.path.exists(j):
74                                        tar.add(j)
75                       
76                        dir="/net/server-sync/easy-sites"
77                        if os.path.exists(dir):
78                                cmd="getfacl -pR %s > /tmp/easy-sites.acl"%dir
79                                os.system(cmd)
80                                tar.add("/tmp/easy-sites.acl",arcname="easy-sites.acl")
81                                os.remove("/tmp/easy-sites.acl")
82                               
83                               
84                        os.system("a2query -m > /tmp/mods_available")
85                       
86                        tar.add("/tmp/mods_available",arcname="llx-backup_mods_available")
87                        tar.close()
88
89                        return [True,file_path]
90
91                except Exception as e:
92                        return [False,str(e)]
93
94        #def restore backup
95        def restore(self,file_path=None):
96
97
98                if file_path==None:
99                        dir="/backup"
100                        for f in sorted(os.listdir(dir),reverse=True):
101                                if "ApacheManager" in f:
102                                        file_path=dir+"/"+f
103                                        break
104
105
106                try:
107                        if os.path.exists(file_path):
108                                tmp_dir=tempfile.mkdtemp()
109                                tar=tarfile.open(file_path)
110                                tar.extractall(tmp_dir)
111                                tar.close()
112
113                                os.system("rm -rf %s"%tmp_dir+"/etc/apache2/mods-available")
114                                os.system("rm -rf %s"%tmp_dir+"/etc/apache2/mods-enabled")
115                               
116
117                                try:
118                                        if objects["ServerBackupManager"].restoring_version=="14.06":
119                                               
120                                                print "[ApacheManager] Removing old apache conf files..."
121                                               
122                                                files_to_remove=["/etc/apache2/apache2.conf","/etc/apache2/envvars","/etc/apache2/magic","/etc/apache2/ports.conf","/etc/apache2/httpd.conf","/var/www/index.html"]
123                                               
124                                                for f in files_to_remove:
125                                                        print tmp_dir+f,os.path.exists(tmp_dir+f)
126                                                        if os.path.exists(tmp_dir+f):
127                                                                os.remove(tmp_dir+f)
128                                                os.system("rm -rf %s"%tmp_dir+"/etc/apache2/conf.d")
129                                                os.system("ls -la %s"%tmp_dir+"/etc/apache2/")
130                                               
131                                               
132                                except Exception as llx1406e:
133                                        print llx1406e
134                       
135
136
137                                for f in self.backup_files:
138                                        tmp_path=tmp_dir+f
139                                        if os.path.exists(tmp_path):
140                                                shutil.copy(tmp_path,f)
141
142                                for d in self.backup_dirs:
143                                        tmp_path=tmp_dir+d
144                                        if os.path.exists(tmp_path):
145                                                self.makedir(d)
146                                                cmd="cp -r " + tmp_path +"/* "  + d
147                                                os.system(cmd)
148                                               
149                                #Add pmb redirection to port 800 (apache2-lliurex)
150                                sw_loadProxyMods=False
151                                for confFile in ["/etc/apache2/sites-enabled/pmb.conf","/etc/apache2/sites-enabled/opac.conf"]:
152                                        if os.path.exists(confFile):
153                                                sw_loadProxyMods=True
154                                                site=confFile.split('/')[-1]
155                                                site=site.replace('.conf','')
156                                                confF=open(confFile,'r')
157                                                contentF=confF.readlines()
158                                                confF.close()
159                                                pos=0
160                                                for line in contentF:
161                                                        pos=pos+1
162                                                        if "Alias " in line:
163                                                                break
164
165                                                contentF.insert(pos,"\n\tProxyPass / http://"+site+":800/\n\tProxyPassReverse / http://"+site+":800/\n")
166                                                confF=open(confFile,'w')
167                                                confF.writelines(contentF)
168                                                confF.close()
169
170                                if sw_loadProxyMods:   
171                                        #Ensure that proxy mods are enabled
172                                        cmd="/usr/sbin/a2enmod proxy proxy_http"
173                                        os.system(cmd)
174
175                                if os.path.exists("/net/server-sync/easy-sites") and os.path.exists(tmp_dir+"/easy-sites.acl"):
176                                        os.system("setfacl -R --restore=%s/easy-sites.acl"%tmp_dir)
177                                       
178                               
179                               
180                                # # 14.06 -> 15.05 CASE #############################
181                               
182                                try:
183                                        if objects["ServerBackupManager"].restoring_version=="14.06":
184                                               
185                                                print("[ApacheManager] Fixing files ...")
186                                               
187                                                dir="/etc/apache2/sites-available/"
188                                               
189                                                for item in os.walk(dir):
190                                                        path,data,files=item
191                                               
192                                                for f in files:
193                                                        path=dir+f
194                                                        if not os.path.exists(path):
195                                                                continue
196                                                        if f=="default":
197                                                                os.remove(path)
198                                                                continue
199                                                                if os.path.exists(dir+"000-default.conf"):
200                                                                        os.remove(dir+"000-default.conf")
201                                                                os.symlink("/etc/apache2/sites-available/llx-default.conf",dir+"000-default.conf")
202                                                        elif f=="default.lliurex":
203                                                                os.remove(path)
204                                                                continue
205                                                        elif f=="000-default.orig":
206                                                                pass
207                                                        elif not f.endswith(".conf"):
208                                                                shutil.move(path,path+".conf")
209
210                                                print dir,"DONE"
211
212                                                dir="/etc/apache2/sites-enabled/"
213                                                files=[]
214                                               
215                                                for item in os.walk(dir):
216                                                        path,data,files=item
217
218                                               
219                                                for f in files:
220                                                        path=dir+f
221                                                        link=os.readlink(path)
222                                                        if link.startswith("../"):
223                                                                link=link.replace("../","/etc/apache2/")
224                                                       
225                                                        if f=="000-default":
226                                                                os.remove(path)
227                                                                if os.path.exists("/etc/apache2/sites-enabled/000-default.conf"):
228                                                                        os.remove("/etc/apache2/sites-enabled/000-default.conf")
229                                                                os.symlink("/etc/apache2/sites-available/000-default.conf","/etc/apache2/sites-enabled/000-default.conf")
230                                                                continue
231                                                       
232
233                                                       
234                                                        if not path.endswith(".conf"):
235                                                                os.remove(path)
236                                                                if not os.path.exists(link):
237                                                                        link+=".conf"
238                                                               
239                                                                if not os.path.exists(link):
240                                                                        continue
241                                                                if os.path.exists(path+".conf"):
242                                                                        os.remove(path+".conf")
243                                                                os.symlink(link,path+".conf")
244                                                               
245                                                        else:
246                                                                if not os.path.exists(link):
247                                                                        os.remove(path)
248                                                               
249                                               
250                                except Exception as llx14_ex:
251                                        print llx14_ex
252                                       
253                                # #END OF 14.06->15.05 CASE # ############
254                               
255                                os.system("service apache2 restart")
256
257                                return [True,""]
258
259                        else:
260                                return [False,"Backup file not found"]
261
262                except Exception as e:
263
264                        return [False,str(e)]
265
266
267        #def restore
268
269        def load_exports(self):
270                #Get template
271                template_server = self.tpl_env.get_template("server")
272                list_variables = {}
273               
274                #Inicialize INTERNAL_DOMAIN
275                list_variables['INTERNAL_DOMAIN'] = objects['VariablesManager'].get_variable('INTERNAL_DOMAIN')
276                #If INT_DOMAIN is not defined calculate it with args values
277                if  list_variables['INTERNAL_DOMAIN'] == None:
278                        return {'status':False,'msg':'Variable INTERNAL_DOMAIN not defined'}
279               
280                #Inicialize INTERNAL_DOMAIN
281                list_variables['HOSTNAME'] = objects['VariablesManager'].get_variable('HOSTNAME')
282                #If INT_DOMAIN is not defined calculate it with args values
283                if  list_variables['HOSTNAME'] == None:
284                        return {'status':False,'msg':'Variable HOSTNAME not defined'}
285               
286                ###########################
287                #Setting VARS
288                ###########################
289               
290                #Set HTTP_PATH
291                list_variables['HTTP_PATH'] = objects['VariablesManager'].get_variable('HTTP_PATH')
292                #If variable PROXY_ENABLED is not defined calculate it with args values
293                if  list_variables['HTTP_PATH'] == None:
294                        status,list_variables['HTTP_PATH'] = objects['VariablesManager'].init_variable('HTTP_PATH',{'PATH':'/var/www/'})
295               
296                #Encode vars to UTF-8
297                string_template = template_server.render(list_variables).encode('UTF-8')
298                #Open template file
299                fd, tmpfilepath = tempfile.mkstemp()
300                new_export_file = open(tmpfilepath,'w')
301                new_export_file.write(string_template)
302                new_export_file.close()
303                os.close(fd)
304                #Write template values
305                n4d_mv(tmpfilepath,'/etc/apache2/sites-available/server',True,'root','root','0644',False )
306                #Restart service
307                subprocess.Popen(['a2ensite','server.conf'],stdout=subprocess.PIPE).communicate()
308                subprocess.Popen(['/etc/init.d/apache2','reload'],stdout=subprocess.PIPE).communicate()
309                return {'status':True,'msg':'Exports written'}
310        #def load_exports
311
312        def reboot_apache(self):
313                #Restart apache service
314                subprocess.Popen(['/etc/init.d/apache2','restart'],stdout=subprocess.PIPE).communicate()
315                return {'status':True,'msg':'apache2 rebooted'}
316        #def reboot_squid
317
318        # ######################### #
319       
320#class ApacheManager
Note: See TracBrowser for help on using the repository browser.