def on_get(self, req, resp): """ Handles GET requests for Clusters. :param req: Request instance that will be passed through. :type req: falcon.Request :param resp: Response instance that will be passed through. :type resp: falcon.Response """ clusters_dir, error = cherrypy.engine.publish( 'store-get', '/commissaire/clusters/')[0] if error: self.logger.warn( 'Etcd does not have any clusters. Returning [] and 404.') resp.status = falcon.HTTP_404 req.context['model'] = None return results = [] # Don't let an empty clusters directory through if len(clusters_dir._children): for cluster in clusters_dir.leaves: results.append(cluster.key.split('/')[-1]) resp.status = falcon.HTTP_200 req.context['model'] = Clusters(clusters=results) else: self.logger.debug('Etcd has a clusters directory but no content.') resp.status = falcon.HTTP_200 req.context['model'] = None
def on_delete(self, req, resp, address): """ Handles the Deletion of a Host. :param req: Request instance that will be passed through. :type req: falcon.Request :param resp: Response instance that will be passed through. :type resp: falcon.Response :param address: The address of the Host being requested. :type address: str """ resp.body = '{}' store_manager = cherrypy.engine.publish('get-store-manager')[0] try: host = Host.new(address=address) WATCHER_QUEUE.dequeue(host) store_manager.delete(host) self.logger.debug( 'Deleted host {0} and dequeued it from the watcher.'.format( host.address)) resp.status = falcon.HTTP_200 except: resp.status = falcon.HTTP_404 # Also remove the host from all clusters. # Note: We've done all we need to for the host deletion, # so if an error occurs from here just log it and # return. try: clusters = store_manager.list(Clusters(clusters=[])) except: self.logger.warn('Store does not have any clusters') return for cluster in clusters.clusters: try: self.logger.debug('Checking cluster {0}'.format(cluster.name)) if address in cluster.hostset: self.logger.info('Removing {0} from cluster {1}'.format( address, cluster.name)) cluster.hostset.remove(address) store_manager.save(cluster) self.logger.info( '{0} has been removed from cluster {1}'.format( address, cluster.name)) except: self.logger.warn( 'Failed to remove {0} from cluster {1}'.format( address, cluster.name))