def list(self):
        """
        Sub-command list.

        Takes no further parameters. Will discover the current configuration
        and print a table of all the nodes with status and port.
        """
        self.discover()
        print_docs = []

        # mongos
        for node in sorted(self.get_tagged(['mongos'])):
            doc = OrderedDict([('process', 'mongos'), ('port', node),
                              ('status', 'running'
                               if self.cluster_running[node] else 'down')])
            print_docs.append(doc)

        if len(self.get_tagged(['mongos'])) > 0:
            print_docs.append(None)

        # configs
        for node in sorted(self.get_tagged(['config'])):
            doc = OrderedDict([('process', 'config server'),
                              ('port', node),
                              ('status', 'running'
                               if self.cluster_running[node] else 'down')])
            print_docs.append(doc)

        if len(self.get_tagged(['config'])) > 0:
            print_docs.append(None)

        # mongod
        for shard in self._get_shard_names(self.loaded_args):
            tags = []
            replicaset = ('replicaset' in self.loaded_args and
                          self.loaded_args['replicaset'])
            padding = ''

            if shard:
                print_docs.append(shard)
                tags.append(shard)
                padding = '    '

            if replicaset:
                # primary
                primary = self.get_tagged(tags + ['primary', 'running'])
                if len(primary) > 0:
                    node = list(primary)[0]
                    print_docs.append(OrderedDict
                                      ([('process', padding + 'primary'),
                                        ('port', node),
                                        ('status', 'running'
                                         if self.cluster_running[node]
                                         else 'down')]))

                # secondaries
                secondaries = self.get_tagged(tags + ['secondary', 'running'])
                for node in sorted(secondaries):
                    print_docs.append(OrderedDict
                                      ([('process', padding + 'secondary'),
                                        ('port', node),
                                        ('status', 'running'
                                         if self.cluster_running[node]
                                         else 'down')]))

                # data-bearing nodes that are down or not in the
                # replica set yet
                mongods = self.get_tagged(tags + ['mongod'])
                arbiters = self.get_tagged(tags + ['arbiter'])

                nodes = sorted(mongods - primary - secondaries - arbiters)
                for node in nodes:
                    print_docs.append(OrderedDict
                                      ([('process', padding + 'mongod'),
                                        ('port', node),
                                        ('status', 'running'
                                         if self.cluster_running[node]
                                         else 'down')]))

                # arbiters
                for node in arbiters:
                    print_docs.append(OrderedDict
                                      ([('process', padding + 'arbiter'),
                                        ('port', node),
                                        ('status', 'running'
                                         if self.cluster_running[node]
                                         else 'down')]))

            else:
                nodes = self.get_tagged(tags + ['mongod'])
                if len(nodes) > 0:
                    node = nodes.pop()
                    print_docs.append(OrderedDict
                                      ([('process', padding + 'single'),
                                        ('port', node),
                                        ('status', 'running'
                                         if self.cluster_running[node]
                                         else 'down')]))
            if shard:
                print_docs.append(None)

        processes = self._get_processes()
        startup = self.startup_info

        # print tags as well
        for doc in [x for x in print_docs if type(x) == OrderedDict]:
            try:
                doc['pid'] = processes[doc['port']].pid
            except KeyError:
                doc['pid'] = '-'

            if self.args['verbose'] or self.args['tags']:
                tags = self.get_tags_of_port(doc['port'])
                doc['tags'] = ', '.join(tags)

            if self.args['startup']:
                try:
                    # first try running process (startup may be modified
                    # via start command)
                    doc['startup command'] = ' '.join(processes[doc['port']]
                                                      .cmdline())
                except KeyError:
                    # if not running, use stored startup_info
                    doc['startup command'] = startup[str(doc['port'])]

        print_docs.append(None)
        print()
        print_table(print_docs)
        if self.loaded_args.get('auth'):
            print('\tauth: "%s:%s"' % (self.loaded_args.get('username'),
                                       self.loaded_args.get('password')))
def list ( self ) : self . discover ( ) print_docs = [ ] for node in sorted ( self . get_tagged ( [ 'mongos' ] ) ) : doc = OrderedDict ( [ ( 'process' , 'mongos' ) , ( 'port' , node ) , ( 'status' , 'running' if self . cluster_running [ node ] else 'down' ) ] ) print_docs . append ( doc ) if len ( self . get_tagged ( [ 'mongos' ] ) ) > 0 : print_docs . append ( None ) for node in sorted ( self . get_tagged ( [ 'config' ] ) ) : doc = OrderedDict ( [ ( 'process' , 'config server' ) , ( 'port' , node ) , ( 'status' , 'running' if self . cluster_running [ node ] else 'down' ) ] ) print_docs . append ( doc ) if len ( self . get_tagged ( [ 'config' ] ) ) > 0 : print_docs . append ( None ) for shard in self . _get_shard_names ( self . loaded_args ) : tags = [ ] replicaset = ( 'replicaset' in self . loaded_args and self . loaded_args [ 'replicaset' ] ) padding = '' if shard : print_docs . append ( shard ) tags . append ( shard ) padding = '    ' if replicaset : primary = self . get_tagged ( tags + [ 'primary' , 'running' ] ) if len ( primary ) > 0 : node = list ( primary ) [ 0 ] print_docs . append ( OrderedDict ( [ ( 'process' , padding + 'primary' ) , ( 'port' , node ) , ( 'status' , 'running' if self . cluster_running [ node ] else 'down' ) ] ) ) secondaries = self . get_tagged ( tags + [ 'secondary' , 'running' ] ) for node in sorted ( secondaries ) : print_docs . append ( OrderedDict ( [ ( 'process' , padding + 'secondary' ) , ( 'port' , node ) , ( 'status' , 'running' if self . cluster_running [ node ] else 'down' ) ] ) ) mongods = self . get_tagged ( tags + [ 'mongod' ] ) arbiters = self . get_tagged ( tags + [ 'arbiter' ] ) nodes = sorted ( mongods - primary - secondaries - arbiters ) for node in nodes : print_docs . append ( OrderedDict ( [ ( 'process' , padding + 'mongod' ) , ( 'port' , node ) , ( 'status' , 'running' if self . cluster_running [ node ] else 'down' ) ] ) ) for node in arbiters : print_docs . append ( OrderedDict ( [ ( 'process' , padding + 'arbiter' ) , ( 'port' , node ) , ( 'status' , 'running' if self . cluster_running [ node ] else 'down' ) ] ) ) else : nodes = self . get_tagged ( tags + [ 'mongod' ] ) if len ( nodes ) > 0 : node = nodes . pop ( ) print_docs . append ( OrderedDict ( [ ( 'process' , padding + 'single' ) , ( 'port' , node ) , ( 'status' , 'running' if self . cluster_running [ node ] else 'down' ) ] ) ) if shard : print_docs . append ( None ) processes = self . _get_processes ( ) startup = self . startup_info for doc in [ x for x in print_docs if type ( x ) == OrderedDict ] : try : doc [ 'pid' ] = processes [ doc [ 'port' ] ] . pid except KeyError : doc [ 'pid' ] = '-' if self . args [ 'verbose' ] or self . args [ 'tags' ] : tags = self . get_tags_of_port ( doc [ 'port' ] ) doc [ 'tags' ] = ', ' . join ( tags ) if self . args [ 'startup' ] : try : doc [ 'startup command' ] = ' ' . join ( processes [ doc [ 'port' ] ] . cmdline ( ) ) except KeyError : doc [ 'startup command' ] = startup [ str ( doc [ 'port' ] ) ] print_docs . append ( None ) print ( ) print_table ( print_docs ) if self . loaded_args . get ( 'auth' ) : print ( '\tauth: "%s:%s"' % ( self . loaded_args . get ( 'username' ) , self . loaded_args . get ( 'password' ) ) )
Sub-command list.

        Takes no further parameters. Will discover the current configuration
        and print a table of all the nodes with status and port.