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')
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')
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})
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})
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})
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)
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)
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})