[services] Mise à jour dynamique du dhcp

This commit is contained in:
Valentin Samir 2013-05-13 16:10:11 +02:00
parent 1d61048828
commit 6aae0d7894

View file

@ -4,6 +4,7 @@
import ldap
import lc_ldap
import attributs
from gen_confs.dhcpd_new import dydhcp
services_dn = 'ou=services,dc=crans,dc=org'
@ -179,35 +180,51 @@ def service_to_restart(conn, new=None, args=[], start=0):
def services_to_restart(conn, old_attrs={}, new_attrs={}):
"""Détermine quels sont les services à reconfigurer"""
old_attrs = dict((attributs.CRANS_ATTRIBUTES[key], value) for key,value in old_attrs.items())
new_attrs = dict((attributs.CRANS_ATTRIBUTES[key], value) for key,value in new_attrs.items())
old_attrs_c = dict((attributs.CRANS_ATTRIBUTES[key], value) for key,value in old_attrs.items())
new_attrs_c = dict((attributs.CRANS_ATTRIBUTES[key], value) for key,value in new_attrs.items())
created_attr = [ attr for name in new_attrs.keys() if not name in old_attrs.keys() for attr in new_attrs[name]]
deleted_attr = [ attr for name in old_attrs.keys() if not name in new_attrs.keys() for attr in old_attrs[name]]
updated_attr = [ (old_attrs[name], new_attrs[name],
[ i for i in old_attrs[name] if i.value not in [ j.value for j in new_attrs[name]]],
[ i for i in new_attrs[name] if i.value not in [ j.value for j in old_attrs[name]]],
) for name in set(new_attrs.keys()).intersection(old_attrs.keys()) if old_attrs[name][-1].value != new_attrs[name][-1].value ]
created_attr = [ attr for name in new_attrs_c.keys() if not name in old_attrs_c.keys() for attr in new_attrs_c[name]]
deleted_attr = [ attr for name in old_attrs_c.keys() if not name in new_attrs_c.keys() for attr in old_attrs_c[name]]
updated_attr = [ (old_attrs_c[name], new_attrs_c[name],
[ i for i in old_attrs_c[name] if i.value not in [ j.value for j in new_attrs_c[name]]],
[ i for i in new_attrs_c[name] if i.value not in [ j.value for j in old_attrs_c[name]]],
) for name in set(new_attrs_c.keys()).intersection(old_attrs_c.keys()) if old_attrs_c[name][-1].value != new_attrs_c[name][-1].value ]
updated_attr_new = [ i for j in updated_attr for i in j[3]]
updated_attr_old = [ i for j in updated_attr for i in j[2]]
services_to_restart = {}
for attr in [ attr for l in [created_attr, deleted_attr, updated_attr_new] for attr in l]:
for attr in [ attr for l in [created_attr, deleted_attr, updated_attr_new ] for attr in l]:
for service in attrs_to_services.get(attr.__class__, []):
services_to_restart[service] = services_to_restart.get(service, []) + [attr]
for service in services_to_restart.keys():
for attr in services_to_restart[service]:
start = 0
arg = []
arg = set()
if service in services_to_args.keys():
arg.extend(services_to_args[service](attr))
arg = arg.union(services_to_args[service](attr))
if attr in updated_attr_new:
arg.extend(services_to_args[service](updated_attr_old[updated_attr_new.index(attr)]))
for old_attr in updated_attr_old:
if attr.__class__ == old_attr.__class__:
arg = arg.union(services_to_args[service](old_attr))
# Cas du dhcp
if attr.__class__ in services_to_attrs['dhcp']:
dhcp=dydhcp()
if old_attrs.get('ipHostNumber', []) and old_attrs.get('macAddress', []):
if new_attrs.get('ipHostNumber', []) and new_attrs.get('macAddress', []):
if str(old_attrs['ipHostNumber'][0]) != str(new_attrs['ipHostNumber'][0]) or str(old_attrs['macAddress'][0]) != str(new_attrs['macAddress'][0]):
dhcp.del_host(str(old_attrs['ipHostNumber'][0]), str(old_attrs['macAddress'][0]))
dhcp.add_host(str(new_attrs['ipHostNumber'][0]), str(new_attrs['macAddress'][0]), str(new_attrs['host'][0]))
else:
dhcp.del_host(str(old_attrs['ipHostNumber'][0]), str(old_attrs['macAddress'][0]))
elif new_attrs.get('ipHostNumber', []) and new_attrs.get('macAddress', []):
dhcp.add_host(str(new_attrs['ipHostNumber'][0]), str(new_attrs['macAddress'][0]), str(new_attrs['host'][0]))
if service in services_to_time.keys():
start = services_to_time[service](attr)
#print "%s,%s,%s" % (service, arg, start)
service_to_restart(conn, service, arg, start)
service_to_restart(conn, service, list(arg), start)