Example #1
0
 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."
Example #2
0
 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."