コード例 #1
0
    def define(self, clustername=None, **kwargs):
        """Define a cluster.

            kwargs are passed to Cluster

            :returns: a cluster
            :rtype: :class:`Cluster`
            """

        clustername = clustername or Default.generate_name(
            Names.CLUSTER_COUNTER)

        # remove None to defer default definitions to later
        for k in kwargs.keys():
            if kwargs[k] is None:
                del kwargs[k]

        try:
            spec = db.select(SPECIFICATION, name=clustername,
                             type='cluster')[0]
            spec.update(kwargs)
            db.updateObj(spec)
        except IndexError:
            spec = SPECIFICATION(clustername, 'cluster', kwargs)
            db.insert(spec)

        Default.set_specification(clustername)
        Console.ok('Defined cluster {}'.format(clustername))
コード例 #2
0
    def use(self, specname):
        """Activate the given specification

        :param specname: namne of the specification
        """
        spec = db.select(SPECIFICATION, type='stack', name=specname)[0]
        Default.set_stack(spec.name)
コード例 #3
0
ファイル: test_default.py プロジェクト: arpiagariu/client
 def test_007(self):
     HEADING(" set default variable ")
     name = "myvar"
     value = "myvalue"
     cloud = self.data.cloud
     Default.set(name, value, cloud)
     assert Default.get(name=name, category=cloud) == value
コード例 #4
0
    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
コード例 #5
0
    def undefine(self, specname=None, all=False):

        specs = set()

        if all:
            for spec in db.select(SPECIFICATION, type='cluster'):
                specs.add(spec)

        try:
            spec = db.select(SPECIFICATION,
                             type='cluster',
                             name=specname or Default.active_specification)[0]
            specs.add(spec)
        except IndexError:
            pass

        for spec in specs:

            try:
                cluster = db.select(Cluster, specId=spec.cm_id)[0]
                Console.warning('Cannot undefine allocated cluster {}.'.format(
                    cluster.name))
                Console.warning('Please delete the cluster first')
                continue
            except IndexError:
                pass

            db.delete_(SPECIFICATION, cm_id=spec.cm_id)
            Console.ok('Undefined specification {}'.format(spec.name))

        try:
            spec = db.select(SPECIFICATION, type='cluster')[0]
            Default.set_specification(spec.name)
        except IndexError:
            pass
コード例 #6
0
ファイル: secgroup.py プロジェクト: cloudmesh/client
    def reset_defaults(cls):

        #secgroup = "{}-default".format(Default.user)
        secgroup = "default"
        Default.set_secgroup(secgroup)

        # nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
        SecGroup.add_rule_to_db(group=secgroup,
                                name="ssh",
                                from_port="22",
                                to_port="22",
                                protocol="tcp",
                                cidr="0.0.0.0/0")
        SecGroup.add_rule_to_db(group=secgroup,
                                name="http",
                                from_port="80",
                                to_port="80",
                                protocol="tcp",
                                cidr="0.0.0.0/0")
        SecGroup.add_rule_to_db(group=secgroup,
                                name="https",
                                from_port="443",
                                to_port="443",
                                protocol="tcp",
                                cidr="0.0.0.0/0")
        SecGroup.add_rule_to_db(group=secgroup,
                                name="icmp",
                                from_port="-1",
                                to_port="-1",
                                protocol="icmp",
                                cidr="0.0.0.0/0")
コード例 #7
0
ファイル: LogUtil.py プロジェクト: jemitchell/client
    def set_level(log_level):
        """
        sets th eloglevel in the database and the loglevel file from
        cloudmesh.yaml
        :param log_level: the loglevel
        :return:
        """
        # TODO: BUG: This seems inconsistent with our use as it mixes db and
        # cloudmesh.yaml.
        level = log_level.upper()

        Default.set(key=LogUtil.LOG_LEVEL_KEY,
                    value=log_level,
                    category=LogUtil.category)

        # get log level obj
        log_level_obj = LogUtil.get_level_obj(log_level)

        # Read the ConfigDict
        config = ConfigDict("cloudmesh.yaml")
        log_file = config["cloudmesh"]["logging"]["file"]

        # Set the logger config
        logging.basicConfig(format=LogUtil.FORMAT,
                            level=log_level_obj,
                            filename=path_expand(log_file))

        LOGGER.info("Set log level to: " + log_level)
        return "Ok."
コード例 #8
0
ファイル: ClusterCommand2.py プロジェクト: cloudmesh/client
    def undefine(self, specname=None, all=False):

        specs = set()

        if all:
            for spec in db.select(SPECIFICATION, type='cluster'):
                specs.add(spec)


        try:
            spec = db.select(SPECIFICATION, type='cluster', name=specname or Default.active_specification)[0]
            specs.add(spec)
        except IndexError:
            pass

        for spec in specs:

            try:
                cluster = db.select(Cluster, specId=spec.cm_id)[0]
                Console.warning('Cannot undefine allocated cluster {}.'.format(cluster.name))
                Console.warning('Please delete the cluster first')
                continue
            except IndexError:
                pass

            db.delete_(SPECIFICATION, cm_id = spec.cm_id)
            Console.ok('Undefined specification {}'.format(spec.name))

        try:
            spec = db.select(SPECIFICATION, type='cluster')[0]
            Default.set_specification(spec.name)
        except IndexError:
            pass
コード例 #9
0
 def test_007(self):
     HEADING(" set default variable ")
     name = "myvar"
     value = "myvalue"
     cloud = self.data.cloud
     Default.set(name, value, cloud)
     assert Default.get(name=name, category=cloud) == value
コード例 #10
0
    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))
コード例 #11
0
ファイル: vm.py プロジェクト: jemitchell/client
    def refresh(cls, **kwargs):
        # print("Inside refresh")

        refreshed = cls.cm.refresh("vm", kwargs["cloud"])

        # update counter
        vms = cls.cm.find(kind='vm')
        me = Default.user
        for vm in vms:
            name = vm['name']
            if not name.startswith(me):
                continue

            number = name.split('-')[-1]

            try:
                # +1 as the stored counter is the next available counter
                new_counter = int(number) + 1
            except ValueError:
                # name is not formatted correctly, possibly due to not
                # being started using cloudmesh
                continue

            old_counter = Default.get_counter(Names.VM_COUNTER)
            counter = max(new_counter, old_counter)
            Default.set_counter(Names.VM_COUNTER, counter)

        Console.debug_msg('Set counter ' + Names.VM_COUNTER + ' to ' +
                          str(Default.get_counter(Names.VM_COUNTER)))

        return refreshed
コード例 #12
0
ファイル: ClusterCommand2.py プロジェクト: cloudmesh/client
    def define(self, clustername=None, **kwargs):
            """Define a cluster.

            kwargs are passed to Cluster

            :returns: a cluster
            :rtype: :class:`Cluster`
            """

            clustername = clustername or Default.generate_name(Names.CLUSTER_COUNTER)

            # remove None to defer default definitions to later
            for k in kwargs.keys():
                if kwargs[k] is None:
                    del kwargs[k]

            try:
                spec = db.select(SPECIFICATION, name=clustername, type='cluster')[0]
                spec.update(kwargs)
                db.updateObj(spec)
            except IndexError:
                spec = SPECIFICATION(clustername, 'cluster', kwargs)
                db.insert(spec)

            Default.set_specification(clustername)
            Console.ok('Defined cluster {}'.format(clustername))
コード例 #13
0
ファイル: secgroup.py プロジェクト: ashwinir20/client
    def reset_defaults(cls):

        secgroup = "{}-default".format(Default.user)
        Default.set_secgroup(secgroup)

        # nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
        SecGroup.add_rule_to_db(group=secgroup,
                                name="ssh",
                                from_port="22",
                                to_port="22",
                                protocol="tcp",
                                cidr="0.0.0.0/0")
        SecGroup.add_rule_to_db(group=secgroup,
                                name="http",
                                from_port="80",
                                to_port="80",
                                protocol="tcp",
                                cidr="0.0.0.0/0")
        SecGroup.add_rule_to_db(group=secgroup,
                                name="https",
                                from_port="443",
                                to_port="443",
                                protocol="tcp",
                                cidr="0.0.0.0/0")
        SecGroup.add_rule_to_db(group=secgroup,
                                name="icmp",
                                from_port="-1",
                                to_port="-1",
                                protocol="icmp",
                                cidr="0.0.0.0/0")
コード例 #14
0
    def define(self, name=None, **kwargs):
        """Define a hadoop stack.

            """

        stackname = name or Default.generate_name(Names.STACK_COUNTER)

        # remove None to defer default definitions to latter
        for k in kwargs.keys():
            if kwargs[k] is None:
                del kwargs[k]

        kwargs['local_path'] = os.path.join(
            os.path.expanduser('~/.cloudmesh/stacks'), stackname)

        try:
            spec = db.select(SPECIFICATION, name=stackname, type='stack')[0]
            spec.update(kwargs)
            db.updateObj(spec)
        except IndexError:
            spec = SPECIFICATION(stackname, 'stack', kwargs)
            db.insert(spec)

        Default.set_stack(stackname)
        Console.ok('Defined stack {}'.format(stackname))
コード例 #15
0
ファイル: RefreshCommand.py プロジェクト: jemitchell/client
    def do_refresh(self, args, arguments):
        """
        ::

            Usage:
                refresh on
                refresh off
                refresh [list]

                switches on and off the refresh for clouds

        """
        if arguments["on"]:
            Default.set_refresh(True)
            Console.ok("Switch refresh on")
        elif arguments["off"]:
            Default.set_refresh(False)
            Console.ok("Switch refresh off")
        else:
            refresh = Default.refresh
            if refresh:
                msg = "on"
            else:
                msg = "off"
            Console.ok("Automatic cloud refresh is switched {}".format(msg))

        return ""
コード例 #16
0
ファイル: ClusterCommand2.py プロジェクト: cloudmesh/client
    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))
コード例 #17
0
ファイル: vm.py プロジェクト: cloudmesh/client
    def refresh(cls, **kwargs):
        # print("Inside refresh")

        refreshed = cls.cm.refresh("vm", kwargs["cloud"])

        # update counter
        vms = cls.cm.find(kind='vm')
        me  = Default.user
        for vm in vms:
            name = vm['name']
            if not name.startswith(me):
                continue

            number = name.split('-')[-1]

            try:
                # +1 as the stored counter is the next available counter
                new_counter = int(number) + 1
            except ValueError:
                # name is not formatted correctly, possibly due to not
                # being started using cloudmesh
                continue

            old_counter = Default.get_counter(Names.VM_COUNTER)
            counter = max(new_counter, old_counter)
            Default.set_counter(Names.VM_COUNTER, counter)

        Console.debug_msg('Set counter ' + Names.VM_COUNTER + ' to ' +
                          str(Default.get_counter(Names.VM_COUNTER)))

        return refreshed
コード例 #18
0
ファイル: mesh.py プロジェクト: cloudmesh/client-deprecated
    def boot(self, cloud=None, image=None, flavor=None, key=None,  arguments=None):
        """
        Boots the image on a specified cloud

        :param image: The name of the image
        :type image: str
        :param flavor: The name of the flavor
        :type flavor: str
        :param key: The name of the key
        :type key: str
        :param cloud: The name of the cloud
        :type cloud: str
        :param arguments: An array of arguments
        :type arguments: list of str
        :return: the id of the vm
        :rtype: str
        """
        if cloud is None:
            cloud =  Default.get("cloud", "general")
            print("get default cloud: " + str(cloud))
        if image is None:
            image =  Default.get("image", cloud)
            print("get default image ", str(image))
        if flavor is None:
            flavor =  Default.get("flavor", cloud)
            print("get default flavor ", str(flavor))
        if key is None:
            key =  Default.get("key", str(cloud))
            print("get default key ", str(key))

        # command_key

        print("boot an image", image, flavor, key, cloud, arguments)
        pass
コード例 #19
0
    def do_image(self, args, arguments):
        """
        ::

            Usage:
                image refresh [--cloud=CLOUD]
                image list [ID] [--cloud=CLOUD] [--format=FORMAT] [--refresh]

                This lists out the images present for a cloud

            Options:
               --format=FORMAT  the output format [default: table]
               --cloud=CLOUD    the cloud name
               --refresh        live data taken from the cloud

            Examples:
                cm image refresh
                cm image list
                cm image list --format=csv
                cm image list 58c9552c-8d93-42c0-9dea-5f48d90a3188 --refresh

        """
        cloud = arguments["--cloud"] or Default.get_cloud()
        if cloud is None:
            Console.error("Default cloud doesn't exist")
            return

        if arguments["refresh"] or Default.refresh():
            msg = "Refresh image for cloud {:}.".format(cloud)
            if Image.refresh(cloud):
                Console.ok("{:} ok.".format(msg))
            else:
                Console.error("{:} failed.".format(msg))
                return ""

        if arguments["list"]:
            id = arguments['ID']
            live = arguments['--refresh']
            output_format = arguments["--format"]

            counter = 0

            result = None
            while counter < 2:
                if id is None:
                    result = Image.list(cloud, output_format)
                else:
                    result = Image.details(cloud, id, live, output_format)
                if counter == 0 and result is None:
                    if not Image.refresh(cloud):
                        msg = "Refresh image for cloud {:}.".format(cloud)
                        Console.error("{:} failed.".format(msg))
                counter += 1

            if result is None:
                Console.error("No image(s) found. Failed.")
            else:
                print(result)
            return ""
コード例 #20
0
ファイル: ClusterCommand2.py プロジェクト: cloudmesh/client
    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)
コード例 #21
0
 def test_001(self):
     """
     delete defaults
     :return:
     """
     HEADING()
     Default.clear()
     assert Default.list() == None
コード例 #22
0
ファイル: DebugCommand.py プロジェクト: sohiljain/client
 def __init__(self, context):
     self.context = context
     if self.context.debug:
         print("init command debug")
     try:
         value = Default.get_debug()
     except:
         Default.set_debug("off")
コード例 #23
0
ファイル: test_default.py プロジェクト: sohiljain/client
 def test_001(self):
     """
     delete defaults
     :return:
     """
     HEADING()
     Default.clear()
     assert Default.list() == None
コード例 #24
0
ファイル: RefreshCommand.py プロジェクト: alistairking/client
 def __init__(self, context):
     self.context = context
     if self.context.debug:
         print("init command refresh")
     try:
         value = Default.get_refresh()
     except:
         Default.set_refresh("off")
コード例 #25
0
ファイル: test_default.py プロジェクト: sohiljain/client
    def test_999(self):
        """
        clear the defaults
        :return:
        """
        HEADING()

        Default.clear()
        assert True
コード例 #26
0
    def test_999(self):
        """
        clear the defaults
        :return:
        """
        HEADING()

        Default.clear()
        assert True
コード例 #27
0
 def test_004(self):
     """
     set default flavor
     :return:
     """
     HEADING()
     name = "myflavor"
     Default.set_flavor(name, "mycloud")
     assert Default.get_flavor("mycloud") == name
     self._check(name)
コード例 #28
0
 def test_006(self):
     """
     set default key
     :return:
     """
     HEADING()
     name = "mygroup"
     Default.set_group(name)
     assert Default.get_group() == name
     self._check(name)
コード例 #29
0
 def test_005(self):
     """
     set default key
     :return:
     """
     HEADING()
     name = "mykey"
     Default.set_key(name)
     assert Default.get_key() == name
     self._check(name)
コード例 #30
0
ファイル: test_default.py プロジェクト: sohiljain/client
 def test_006(self):
     """
     set default key
     :return:
     """
     HEADING()
     name = "mygroup"
     Default.set_group(name)
     assert Default.get_group() == name
     self._check(name)
コード例 #31
0
ファイル: test_default.py プロジェクト: sohiljain/client
 def test_003(self):
     """
     set default image
     :return:
     """
     HEADING()
     name = "myimage"
     Default.set_image(name, "mycloud")
     assert Default.get_image("mycloud") == name
     self._check(name)
コード例 #32
0
ファイル: test_default.py プロジェクト: sohiljain/client
 def test_004(self):
     """
     set default flavor
     :return:
     """
     HEADING()
     name = "myflavor"
     Default.set_flavor(name, "mycloud")
     assert Default.get_flavor("mycloud") == name
     self._check(name)
コード例 #33
0
ファイル: test_default.py プロジェクト: sohiljain/client
 def test_005(self):
     """
     set default key
     :return:
     """
     HEADING()
     name = "mykey"
     Default.set_key(name)
     assert Default.get_key() == name
     self._check(name)
コード例 #34
0
    def test_003(self):
        HEADING("set default image")
        name = self.data.image

        print(self.data)
        Default.set_image(name, self.data.cloud)

        print(Default.get(name=name, category=self.data.cloud))

        assert Default.get(name="image", category=self.data.cloud) == name
コード例 #35
0
 def test_003(self):
     """
     set default image
     :return:
     """
     HEADING()
     name = "myimage"
     Default.set_image(name, "mycloud")
     assert Default.get_image("mycloud") == name
     self._check(name)
コード例 #36
0
ファイル: test_default.py プロジェクト: arpiagariu/client
    def test_003(self):
        HEADING("set default image")
        name = self.data.image

        print(self.data)
        Default.set_image(name, self.data.cloud)

        print(Default.get(name=name, category=self.data.cloud))

        assert Default.get(name="image", category=self.data.cloud) == name
コード例 #37
0
def boot_from_args(arg):
    arg.username = arg.username or Image.guess_username(arg.image)
    is_name_provided = arg.name is not None

    arg.user = Default.user

    for index in range(0, arg.count):
        vm_details = dotdict({
            "cloud": arg.cloud,
            "name": Vm.get_vm_name(arg.name, index),
            "image": arg.image,
            "flavor": arg.flavor,
            "key": arg.key,
            "secgroup": arg.secgroup,
            "group": arg.group,
            "username": arg.username,
            "user": arg.user
        })
        # correct the username
        vm_details.username = Image.guess_username_from_category(
            vm_details.cloud,
            vm_details.image,
            username=arg.username)
        try:

            if arg.dryrun:
                print(Printer.attribute(vm_details, output=arg.format))
                msg = "dryrun info. OK."
                Console.ok(msg)
            else:
                vm_id = Vm.boot(**vm_details)

                if vm_id is None:
                    msg = "info. failed."
                    Console.error(msg, traceflag=False)
                    return ""

                # set name and counter in defaults
                Default.set_vm(value=vm_details.name)
                if is_name_provided is False:
                    Default.incr_counter("name")

                # Add to group
                if vm_id is not None:
                    Group.add(name=vm_details.group,
                              species="vm",
                              member=vm_details.name,
                              category=vm_details.cloud)

                msg = "info. OK."
                Console.ok(msg)

        except Exception as e:
            Console.error("Problem booting instance {name}".format(**vm_details), traceflag=False)
コード例 #38
0
def boot_from_args(arg):
    arg.username = arg.username or Image.guess_username(arg.image)
    is_name_provided = arg.name is not None

    arg.user = Default.user

    for index in range(0, arg.count):
        vm_details = dotdict({
            "cloud": arg.cloud,
            "name": Vm.generate_vm_name(arg.name, index),
            "image": arg.image,
            "flavor": arg.flavor,
            "key": arg.key,
            "secgroup": arg.secgroup,
            "group": arg.group,
            "username": arg.username,
            "user": arg.user
        })
        # correct the username
        vm_details.username = Image.guess_username_from_category(
            vm_details.cloud, vm_details.image, username=arg.username)
        try:

            if arg.dryrun:
                print(Printer.attribute(vm_details, output=arg.format))
                msg = "dryrun info. OK."
                Console.ok(msg)
            else:
                vm_id = Vm.boot(**vm_details)

                if vm_id is None:
                    msg = "info. failed."
                    Console.error(msg, traceflag=False)
                    return ""

                # set name and counter in defaults
                Default.set_vm(value=vm_details.name)
                if is_name_provided is False:
                    Default.incr_counter("name")

                # Add to group
                if vm_id is not None:
                    Group.add(name=vm_details.group,
                              species="vm",
                              member=vm_details.name,
                              category=vm_details.cloud)

                msg = "info. OK."
                Console.ok(msg)

        except Exception as e:
            Console.error(
                "Problem booting instance {name}".format(**vm_details),
                traceflag=False)
コード例 #39
0
ファイル: test_default.py プロジェクト: sohiljain/client
 def test_007(self):
     """
     set default variable
     :return:
     """
     HEADING()
     name = "myvar"
     value = "myvalue"
     cloud = "mycloud"
     Default.set(name, value, cloud)
     assert Default.get(name, cloud) == value
     self._check(value)
コード例 #40
0
 def test_007(self):
     """
     set default variable
     :return:
     """
     HEADING()
     name = "myvar"
     value = "myvalue"
     cloud = "mycloud"
     Default.set(name, value, cloud)
     assert Default.get(name, cloud) == value
     self._check(value)
コード例 #41
0
ファイル: InfoCommand.py プロジェクト: jemitchell/client
    def do_info(self, args, arguments):
        """
        ::

            Usage:
                info [--cloud=CLOUD] [--format=FORMAT]

            Options:
               --format=FORMAT  the output format [default: table]
               --cloud=CLOUD    the cloud name

            Examples:
                cm info

        """
        arg = dotdict(arguments)
        arg.cloud = arguments["--cloud"] or Default.cloud
        arg.FORMAT = arguments["--format"] or "table"

        d = {
            "cloud": arg.cloud,
            "key": Default.key,
            "user": Default.user,
            "vm": Default.vm,
            "group": Default.group,
            "secgroup": Default.secgroup,
            "counter": Default.get_counter(name="name"),
            "image": Default.get_image(category=arg.cloud),
            "flavor": Default.get_flavor(category=arg.cloud),
            "refresh": str(Default.refresh),
            "debug": str(Default.debug),
            "interactive": str(Default.interactive),
            "purge": str(Default.purge),
        }
        order = [
            "cloud", "key", "user", "vm", "group", "secgroup", "counter",
            "image", "flavor", "refresh", "debug", "interactive", "purge"
        ]
        print(
            Printer.attribute(d,
                              order=order,
                              output=arg.FORMAT,
                              sort_keys=False))

        if d["key"] in ["TBD", ""] or d["user"] in ["TBD", ""]:
            msg = "Please replace the TBD values"
            msg = msg + "\nSee Also: \n\n" \
                  + "    cm register profile \n" \
                  + "    cm default user=YOURUSERNAME\n"
            Console.error(msg, traceflag=False)
        return ""
コード例 #42
0
ファイル: test_database.py プロジェクト: jemitchell/client
    def test_004(self):
        print(Printer.write(self.cm.info()))

        m = Default.set_counter("index", 2)
        self.cm.add(m)

        o = Default.get_counter('index')
        print("OOO", o)

        Default.set_counter("index", 0)

        for i in range(0, 10):
            Default.incr_counter("index")

        print(Printer.write(self.cm.info()))

        c = self.cm.all(kind="default")

        print(Printer.write(c, order=['name', 'value', 'provider', 'type']))

        print(Default.get_counter(name="index"))

        i = Default.get(name="index")
        assert type(i) == int
        assert i == 10

        i = Default.index
        assert type(i) == int
        assert i == 10
コード例 #43
0
def cloudmesh_cloud(request, cloud=None):
    if cloud is None:
        cloud = Default.get_cloud()
    config = ConfigDict(filename="cloudmesh.yaml")
    cloud_config = dict(config["cloudmesh.clouds"][cloud])
    active = cloud in config["cloudmesh.active"]
    default = Default.get_cloud()

    if 'OS_PASSWORD' in cloud_config['credentials']:
        cloud_config['credentials']['OS_PASSWORD'] = '******'
    context = {
        'data': cloud_config,
        'title': "Cloud {cm_heading}".format(**cloud_config),
    }
    return render(request, 'cloudmesh_portal/cm/cloud_table.jinja', context)
コード例 #44
0
    def do_quota(self, args, arguments):
        """
        ::

            Usage:
                quota list [--cloud=CLOUD] [--tenant=TENANT] [--format=FORMAT]

                Prints quota limit on a current project/tenant

            Options:
               --format=FORMAT  the output format [default: table]
               --cloud=CLOUD    the cloud name
               --tenant=TENANT  the tenant id

            Examples:
                cm quota list
                cm quota list --cloud=india --format=csv

        """
        if arguments["list"]:
            cloud = arguments["--cloud"] or Default.get_cloud()

            if not cloud:
                Console.error("Default cloud doesn't exist")
                return
            tenant = arguments["--tenant"]
            output_format = arguments["--format"]
            list_quotas = Quota.list(cloud, tenant, output=output_format)
            Console.msg(list_quotas)
            return
コード例 #45
0
ファイル: views.py プロジェクト: ashwinir20/portal
def cloudmesh_refresh(request, action=None, cloud=None):
    if action is None:
        action = ['image', 'flavor', 'vm']
    else:
        action = [action]

    if cloud is None:
        cloud = Default.get_cloud()
        # TODO: should actually be all active clouds

    data = Vm.list(cloud=cloud, output_format='dict')
    print json.dumps(data, indent=4)
    order = ['id',
             'uuid',
             'label',
             'status',
             'static_ip',
             'floating_ip',
             'key_name',
             'project',
             'user',
             'cloud']
    return dict_table(request,
                      title="Cloudmesh VMs {}".format(cloud),
                      data=data, order=order)
コード例 #46
0
ファイル: LimitsCommand.py プロジェクト: sohiljain/client
    def do_limits(self, args, arguments):
        """
        ::

            Usage:
                limits list [--cloud=CLOUD] [--tenant=TENANT] [--format=FORMAT]

                Current list data with limits on a selected project/tenant.
                The --tenant option can be used by admin only

            Options:
               --format=FORMAT  the output format [default: table]
               --cloud=CLOUD    the cloud name
               --tenant=TENANT  the tenant name

            Examples:
                cm limits list
                cm limits list --cloud=kilo --format=csv

        """
        if arguments["list"]:
            cloud = arguments["--cloud"] or Default.get_cloud()

            if not cloud:
                Console.error("cloud doesn't exist")
                return ""

            output_format = arguments["--format"]
            tenant = arguments["--tenant"]
            result = Limits.list(cloud,
                                 output=output_format,
                                 tenant=tenant)
            Console.msg(result)
            return ""
コード例 #47
0
ファイル: QuotaCommand.py プロジェクト: alistairking/client
    def do_quota(self, args, arguments):
        """
        ::

            Usage:
                quota list [--cloud=CLOUD] [--tenant=TENANT] [--format=FORMAT]

                Prints quota limit on a current project/tenant

            Options:
               --format=FORMAT  the output format [default: table]
               --cloud=CLOUD    the cloud name
               --tenant=TENANT  the tenant id

            Examples:
                cm quota list
                cm quota list --cloud=india --format=csv

        """
        if arguments["list"]:
            cloud = arguments["--cloud"] or Default.get_cloud()

            if not cloud:
                Console.error("Default cloud doesn't exist")
                return
            tenant = arguments["--tenant"]
            output_format = arguments["--format"]
            list_quotas = Quota.list(cloud,
                                     tenant,
                                     output=output_format)
            Console.msg(list_quotas)
            return
コード例 #48
0
ファイル: group.py プロジェクト: alistairking/client
    def get_info(cls, category="kilo", name=None, output="table"):
        """
        Method to get info about a group
        :param cloud:
        :param name:
        :param output:
        :return:
        """
        try:
            cloud = category or Default.get("cloud")
            args = {
                "name": name,
                "category": category
            }

            # group = cls.get(name=name, category=cloud)
            group = cls.cm.find("group", output="object", **args).first()

            if group is not None:
                d = cls.to_dict(group)
                # Transform the dict to show multiple rows per vm
                newdict = Group.transform_dict(d)
            else:
                return None

            return dict_printer(newdict,
                                order=cls.order,
                                output=output)
        except Exception as ex:
            Console.error(ex.message, ex)
コード例 #49
0
ファイル: vmname.py プロジェクト: jemitchell/client
    def get(prefix=None, idx=None, user=None):
        """Return a vm name to use next time. prefix or index can be
        given to update a vm name (optional)

        Args:
            prefix (str, optional): the name of prefix
            idx (int, str, optional): the index to increment. This can be a
            digit or arithmetic e.g. +5 or -3 can be used

        """
        user = user or ConfigDict("cloudmesh.yaml")["cloudmesh.profile.user"]
        prefix = prefix or user
        if type(idx) is not int:
            idx = int(idx)
        Default.set('index', idx)
        return "%{:}_%{:}".format()
コード例 #50
0
ファイル: views.py プロジェクト: cloudmesh/portal
def cloudmesh_defaults(request):
    data = json.loads(Default.list(output='json'))

    print("RESULT DEFAULT",data)

    order = [
        'category',
        'name',
        'value',
        'project',
        'user',
    ]
    header = [
        'Category',
        'Variable',
        'Value',
        'Project',
        'User',
    ]

    return (dict_table(request,
                       title="Cloudmesh Default",
                       data=data,
                       header=header,
                       order=order))
コード例 #51
0
ファイル: CheckCommand.py プロジェクト: sohiljain/client
    def do_check(self, args, arguments):
        """
        ::

            Usage:
                check --cloud=CLOUD
                check

                checks some elementary setting for cloudmesh

            Options:
               --format=FORMAT  the output format [default: table]
               --cloud=CLOUD    the cloud name

            Examples:
                cm check
                cm check --cloud=kilo

        """
        cloud = arguments["--cloud"] or Default.get_cloud()

        if cloud is None:
            Console.error("Default cloud doesn't exist")

        print(locals())

        Console.ok("{:} ok".format(cloud))

        return ""
コード例 #52
0
ファイル: InfoCommand.py プロジェクト: cloudmesh/client
    def do_info(self, args, arguments):
        """
        ::

            Usage:
                info [--cloud=CLOUD] [--format=FORMAT]

            Options:
               --format=FORMAT  the output format [default: table]
               --cloud=CLOUD    the cloud name

            Examples:
                cm info

        """
        arg = dotdict(arguments)
        arg.cloud = arguments["--cloud"] or Default.cloud
        arg.FORMAT = arguments["--format"] or "table"

        d = {
            "cloud": arg.cloud,
            "key": Default.key,
            "user": Default.user,
            "vm": Default.vm,
            "group": Default.group,
            "secgroup": Default.secgroup,
            "counter": Default.get_counter(name="name"),
            "image": Default.get_image(category=arg.cloud),
            "flavor": Default.get_flavor(category=arg.cloud),
            "refresh": str(Default.refresh),
            "debug": str(Default.debug),
            "interactive": str(Default.interactive),
            "purge": str(Default.purge),

        }
        order = ["cloud", "key", "user", "vm", "group", "secgroup",
                 "counter", "image", "flavor", "refresh", "debug", "interactive", "purge"]
        print(Printer.attribute(d, order=order, output=arg.FORMAT, sort_keys=False))

        if d["key"] in ["TBD", ""] or d["user"] in ["TBD", ""]:
            msg = "Please replace the TBD values"
            msg = msg + "\nSee Also: \n\n" \
                  + "    cm register profile \n" \
                  + "    cm default user=YOURUSERNAME\n"
            Console.error(msg, traceflag=False)
        return ""
コード例 #53
0
ファイル: views.py プロジェクト: ashwinir20/portal
def cloudmesh_cloud(request, cloud=None):
    if cloud is None:
        cloud = Default.get_cloud()
    config = ConfigDict(filename="cloudmesh.yaml")
    cloud_config = dict(config["cloudmesh.clouds"][cloud])
    active = cloud in config["cloudmesh.active"]
    default = Default.get_cloud()

    if 'OS_PASSWORD' in cloud_config['credentials']:
        cloud_config['credentials']['OS_PASSWORD'] = '******'
    context = {
        'data': cloud_config,
        'title': "Cloud {cm_heading}".format(**cloud_config),
    }
    return render(request,
                  'cloudmesh_portal/cm/cloud_table.jinja',
                  context)
コード例 #54
0
ファイル: LogLevelCommand.py プロジェクト: sohiljain/client
    def do_loglevel(self, args, arguments):
        """
        ::

            Usage:
                loglevel set MODE [--cloud=CLOUD]
                loglevel get [--cloud=CLOUD]
                loglevel save [--cloud=CLOUD]

            Arguments:
                MODE    log level mode [DEBUG/INFO/WARNING/CRITICAL/ERROR]

            Options:
                --cloud=CLOUD    the name of the cloud

        Description:
            loglevel command sets the default logging level
            for a cloud.

        Examples:
            loglevel set DEBUG --cloud=kilo
                sets the default log level to DEBUG for kilo.

            loglevel get --cloud=kilo
                retreives the default log level for kilo cloud.

            loglevel save --cloud=kilo
                saves the log level preference to the db & yaml file.

        """
        # pprint(arguments)

        cloud = arguments["--cloud"] or Default.get_cloud()
        LOGGER.info("Cloud: " + cloud + ", Arguments: " + str(arguments))

        if arguments["set"]:
            try:
                log_level = arguments["MODE"]
                response = LogUtil.set_level(log_level=log_level,
                                             cloudname=cloud)

                if response is not None:
                    Console.ok(response)
            except Exception as ex:
                Console.error(ex.message, ex)

        elif arguments["get"]:
            try:
                log_level = LogUtil.get_level(cloudname=cloud)
                Console.ok("Current Log Level = " + log_level + ". Ok.")
            except Exception as ex:
                Console.error(ex.message, ex)

        elif arguments["save"]:
            LogUtil.save(cloudname=cloud)
            pass