1
|
|
2
|
|
3
|
|
4
|
from creole.parsedico import parse_dico
|
5
|
from creole.eosfunc import load_container_var
|
6
|
from os.path import join, isdir
|
7
|
from os import makedirs, unlink
|
8
|
from glob import glob
|
9
|
from IPy import IP
|
10
|
|
11
|
|
12
|
dico = parse_dico()
|
13
|
container = load_container_var()
|
14
|
|
15
|
dir_name = 'etc/dhcp3/fixed-address'
|
16
|
|
17
|
DHCP_TMPL = "host %s { hardware ethernet %s; fixed-address %s; }\n"
|
18
|
|
19
|
tupples_fixed_address = [('nom1', "22:22:22:22:22:22", "192.168.30.3"),
|
20
|
('nom2', "13:22:22:22:22:22", "192.168.40.3"),
|
21
|
('nom3', "22:22:22:24:22:22", "192.168.50.3")
|
22
|
]
|
23
|
|
24
|
def build_dir_name():
|
25
|
return join('/', container['container_path_dhcp'], dir_name)
|
26
|
def build_file_name(network, netmask):
|
27
|
dirname = build_dir_name()
|
28
|
return join(dirname, network+"_"+netmask+'.txt')
|
29
|
|
30
|
|
31
|
def clean():
|
32
|
dirname = build_dir_name()
|
33
|
if not isdir(dirname):
|
34
|
makedirs(dirname)
|
35
|
for name in glob(join(dirname, '*')):
|
36
|
unlink(name)
|
37
|
for i in range(0, len(dico['adresse_network_dhcp'])):
|
38
|
network = dico['adresse_network_dhcp'][i]
|
39
|
netmask = dico['adresse_netmask_dhcp'][i]
|
40
|
file_name = build_file_name(network, netmask)
|
41
|
fh = open(file_name, 'w+')
|
42
|
fh.write('')
|
43
|
fh.close()
|
44
|
|
45
|
clean()
|
46
|
|
47
|
names = []
|
48
|
mac_addrs = []
|
49
|
ip_addrs = []
|
50
|
for name, mac, ip in tupples_fixed_address:
|
51
|
subnet_found = False
|
52
|
if name in names:
|
53
|
print "Le nom {0} est déjà présent".format(name)
|
54
|
break
|
55
|
names.append(name)
|
56
|
if mac in mac_addrs:
|
57
|
print "L'adresse MAC {0} est déjà présent".format(mac)
|
58
|
break
|
59
|
mac_addrs.append(mac)
|
60
|
if ip in ip_addrs:
|
61
|
print "L'adresse IP {0} est déjà présent".format(ip)
|
62
|
break
|
63
|
ip_addrs.append(ip)
|
64
|
for i in range(0, len(dico['adresse_network_dhcp'])):
|
65
|
network = dico['adresse_network_dhcp'][i]
|
66
|
netmask = dico['adresse_netmask_dhcp'][i]
|
67
|
file_name = build_file_name(network, netmask)
|
68
|
subnet_ip = IP('{0}/{1}'.format(network, netmask))
|
69
|
if ip in subnet_ip:
|
70
|
fh = open(file_name, 'w+')
|
71
|
fh.write(DHCP_TMPL % (name, mac, ip))
|
72
|
fh.close()
|
73
|
subnet_found = True
|
74
|
break
|
75
|
if not subnet_found:
|
76
|
print "Aucun subnet n'est déclarer pour cette IP {0} ({1})".format(ip, name)
|