source: open-sysclone/trunk/build-area/open-sysclone-0.1.obsolete.0.7682091920442/debian/open-sysclone-server/usr/share/n4d/python-plugins/OpenSysCloneExport.py @ 647

Last change on this file since 647 was 647, checked in by daduve, 4 years ago

Ading file

File size: 3.6 KB
Line 
1#!/usr/bin/env python
2import os
3import sys
4from jinja2 import Environment
5from jinja2.loaders import FileSystemLoader
6import tempfile
7       
8class OpenSysCloneExport: 
9       
10        def __init__(self):
11                self.tftppath = '/var/lib/tftpboot/ltsp/OpenSysClone'
12                self.export_options = 'ro,insecure,no_root_squash,async,no_subtree_check'
13                self.templates_path="/usr/share/n4d/templates/OpenSysClone/"
14                self.pxe_path = "/usr/share/lmd-server/www-boot/pxemenu.d/61-OpenSysCloneIso.php"
15        #def init
16
17        def startup(self):
18                pass
19        #def startup
20
21        def sanity_check(self):
22                if not os.path.exists(self.tftppath):
23                        os.mkdir(self.tftppath)
24        #def sanity_check
25
26        def mount_iso(self,iso_path):
27                if os.path.exists(iso_path) :
28                        self.sanity_check()
29                        result = os.system('mount -o loop %s %s'%(iso_path,self.tftppath))
30                        if result == 0 or result == 32 or result == 8192:
31                                return [True,'Mounted']
32                        else:
33                                return [False,'Mount failed']
34                return [False,'path not exists']
35        #def mount_iso
36
37        def add_entry_exportfs(self):
38                inetwork=objects["VariablesManager"].get_variable("INTERNAL_NETWORK")
39                imask=objects["VariablesManager"].get_variable("INTERNAL_MASK")
40                if inetwork == None or imask == None:
41                        return False
42                result = os.system('exportfs -o %s %s/%s:%s'%(self.export_options,inetwork,imask,self.tftppath))
43                if result == 0 :
44                        return [True,'Exported']
45                else:
46                        return [False,'Export failed']
47        #def add_entry_exportfs
48
49        def del_entry_exportfs(self):
50                inetwork=objects["VariablesManager"].get_variable("INTERNAL_NETWORK")
51                imask=objects["VariablesManager"].get_variable("INTERNAL_MASK")
52                if inetwork == None or imask == None:
53                        return [False,'Variables INTERNAL_NETWORK or INTERNAL_MASK not defined']
54                result = os.system('exportfs -u %s/%s:%s'%(inetwork,imask,self.tftppath))
55                if result == 0 :
56                        return [True,'Delete export entry']
57                else:
58                        return [False,'Delete failed']
59        #def del_entry_exportfs
60
61        def write_pxe(self,name):
62                try:   
63                        # save_path, name_file, hdd_disk, final_action
64                        environment_variables = {}
65                       
66                        # Get the values from free server
67                        environment_variables["SRV_IP"] = objects["VariablesManager"].get_variable("SRV_IP")
68                        environment_variables["NAME_ISO"] = name
69                        environment_variables["EXPORT_PATH"]= self.tftppath
70                        environment_variables["TFTP_PATH"] = os.path.join(self.tftppath,'casper','vmlinuz')
71                        environment_variables["VMLINUZ_PATH"]= os.path.join('OpenSysClone','casper','vmlinuz')
72                        environment_variables["INITRD_PATH"] = os.path.join('OpenSysClone','casper','initrd.lz')
73                       
74                        # Create temporal environment for jinja
75                        env = Environment(loader=FileSystemLoader(self.templates_path))
76                        tmpl = env.get_template('export-iso.tpl')
77                       
78                        # Render the template with diferent values             
79                        textrendered=tmpl.render(environment_variables)
80                       
81                        #Create a temporal for nsswitch
82                        tmp,filename=tempfile.mkstemp()
83                        f = open(filename,'w')
84                        f.writelines(textrendered)
85                        f.close()
86                       
87                        # Using the ultimate chmod
88                        self.uchmod(filename,0644)
89                       
90                        # Copy unitaria
91                        shutil.copy(filename,self.pxe_path)
92                        return [True,str(self.pxe_path)]
93               
94                except Exception as e:
95
96                        return [False,str(e)]
97        #def write_pxe
98
99        def uchmod(self,file,mode):
100               
101                try:
102                #Method to change file attributes
103               
104                        prevmask = os.umask(0)
105                        os.chmod(file,mode)
106                        os.umask(prevmask)
107                       
108                except Exception as e:
109
110                        return [False,str(e)]   
111        #def uchmod
112
113        def export_iso(self,iso_path,name):
114                result = self.mount_iso(iso_path)
115                if not result[0]:
116                        return [False,result[1]]
117                result = self.add_entry_exportfs()
118                if not result[0]:
119                        return [False,result[1]]
120                result = self.write_pxe(name)
121                if not result[0]:
122                        return [False,result[1]]
123                return [True,'Export iso correctly']
124       
125#class OpenCloneSysExport
Note: See TracBrowser for help on using the repository browser.