class ImportTarget(): def __init__(self): self.backend = BackendHelper() self.target = TargetHelper() self.start_date = django.utils.timezone.now() def _getID(self, listRDN): listID = [] for rdn in listRDN: listID.append(rdn.split('=')[1].split(',')[0]) return listID def save(self): print 'Checking for Objects which do not exist into LBE Backend but in LDAP Server:' for objectTemplate in LBEObjectTemplate.objects.all(): objectHelper = LBEObjectInstanceHelper(objectTemplate) try: scope = objectHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 filter = '(&' for oc in objectHelper.callScriptClassMethod('object_classes'): filter += '(objectClass=' + oc + ')' filter += ')' print '\033[91m' + objectTemplate.name + '\033[0m: (\033[95m' + objectHelper.callScriptClassMethod("base_dn") + '\033[0m) using \033[95m' + filter + '\033[0m' objTarget = self.target.searchObjects(objectTemplate, scope) objBackend = self.backend.searchObjects(objectTemplate) number = 0 for ot in objTarget: exist = False for ob in objBackend: if ot.name == ob.name: exist = True break if not exist: number += 1 print '=> Adding \033[95m' + ot.name + '\033[0m object into LBE Backend... ' print " values: " + str(ot.attributes) try: self.backend.createObject(objectTemplate, ot, True) print "\033[92mDone.\033[0m\n" except BaseException as e: print "\033[91mFail.\033[0m" print "''''''''" print e print "''''''''" if number == 0: print '<None>' # Synced object: objectTemplate.synced_at = django.utils.timezone.now() objectTemplate.save() print '.........................' print 'Checking for Groups which do not exist into LBE Backend but in Target:' for groupTemplate in LBEGroup.objects.all(): groupInstance = GroupInstanceHelper(groupTemplate) try: scope = groupInstance.callScriptClassMethod("search_scope") except BaseException: scope = 0 grpTarget = self.target.searchObjects(groupTemplate, scope) grpBackend = self.backend.searchObjects(groupTemplate) for gt in grpTarget: exist = False for gb in grpBackend: if gt.name == gb.name: exist = True break if not exist: # import only existing group into LBE config try: LBEGroup.objects.get(displayName__iexact=gt.displayName) except BaseException: continue print '=> Adding \033[95m' + gt.name + '\033[0m group into LBE Backend... ' print " values: " + str(gt.attributes) try: if groupInstance.attributeName in gt.attributes: gt.attributes[groupInstance.attributeName] = self._getID(gt.attributes[groupInstance.attributeName]) groupHelper = GroupInstanceHelper(groupTemplate, gt) groupHelper.createTemplate(True) #print " >\033[91mThis group does not exists in LBE Configuration Group.\033[0m" #print " >\033[91mIn order to see, manage it, please create it using some extra attribute:" #print " >\033[91m'Display Name': \033[95m" + gt.name + "\033[0m" #print " >\033[91mInto the Script file:" #print " >'DN Attribute': \033[95m" + groupHelper.callScriptClassMethod("base_dn") + "\033[91m" #print " >'Attribute Name' & 'Object Classes': as you wish.\033[0m" print "\033[92mDone.\033[0m\n" except BaseException as e: print "\033[91mFail.\033[0m\n" print "''''''''" print e print "''''''''" # Synced group: groupTemplate.synced_at = django.utils.timezone.now() groupTemplate.save() print "End."
class UpgradeBT(): def __init__(self): self.backend = BackendHelper() self.target = TargetHelper() self.start_date = django.utils.timezone.now() def _deleteORCreate(self, objectTemplate, ot): if objectTemplate.reconciliation_object_missing_policy == OBJECT_ADD_BACKEND: print " |-> Adding \033[95m'" + ot.displayName + "'\033[0m object into Backend... " try: self.backend.createObject(objectTemplate, ot, True) changes = {} changes['status'] = OBJECT_STATE_SYNCED changes['changes'] = {} changes['changes']['set'] = {} changes['changes']['type'] = -1 changes['synced_at'] = django.utils.timezone.now() self.backend.updateObject(objectTemplate, ot, changes) except BaseException as e: print "''''''''" print e print "''''''''" elif objectTemplate.reconciliation_object_missing_policy == OBJECT_DELETE_TARGET: print " |-> Removing \033[95m'" + ot.displayName + "'\033[0m object from Target... " try: self.target.delete(objectTemplate, ot) except BaseException as e: print "''''''''" print e print "''''''''" def _upgradeObject(self, objectTemplate, objHelper, ot, ob): # check and replace ignore attributes: ignoreAttributes = objHelper.callScriptClassMethod("ignore_attributes") for key, values in ot.attributes.items(): if key in ignoreAttributes: ob.attributes[key] = ot.attributes[key] if not ot.attributes == ob.attributes: if objectTemplate.reconciliation_object_different_policy == TARGET: # check if values are empty []: # Then, skip it. numberEmpty = 0 for values in set(ot.attributes) ^ set(ob.attributes): try: # either empty or empty string: if ob.attributes[values] == [] or ob.attributes[values] == ['']: numberEmpty += 1 except BaseException: pass if not numberEmpty == 0 and numberEmpty == len(set(ot.attributes) ^ set(ob.attributes)): return print " |-> Upgrade Object '\033[35m" + ob.displayName + "\033[0m' into Target..." print " |-> -------------------------------------------- " print " ||-> Old Values: " + str(ot.attributes) print " ||-> New Values: " + str(ob.attributes) print " |-> -------------------------------------------- " # Remove & Add in order to add new attributes: try: # Remove: self.target.delete(objectTemplate, ob) # Add self.target.create(objectTemplate, ob) # Synced: changes = {} changes['status'] = OBJECT_STATE_SYNCED changes['changes'] = {} changes['changes']['set'] = {} changes['changes']['type'] = -1 changes['synced_at'] = django.utils.timezone.now() self.backend.updateObject(objectTemplate, ob, changes) except BaseException as e: print e elif objectTemplate.reconciliation_object_different_policy == BACKEND: print " |-> Upgrade Object '\033[35m" + ob.displayName + "\033[0m' into Backend..." print " |-> -------------------------------------------- " print " ||-> Old Values: " + str(ob.attributes) print " ||-> New Values: " + str(ot.attributes) print " |-> -------------------------------------------- " try: self.backend.updateObject(objectTemplate, ob, ot) except BaseException as e: print e def start(self): print " Upgrade Server..." for objectTemplate in LBEObjectTemplate.objects.all(): print " |-> \033[91m" + objectTemplate.name + '\033[0m:' objHelper = LBEObjectInstanceHelper(objectTemplate) try: scope = objHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 objTarget = self.target.searchObjects(objectTemplate, scope) objBackend = self.backend.searchObjects(objectTemplate) # Target to Backend: for ot in objTarget: exist = False for ob in objBackend: if ot.name == ob.name: self._upgradeObject(objectTemplate, objHelper, ot, ob) exist = True break if not exist: self._deleteORCreate(objectTemplate, ot) # Synced object: objectTemplate.synced_at = django.utils.timezone.now() objectTemplate.save() print " End."
class UpgradeBT(): def __init__(self): self.backend = BackendHelper() self.target = TargetHelper() self.start_date = django.utils.timezone.now() def _deleteORCreate(self, objectTemplate, ot): if objectTemplate.reconciliation_object_missing_policy == OBJECT_ADD_BACKEND: print " |-> Adding \033[95m'" + ot.displayName + "'\033[0m object into Backend... " try: self.backend.createObject(objectTemplate, ot, True) changes = {} changes['status'] = OBJECT_STATE_SYNCED changes['changes'] = {} changes['changes']['set'] = {} changes['changes']['type'] = -1 changes['synced_at'] = django.utils.timezone.now() self.backend.updateObject(objectTemplate, ot, changes) except BaseException as e: print "''''''''" print e print "''''''''" elif objectTemplate.reconciliation_object_missing_policy == OBJECT_DELETE_TARGET: print " |-> Removing \033[95m'" + ot.displayName + "'\033[0m object from Target... " try: self.target.delete(objectTemplate, ot) except BaseException as e: print "''''''''" print e print "''''''''" def _upgradeObject(self, objectTemplate, objHelper, ot, ob): # check and replace ignore attributes: ignoreAttributes = objHelper.callScriptClassMethod("ignore_attributes") for key, values in ot.attributes.items(): if key in ignoreAttributes: ob.attributes[key] = ot.attributes[key] if not ot.attributes == ob.attributes: if objectTemplate.reconciliation_object_different_policy == TARGET: # check if values are empty []: # Then, skip it. numberEmpty = 0 for values in set(ot.attributes) ^ set(ob.attributes): try: # either empty or empty string: if ob.attributes[values] == [] or ob.attributes[ values] == ['']: numberEmpty += 1 except BaseException: pass if not numberEmpty == 0 and numberEmpty == len( set(ot.attributes) ^ set(ob.attributes)): return print " |-> Upgrade Object '\033[35m" + ob.displayName + "\033[0m' into Target..." print " |-> -------------------------------------------- " print " ||-> Old Values: " + str(ot.attributes) print " ||-> New Values: " + str(ob.attributes) print " |-> -------------------------------------------- " # Remove & Add in order to add new attributes: try: # Remove: self.target.delete(objectTemplate, ob) # Add self.target.create(objectTemplate, ob) # Synced: changes = {} changes['status'] = OBJECT_STATE_SYNCED changes['changes'] = {} changes['changes']['set'] = {} changes['changes']['type'] = -1 changes['synced_at'] = django.utils.timezone.now() self.backend.updateObject(objectTemplate, ob, changes) except BaseException as e: print e elif objectTemplate.reconciliation_object_different_policy == BACKEND: print " |-> Upgrade Object '\033[35m" + ob.displayName + "\033[0m' into Backend..." print " |-> -------------------------------------------- " print " ||-> Old Values: " + str(ob.attributes) print " ||-> New Values: " + str(ot.attributes) print " |-> -------------------------------------------- " try: self.backend.updateObject(objectTemplate, ob, ot) except BaseException as e: print e def start(self): print " Upgrade Server..." for objectTemplate in LBEObjectTemplate.objects.all(): print " |-> \033[91m" + objectTemplate.name + '\033[0m:' objHelper = LBEObjectInstanceHelper(objectTemplate) try: scope = objHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 objTarget = self.target.searchObjects(objectTemplate, scope) objBackend = self.backend.searchObjects(objectTemplate) # Target to Backend: for ot in objTarget: exist = False for ob in objBackend: if ot.name == ob.name: self._upgradeObject(objectTemplate, objHelper, ot, ob) exist = True break if not exist: self._deleteORCreate(objectTemplate, ot) # Synced object: objectTemplate.synced_at = django.utils.timezone.now() objectTemplate.save() print " End."
class DebugTarget(): def __init__(self): self.backend = BackendHelper() self.target = TargetHelper() """ Check which values' objects need to be sync and show them. """ def _needModification(self): print ' Objects need change:' number = 0 for objectTemplate in LBEObjectTemplate.objects.all(): # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC for objectInstance in self.backend.searchObjectsToUpdate( objectTemplate): type = "" if objectInstance.changes[ 'type'] == OBJECT_CHANGE_CREATE_OBJECT: type += "\033[34mcreate" elif objectInstance.changes[ 'type'] == OBJECT_CHANGE_UPDATE_OBJECT: type += "\033[36mupdate" elif objectInstance.changes[ 'type'] == OBJECT_CHANGE_DELETE_OBJECT: type += "\033[33mdelete" type += "\033[0m" value = " " + type + ' \033[35m' + objectInstance.displayName + '\033[0m : ' valuesChanges = dict() for k in objectInstance.changes['set']: try: if objectInstance.attributes[ k] != objectInstance.changes['set'][k]: valuesChanges[k] = 'new Value: ' + str( objectInstance.changes['set'] [k]) + ' | old value: ' + str( objectInstance.attributes[k]) except KeyError: valuesChanges[k] = 'new Value: ' + str( objectInstance.changes['set'][k]) pass print value + str(valuesChanges) number += 1 if number == 0: print " \033[91m<None>\033[0m" print "" print ' Groups need change:' number = 0 for groupTemplate in LBEGroup.objects.all(): for groupInstance in self.backend.searchObjectsToUpdate( groupTemplate): number += 1 type = "" if groupInstance.changes[ 'type'] == OBJECT_CHANGE_CREATE_OBJECT: type += "\033[34mcreate" elif groupInstance.changes[ 'type'] == OBJECT_CHANGE_UPDATE_OBJECT: type += "\033[36mupdate" elif groupInstance.changes[ 'type'] == OBJECT_CHANGE_DELETE_OBJECT: type += "\033[33mdelete" type += "\033[0m" value = " " + type + ' \033[35m' + groupInstance.displayName + '\033[0m : ' valuesChanges = dict() for k in groupInstance.changes['set']: try: if groupInstance.attributes[ k] != groupInstance.changes['set'][k]: valuesChanges[k] = 'new Value: ' + str( groupInstance.changes['set'] [k]) + ' | old value: ' + str( groupInstance.attributes[k]) except KeyError: valuesChanges[k] = 'new Value: ' + str( groupInstance.changes['set'][k]) pass print value + str(valuesChanges) if number == 0: print " \033[91m<None>\033[0m" """ Show objects do not exist in LBE but LDAP. """ def _notExistObjectLBE(self): print ' Checking for Objects which do not exist into LBE but in LDAP Server:' for objectTemplate in LBEObjectTemplate.objects.all(): print " - \033[35m" + objectTemplate.name + '\033[0m...' objHelper = LBEObjectInstanceHelper(objectTemplate) try: scope = objHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 objTarget = self.target.searchObjects(objectTemplate, scope) objBackend = self.backend.searchObjects(objectTemplate) number = 0 for ot in objTarget: exist = False for ob in objBackend: if ot.name == ob.name: exist = True break if not exist: number += 1 print " " + ot.name if number == 0: print ' \033[91m<None>\033[0m' print "" print ' Checking for Groups which do not exist into LBE but in LDAP Server:' number = 0 for groupTemplate in LBEGroup.objects.all(): grpHelper = GroupInstanceHelper(groupTemplate) try: scope = grpHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 grpTarget = self.target.searchObjects( groupTemplate, scope, '(cn=' + groupTemplate.displayName + ')') grpBackend = self.backend.searchObjectsByPattern( groupTemplate, groupTemplate.displayName) if not grpBackend: print " - \033[36m" + groupTemplate.displayName + "\033[0m does not exists." number += 1 if number == 0: print ' \033[91m<None>\033[0m' def start(self): self._needModification() print "" print '\033[93m.........................\033[0m' print '\033[93m.........................\033[0m' print "" self._notExistObjectLBE()
class DebugTarget(): def __init__(self): self.backend = BackendHelper() self.target = TargetHelper() """ Check which values' objects need to be sync and show them. """ def _needModification(self): print ' Objects need change:' number = 0 for objectTemplate in LBEObjectTemplate.objects.all(): # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC for objectInstance in self.backend.searchObjectsToUpdate(objectTemplate): type = "" if objectInstance.changes['type'] == OBJECT_CHANGE_CREATE_OBJECT: type += "\033[34mcreate" elif objectInstance.changes['type'] == OBJECT_CHANGE_UPDATE_OBJECT: type += "\033[36mupdate" elif objectInstance.changes['type'] == OBJECT_CHANGE_DELETE_OBJECT: type += "\033[33mdelete" type += "\033[0m" value = " " + type + ' \033[35m' + objectInstance.displayName + '\033[0m : ' valuesChanges = dict() for k in objectInstance.changes['set']: try: if objectInstance.attributes[k] != objectInstance.changes['set'][k]: valuesChanges[k] = 'new Value: ' + str( objectInstance.changes['set'][k]) + ' | old value: ' + str( objectInstance.attributes[k]) except KeyError: valuesChanges[k] = 'new Value: ' + str(objectInstance.changes['set'][k]) pass print value + str(valuesChanges) number += 1 if number == 0: print " \033[91m<None>\033[0m" print "" print ' Groups need change:' number = 0 for groupTemplate in LBEGroup.objects.all(): for groupInstance in self.backend.searchObjectsToUpdate(groupTemplate): number += 1 type = "" if groupInstance.changes['type'] == OBJECT_CHANGE_CREATE_OBJECT: type += "\033[34mcreate" elif groupInstance.changes['type'] == OBJECT_CHANGE_UPDATE_OBJECT: type += "\033[36mupdate" elif groupInstance.changes['type'] == OBJECT_CHANGE_DELETE_OBJECT: type += "\033[33mdelete" type += "\033[0m" value = " " + type + ' \033[35m' + groupInstance.displayName + '\033[0m : ' valuesChanges = dict() for k in groupInstance.changes['set']: try: if groupInstance.attributes[k] != groupInstance.changes['set'][k]: valuesChanges[k] = 'new Value: ' + str( groupInstance.changes['set'][k]) + ' | old value: ' + str( groupInstance.attributes[k]) except KeyError: valuesChanges[k] = 'new Value: ' + str(groupInstance.changes['set'][k]) pass print value + str(valuesChanges) if number == 0: print " \033[91m<None>\033[0m" """ Show objects do not exist in LBE but LDAP. """ def _notExistObjectLBE(self): print ' Checking for Objects which do not exist into LBE but in LDAP Server:' for objectTemplate in LBEObjectTemplate.objects.all(): print " - \033[35m" + objectTemplate.name + '\033[0m...' objHelper = LBEObjectInstanceHelper(objectTemplate) try: scope = objHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 objTarget = self.target.searchObjects(objectTemplate, scope) objBackend = self.backend.searchObjects(objectTemplate) number = 0 for ot in objTarget: exist = False for ob in objBackend: if ot.name == ob.name: exist = True break if not exist: number += 1 print " " + ot.name if number == 0: print ' \033[91m<None>\033[0m' print "" print ' Checking for Groups which do not exist into LBE but in LDAP Server:' number = 0 for groupTemplate in LBEGroup.objects.all(): grpHelper = GroupInstanceHelper(groupTemplate) try: scope = grpHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 grpTarget = self.target.searchObjects(groupTemplate, scope, '(cn=' + groupTemplate.displayName + ')') grpBackend = self.backend.searchObjectsByPattern(groupTemplate, groupTemplate.displayName) if not grpBackend: print " - \033[36m" + groupTemplate.displayName + "\033[0m does not exists." number += 1 if number == 0: print ' \033[91m<None>\033[0m' def start(self): self._needModification() print "" print '\033[93m.........................\033[0m' print '\033[93m.........................\033[0m' print "" self._notExistObjectLBE()
class ImportTarget(): def __init__(self): self.backend = BackendHelper() self.target = TargetHelper() self.start_date = django.utils.timezone.now() def _getID(self, listRDN): listID = [] for rdn in listRDN: listID.append(rdn.split('=')[1].split(',')[0]) return listID def save(self): print 'Checking for Objects which do not exist into LBE Backend but in LDAP Server:' for objectTemplate in LBEObjectTemplate.objects.all(): objectHelper = LBEObjectInstanceHelper(objectTemplate) try: scope = objectHelper.callScriptClassMethod("search_scope") except BaseException: scope = 0 filter = '(&' for oc in objectHelper.callScriptClassMethod('object_classes'): filter += '(objectClass=' + oc + ')' filter += ')' print '\033[91m' + objectTemplate.name + '\033[0m: (\033[95m' + objectHelper.callScriptClassMethod( "base_dn") + '\033[0m) using \033[95m' + filter + '\033[0m' objTarget = self.target.searchObjects(objectTemplate, scope) objBackend = self.backend.searchObjects(objectTemplate) number = 0 for ot in objTarget: exist = False for ob in objBackend: if ot.name == ob.name: exist = True break if not exist: number += 1 print '=> Adding \033[95m' + ot.name + '\033[0m object into LBE Backend... ' print " values: " + str(ot.attributes) try: self.backend.createObject(objectTemplate, ot, True) print "\033[92mDone.\033[0m\n" except BaseException as e: print "\033[91mFail.\033[0m" print "''''''''" print e print "''''''''" if number == 0: print '<None>' # Synced object: objectTemplate.synced_at = django.utils.timezone.now() objectTemplate.save() print '.........................' print 'Checking for Groups which do not exist into LBE Backend but in Target:' for groupTemplate in LBEGroup.objects.all(): groupInstance = GroupInstanceHelper(groupTemplate) try: scope = groupInstance.callScriptClassMethod("search_scope") except BaseException: scope = 0 grpTarget = self.target.searchObjects(groupTemplate, scope) grpBackend = self.backend.searchObjects(groupTemplate) for gt in grpTarget: exist = False for gb in grpBackend: if gt.name == gb.name: exist = True break if not exist: # import only existing group into LBE config try: LBEGroup.objects.get( displayName__iexact=gt.displayName) except BaseException: continue print '=> Adding \033[95m' + gt.name + '\033[0m group into LBE Backend... ' print " values: " + str(gt.attributes) try: if groupInstance.attributeName in gt.attributes: gt.attributes[ groupInstance.attributeName] = self._getID( gt.attributes[groupInstance.attributeName]) groupHelper = GroupInstanceHelper(groupTemplate, gt) groupHelper.createTemplate(True) #print " >\033[91mThis group does not exists in LBE Configuration Group.\033[0m" #print " >\033[91mIn order to see, manage it, please create it using some extra attribute:" #print " >\033[91m'Display Name': \033[95m" + gt.name + "\033[0m" #print " >\033[91mInto the Script file:" #print " >'DN Attribute': \033[95m" + groupHelper.callScriptClassMethod("base_dn") + "\033[91m" #print " >'Attribute Name' & 'Object Classes': as you wish.\033[0m" print "\033[92mDone.\033[0m\n" except BaseException as e: print "\033[91mFail.\033[0m\n" print "''''''''" print e print "''''''''" # Synced group: groupTemplate.synced_at = django.utils.timezone.now() groupTemplate.save() print "End."