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

Last change on this file since 415 was 415, checked in by hectorgh, 3 years ago

adding project files

File size: 5.2 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                Returns the boot order for iPE Boot Menu
47                '''
48                try:
49                        print "label is "+label
50                        json_data=open(self.cfgpath);
51                        data=json.load(json_data);
52
53                        data["bootorder"].append(label.encode("utf-8"));
54                        return (self.setBootOrder(*data["bootorder"]));
55
56                except Exception as e:
57                        print "Exception: "+str(e)
58                        return -1
59
60        def prependBootList(self, label):
61                '''
62                Appending Boot List with label and returns the boot order for iPE Boot Menu
63                '''
64                try:
65                        print "[LlxBootManager] Prepending label "+label+" to Boot List."
66                        json_data=open(self.cfgpath);
67                        data=json.load(json_data);
68
69                        data["bootorder"].insert(0,label.encode("utf-8"));
70                        return (self.setBootOrder(*data["bootorder"]));
71
72                except Exception as e:
73                        print "Exception: "+str(e)
74                        return -1
75
76
77
78        def getBootTimer(self):
79                '''
80                Returns menu time for PXE Menu
81                '''
82                try:
83                        json_data=open(self.cfgpath);
84                        data=json.load(json_data);
85                        return data["timeout"]
86                except Exception as e:
87                        print "Exception: "+str(e)
88                        return -1
89
90        def setBootOrder(self, *order):
91                '''
92                Set Boot order order for iPE Boot Menu
93                '''
94                try:
95                        time=self.getBootTimer();
96
97
98                        bootcfg= { "bootorder": order, "timeout": time }
99
100                        bootcfg_string = unicode(json.dumps(bootcfg,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
101
102                        f = open(self.cfgpath,'w')
103                        f.writelines(bootcfg_string)
104                        f.close()
105
106                except Exception as e:
107                        print "Exception: "+str(e)
108                        return -1
109
110
111
112                pass
113
114        def setBootTimer(self, time):
115                '''
116                Set timeout for pxe menu
117                '''
118                bootorder=self.getBootOrder();
119
120                bootcfg= { "bootorder": bootorder, "timeout": time }
121
122                bootcfg_string = unicode(json.dumps(bootcfg,indent=4,encoding="utf-8",ensure_ascii=False)).encode("utf-8")
123
124                f = open(self.cfgpath,'w')
125                f.writelines(bootcfg_string)
126                f.close()
127                pass
128
129
130        # Methods to configure boot clients
131
132        def getClientsConfig(self):
133                '''
134                Returns content for /etc/llxbootmanager/clients.json
135                '''
136                try:
137                        f = open(self.clients_conf_path,'r');
138                        data = (json.load(f));
139                        f.close();
140                        return (json.dumps(data));
141                except Exception as e:
142                        return False
143
144                pass
145
146
147        def getClientConfig(self, mac):
148                '''
149                Return boot for an specific mac
150                '''
151
152                try:
153                        f=open(self.clients_conf_path, 'r')
154                        clients = (json.load(f))
155                        f.close()
156
157                        for cl in clients["clients"]:
158                                if (cl["mac"]==mac):
159                                        return cl["boot"]
160
161                        # if not fount...
162                        return False
163                               
164                except Exception as e:
165                        return False
166
167
168
169        def setClientConfig(self, *args):
170                '''
171                configures boot for certain mac. args[0] specifies mac, and args[1] specifies boot
172                if boot (args[1]) is unspecified, removes it from config
173                '''
174
175                if(len(args)!=1 and len(args)!=2):
176                        return False;
177
178                # Reading config file
179                try:
180                        f = open(self.clients_conf_path,'r');
181                        clients = (json.load(f));
182                        f.close();
183                except Exception as e:
184                        # File does not exists. Create an empty json...
185                        clients={"clients":[]}
186
187                if(len(args)>=1):
188                        # Remove item if exists. It runs if we want to delete an item or modify any existent
189                        mac=args[0]
190
191                        for client in clients["clients"]:
192                                #print "compare: "+client["mac"]+" amb "+mac
193                                if (client["mac"]==mac):
194                                        #print "FOUND"
195                                        clients["clients"].remove(client)
196
197                if(len(args)==2): # If we are specifying any boot option, let's add it
198                        boot=args[1]
199
200                        newclient={"mac":mac, "boot":boot}
201                        clients["clients"].append(newclient);
202
203                # Finally Save Results
204                with open(self.clients_conf_path, 'w') as f:
205                        json.dump(clients, f)
206
207                pass
Note: See TracBrowser for help on using the repository browser.