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

Last change on this file since 235 was 235, checked in by hectorgh, 4 years ago

adding project files

File size: 7.7 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                               
150                                if os.path.exists("/net/server-sync/easy-sites") and os.path.exists(tmp_dir+"/easy-sites.acl"):
151                                        os.system("setfacl -R --restore=%s/easy-sites.acl"%tmp_dir)
152                                       
153                               
154                               
155                                # # 14.06 -> 15.05 CASE #############################
156                               
157                                try:
158                                        if objects["ServerBackupManager"].restoring_version=="14.06":
159                                               
160                                                print("[ApacheManager] Fixing files ...")
161                                               
162                                                dir="/etc/apache2/sites-available/"
163                                               
164                                                for item in os.walk(dir):
165                                                        path,data,files=item
166                                               
167                                                for f in files:
168                                                        path=dir+f
169                                                        if not os.path.exists(path):
170                                                                continue
171                                                        if f=="default":
172                                                                os.remove(path)
173                                                                continue
174                                                                if os.path.exists(dir+"000-default.conf"):
175                                                                        os.remove(dir+"000-default.conf")
176                                                                os.symlink("/etc/apache2/sites-available/llx-default.conf",dir+"000-default.conf")
177                                                        elif f=="default.lliurex":
178                                                                os.remove(path)
179                                                                continue
180                                                        elif f=="000-default.orig":
181                                                                pass
182                                                        elif not f.endswith(".conf"):
183                                                                shutil.move(path,path+".conf")
184
185                                                print dir,"DONE"
186
187                                                dir="/etc/apache2/sites-enabled/"
188                                                files=[]
189                                               
190                                                for item in os.walk(dir):
191                                                        path,data,files=item
192
193                                               
194                                                for f in files:
195                                                        path=dir+f
196                                                        link=os.readlink(path)
197                                                        if link.startswith("../"):
198                                                                link=link.replace("../","/etc/apache2/")
199                                                       
200                                                        if f=="000-default":
201                                                                os.remove(path)
202                                                                if os.path.exists("/etc/apache2/sites-enabled/000-default.conf"):
203                                                                        os.remove("/etc/apache2/sites-enabled/000-default.conf")
204                                                                os.symlink("/etc/apache2/sites-available/000-default.conf","/etc/apache2/sites-enabled/000-default.conf")
205                                                                continue
206                                                       
207
208                                                       
209                                                        if not path.endswith(".conf"):
210                                                                os.remove(path)
211                                                                if not os.path.exists(link):
212                                                                        link+=".conf"
213                                                               
214                                                                if not os.path.exists(link):
215                                                                        continue
216                                                                if os.path.exists(path+".conf"):
217                                                                        os.remove(path+".conf")
218                                                                os.symlink(link,path+".conf")
219                                                               
220                                                        else:
221                                                                if not os.path.exists(link):
222                                                                        os.remove(path)
223                                                               
224                                               
225                                except Exception as llx14_ex:
226                                        print llx14_ex
227                                       
228                                # #END OF 14.06->15.05 CASE # ############
229                               
230                                os.system("service apache2 restart")
231
232                                return [True,""]
233
234                        else:
235                                return [False,"Backup file not found"]
236
237                except Exception as e:
238
239                        return [False,str(e)]
240
241
242        #def restore
243
244        def load_exports(self):
245                #Get template
246                template_server = self.tpl_env.get_template("server")
247                list_variables = {}
248               
249                #Inicialize INTERNAL_DOMAIN
250                list_variables['INTERNAL_DOMAIN'] = objects['VariablesManager'].get_variable('INTERNAL_DOMAIN')
251                #If INT_DOMAIN is not defined calculate it with args values
252                if  list_variables['INTERNAL_DOMAIN'] == None:
253                        return {'status':False,'msg':'Variable INTERNAL_DOMAIN not defined'}
254               
255                #Inicialize INTERNAL_DOMAIN
256                list_variables['HOSTNAME'] = objects['VariablesManager'].get_variable('HOSTNAME')
257                #If INT_DOMAIN is not defined calculate it with args values
258                if  list_variables['HOSTNAME'] == None:
259                        return {'status':False,'msg':'Variable HOSTNAME not defined'}
260               
261                ###########################
262                #Setting VARS
263                ###########################
264               
265                #Set HTTP_PATH
266                list_variables['HTTP_PATH'] = objects['VariablesManager'].get_variable('HTTP_PATH')
267                #If variable PROXY_ENABLED is not defined calculate it with args values
268                if  list_variables['HTTP_PATH'] == None:
269                        status,list_variables['HTTP_PATH'] = objects['VariablesManager'].init_variable('HTTP_PATH',{'PATH':'/var/www/'})
270               
271                #Encode vars to UTF-8
272                string_template = template_server.render(list_variables).encode('UTF-8')
273                #Open template file
274                fd, tmpfilepath = tempfile.mkstemp()
275                new_export_file = open(tmpfilepath,'w')
276                new_export_file.write(string_template)
277                new_export_file.close()
278                os.close(fd)
279                #Write template values
280                n4d_mv(tmpfilepath,'/etc/apache2/sites-available/server',True,'root','root','0644',False )
281                #Restart service
282                subprocess.Popen(['a2ensite','server.conf'],stdout=subprocess.PIPE).communicate()
283                subprocess.Popen(['/etc/init.d/apache2','reload'],stdout=subprocess.PIPE).communicate()
284                return {'status':True,'msg':'Exports written'}
285        #def load_exports
286
287        def reboot_apache(self):
288                #Restart apache service
289                subprocess.Popen(['/etc/init.d/apache2','restart'],stdout=subprocess.PIPE).communicate()
290                return {'status':True,'msg':'apache2 rebooted'}
291        #def reboot_squid
292
293        # ######################### #
294       
295#class ApacheManager
Note: See TracBrowser for help on using the repository browser.