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))
    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)