def PUT(self, cluster_id): """:IMPORTANT: this method should be rewritten to be more RESTful :returns: JSONized Task object. :http: * 202 (network checking task failed) * 200 (network verification task started) * 404 (cluster not found in db) """ cluster = self.get_object_or_404(Cluster, cluster_id) try: data = self.validator.validate_networks_update(web.data()) except web.webapi.badrequest as exc: task = Task(name='check_networks', cluster=cluster) db().add(task) db().commit() TaskHelper.set_error(task.uuid, exc.data) logger.error(traceback.format_exc()) json_task = build_json_response(TaskHandler.render(task)) raise web.accepted(data=json_task) vlan_ids = [{ 'name': n['name'], 'vlans': NetworkGroup.generate_vlan_ids_list(n) } for n in data['networks']] task_manager = VerifyNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data, vlan_ids) return TaskHandler.render(task)
def launch_verify(self, cluster): try: data = self.validator.validate_networks_update(web.data()) except web.webapi.badrequest as exc: task = Task(name='check_networks', cluster=cluster) db().add(task) db().commit() TaskHelper.set_error(task.uuid, exc.data) logger.error(traceback.format_exc()) json_task = build_json_response(TaskHandler.render(task)) raise web.accepted(data=json_task) data["networks"] = [ n for n in data["networks"] if n.get("name") != "fuelweb_admin" ] vlan_ids = [{ 'name': n['name'], 'vlans': cluster.network_manager.generate_vlan_ids_list( data, cluster, n) } for n in data['networks']] task_manager = VerifyNetworksTaskManager(cluster_id=cluster.id) try: task = task_manager.execute(data, vlan_ids) except errors.CantRemoveOldVerificationTask: raise web.badrequest("You cannot delete running task manually") return TaskHandler.render(task)
def PUT(self, cluster_id): """ :IMPORTANT: this method should be rewritten to be more RESTful :returns: JSONized Task object. :http: * 202 (network checking task failed) * 200 (network verification task started) * 404 (cluster not found in db) """ cluster = self.get_object_or_404(Cluster, cluster_id) try: data = self.validator.validate_networks_update(web.data()) except web.webapi.badrequest as exc: task = Task(name='check_networks', cluster=cluster) db().add(task) db().commit() TaskHelper.set_error(task.uuid, exc.data) logger.error(traceback.format_exc()) json_task = build_json_response(TaskHandler.render(task)) raise web.accepted(data=json_task) vlan_ids = [{ 'name': n['name'], 'vlans': NetworkGroup.generate_vlan_ids_list(n) } for n in data['networks']] task_manager = VerifyNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data, vlan_ids) return TaskHandler.render(task)
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 202 (network checking task created) * 404 (cluster not found in db) """ data = json.loads(web.data()) cluster = self.get_object_or_404(Cluster, cluster_id) task_manager = CheckNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data) if task.status != 'error': try: if 'networks' in data: self.validator.validate_networks_update(json.dumps(data)) NetworkConfiguration.update(cluster, data) except web.webapi.badrequest as exc: TaskHelper.set_error(task.uuid, exc.data) logger.error(traceback.format_exc()) except Exception as exc: TaskHelper.set_error(task.uuid, exc) logger.error(traceback.format_exc()) data = build_json_response(TaskHandler.render(task)) if task.status == 'error': db().rollback() else: db().commit() raise web.accepted(data=data)
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 200 (task successfully executed) * 404 (cluster not found in db) * 400 (failed to execute task) """ cluster = self.get_object_or_404( Cluster, cluster_id, log_404=( "warning", "Error: there is no cluster " "with id '{0}' in DB.".format(cluster_id))) try: network_info = \ NetworkConfigurationSerializer.serialize_for_cluster( cluster ) logger.info( u"Network info:\n{0}".format( json.dumps(network_info, indent=4) ) ) task_manager = DeploymentTaskManager( cluster_id=cluster.id ) task = task_manager.execute() except Exception as exc: logger.warn(u'ClusterChangesHandler: error while execution' ' deploy task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) return TaskHandler.render(task)
def PUT(self, cluster_id): data = json.loads(web.data()) cluster = self.get_object_or_404(Cluster, cluster_id) task_manager = CheckNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data) if task.status != 'error': if 'networks' in data: network_configuration = self.validator.\ validate_networks_update(json.dumps(data)) try: NetworkConfiguration.update(cluster, data) except Exception as exc: err = str(exc) TaskHelper.update_task_status(task.uuid, status="error", progress=100, msg=err) logger.error(traceback.format_exc()) data = build_json_response(TaskHandler.render(task)) if task.status == 'error': self.db.rollback() else: self.db.commit() raise web.accepted(data=data)
def PUT(self, cluster_id): data = json.loads(web.data()) cluster = self.get_object_or_404(Cluster, cluster_id) task_manager = CheckNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data) if task.status != 'error': try: if 'networks' in data: network_configuration = self.validator.\ validate_networks_update(json.dumps(data)) NetworkConfiguration.update(cluster, data) except web.webapi.badrequest as exc: TaskHelper.set_error(task.uuid, exc.data) logger.error(traceback.format_exc()) except Exception as exc: TaskHelper.set_error(task.uuid, exc) logger.error(traceback.format_exc()) data = build_json_response(TaskHandler.render(task)) if task.status == 'error': db().rollback() else: db().commit() raise web.accepted(data=data)
def PUT(self, cluster_id): cluster = self.get_object_or_404( Cluster, cluster_id, log_404=( "warning", "Error: there is no cluster " "with id '{0}' in DB.".format(cluster_id))) try: network_info = \ NetworkConfigurationSerializer.serialize_for_cluster( cluster ) logger.info( u"Network info:\n{0}".format( json.dumps(network_info, indent=4) ) ) task_manager = DeploymentTaskManager( cluster_id=cluster.id ) task = task_manager.execute() except Exception as exc: logger.warn(u'ClusterChangesHandler: error while execution' ' deploy task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) return TaskHandler.render(task)
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 202 (deployment stopping initiated) * 400 (can't stop deployment) * 404 (environment not found in db) """ cluster = self.get_object_or_404(Cluster, cluster_id) try: logger.info( u"Trying to stop deployment " u"on environment '{0}'".format( cluster_id ) ) task_manager = StopDeploymentTaskManager( cluster_id=cluster.id ) task = task_manager.execute() except errors.StopAlreadyRunning as exc: err = web.conflict err.message = exc.message raise err except Exception as exc: logger.warn(u'Error during execution ' u'deployment stopping task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) raise web.webapi.HTTPError( status="202 Accepted", data=TaskHandler.render(task) )
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 202 (environment reset initiated) * 400 (can't reset environment) * 404 (environment not found in db) """ cluster = self.get_object_or_404(Cluster, cluster_id) try: logger.info( u"Trying to reset environment '{0}'".format( cluster_id ) ) task_manager = ResetEnvironmentTaskManager( cluster_id=cluster.id ) task = task_manager.execute() except Exception as exc: logger.warn(u'Error during execution ' u'environment resetting ' u'task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) raise web.webapi.HTTPError( status="202 Accepted", data=TaskHandler.render(task) )
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 200 (task successfully executed) * 404 (cluster not found in db) * 400 (failed to execute task) """ cluster = self.get_object_or_404( Cluster, cluster_id, log_404=("warning", "Error: there is no cluster " "with id '{0}' in DB.".format(cluster_id)), ) if cluster.net_provider == "nova_network": net_serializer = NovaNetworkConfigurationSerializer elif cluster.net_provider == "neutron": net_serializer = NeutronNetworkConfigurationSerializer try: network_info = net_serializer.serialize_for_cluster(cluster) logger.info(u"Network info:\n{0}".format(json.dumps(network_info, indent=4))) task_manager = ApplyChangesTaskManager(cluster_id=cluster.id) task = task_manager.execute() except Exception as exc: logger.warn(u"ClusterChangesHandler: error while execution" " deploy task: {0}".format(str(exc))) raise web.badrequest(str(exc)) return TaskHandler.render(task)
def PUT(self, cluster_id): data = json.loads(web.data()) if data.get("networks"): data["networks"] = [ n for n in data["networks"] if n.get("name") != "fuelweb_admin" ] cluster = self.get_object_or_404(Cluster, cluster_id) check_if_network_configuration_locked(cluster) task_manager = CheckNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data) if task.status != 'error': try: if 'networks' in data: self.validator.validate_networks_update(json.dumps(data)) if 'neutron_parameters' in data: self.validator.validate_neutron_params(json.dumps(data)) NeutronNetworkConfiguration.update(cluster, data) except Exception as exc: TaskHelper.set_error(task.uuid, exc) logger.error(traceback.format_exc()) data = build_json_response(TaskHandler.render(task)) if task.status == 'error': db().rollback() else: db().commit() raise web.accepted(data=data)
def PUT(self): """Starts capacity data generation. :returns: JSONized Task object. :http: * 202 (setup task created and started) """ manager = GenerateCapacityLogTaskManager() task = manager.execute() data = build_json_response(TaskHandler.render(task)) raise web.accepted(data=data)
def PUT(self, cluster_id): cluster = self.get_object_or_404(Cluster, cluster_id) data = self.validator.validate_networks_update(web.data()) vlan_ids = [{ 'name': n['name'], 'vlans': NetworkGroup.generate_vlan_ids_list(n) } for n in data['networks']] task_manager = VerifyNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data, vlan_ids) return TaskHandler.render(task)
def POST(self): data = self.checked_data() # TODO: activate and save status task_manager = DownloadReleaseTaskManager(data['release_id']) try: task = task_manager.execute() except Exception as exc: logger.warn(u'DownloadReleaseHandler: error while execution' ' deploy task: {0}'.format(exc.message)) raise web.badrequest(exc.message) return TaskHandler.render(task)
def PUT(self): """:returns: JSONized Task object. :http: * 200 (task successfully executed) * 400 (failed to execute task) """ try: task_manager = DumpTaskManager() task = task_manager.execute() except Exception as exc: logger.warn(u'DumpTask: error while execution ' 'dump environment task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) return TaskHandler.render(task)
def PUT(self, cluster_id): cluster = self.get_object_or_404(Cluster, cluster_id) try: data = self.validator.validate_networks_update(web.data()) except web.webapi.badrequest as exc: task = Task(name='check_networks', cluster=cluster) db().add(task) db().commit() TaskHelper.set_error(task.uuid, exc.data) logger.error(traceback.format_exc()) json_task = build_json_response(TaskHandler.render(task)) raise web.accepted(data=json_task) vlan_ids = [{ 'name': n['name'], 'vlans': NetworkGroup.generate_vlan_ids_list(n) } for n in data['networks']] task_manager = VerifyNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data, vlan_ids) return TaskHandler.render(task)
def PUT(self, cluster_id): cluster = self.get_object_or_404( Cluster, cluster_id, log_404=("warning", "Error: there is no cluster " "with id '{0}' in DB.".format(cluster_id))) task_manager = DeploymentTaskManager(cluster_id=cluster.id) try: task = task_manager.execute() except Exception as exc: logger.warn(u'ClusterChangesHandler: error while execution' ' deploy task: {0}'.format(exc.message)) raise web.badrequest(exc.message) return TaskHandler.render(task)
def PUT(self, cluster_id): cluster = self.get_object_or_404( Cluster, cluster_id, log_404=( "warning", "Error: there is no cluster " "with id '{0}' in DB.".format(cluster_id))) check_task_manager = CheckBeforeDeploymentTaskManager( cluster_id=cluster.id) check_task = check_task_manager.execute() if check_task.status == 'error': return TaskHandler.render(check_task) try: task_manager = DeploymentTaskManager(cluster_id=cluster.id) task = task_manager.execute() except Exception as exc: logger.warn(u'ClusterChangesHandler: error while execution' ' deploy task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) return TaskHandler.render(task)
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 202 (network checking task created) * 404 (cluster not found in db) """ data = json.loads(web.data()) if data.get("networks"): data["networks"] = [ n for n in data["networks"] if n.get("name") != "fuelweb_admin" ] cluster = self.get_object_or_404(Cluster, cluster_id) self.check_net_provider(cluster) self.check_if_network_configuration_locked(cluster) task_manager = CheckNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data) if task.status != 'error': try: if 'networks' in data: self.validator.validate_networks_update( json.dumps(data) ) if 'dns_nameservers' in data: self.validator.validate_dns_servers_update( json.dumps(data) ) NovaNetworkManager.update(cluster, data) except web.webapi.badrequest as exc: TaskHelper.set_error(task.uuid, exc.data) logger.error(traceback.format_exc()) except Exception as exc: TaskHelper.set_error(task.uuid, exc) logger.error(traceback.format_exc()) data = build_json_response(TaskHandler.render(task)) if task.status == 'error': db().rollback() else: db().commit() raise web.accepted(data=data)
def POST(self): """ Starts Red Hat setup and download process :returns: JSONized Task object. :http: * 202 (setup task created and started) * 400 (invalid account data specified) * 404 (release not found in db) """ data = self.checked_data() license_type = data.get("license_type") if license_type == 'rhsm': data["satellite"] = "" data["activation_key"] = "" release_data = {'release_id': data['release_id']} release_id = data.pop('release_id') release_db = db().query(Release).get(release_id) if not release_db: raise web.notfound( "No release with ID={0} found".format(release_id) ) release_data['redhat'] = data release_data['release_name'] = release_db.name account = db().query(RedHatAccount).first() if account: db().query(RedHatAccount).update(data) else: account = RedHatAccount(**data) db().add(account) db().commit() task_manager = RedHatSetupTaskManager(release_data) try: task = task_manager.execute() except Exception as exc: logger.error(u'RedHatAccountHandler: error while execution' ' Red Hat validation task: {0}'.format(str(exc))) logger.error(traceback.format_exc()) raise web.badrequest(str(exc)) data = build_json_response(TaskHandler.render(task)) raise web.accepted(data=data)
def POST(self): data = self.checked_data() release_data = {"release_id": data["release_id"]} data.pop("release_id") release_data["redhat"] = data account = RedHatAccount(**data) db().add(account) db().commit() task_manager = DownloadReleaseTaskManager(release_data) try: task = task_manager.execute() except Exception as exc: logger.error(u"DownloadReleaseHandler: error while execution" " deploy task: {0}".format(str(exc))) logger.error(traceback.format_exc()) raise web.badrequest(str(exc)) return TaskHandler.render(task)
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 200 (task successfully executed) * 404 (cluster or nodes not found in db) * 400 (failed to execute task) """ cluster = self.get_object_or_404(Cluster, cluster_id) nodes = self.get_nodes(cluster) try: task_manager = self.task_manager(cluster_id=cluster.id) task = task_manager.execute(nodes) except Exception as exc: logger.warn(u'Cannot execute {0} task nodes: {1}'.format( task_manager.__class__.__name__, traceback.format_exc())) raise web.badrequest(str(exc)) return TaskHandler.render(task)
def POST(self): """Starts Red Hat setup and download process :returns: JSONized Task object. :http: * 202 (setup task created and started) * 400 (invalid account data specified) * 404 (release not found in db) """ data = self.checked_data() license_type = data.get("license_type") if license_type == 'rhsm': data["satellite"] = "" data["activation_key"] = "" release_data = {'release_id': data['release_id']} release_id = data.pop('release_id') release_db = db().query(Release).get(release_id) if not release_db: raise web.notfound( "No release with ID={0} found".format(release_id) ) release_data['redhat'] = data release_data['release_name'] = release_db.name account = db().query(RedHatAccount).first() if account: db().query(RedHatAccount).update(data) else: account = RedHatAccount(**data) db().add(account) db().commit() task_manager = RedHatSetupTaskManager(release_data) try: task = task_manager.execute() except Exception as exc: logger.error(u'RedHatAccountHandler: error while execution' ' Red Hat validation task: {0}'.format(str(exc))) logger.error(traceback.format_exc()) raise web.badrequest(str(exc)) data = build_json_response(TaskHandler.render(task)) raise web.accepted(data=data)
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 202 (environment reset initiated) * 400 (can't reset environment) * 404 (environment not found in db) """ cluster = self.get_object_or_404(Cluster, cluster_id) try: logger.info( u"Trying to reset environment '{0}'".format(cluster_id)) task_manager = ResetEnvironmentTaskManager(cluster_id=cluster.id) task = task_manager.execute() except Exception as exc: logger.warn(u'Error during execution ' u'environment resetting ' u'task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) raise web.webapi.HTTPError(status="202 Accepted", data=TaskHandler.render(task))
def PUT(self, cluster_id): data = json.loads(web.data()) if data.get("networks"): data["networks"] = [ n for n in data["networks"] if n.get("name") != "fuelweb_admin" ] cluster = self.get_object_or_404(Cluster, cluster_id) self.check_net_provider(cluster) self.check_if_network_configuration_locked(cluster) task_manager = CheckNetworksTaskManager(cluster_id=cluster.id) task = task_manager.execute(data) if task.status != 'error': try: if 'networks' in data: self.validator.validate_networks_update( json.dumps(data) ) if 'neutron_parameters' in data: self.validator.validate_neutron_params( json.dumps(data), cluster_id=cluster_id ) NeutronManager.update(cluster, data) except Exception as exc: TaskHelper.set_error(task.uuid, exc) logger.error(traceback.format_exc()) data = build_json_response(TaskHandler.render(task)) if task.status == 'error': db().rollback() else: db().commit() raise web.accepted(data=data)
def PUT(self, cluster_id): """:returns: JSONized Task object. :http: * 202 (deployment stopping initiated) * 400 (can't stop deployment) * 404 (environment not found in db) """ cluster = self.get_object_or_404(Cluster, cluster_id) try: logger.info(u"Trying to stop deployment " u"on environment '{0}'".format(cluster_id)) task_manager = StopDeploymentTaskManager(cluster_id=cluster.id) task = task_manager.execute() except errors.StopAlreadyRunning as exc: err = web.conflict err.message = exc.message raise err except Exception as exc: logger.warn(u'Error during execution ' u'deployment stopping task: {0}'.format(str(exc))) raise web.badrequest(str(exc)) raise web.webapi.HTTPError(status="202 Accepted", data=TaskHandler.render(task))
def POST(self): plugin_manager = PluginManager() task = plugin_manager.add_install_plugin_task( json.loads(web.data())) return TaskHandler.render(task)
def POST(self): plugin_manager = PluginManager() task = plugin_manager.add_install_plugin_task(json.loads(web.data())) return TaskHandler.render(task)