def POST(self): """:returns: JSONized Cluster object. :http: * 201 (cluster successfully created) * 400 (invalid cluster data specified) * 409 (cluster with such parameters already exists) """ # It's used for cluster creating only. data = self.checked_data() cluster = Cluster() cluster.release = db().query(Release).get(data["release"]) # TODO(NAME): use fields for field in ('name', 'mode', 'net_manager'): if data.get(field): setattr(cluster, field, data.get(field)) db().add(cluster) db().commit() attributes = Attributes( editable=cluster.release.attributes_metadata.get("editable"), generated=cluster.release.attributes_metadata.get("generated"), cluster=cluster ) attributes.generate_fields() netmanager = NetworkManager() try: netmanager.create_network_groups(cluster.id) cluster.add_pending_changes("attributes") cluster.add_pending_changes("networks") if 'nodes' in data and data['nodes']: nodes = db().query(Node).filter( Node.id.in_(data['nodes']) ).all() map(cluster.nodes.append, nodes) db().commit() for node in nodes: netmanager.allow_network_assignment_to_all_interfaces( node.id ) netmanager.assign_networks_to_main_interface(node.id) raise web.webapi.created(json.dumps( ClusterHandler.render(cluster), indent=4 )) except ( errors.OutOfVLANs, errors.OutOfIPs, errors.NoSuitableCIDR, errors.InvalidNetworkPool ) as e: # Cluster was created in this request, # so we no need to use ClusterDeletionManager. # All relations wiil be cascade deleted automaticly. # TODO(NAME): investigate transactions db().delete(cluster) raise web.badrequest(e.message)
def POST(self): """ :returns: JSONized Cluster object. :http: * 201 (cluster successfully created) * 400 (invalid cluster data specified) * 409 (cluster with such parameters already exists) """ # It's used for cluster creating only. data = self.checked_data() cluster = Cluster() cluster.release = db().query(Release).get(data["release"]) # TODO: use fields for field in ('name', 'mode', 'net_manager'): if data.get(field): setattr(cluster, field, data.get(field)) db().add(cluster) db().commit() attributes = Attributes( editable=cluster.release.attributes_metadata.get("editable"), generated=cluster.release.attributes_metadata.get("generated"), cluster=cluster ) attributes.generate_fields() netmanager = NetworkManager() try: netmanager.create_network_groups(cluster.id) cluster.add_pending_changes("attributes") cluster.add_pending_changes("networks") if 'nodes' in data and data['nodes']: nodes = db().query(Node).filter( Node.id.in_(data['nodes']) ).all() map(cluster.nodes.append, nodes) db().commit() for node in nodes: netmanager.allow_network_assignment_to_all_interfaces( node.id ) netmanager.assign_networks_to_main_interface(node.id) raise web.webapi.created(json.dumps( ClusterHandler.render(cluster), indent=4 )) except ( errors.OutOfVLANs, errors.OutOfIPs, errors.NoSuitableCIDR ) as e: # Cluster was created in this request, # so we no need to use ClusterDeletionManager. # All relations wiil be cascade deleted automaticly. # TODO: investigate transactions db().delete(cluster) raise web.badrequest(e.message)
def POST(self): # It's used for cluster creating only. data = self.validator.validate(web.data()) cluster = Cluster() cluster.release = self.db.query(Release).get(data["release"]) # TODO: use fields for field in ('name', 'type', 'mode', 'net_manager'): if data.get(field): setattr(cluster, field, data.get(field)) self.db.add(cluster) self.db.commit() attributes = Attributes( editable=cluster.release.attributes_metadata.get("editable"), generated=cluster.release.attributes_metadata.get("generated"), cluster=cluster ) attributes.generate_fields() netmanager = NetworkManager() netmanager.create_network_groups(cluster.id) cluster.add_pending_changes("attributes") cluster.add_pending_changes("networks") if 'nodes' in data and data['nodes']: nodes = self.db.query(Node).filter( Node.id.in_(data['nodes']) ).all() map(cluster.nodes.append, nodes) for node in nodes: self.allow_network_assignment_to_all_interfaces(node) self.assign_networks_to_main_interface(node) self.db.commit() raise web.webapi.created(json.dumps( ClusterHandler.render(cluster), indent=4 ))
def POST(self): # It's used for cluster creating only. data = self.validator.validate(web.data()) cluster = Cluster() cluster.release = self.db.query(Release).get(data["release"]) # TODO: use fields for field in ('name', 'type', 'mode', 'net_manager'): if data.get(field): setattr(cluster, field, data.get(field)) self.db.add(cluster) self.db.commit() attributes = Attributes( editable=cluster.release.attributes_metadata.get("editable"), generated=cluster.release.attributes_metadata.get("generated"), cluster=cluster) attributes.generate_fields() netmanager = NetworkManager() netmanager.create_network_groups(cluster.id) cluster.add_pending_changes("attributes") cluster.add_pending_changes("networks") if 'nodes' in data and data['nodes']: nodes = self.db.query(Node).filter(Node.id.in_( data['nodes'])).all() map(cluster.nodes.append, nodes) for node in nodes: self.allow_network_assignment_to_all_interfaces(node) self.assign_networks_to_main_interface(node) self.db.commit() raise web.webapi.created( json.dumps(ClusterHandler.render(cluster), indent=4))