]> git.llucax.com Git - software/pymin.git/blob - dhcpd/dhcpd.py
Big repository (and source) rebump.
[software/pymin.git] / dhcpd / dhcpd.py
1
2 import pickle
3
4 class ParamsError(Exception):
5     def __init__(self,reason):
6         self.reason = reason
7
8     def __str__(self):
9         return repr(reason)
10
11 class dhcpd:
12     "class that handles dhcpd config"
13
14     def __init__(self):
15         self.host_list = dict()
16         self.glob = {   'domain_name' : 'my_domain_name',
17                         'dns_1'       : 'my_ns1',
18                         'dns_2'       : 'my_ns2',
19                         'net_address' : '192.168.0.0',
20                         'net_mask'    : '255.255.255.0',
21                         'net_start'   : '192.168.0.100',
22                         'net_end'     : '192.168.0.200',
23                         'net_gateway' : '192.168.0.1'}
24         
25
26     def to_file_format(self):
27         #bajo los parametros globales
28         glob_file = open('dhcpd_global.template','r')
29         glob_tmp = glob_file.read()
30         glob_file.close()
31         conf = glob_tmp % self.glob
32         #bajo los hosts
33         host_file = open('dhcpd_host.template','r')
34         host_tmp = host_file.read()
35         host_file.close()
36         for h , v in self.host_list.iteritems():
37             conf = conf + '\n' + (host_tmp % v)
38         return conf
39
40     def add_host(self, args):
41         #deberia indexar por hostname o por ip?
42         if len(args) == 3:
43             self.host_list[args[0]] = {"host_name": args[0], "host_ip": args[1], "host_mac": args[2]}
44         else:
45             raise ParamsError('Wrong number of parameters')
46
47     def mod_host(self, args):
48         #deberia indexar por hostname o por ip?
49         if len(args) == 3:
50             self.host_list[args[0]] = {"host_name": args[0], "host_ip": args[1], "host_mac": args[2]}
51         else:
52             raise ParamsError('Wrong number of parameters')
53
54     def remove_host(self, hostname):
55         if hostname in self.host_list:
56             del(self.host_list[hostname])
57         else:
58             raise ParamsError("No such host")
59
60     def set(self, pair):
61         if pair[0] in self.glob:
62             self.glob[pair[0]] = pair[1]
63         else:
64             raise ParamsError("Parameter " + pair[0] + " not found")
65         
66     def start(self):
67         #esto seria para poner en una interfaz
68         #y seria el hook para arrancar el servicio
69         pass
70
71     def stop(self):
72         #esto seria para poner en una interfaz
73         #y seria el hook para arrancar el servicio
74         pass
75
76     def commit(self):
77         #esto seria para poner en una interfaz
78         #y seria que hace el pickle deberia llamarse
79         #al hacerse un commit
80         output = open('dhcpd_config.pkl', 'wb')
81         pickle.dump(config, output)
82         output.close()
83
84     def show_params(self):
85         string = ''
86         for k , v in self.glob.iteritems():
87             string = string + k + ' : ' + v + '\n'
88         return string
89
90     def show_hosts(self):
91         string = ''
92         for k , v in self.host_list.iteritems():
93             string = string + k + ' : ' +  v["host_ip"] + ' : ' + v["host_mac"] + '\n'
94         return string
95
96
97 if __name__ == '__main__':
98     
99     config = dhcpd()
100
101     try :
102         arguments = ('my_name','192.168.0.102','00:12:ff:56')
103         config.add_host(arguments)
104         
105         arguments = ('my_name','192.168.0.192','00:12:ff:56')
106         config.mod_host(arguments)
107
108         arguments = ('nico','192.168.0.188','00:00:00:00')
109         config.add_host(arguments)
110
111         config.set(('domain_name','baryon.com.ar'))
112         config.set(('sarasa','baryon.com.ar'))
113
114     except ParamsError, inst:
115         print inst.reason
116         
117     config.commit()
118     
119     conf_file = open('dhcpd.conf','w')
120     conf_file.write(config.to_file_format())
121     conf_file.close()