Beispiel #1
0
 def setup_tmuxcc(self,
                  client=None,
                  nodes=None,
                  user='******',
                  layout='tiled'):
     log.info("Creating TMUX Control Center for user '%s'" % user)
     client = client or self._master
     nodes = nodes or self._nodes
     envname = self._envname
     orig_user = client.ssh._username
     if orig_user != user:
         client.ssh.connect(username=user)
     chunks = [chunk for chunk in utils.chunk_list(nodes, items=8)]
     num_windows = len(chunks) + len(nodes)
     if len(nodes) == 0:
         log.error("Cluster has no nodes, exiting...")
         return
     self.create_session(client, envname, num_windows=num_windows)
     if len(nodes) == 1 and client == nodes[0]:
         return
     if not self._supports_layout(client, envname, layout, window=0):
         log.warn("failed to select layout '%s', defaulting to "
                  "'main-vertical'" % layout)
         layout = "main-vertical"
         status = self._select_layout(client, envname, layout, window=0)
         if status != 0:
             raise exception.PluginError("failed to set a layout")
     for i, chunk in enumerate(chunks):
         self._rename_window(client, envname, i, 'all%s' % i)
         for j, node in enumerate(chunk):
             if j != 0:
                 self._split_window(client, envname, i)
             self._select_layout(client, envname, window=i, layout=layout)
             if node.alias != client.alias:
                 self._send_keys(client,
                                 envname,
                                 cmd='ssh %s' % node.alias,
                                 window="%d.%d" % (i, j))
     for i, node in enumerate(nodes):
         window = i + len(chunks)
         self._rename_window(client, envname, window, node.alias)
         if node.alias != client.alias:
             self._send_keys(client,
                             envname,
                             cmd='ssh %s' % node.alias,
                             window=window)
     self._select_window(client, envname, window=0)
     self._select_pane(client, envname, window=0, pane=0)
     if orig_user != user:
         client.ssh.connect(username=orig_user)
Beispiel #2
0
 def _select_layout(self, node, envname, layout="main-vertical", window=''):
     if layout not in self._layouts:
         raise exception.PluginError("unknown layout (options: %s)" %
                                     ", ".join(self._layouts))
     cmd = 'tmux select-layout -t %s:%s %s'
     return node.ssh.get_status(cmd % (envname, window, layout))
Beispiel #3
0
 def _supports_layout(self, node, envname, layout, window=''):
     if layout not in self._layouts:
         raise exception.PluginError("unknown layout (options: %s)" %
                                     ", ".join(self._layouts))
     return self._select_layout(node, envname, layout, window) == 0
 def _check_ipython_installed(self, node):
     has_ipy = node.ssh.has_required(['ipython', 'ipcluster'])
     if not has_ipy:
         raise exception.PluginError("IPython is not installed!")
     return has_ipy
Beispiel #5
0
 setup_class = plugin.get('setup_class')
 plugin_name = plugin.get('__name__').split()[-1]
 mod_name = '.'.join(setup_class.split('.')[:-1])
 class_name = setup_class.split('.')[-1]
 try:
     mod = __import__(mod_name, globals(), locals(), [class_name])
 except SyntaxError, e:
     raise exception.PluginSyntaxError(
         "Plugin %s (%s) contains a syntax error at line %s" %
         (plugin_name, e.filename, e.lineno))
 except ImportError, e:
     raise exception.PluginLoadError("Failed to import plugin %s: %s" %
                                     (plugin_name, e[0]))
 klass = getattr(mod, class_name, None)
 if not klass:
     raise exception.PluginError('Plugin class %s does not exist' %
                                 setup_class)
 if not issubclass(klass, clustersetup.ClusterSetup):
     raise exception.PluginError(
         "Plugin %s must be a subclass of "
         "starcluster.clustersetup.ClusterSetup" % setup_class)
 args, kwargs = utils.get_arg_spec(klass.__init__, debug=debug)
 config_args = []
 missing_args = []
 for arg in args:
     if arg in plugin:
         config_args.append(plugin.get(arg))
     else:
         missing_args.append(arg)
 if debug:
     log.debug("config_args = %s" % config_args)
 if missing_args: