Пример #1
0
    def _update_loadbalancer_instance_v2(self, lb_id):
        lb = LoadbalancerSM.get(lb_id)
        if lb is None:
            msg = ('Unable to retrieve loadbalancer %s' % lb_id)
            self._svc_manager.logger.error(msg)
            return

        fq_name = lb.fq_name[:-1]
        fq_name.append(lb_id)

        si_refs = lb.service_instance
        si_obj = ServiceInstanceSM.get(si_refs)
        vip_vmi = VirtualMachineInterfaceSM.get(lb.virtual_machine_interface)
        props = self._calculate_instance_properties(None, vip_vmi, lb_id)
        if props is None:
            try:
                self._api.service_instance_delete(id=si_refs)
                ServiceInstanceSM.delete(si_refs)
            except RefsExistError as ex:
                self._svc_manager.logger.error(str(ex))
            return

        if si_obj:
            self._service_instance_update_props(si_obj, props)
        else:
            self._get_template()
            si_obj = ServiceInstance(name=fq_name[-1], parent_type='project',
                fq_name=fq_name, service_instance_properties=props)
            si_obj.set_service_template(self.get_lb_template())
            self._api.service_instance_create(si_obj)
            ServiceInstanceSM.locate(si_obj.uuid)

        if si_refs is None or si_refs != si_obj.uuid:
            self._api.ref_update('loadbalancer', lb.uuid,
                'service-instance', si_obj.uuid, None, 'ADD')
Пример #2
0
    def _update_loadbalancer_instance_v2(self, lb_id):
        lb = LoadbalancerSM.get(lb_id)
        if lb is None:
            msg = ('Unable to retrieve loadbalancer %s' % lb_id)
            self._svc_manager.logger.error(msg)
            return

        fq_name = lb.fq_name[:-1]
        fq_name.append(lb_id)

        si_refs = lb.service_instance
        si_obj = ServiceInstanceSM.get(si_refs)
        vip_vmi = VirtualMachineInterfaceSM.get(lb.virtual_machine_interface)
        props = self._calculate_instance_properties(None, vip_vmi, lb_id)
        if props is None:
            try:
                self._api.service_instance_delete(id=si_refs)
                ServiceInstanceSM.delete(si_refs)
            except RefsExistError as ex:
                self._svc_manager.logger.error(str(ex))
            return

        if si_obj:
            self._service_instance_update_props(si_obj, props)
        else:
            si_obj = ServiceInstance(name=fq_name[-1], parent_type='project',
                fq_name=fq_name, service_instance_properties=props)
            si_obj.set_service_template(self.get_lb_template())
            self._api.service_instance_create(si_obj)
            ServiceInstanceSM.locate(si_obj.uuid)

        if si_refs is None or si_refs != si_obj.uuid:
            self._api.ref_update('loadbalancer', lb.uuid,
                'service_instance_refs', si_obj.uuid, None, 'ADD')
Пример #3
0
    def _update_loadbalancer_instance(self, pool_id, vip_id):
        """ Update the loadbalancer service instance.

        Prerequisites:
        pool and vip must be known.
        """
        try:
            pool = self._api.loadbalancer_pool_read(id=pool_id)
        except NoIdError:
            msg = ('Unable to retrieve pool %s' % pool_id)
            self._svc_manager.logger.log_error(msg)
            return

        try:
            vip = self._api.virtual_ip_read(id=vip_id)
        except NoIdError:
            msg = ('Unable to retrieve virtual-ip %s' % vip_id)
            self._svc_manager.logger.log_error(msg)
            return

        fq_name = pool.get_fq_name()[:-1]
        fq_name.append(pool_id)

        props = self._calculate_instance_properties(pool, vip)
        if props is None:
            try:
                self._api.service_instance_delete(fq_name=fq_name)
            except RefsExistError as ex:
                self._svc_manager.logger.log_error(str(ex))
            return

        self._get_template()

        try:
            si_obj = self._api.service_instance_read(fq_name=fq_name)
            update = self._service_instance_update_props(si_obj, props)
            if update:
                self._api.service_instance_update(si_obj)

        except NoIdError:
            proj_obj = self._api.project_read(fq_name=fq_name[:-1])
            si_obj = ServiceInstance(name=fq_name[-1],
                                     parent_obj=proj_obj,
                                     service_instance_properties=props)
            si_obj.set_service_template(self._lb_template)
            self._api.service_instance_create(si_obj)

        si_refs = pool.get_service_instance_refs()
        if si_refs is None or si_refs[0]['uuid'] != si_obj.uuid:
            pool.set_service_instance(si_obj)
            self._api.loadbalancer_pool_update(pool)
        self.db.pool_driver_info_insert(pool_id,
                                        {'service_instance': si_obj.uuid})
Пример #4
0
    def _update_loadbalancer_instance(self, pool_id, vip_id):
        """ Update the loadbalancer service instance.

        Prerequisites:
        pool and vip must be known.
        """
        try:
            pool = self._api.loadbalancer_pool_read(id=pool_id)
        except NoIdError:
            msg = ('Unable to retrieve pool %s' % pool_id)
            self._svc_manager.logger.log_error(msg)
            return

        try:
            vip = self._api.virtual_ip_read(id=vip_id)
        except NoIdError:
            msg = ('Unable to retrieve virtual-ip %s' % vip_id)
            self._svc_manager.logger.log_error(msg)
            return

        fq_name = pool.get_fq_name()[:-1]
        fq_name.append(pool_id)

        props = self._calculate_instance_properties(pool, vip)
        if props is None:
            try:
                self._api.service_instance_delete(fq_name=fq_name)
            except RefsExistError as ex:
                self._svc_manager.logger.log_error(str(ex))
            return

        self._get_template()

        try:
            si_obj = self._api.service_instance_read(fq_name=fq_name)
            update = self._service_instance_update_props(si_obj, props)
            if update:
                self._api.service_instance_update(si_obj)

        except NoIdError:
            proj_obj = self._api.project_read(fq_name=fq_name[:-1])
            si_obj = ServiceInstance(name=fq_name[-1], parent_obj=proj_obj,
                                     service_instance_properties=props)
            si_obj.set_service_template(self._lb_template)
            self._api.service_instance_create(si_obj)

        si_refs = pool.get_service_instance_refs()
        if si_refs is None or si_refs[0]['uuid'] != si_obj.uuid:
            pool.set_service_instance(si_obj)
            self._api.loadbalancer_pool_update(pool)
        self.db.pool_driver_info_insert(pool_id, {'service_instance': si_obj.uuid})
Пример #5
0
    def _update_loadbalancer_instance(self, pool_id, vip_id=None):
        """ Update the loadbalancer service instance.

        Prerequisites:
        pool and vip must be known.
        """
        pool = LoadbalancerPoolSM.get(pool_id)
        if pool is None:
            msg = ('Unable to retrieve pool %s' % pool_id)
            self._svc_manager.logger.error(msg)
            return

        vip_vmi = self._get_vip_vmi(pool, vip_id)
        if vip_vmi is None:
            msg = ('Unable to retrieve vip port for pool %s' % pool.uuid)
            self._svc_manager.logger.error(msg)
            return

        fq_name = pool.fq_name[:-1]
        fq_name.append(pool_id)

        si_refs = pool.service_instance
        si_obj = ServiceInstanceSM.get(si_refs)
        props = self._calculate_instance_properties(pool, vip_vmi)
        if props is None:
            try:
                self._api.service_instance_delete(id=si_refs)
                ServiceInstanceSM.delete(si_refs)
            except RefsExistError as ex:
                self._svc_manager.logger.error(str(ex))
            return

        if si_obj:
            self._service_instance_update_props(si_obj, props)
        else:
            self._get_template()
            si_obj = ServiceInstance(name=fq_name[-1],
                                     parent_type='project',
                                     fq_name=fq_name,
                                     service_instance_properties=props)
            si_obj.set_service_template(self.get_lb_template())
            self._api.service_instance_create(si_obj)
            ServiceInstanceSM.locate(si_obj.uuid)

        if si_refs is None or si_refs != si_obj.uuid:
            self._api.ref_update('loadbalancer-pool', pool.uuid,
                                 'service_instance_refs', si_obj.uuid, None,
                                 'ADD')
        self.db.pool_driver_info_insert(pool_id,
                                        {'service_instance': si_obj.uuid})
Пример #6
0
    def _update_loadbalancer_instance(self, pool_id, vip_id):
        """ Update the loadbalancer service instance.

        Prerequisites:
        pool and vip must be known.
        """
        try:
            pool = self._api.loadbalancer_pool_read(id=pool_id)
        except NoIdError:
            msg = ('Unable to retrieve pool %s' % pool_id)
            raise n_exc.BadRequest(resource='pool', msg=msg)

        try:
            vip = self._api.virtual_ip_read(id=vip_id)
        except NoIdError:
            msg = ('Unable to retrieve virtual-ip %s' % vip_id)
            raise n_exc.BadRequest(resource='vip', msg=msg)

        fq_name = pool.get_fq_name()[:-1]
        fq_name.append(pool_id)

        props = self._calculate_instance_properties(pool, vip)
        if props is None:
            try:
                self._api.service_instance_delete(fq_name=fq_name)
            except RefsExistError as ex:
                LOG.error(ex)
            return

        self._get_template()

        try:
            si_obj = self._api.service_instance_read(fq_name=fq_name)
            update = self._service_instance_update_props(si_obj, props)
            # TODO: update template if necessary
            if update:
                self._api.service_instance_update(si_obj)

        except NoIdError:
            proj_obj = self._api.project_read(fq_name=fq_name[:-1])
            si_obj = ServiceInstance(name=fq_name[-1],
                                     parent_obj=proj_obj,
                                     service_instance_properties=props)
            si_obj.set_service_template(self._lb_template)
            self._api.service_instance_create(si_obj)

        si_refs = pool.get_service_instance_refs()
        if si_refs is None or si_refs[0]['uuid'] != si_obj.uuid:
            pool.set_service_instance(si_obj)
            self._api.loadbalancer_pool_update(pool)
Пример #7
0
    def _update_loadbalancer_instance(self, pool_id, vip_id):
        """ Update the loadbalancer service instance.

        Prerequisites:
        pool and vip must be known.
        """
        try:
            pool = self._api.loadbalancer_pool_read(id=pool_id)
        except NoIdError:
            msg = ('Unable to retrieve pool %s' % pool_id)
            raise n_exc.BadRequest(resource='pool', msg=msg)

        try:
            vip = self._api.virtual_ip_read(id=vip_id)
        except NoIdError:
            msg = ('Unable to retrieve virtual-ip %s' % vip_id)
            raise n_exc.BadRequest(resource='vip', msg=msg)

        fq_name = pool.get_fq_name()[:-1]
        fq_name.append(pool_id)

        props = self._calculate_instance_properties(pool, vip)
        if props is None:
            try:
                self._api.service_instance_delete(fq_name=fq_name)
            except RefsExistError as ex:
                LOG.error(ex)
            return

        self._get_template()

        try:
            si_obj = self._api.service_instance_read(fq_name=fq_name)
            update = self._service_instance_update_props(si_obj, props)
            # TODO: update template if necessary
            if update:
                self._api.service_instance_update(si_obj)

        except NoIdError:
            proj_obj = self._api.project_read(fq_name=fq_name[:-1])
            si_obj = ServiceInstance(name=fq_name[-1], parent_obj=proj_obj,
                                     service_instance_properties=props)
            si_obj.set_service_template(self._lb_template)
            self._api.service_instance_create(si_obj)

        si_refs = pool.get_service_instance_refs()
        if si_refs is None or si_refs[0]['uuid'] != si_obj.uuid:
            pool.set_service_instance(si_obj)
            self._api.loadbalancer_pool_update(pool)
Пример #8
0
    def _update_loadbalancer_instance(self, pool_id, vip_id):
        """ Update the loadbalancer service instance.

        Prerequisites:
        pool and vip must be known.
        """
        pool = LoadbalancerPoolSM.get(pool_id)
        if pool is None:
            msg = ('Unable to retrieve pool %s' % pool_id)
            self._svc_manager.logger.log_error(msg)
            return

        vip = VirtualIpSM.get(vip_id)
        if vip is None:
            msg = ('Unable to retrieve virtual ip %s' % vip_id)
            self._svc_manager.logger.log_error(msg)
            return

        fq_name = pool.fq_name[:-1]
        fq_name.append(pool_id)

        si_refs = pool.service_instance
        si_obj = ServiceInstanceSM.get(si_refs)
        props = self._calculate_instance_properties(pool, vip)
        if props is None:
            try:
                self._api.service_instance_delete(id=si_refs)
                ServiceInstanceSM.delete(si_refs)
            except RefsExistError as ex:
                self._svc_manager.logger.log_error(str(ex))
            return

        if si_obj:
            update_obj = self._service_instance_update_props(si_obj, props)
            if update_obj:
                self._api.service_instance_update(update_obj)
        else:
            si_obj = ServiceInstance(name=fq_name[-1], parent_type='project',
			     fq_name=fq_name, service_instance_properties=props)
            si_obj.set_service_template(self.get_lb_template())
            self._api.service_instance_create(si_obj)
            ServiceInstanceSM.locate(si_obj.uuid)

        if si_refs is None or si_refs != si_obj.uuid:
            self._api.ref_update('loadbalancer-pool', pool.uuid,
	      'service_instance_refs', si_obj.uuid, None, 'ADD')
        self.db.pool_driver_info_insert(pool_id,
                                        {'service_instance': si_obj.uuid})