def start(self): print " Upgrade the Target server with the Backend server..." for objectTemplate in LBEObjectTemplate.objects.all(): # need to check if we need to change (before making reconciliation) the RDN attribute self._changeRDN(objectTemplate) # And the objects class self._changeClass(objectTemplate) # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC for objectInstance in self.backend.searchObjectsToUpdate( objectTemplate): # First of all, applies all changes stored in backend [ such Virtual attributes ] # & create the parent DN if not exist: obj = LBEObjectInstanceHelper(objectTemplate, objectInstance) try: scope = obj.callScriptClassMethod("search_scope") except BaseException: scope = 0 self._createParent(objectTemplate, obj) #obj.compute(objectInstance) # then, upgrade: if objectInstance.changes[ 'type'] == OBJECT_CHANGE_CREATE_OBJECT: try: print " |-> Object '\033[35m" + objectInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..." self._createObject(objectTemplate, objectInstance) # TODO: We should have a target exception rather ldap except ldap.ALREADY_EXISTS: print " |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m already exists" 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, objectInstance, changes) pass elif objectInstance.changes[ 'type'] == OBJECT_CHANGE_DELETE_OBJECT: try: print " |-> Object '\033[35m" + objectInstance.displayName + "' is \033[33mdeleting\033[0m..." self._deleteObject(objectTemplate, objectInstance) except BaseException as e: print " |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m does not exist." changes = {} changes['status'] = OBJECT_STATE_DELETED changes['changes'] = {} changes['changes']['set'] = {} changes['changes']['type'] = -1 changes['synced_at'] = django.utils.timezone.now() self.backend.updateObject(objectTemplate, objectInstance, changes) pass elif objectInstance.changes[ 'type'] == OBJECT_CHANGE_UPDATE_OBJECT: try: print " |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..." # Group for group in LBEGroup.objects.all(): if group.objectTemplate.id == objectTemplate.id: GroupInstanceHelper(group).updateMember( obj.getObject(obj.instance.name)) self._modifyObject(objectTemplate, objectInstance, scope) except BaseException as e: print e print " |-> Object '\033[35m" + objectInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..." # Create object if not exists: # Firstly, compute attributes values: # Then, create it: try: self._createObject(objectTemplate, objectInstance) except Exception as e: print e pass pass # Synced object: objectTemplate.synced_at = django.utils.timezone.now() objectTemplate.save() print '' print " Upgrade Groups Objects:" for groupTemplate in LBEGroup.objects.all(): for groupInstance in self.backend.searchObjectsToUpdate( groupTemplate): grp = GroupInstanceHelper(groupTemplate, groupInstance) try: scope = grp.callScriptClassMethod("search_scope") except BaseException: scope = 0 self._createParent(groupTemplate, grp) if groupInstance.changes[ 'type'] == OBJECT_CHANGE_CREATE_OBJECT: print " |-> Group '\033[35m" + groupInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..." try: groupInstance.changes['set'][ grp.attributeName] = self._getRDN( groupTemplate.objectTemplate, groupInstance.changes['set'][ grp.attributeName]) self._createObject(groupTemplate, groupInstance) ############################################### if not groupInstance.changes['set'] == {}: groupInstance.changes['set'][ grp.attributeName] = self._getID( groupInstance.changes['set'][ grp.attributeName]) groupInstance.attributes[ 'cn'] = groupInstance.changes['set']['cn'] self.backend.updateObject( groupTemplate, groupInstance, { 'changes': { 'set': { 'cn': [groupInstance.displayName] }, 'type': -1 } }) ############################################### except ldap.ALREADY_EXISTS: print " |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m already exists" elif groupInstance.changes[ 'type'] == OBJECT_CHANGE_UPDATE_OBJECT: try: print " |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..." groupInstance.changes['set'][ grp.attributeName] = self._getRDN( groupTemplate.objectTemplate, groupInstance.changes['set'][ grp.attributeName]) self._modifyObject(groupTemplate, groupInstance, scope) ############################################### groupInstance.changes['set'][ grp.attributeName] = self._getID( groupInstance.changes['set'][ grp.attributeName]) groupInstance.attributes['cn'] = groupInstance.changes[ 'set']['cn'] self.backend.updateObject( groupTemplate, groupInstance, { 'changes': { 'set': { 'cn': [groupInstance.displayName] }, 'type': -1 } }) ############################################### except BaseException as e: print e print " |-> Group '\033[35m" + groupInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..." groupInstance.changes['set'][ grp.attributeName] = self._getRDN( groupTemplate.objectTemplate, groupInstance.changes['set'][ grp.attributeName]) self._createObject(groupTemplate, groupInstance) ############################################### groupInstance.changes['set'][ grp.attributeName] = self._getID( groupInstance.changes['set'][ grp.attributeName]) groupInstance.attributes['cn'] = groupInstance.changes[ 'set']['cn'] self.backend.updateObject( groupTemplate, groupInstance, { 'changes': { 'set': { 'cn': [groupInstance.displayName] }, 'type': -1 } }) ############################################### elif groupInstance.changes[ 'type'] == OBJECT_CHANGE_DELETE_OBJECT: print " |-> Group '\033[35m" + groupInstance.displayName + "' is \033[33mdeleting\033[0m..." self._deleteObject(groupTemplate, groupInstance) print " End."
def start(self): print " Upgrade the Target server with the Backend server..." for objectTemplate in LBEObjectTemplate.objects.all(): # need to check if we need to change (before making reconciliation) the RDN attribute self._changeRDN(objectTemplate) # And the objects class self._changeClass(objectTemplate) # We're looking for all objects with state = OBJECT_STATE_AWAITING_SYNC for objectInstance in self.backend.searchObjectsToUpdate(objectTemplate): # First of all, applies all changes stored in backend [ such Virtual attributes ] # & create the parent DN if not exist: obj = LBEObjectInstanceHelper(objectTemplate, objectInstance) try: scope = obj.callScriptClassMethod("search_scope") except BaseException: scope = 0 self._createParent(objectTemplate, obj) # obj.compute(objectInstance) # then, upgrade: if objectInstance.changes["type"] == OBJECT_CHANGE_CREATE_OBJECT: try: print " |-> Object '\033[35m" + objectInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..." self._createObject(objectTemplate, objectInstance) # TODO: We should have a target exception rather ldap except ldap.ALREADY_EXISTS: print " |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m already exists" 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, objectInstance, changes) pass elif objectInstance.changes["type"] == OBJECT_CHANGE_DELETE_OBJECT: try: print " |-> Object '\033[35m" + objectInstance.displayName + "' is \033[33mdeleting\033[0m..." self._deleteObject(objectTemplate, objectInstance) except BaseException as e: print " |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m does not exist." changes = {} changes["status"] = OBJECT_STATE_DELETED changes["changes"] = {} changes["changes"]["set"] = {} changes["changes"]["type"] = -1 changes["synced_at"] = django.utils.timezone.now() self.backend.updateObject(objectTemplate, objectInstance, changes) pass elif objectInstance.changes["type"] == OBJECT_CHANGE_UPDATE_OBJECT: try: print " |-> Object '\033[35m" + objectInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..." # Group for group in LBEGroup.objects.all(): if group.objectTemplate.id == objectTemplate.id: GroupInstanceHelper(group).updateMember(obj.getObject(obj.instance.name)) self._modifyObject(objectTemplate, objectInstance, scope) except BaseException as e: print e print " |-> Object '\033[35m" + objectInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..." # Create object if not exists: # Firstly, compute attributes values: # Then, create it: try: self._createObject(objectTemplate, objectInstance) except Exception as e: print e pass pass # Synced object: objectTemplate.synced_at = django.utils.timezone.now() objectTemplate.save() print "" print " Upgrade Groups Objects:" for groupTemplate in LBEGroup.objects.all(): for groupInstance in self.backend.searchObjectsToUpdate(groupTemplate): grp = GroupInstanceHelper(groupTemplate, groupInstance) try: scope = grp.callScriptClassMethod("search_scope") except BaseException: scope = 0 self._createParent(groupTemplate, grp) if groupInstance.changes["type"] == OBJECT_CHANGE_CREATE_OBJECT: print " |-> Group '\033[35m" + groupInstance.displayName + "\033[0m' is \033[34mcreating\033[0m..." try: groupInstance.changes["set"][grp.attributeName] = self._getRDN( groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName] ) self._createObject(groupTemplate, groupInstance) ############################################### if not groupInstance.changes["set"] == {}: groupInstance.changes["set"][grp.attributeName] = self._getID( groupInstance.changes["set"][grp.attributeName] ) groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"] self.backend.updateObject( groupTemplate, groupInstance, {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}}, ) ############################################### except ldap.ALREADY_EXISTS: print " |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m already exists" elif groupInstance.changes["type"] == OBJECT_CHANGE_UPDATE_OBJECT: try: print " |-> Group '\033[35m" + groupInstance.displayName + "'\033[0m is \033[36mupdating\033[0m..." groupInstance.changes["set"][grp.attributeName] = self._getRDN( groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName] ) self._modifyObject(groupTemplate, groupInstance, scope) ############################################### groupInstance.changes["set"][grp.attributeName] = self._getID( groupInstance.changes["set"][grp.attributeName] ) groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"] self.backend.updateObject( groupTemplate, groupInstance, {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}}, ) ############################################### except BaseException as e: print e print " |-> Group '\033[35m" + groupInstance.displayName + "' does not exist, being \033[34mcreated\033[0m..." groupInstance.changes["set"][grp.attributeName] = self._getRDN( groupTemplate.objectTemplate, groupInstance.changes["set"][grp.attributeName] ) self._createObject(groupTemplate, groupInstance) ############################################### groupInstance.changes["set"][grp.attributeName] = self._getID( groupInstance.changes["set"][grp.attributeName] ) groupInstance.attributes["cn"] = groupInstance.changes["set"]["cn"] self.backend.updateObject( groupTemplate, groupInstance, {"changes": {"set": {"cn": [groupInstance.displayName]}, "type": -1}}, ) ############################################### elif groupInstance.changes["type"] == OBJECT_CHANGE_DELETE_OBJECT: print " |-> Group '\033[35m" + groupInstance.displayName + "' is \033[33mdeleting\033[0m..." self._deleteObject(groupTemplate, groupInstance) print " End."