source: llx-bootmanager/trunk/fuentes/install.llx-bootmanager/usr/share/n4d/python-plugins/LlxBootManager.py @ 2837

Last change on this file since 2837 was 2837, checked in by joamuran, 3 years ago

new release

File size: 5.7 KB
Line 
1import json
2import os
3import subprocess
4
5class LlxBootManager:
6        def __init__(self):
7                self.cfgpath="/etc/llxbootmanager/bootcfg.json"
8                # Cal canviar la ruta!!!
9                self.php_path="/usr/share/llxbootmanager/www-boot"
10                # Clients Boot Config
11                self.clients_conf_path="/etc/llxbootmanager/clients.json"
12                pass
13        #def __init__
14
15
16        def getBootList(self):
17                '''
18                Calculates and return all the options for the iPXE Boot Menu
19                '''
20
21                try:
22                        command=["php", self.php_path+"/getmenujson.php"]
23                        proc = subprocess.Popen(command,  stdout=subprocess.PIPE, cwd=self.php_path)
24                        out, err = proc.communicate()
25                        return json.loads(out)
26                except Exception as e:
27                        print "Exception: "+str(e)
28                        return -1
29
30
31
32        def getBootOrder(self):
33                '''
34                Returns the boot order for iPE Boot Menu
35                '''
36                try:
37                        json_data=open(self.cfgpath);
38                        data=json.load(json_data);
39                        return data["bootorder"];
40                except Exception as e:
41                        print "Exception: "+str(e)
42                        return -1
43
44        def pushToBootList(self, label):
45                '''
46                Adds new label to Boot order for iPE Boot Menu
47                '''
48               
49                try:
50                        print "label is "+label
51                        json_data=open(self.cfgpath);
52                        data=json.load(json_data);
53
54                        # Removing label before push it
55                        data['bootorder']=list(filter(lambda a: a !=label.encode("utf-8"), data['bootorder']))
56                        # Cleaning
57                        data['bootorder']=list(filter(None, data['bootorder']))
58
59                        # Push label
60                        data["bootorder"].append(label.encode("utf-8"));
61                        return (self.setBootOrder(*data["bootorder"]));
62
63                except Exception as e:
64                        print "Exception: "+str(e)
65                        return -1
66               
67        def removeFromBootList(self, label):
68                '''
69                Adds new label to Boot order for iPE Boot Menu
70                '''
71               
72                try:
73                        print "label is "+label
74                        json_data=open(self.cfgpath);
75                        data=json.load(json_data);
76
77                        # Removing label occurences
78                        data['bootorder']=list(filter(lambda a: a !=label.encode("utf-8"), data['bootorder']))
79                        # Cleaning
80                        data['bootorder']=list(filter(None, data['bootorder']))
81
82                        return (self.setBootOrder(*data["bootorder"]));
83
84                except Exception as e:
85                        print "Exception: "+str(e)
86                        return -1
87
88        def prependBootList(self, label):
89                '''
90                Appending Boot List with label and returns the boot order for iPE Boot Menu
91                '''
92                try:
93                        print "[LlxBootManager] Prepending label "+label+" to Boot List."
94                        json_data=open(self.cfgpath);
95                        data=json.load(json_data);
96
97                        # Removing label before push it
98                        data['bootorder']=list(filter(lambda a: a !=label.encode("utf-8"), data['bootorder']))
99
100                        data["bootorder"].insert(0,label.encode("utf-8"));
101                        return (self.setBootOrder(*data["bootorder"]));
102
103                except Exception as e:
104                        print "Exception: "+str(e)
105                        return -1
106
107
108
109        def getBootTimer(self):
110                '''
111                Returns menu time for PXE Menu
112                '''
113                try:
114                        json_data=open(self.cfgpath);
115                        data=json.load(json_data);
116                        return data["timeout"]
117                except Exception as e:
118                        print "Exception: "+str(e)
119                        return -1
120
121        def setBootOrder(self, *order):
122                '''
123                Set Boot order order for iPE Boot Menu
124                '''
125                try:
126                        time=self.getBootTimer();
127
128                        order=list(filter(None, order))
129
130                        bootcfg= { "bootorder": order, "timeout": time }
131
132                        bootcfg_string = unicode(json.dumps(bootcfg,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
133
134                        f = open(self.cfgpath,'w')
135                        f.writelines(bootcfg_string)
136                        f.close()
137
138                except Exception as e:
139                        print "Exception: "+str(e)
140                        return -1
141
142
143
144                pass
145
146        def setBootTimer(self, time):
147                '''
148                Set timeout for pxe menu
149                '''
150                bootorder=self.getBootOrder();
151
152                bootcfg= { "bootorder": bootorder, "timeout": time }
153
154                bootcfg_string = unicode(json.dumps(bootcfg,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
155
156                f = open(self.cfgpath,'w')
157                f.writelines(bootcfg_string)
158                f.close()
159                pass
160
161
162        # Methods to configure boot clients
163
164        def getClientsConfig(self):
165                '''
166                Returns content for /etc/llxbootmanager/clients.json
167                '''
168                try:
169                        f = open(self.clients_conf_path,'r');
170                        data = (json.load(f));
171                        f.close();
172                        return (json.dumps(data));
173                except Exception as e:
174                        return False
175
176                pass
177
178
179        def getClientConfig(self, mac):
180                '''
181                Return boot for an specific mac
182                '''
183
184                try:
185                        f=open(self.clients_conf_path, 'r')
186                        clients = (json.load(f))
187                        f.close()
188
189                        for cl in clients["clients"]:
190                                if (cl["mac"]==mac):
191                                        return cl["boot"]
192
193                        # if not fount...
194                        return False
195                               
196                except Exception as e:
197                        return False
198
199
200
201        def setClientConfig(self, *args):
202                '''
203                configures boot for certain mac. args[0] specifies mac, and args[1] specifies boot
204                if boot (args[1]) is unspecified, removes it from config
205                '''
206
207                if(len(args)!=1 and len(args)!=2):
208                        return False;
209
210                # Reading config file
211                try:
212                        f = open(self.clients_conf_path,'r');
213                        clients = (json.load(f));
214                        f.close();
215                except Exception as e:
216                        # File does not exists. Create an empty json...
217                        clients={"clients":[]}
218
219                if(len(args)>=1):
220                        # Remove item if exists. It runs if we want to delete an item or modify any existent
221                        mac=args[0]
222
223                        for client in clients["clients"]:
224                                #print "compare: "+client["mac"]+" amb "+mac
225                                if (client["mac"]==mac):
226                                        #print "FOUND"
227                                        clients["clients"].remove(client)
228
229                if(len(args)==2): # If we are specifying any boot option, let's add it
230                        boot=args[1]
231
232                        newclient={"mac":mac, "boot":boot}
233                        clients["clients"].append(newclient);
234
235                # Finally Save Results
236                with open(self.clients_conf_path, 'w') as f:
237                        json.dump(clients, f)
238
239                pass
Note: See TracBrowser for help on using the repository browser.