def delete_pool_health_monitor(self, context, id, pool_id): try: pool = self._api.loadbalancer_pool_read(id=pool_id) except vnc_exc.NoIdError: raise loadbalancer.PoolNotFound(pool_id=id) tenant_id = str(uuid.UUID(context.tenant_id)) if not context.is_admin and tenant_id != pool.parent_uuid: raise loadbalancer.PoolNotFound(pool_id=id) try: monitor = self._api.loadbalancer_healthmonitor_read(id=id) except vnc_exc.NoIdError: raise loadbalancer.HealthMonitorNotFound(monitor_id=id) in_list = False for mref in pool.get_loadbalancer_healthmonitor_refs(): if mref['uuid'] == id: in_list = True break if not in_list: raise loadbalancer.PoolMonitorAssociationNotFound( monitor_id=id, pool_id=pool_id) pool.del_loadbalancer_healthmonitor(monitor) self._api.loadbalancer_pool_update(pool)
def create_pool_health_monitor(self, context, health_monitor, pool_id): """ Associate an health monitor with a pool. """ m = health_monitor['health_monitor'] try: pool = self._api.loadbalancer_pool_read(id=pool_id) except vnc_exc.NoIdError: raise loadbalancer.PoolNotFound(pool_id=pool_id) try: monitor = self._api.loadbalancer_healthmonitor_read(id=m['id']) except vnc_exc.NoIdError: raise loadbalancer.HealthMonitorNotFound(monitor_id=m['id']) if not context.is_admin: tenant_id = str(uuid.UUID(context.tenant_id)) if tenant_id != pool.parent_uuid or \ tenant_id != monitor.parent_uuid: raise n_exc.NotAuthorized() pool_refs = monitor.get_loadbalancer_pool_back_refs() if pool_refs is not None: for ref in pool_refs: if ref['uuid'] == pool_id: raise loadbalancer.PoolMonitorAssociationExists( monitor_id=m['id'], pool_id=pool_id) pool.add_loadbalancer_healthmonitor(monitor) self._api.loadbalancer_pool_update(pool) res = { 'id': monitor.uuid, 'tenant_id': monitor.parent_uuid.replace('-', '') } return res
def create(self, context, pool): """ Create a loadbalancer_pool object. """ p = pool['pool'] tenant_id = self._get_tenant_id_for_create(context, p) project = self._project_read(project_id=tenant_id) uuid = uuidutils.generate_uuid() name = self._get_resource_name('loadbalancer-pool', project, p['name'], uuid) props = self.make_properties(p) id_perms = IdPermsType(uuid=uuid, enable=True, description=p['description']) pool = LoadbalancerPool(name, project, loadbalancer_pool_properties=props, loadbalancer_pool_provider=p['provider'], id_perms=id_perms, display_name=p['name']) pool.uuid = uuid if p['health_monitors']: for hm in p['health_monitors']: try: mon = self._api.loadbalancer_healthmonitor_read(id=hm) except NoIdError: raise loadbalancer.HealthMonitorNotFound(monitor_id=hm) pool.add_loadbalancer_healthmonitor(mon) self._api.loadbalancer_pool_create(pool) return self.make_dict(pool)
def _get_resource(self, context, model, id): try: r = self._get_by_id(context, model, id) except exc.NoResultFound: with excutils.save_and_reraise_exception(): if issubclass(model, Vip): raise loadbalancer.VipNotFound(vip_id=id) elif issubclass(model, Pool): raise loadbalancer.PoolNotFound(pool_id=id) elif issubclass(model, Member): raise loadbalancer.MemberNotFound(member_id=id) elif issubclass(model, HealthMonitor): raise loadbalancer.HealthMonitorNotFound(monitor_id=id) return r
def create(self, context, pool): """ Create a loadbalancer_pool object. """ p = pool['pool'] try: sas_fq_name = ["default-global-system-config"] sas_fq_name.append(p['provider']) sas_obj = self._api.service_appliance_set_read(fq_name=sas_fq_name) except NoIdError: raise pconf.ServiceProviderNotFound( provider=p['provider'], service_type=constants.LOADBALANCER) tenant_id = self._get_tenant_id_for_create(context, p) project = self._project_read(project_id=tenant_id) uuid = uuidutils.generate_uuid() name = self._get_resource_name('loadbalancer-pool', project, p['name'], uuid) props = self.make_properties(p) id_perms = IdPermsType(enable=True, description=p['description']) pool = LoadbalancerPool(name, project, loadbalancer_pool_properties=props, loadbalancer_pool_provider=p['provider'], id_perms=id_perms, display_name=p['name']) pool.uuid = uuid if p['health_monitors']: for hm in p['health_monitors']: try: mon = self._api.loadbalancer_healthmonitor_read(id=hm) except NoIdError: raise loadbalancer.HealthMonitorNotFound(monitor_id=hm) pool.add_loadbalancer_healthmonitor(mon) pool.set_service_appliance_set(sas_obj) # Custom attributes if p['custom_attributes'] != attr.ATTR_NOT_SPECIFIED: custom_attributes = KeyValuePairs() self.create_update_custom_attributes(p['custom_attributes'], custom_attributes) pool.set_loadbalancer_pool_custom_attributes(custom_attributes) self._api.loadbalancer_pool_create(pool) return self.make_dict(pool)
def get_exception_notfound(self, id=None): return loadbalancer.HealthMonitorNotFound(monitor_id=id)