def delete(self, clusternames=None, force=False, all=False): """Delete clusters that have these names. If not specified, delete the active cluster. If there is no active cluster, delete the first cluster. :param list clusternames: list of cluster names to delete """ if all: clusters = db.select(Cluster) else: clusternames = clusternames or [Default.cluster] clusters = [db.select(Cluster, name=name).one() for name in clusternames] for cluster in clusters: Console.ok('Deleting cluster {}'.format(cluster.name)) cluster.delete(force=force) Console.ok('Deleted cluster {}: {} nodes' .format(cluster.name, cluster.count)) remaining_clusters = db.select(Cluster).all() if remaining_clusters: name = remaining_clusters[-1].name else: name = None Default.set_cluster(name) Console.ok('Active cluster: {}'.format(name))
def delete(self, clusternames=None, force=False, all=False): """Delete clusters that have these names. If not specified, delete the active cluster. If there is no active cluster, delete the first cluster. :param list clusternames: list of cluster names to delete """ if all: clusters = db.select(Cluster) else: clusternames = clusternames or [Default.cluster] clusters = [ db.select(Cluster, name=name).one() for name in clusternames ] for cluster in clusters: Console.ok('Deleting cluster {}'.format(cluster.name)) cluster.delete(force=force) Console.ok('Deleted cluster {}: {} nodes'.format( cluster.name, cluster.count)) remaining_clusters = db.select(Cluster).all() if remaining_clusters: name = remaining_clusters[-1].name else: name = None Default.set_cluster(name) Console.ok('Active cluster: {}'.format(name))
def allocate(self, clustername=None): specname = clustername or Default.active_specification try: spec = db.select(SPECIFICATION, name=specname)[0] except IndexError: Console.error( 'No specification with name={} found'.format(specname)) return 1 defns = spec.get() try: cluster = db.select(Cluster, name=spec.name, specId=spec.cm_id)[0] except IndexError: cluster = Cluster(name=spec.name, specId=spec.cm_id, **defns) Default.set_cluster(cluster.name) Console.ok('Cluster {} is now active'.format(cluster.name)) cluster.create() Console.ok('Cluster {} created'.format(cluster.name)) return cluster
def use(self, specname): """Activate the given specification :param specname: namne of the specification """ spec = db.select(SPECIFICATION, type='cluster', name=specname)[0] Default.set_specification(spec.name) Default.set_cluster(spec.name)
def allocate(self, clustername=None): specname = clustername or Default.active_specification try: spec = db.select(SPECIFICATION, name=specname)[0] except IndexError: Console.error('No specification with name={} found'.format(specname)) return 1 defns = spec.get() try: cluster = db.select(Cluster, name=spec.name, specId=spec.cm_id)[0] except IndexError: cluster = Cluster(name=spec.name, specId=spec.cm_id, **defns) Default.set_cluster(cluster.name) Console.ok('Cluster {} is now active'.format(cluster.name)) cluster.create() Console.ok('Cluster {} created'.format(cluster.name)) return cluster
def create(self, clustername=None, cloud=None, count=1, username=None, image=None, flavor=None, key=None, secgroup=None, assignFloatingIP=True, activate=True): """Create a cluster. If values are `None`, they are automatically determined via defaults. :param str clustername: name of this cluster (generated if None) :param str cloud: cloud name :param int count: number of instances in the cluster :param str user: cloudmesh user :param str username: cloud image username :param str image: image name :param str flavor: instance flavor :param str key: key name :param str secgroup: security group name :param bool activate: activate this cluster after creation :returns: a cluster :rtype: :class:`Cluster` """ clustername = clustername or Default.generate_name( Names.CLUSTER_COUNTER) cloud = cloud or Default.cloud username = username or Image.guess_username(image) image = image or Default.image flavor = flavor or Default.flavor key = key or Default.key secgroup = secgroup or Default.secgroup try: cluster = Cluster( name=clustername, count=count, cloud=cloud, username=username, image=image, flavor=flavor, key=key, secgroup=secgroup, assignFloatingIP=assignFloatingIP, ) except ClusterNameClashException as e: Console.error(str(e)) raise UnrecoverableErrorException(str(e)) cluster.create() Console.ok('Cluster {} created'.format(clustername)) if activate: Default.set_cluster(clustername) Console.ok('Cluster {} is now active'.format(clustername)) return cluster