Projet

Général

Profil

dhcp.py

Emmanuel GARETTE, 22/11/2011 15:02

Télécharger (2,29 ko)

 
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
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
#remove old files and create empty files
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)