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 NoIdError: raise loadbalancer.PoolNotFound(pool_id=pool_id) try: monitor = self._api.loadbalancer_healthmonitor_read(id=m['id']) except NoIdError: raise loadbalancer.HealthMonitorNotFound(monitor_id=m['id']) if not context.is_admin: tenant_id = 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} return res
def create_pool_health_monitor(self, context, health_monitor, pool_id): monitor_id = health_monitor['health_monitor']['id'] with context.session.begin(subtransactions=True): assoc_qry = context.session.query(PoolMonitorAssociation) assoc = assoc_qry.filter_by(pool_id=pool_id, monitor_id=monitor_id).first() if assoc: raise loadbalancer.PoolMonitorAssociationExists( monitor_id=monitor_id, pool_id=pool_id) pool = self._get_resource(context, Pool, pool_id) assoc = PoolMonitorAssociation(pool_id=pool_id, monitor_id=monitor_id, status=constants.PENDING_CREATE) pool.monitors.append(assoc) monitors = [monitor['monitor_id'] for monitor in pool['monitors']] res = {"health_monitor": monitors} return res