From 6aae0d7894ef8857164a64098393d43dce0bc952 Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Mon, 13 May 2013 16:10:11 +0200 Subject: [PATCH] =?UTF-8?q?[services]=20Mise=20=C3=A0=20jour=20dynamique?= =?UTF-8?q?=20du=20dhcp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services.py | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/services.py b/services.py index 4ec2caa..19561cc 100644 --- a/services.py +++ b/services.py @@ -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)