コード例 #1
0
    def load_deploy(self):
        """
        Loads the deployment map
        :raises IOError: if can't read map
        """
        logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
        if not self.deploy_file:
            raise AssertionError

        try:
            self.update_template_vars()
            self.deploy_dataset = DataSet(self.deploy_file,
                                          additional_template_vars=self.template_vars)
            logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
            logobj(self.deploy_dataset.content)
            self.deploy = DotMap(self.deploy_dataset.content)
            logobj(self.deploy)
            self.update_template_vars()

        except IOError as e:
            logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name + ': ' + repr(e))
            # must be a new install or else we don't have permissions.

        autonames_dataset = DataSet(self.autonames_file, additional_template_vars=self.template_vars)
        autonames = DotMap(autonames_dataset.content)
        self.config.update(autonames)

        caches_dataset = DataSet(self.caches_file, additional_template_vars=self.template_vars)
        caches = DotMap(caches_dataset.content)
        self.config.update(caches)
コード例 #2
0
 def __init__(self, head_text=None, foot_text=None, **kwargs):
     logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
     logobj(foot_text)
     logobj(head_text)
     # Tab background
     body = urwid.AttrMap(urwid.SolidFill(fill_char=' '), 'bg')
     StyledFrame.__init__(self, StyledFrame(body=body, foot_text=foot_text, head_text=head_text, **kwargs), **kwargs)
コード例 #3
0
 def __init__(self, body, foot_text=None, head_text=None, **kwargs):
     logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
     logobj(foot_text)
     logobj(head_text)
     footer = urwid.Text(' ' + foot_text, align='center')
     footer = urwid.AttrWrap(footer, 'footer')
     header = urwid.Text(' ' + head_text, align='center')
     header = urwid.AttrWrap(header, 'header')
     urwid.Frame.__init__(self, body=body, footer=footer, header=header, **kwargs)
コード例 #4
0
 def __init__(self, head_text=None, foot_text=None, **kwargs):
     logging.debug(self.__class__.__name__ + ': ' +
                   sys._getframe().f_code.co_name)
     logobj(foot_text)
     logobj(head_text)
     # Tab background
     body = urwid.AttrMap(urwid.SolidFill(fill_char=' '), 'bg')
     StyledFrame.__init__(
         self,
         StyledFrame(body=body,
                     foot_text=foot_text,
                     head_text=head_text,
                     **kwargs), **kwargs)
コード例 #5
0
 def __init__(self, body, foot_text=None, head_text=None, **kwargs):
     logging.debug(self.__class__.__name__ + ': ' +
                   sys._getframe().f_code.co_name)
     logobj(foot_text)
     logobj(head_text)
     footer = urwid.Text(' ' + foot_text, align='center')
     footer = urwid.AttrWrap(footer, 'footer')
     header = urwid.Text(' ' + head_text, align='center')
     header = urwid.AttrWrap(header, 'header')
     urwid.Frame.__init__(self,
                          body=body,
                          footer=footer,
                          header=header,
                          **kwargs)
コード例 #6
0
 def get_attr(self, map_type, key=None, name=None):
     """
     Access common patterns within the ECSConf object
     """
     logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
     logobj(map_type)
     logobj(key)
     logobj(name)
     try:
         # If only map_type provided, return the data at map_type in the yaml tree
         if key is None and name is None:
             return self.deploy.facts[map_type]
         # If map_type and key are provided, return the data at key of map_type in the yaml tree
         if key is not None and name is None:
             return [x[key] for x in self.deploy.facts[map_type]]
         # If map_type, key, and name are provided, then return the name field at key of
         # map_type in the yaml tree
         if key is not None and name is not None:
             try:
                 attr_map = [x[key] for x in self.deploy.facts[map_type] if x[NAME] == name][0]
             except IndexError:
                 try:
                     attr_map = [x[key] for x in self.deploy.facts[map_type] if x[USERNAME] == name][0]
                 except IndexError:
                     raise
             return attr_map
     except KeyError:
         return None
コード例 #7
0
 def get_attr(self, map_type, key=None, name=None):
     """
     Access common patterns within the ECSConf object
     """
     logging.debug(self.__class__.__name__ + ': ' +
                   sys._getframe().f_code.co_name)
     logobj(map_type)
     logobj(key)
     logobj(name)
     try:
         # If only map_type provided, return the data at map_type in the yaml tree
         if key is None and name is None:
             return self.deploy.facts[map_type]
         # If map_type and key are provided, return the data at key of map_type in the yaml tree
         if key is not None and name is None:
             return [x[key] for x in self.deploy.facts[map_type]]
         # If map_type, key, and name are provided, then return the name field at key of
         # map_type in the yaml tree
         if key is not None and name is not None:
             try:
                 attr_map = [
                     x[key] for x in self.deploy.facts[map_type]
                     if x[NAME] == name
                 ][0]
             except IndexError:
                 try:
                     attr_map = [
                         x[key] for x in self.deploy.facts[map_type]
                         if x[USERNAME] == name
                     ][0]
                 except IndexError:
                     raise
             return attr_map
     except KeyError:
         return None
コード例 #8
0
    def load_config(self):
        """
        Loads the config
        :raises IOError: if can't read config
        """
        logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
        try:
            self.update_template_vars()
            self.config_dataset = DataSet(self.config_file)
            self.config = DotMap(self.config_dataset.content)
            logobj(self.config)
            self.update_template_vars()
        except IOError as e:
            # If this fails, there's nothing more we can do.
            # Something is broken in the install container.
            logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name + ': ' + repr(e))
            print("Unable to locate config file: " + repr(e))
            raise

        if len(self.config.ui.script_file) != 0:
            self.script_file = self.config.ui.script_file
            logging.debug(self.__class__.__name__ + ': ' +
                          sys._getframe().f_code.co_name +
                          ': will look for script in: ' + repr(self.script_file))

        if len(self.config.ui.state_file) != 0:
            self.state_file = self.config.ui.state_file
            logging.debug(self.__class__.__name__ + ': ' +
                          sys._getframe().f_code.co_name +
                          ': will look for state in: ' + repr(self.state_file))

        if len(self.config.ui.deploy_file) != 0:
            self.deploy_file = self.config.ui.deploy_file
            logging.debug(self.__class__.__name__ + ': ' +
                          sys._getframe().f_code.co_name +
                          ': will look for deploy in: ' + repr(self.deploy_file))
コード例 #9
0
    def load_state(self):
        """
        Load current state (may be empty)
        :raises IOError: if filesystem exceptions prevent config file read or initial write
        """
        logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
        if self.state_file is None:
            pass
        else:

            try:
                self.update_template_vars()
                self.state_dataset = DataSet(self.state_file,
                                             additional_template_vars=self.template_vars)
                logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
                logobj(self.state_dataset.content)
                self.state = DotMap(self.state_dataset.content)
                logobj(self.state)
                self.update_template_vars()
            except IOError as e:
                logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name + ': ' + repr(e))
                # must be a new install or else we don't have permissions.
                # Try to create an empty config and see what happens.
                try:
                    self.state_dataset = DataSet(self.state_file, create_if_missing=True,
                                                 additional_template_vars=self.template_vars)
                    logobj(self.state_dataset.content)
                    self.state = DotMap(self.state_dataset.content)
                    logobj(self.state)
                    self.update_template_vars()
                except IOError as cf:
                    logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name + ': ' + repr(cf))
                    print("Unable to create a new state file: " + repr(cf))
                    # and presumably crash, though at some point we should tell
                    # the user to make sure they're mounting /opt correctly in Docker
                    raise
コード例 #10
0
    def create_widget(self, widget_blueprint):
        logging.debug(self.__class__.__name__ + ': ' +
                      sys._getframe().f_code.co_name)
        if not widget_blueprint.type:
            raise ValueError("No widget type defined in blueprint")
        else:
            # TODO: Replace this with a proper mapping hash because using globals() is bad
            wobj = globals()[widget_blueprint.type]

        # TODO: refactor this later because it's ugly
        wdirector = widget_blueprint.director or None
        wargs = widget_blueprint.args or None
        wbody = widget_blueprint.body or None
        wbrief = widget_blueprint.brief or None
        wtitle = widget_blueprint.title or None
        wnamespace = widget_blueprint.namespace or None
        wkeytexts = widget_blueprint.keytexts or None

        logobj(wobj)
        logobj(wdirector)
        logobj(wargs)
        logobj(wbody)
        logobj(wbrief)
        logobj(wtitle)
        logobj(wnamespace)
        logobj(wkeytexts)

        # * 'args': [{'prev_button': 'EmptyWidget'}],
        # * 'body': 'Thank you etc etc.\n',
        #   'brief': 'Free and Frictionless Overview',
        #   'help': 'popup help Use the arrowkeys etc etc',
        # - 'keys': ['help', 'exit', 'color'],
        # * 'title': 'EMC ECS 2.2 Community Edition',
        # * 'type': 'InfoOverlay'}
        # * key_texts = "[F1] Help | [F5] Save etc etc"
        # * director = Director obj where callbacks can be made
        # * namespace = config file variable namespace
        #
        # What needs to be sent to an InfoOverlay,
        # title_widget urwid.Text(title_text, align='center')
        # nav_widget = widgets.NavButtonBox(self.d)
        # body_widget = urwid.Text(body)
        # bg_widget = widgets.TabBackground(header_text, footer_text, **kwargs)
        # logobj(widget_blueprint)
        nav_widget = NavButtonBox(wdirector, **wargs)
        logobj(nav_widget)

        title_widget = urwid.Text(wtitle, align='center')
        logobj(title_widget)

        # If wbody is none, then assume the constructor for
        # for the widget will take care of rendering its own body
        # from the provided args
        if wbody is not None:
            body_widget = urwid.Text(wbody)
        else:
            body_widget = wbody

        # TODO: bind popup widgets to this (for help, logs, etc)
        bg_widget = TabBackground(head_text=wbrief, foot_text=wkeytexts)

        # Pass everything on down to new object
        wdict = {
            'nav_widget': nav_widget,
            'title_widget': title_widget,
            'body_widget': body_widget,
            'namespace': wnamespace,
            'director': wdirector,
            'bg_widget': bg_widget
        }

        wdict.update(wargs)

        return wobj.__init(**wdict)
コード例 #11
0
# Bucket stuff
BUCKET = 'buckets'
BUCKET_D = MU[:-1] + _D
DEFAULTS[BUCKET] = {
    DESC: DESC_DEFAULT
}

# File export stuff
EXPORT = 'exports'
EXPORT_D = EXPORT[:-1] + _D
DEFAULTS[EXPORT] = {
    DESC: DESC_DEFAULT
}

logobj(DEFAULTS)


"""
Classes
"""


class ECSConf(object):
    """
    Provides access to ECS deployment mappings within the given DotMap object
    """

    def __init__(self, deploymap):
        logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
        self.deploy = deploymap
コード例 #12
0
    's3_secret_key': None,
    'swift_password': None,
    'swift_groups_list': ['users']
}

# Bucket stuff
BUCKET = 'buckets'
BUCKET_D = MU[:-1] + _D
DEFAULTS[BUCKET] = {DESC: DESC_DEFAULT}

# File export stuff
EXPORT = 'exports'
EXPORT_D = EXPORT[:-1] + _D
DEFAULTS[EXPORT] = {DESC: DESC_DEFAULT}

logobj(DEFAULTS)
"""
Classes
"""


class ECSConf(object):
    """
    Provides access to ECS deployment mappings within the given DotMap object
    """
    def __init__(self, deploymap):
        logging.debug(self.__class__.__name__ + ': ' +
                      sys._getframe().f_code.co_name)
        self.deploy = deploymap

    @staticmethod
コード例 #13
0
    def create_widget(self, widget_blueprint):
        logging.debug(self.__class__.__name__ + ': ' + sys._getframe().f_code.co_name)
        if not widget_blueprint.type:
            raise ValueError("No widget type defined in blueprint")
        else:
            # TODO: Replace this with a proper mapping hash because using globals() is bad
            wobj = globals()[widget_blueprint.type]

        # TODO: refactor this later because it's ugly
        wdirector = widget_blueprint.director or None
        wargs = widget_blueprint.args or None
        wbody = widget_blueprint.body or None
        wbrief = widget_blueprint.brief or None
        wtitle = widget_blueprint.title or None
        wnamespace = widget_blueprint.namespace or None
        wkeytexts = widget_blueprint.keytexts or None

        logobj(wobj)
        logobj(wdirector)
        logobj(wargs)
        logobj(wbody)
        logobj(wbrief)
        logobj(wtitle)
        logobj(wnamespace)
        logobj(wkeytexts)

        # * 'args': [{'prev_button': 'EmptyWidget'}],
        # * 'body': 'Thank you etc etc.\n',
        #   'brief': 'Free and Frictionless Overview',
        #   'help': 'popup help Use the arrowkeys etc etc',
        # - 'keys': ['help', 'exit', 'color'],
        # * 'title': 'EMC ECS 2.2 Community Edition',
        # * 'type': 'InfoOverlay'}
        # * key_texts = "[F1] Help | [F5] Save etc etc"
        # * director = Director obj where callbacks can be made
        # * namespace = config file variable namespace
        #
        # What needs to be sent to an InfoOverlay,
        # title_widget urwid.Text(title_text, align='center')
        # nav_widget = widgets.NavButtonBox(self.d)
        # body_widget = urwid.Text(body)
        # bg_widget = widgets.TabBackground(header_text, footer_text, **kwargs)
        # logobj(widget_blueprint)
        nav_widget = NavButtonBox(wdirector, **wargs)
        logobj(nav_widget)

        title_widget = urwid.Text(wtitle, align='center')
        logobj(title_widget)

        # If wbody is none, then assume the constructor for
        # for the widget will take care of rendering its own body
        # from the provided args
        if wbody is not None:
            body_widget = urwid.Text(wbody)
        else:
            body_widget = wbody

        # TODO: bind popup widgets to this (for help, logs, etc)
        bg_widget = TabBackground(head_text=wbrief, foot_text=wkeytexts)

        # Pass everything on down to new object
        wdict = {'nav_widget': nav_widget,
                 'title_widget': title_widget,
                 'body_widget': body_widget,
                 'namespace': wnamespace,
                 'director': wdirector,
                 'bg_widget': bg_widget
                 }

        wdict.update(wargs)

        return wobj.__init(**wdict)