def create_cluster(self, api=True, exclude=None, **kwargs): cluster_data = {'name': 'cluster-api-' + str(randint(0, 1000000))} if api: cluster_data['release'] = self.create_release(api=False).id else: cluster_data['release'] = self.create_release(api=False) if kwargs: cluster_data.update(kwargs) if exclude and isinstance(exclude, list): for ex in exclude: try: del cluster_data[ex] except KeyError as err: logging.warning(err) if api: resp = self.app.post(reverse('ClusterCollectionHandler'), json.dumps(cluster_data), headers=self.default_headers) self.tester.assertEquals(resp.status, 201) cluster = json.loads(resp.body) self.clusters.append(self.db.query(Cluster).get(cluster['id'])) else: cluster = Cluster() for field, value in cluster_data.iteritems(): setattr(cluster, field, value) self.db.add(cluster) self.db.commit() self.clusters.append(cluster) return cluster
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 ))