source: epoptes/trunk/fuentes/epoptes/common/ltsconf.py @ 295

Last change on this file since 295 was 295, checked in by mabarracus, 3 years ago

copy trusty epoptes code

File size: 5.4 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4###########################################################################
5# This will read lts.conf and enumerate the clients by MAC so they
6# can be started up with Wake-On-Lan.
7#
8# Copyright (C) 2010 Fotis Tsamis <ftsamis@gmail.com>
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation, either version 3 of the License, or
13# (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FINESS FOR A PARTICULAR PURPOSE.  See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with this program.  If not, see <http://www.gnu.org/licenses/>.
22#
23# On Debian GNU/Linux systems, the complete text of the GNU General
24# Public License can be found in `/usr/share/common-licenses/GPL".
25###########################################################################
26
27import re
28import os
29
30class ltsConf:
31   
32    def __init__(self):
33        self.rmcomment = lambda string: string.split('#')[0].strip()
34        self.getvar = lambda string: self.rmcomment(string).split('=', 1)[0].strip()
35        self.getval = lambda string: self.rmcomment(string).split('=', 1)[1].strip()
36        self.filename = '/var/lib/tftpboot/ltsp/i386/lts.conf'
37        self.parse()
38       
39    def parse(self):
40        if os.path.isfile(self.filename):
41            file = open(self.filename)
42            lines = file.readlines()
43            file.close()
44        else:
45            lines = []
46       
47        self.content = lines#''.join(lines)
48        self.clients = {}
49       
50        cursection = None
51        for i in range(len(lines)):
52            curline = lines[i].strip()
53           
54            if curline == '':
55                continue
56           
57            elif curline[0] == '[':
58                if re.match('\[..:..:..:..:..:..\]', curline):
59                    cursection = self.rmcomment(curline).strip('[]').upper()
60                    self.clients[cursection] = {}
61                else:
62                    cursection = None
63           
64            elif '=' in self.rmcomment(curline) and cursection != None:
65                item = self.getvar(curline)
66                value = self.getval(curline)
67                self.clients[cursection][item] = value
68   
69    def write(self):
70        data = self.content#.strip().readlines()
71        f = open(self.filename,'w')#'/var/lib/tftpboot/ltsp/i386/lts.conf', 'w')
72       
73        cursection = None
74        for i in range(len(data)):
75            curline = data[i].strip()
76           
77            if curline == '':
78                f.write('\n')
79           
80            elif curline[0] == '[':
81                cursection = self.rmcomment(curline).strip('[]')
82                if re.match('\[..:..:..:..:..:..\]', curline):
83                    if cursection in self.clients:
84                        f.write(data[i])
85                    else:
86                        cursection = None
87                else:
88                    cursection = 'ignored'
89                    f.write(data[i])
90           
91            elif curline[0] == '#':
92                f.write(data[i])
93           
94            elif '=' in self.rmcomment(curline) and cursection != None:
95                if cursection == 'ignored':
96                    f.write(data[i])
97                elif self.getvar(curline) in self.clients[cursection]:
98                    dat = data[i].replace(self.getval(curline), self.clients[cursection][self.getvar(curline)])
99                    f.write(dat)
100       
101        f.close()
102        self.parse()
103   
104    def getSavedClients(self):
105        list = []
106        for client, vars in self.clients.iteritems():
107            if 'HOSTNAME' in vars:
108                list.append(client)
109        return list
110   
111    def isSaved(self, mac):
112        if mac in self.getSavedClients():
113            return True
114        return False
115       
116    def saveClient(self, mac, hostname):
117        if self.isSaved(mac):
118            return
119        #FIXME: section may exists
120        f = open(self.filename, 'a')
121        f.write('\n[%s]\n\tHOSTNAME=%s\n' %(mac, hostname))
122        f.close()
123        self.parse()
124   
125    def removeClient(self, mac):
126        if isSaved(mac):
127            del self.clients[mac]['HOSTNAME']
128            self.write()
129       
130    def set(self, section, item, value):
131        self.clients[section][item] = value
132        self.write()
133   
134    def getHostname(self, mac):
135        if self.isSaved(section):
136            return self.clients[section]['HOSTNAME']
137   
138   
139    # DELETE US
140    def getItem(self, section, item):
141        if self.itemExists(section, item):
142            return self.clients[section][item]
143       
144    def addItem(self, section, item, value):
145        pass
146   
147    def rmSection(self, name):
148        if sectionExists(name):
149            del self.clients[name]
150            self.write()
151   
152    def getSections(self):
153        return self.clients.keys()
154   
155    def sectionExists(self, section):
156        if section in self.clients:
157            return True
158        return False
159   
160    def itemExists(self, section, item):
161        if self.sectionExists(section) and item in self.clients[section]:
162            return True
163        return False
164       
165   
Note: See TracBrowser for help on using the repository browser.