[services] Mise à jour dynamique du dhcp
This commit is contained in:
parent
1d61048828
commit
6aae0d7894
1 changed files with 30 additions and 13 deletions
43
services.py
43
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)
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue