def _list(json_, extra_field_names): """List DC/OS nodes :param json_: If true, output json. Otherwise, output a human readable table. :type json_: bool :param extra_field_names: List of additional field names to include in table output :type extra_field_names: [str] :returns: process return code :rtype: int """ client = mesos.DCOSClient() masters = mesos.MesosDNSClient().masters() master_state = client.get_master_state() slaves = client.get_state_summary()['slaves'] for master in masters: if master['ip'] == master_state['hostname']: master['type'] = 'master (leader)' region, zone = util.get_fault_domain(master_state) master['region'] = region master['zone'] = zone for key in ('id', 'pid', 'version'): master[key] = master_state.get(key) else: master['type'] = 'master' for slave in slaves: region, zone = util.get_fault_domain(slave) slave['type'] = 'agent' slave['region'] = region slave['zone'] = zone nodes = masters + slaves if json_: emitter.publish(nodes) else: for extra_field_name in extra_field_names: field_name = extra_field_name.split(':')[-1] if len(slaves) > 0: try: tables._dotted_itemgetter(field_name)(slaves[0]) except KeyError: emitter.publish( errors.DefaultError('Field "%s" is invalid.' % field_name)) return table = tables.node_table(nodes, extra_field_names) output = six.text_type(table) if output: emitter.publish(output) else: emitter.publish(errors.DefaultError('No agents found.'))
def _list(json_, extra_field_names): """List DC/OS nodes :param json_: If true, output json. Otherwise, output a human readable table. :type json_: bool :param extra_field_names: List of additional field names to include in table output :type extra_field_names: [str] :returns: process return code :rtype: int """ client = mesos.DCOSClient() masters = mesos.MesosDNSClient().hosts('master.mesos.') master_state = client.get_master_state() slaves = client.get_state_summary()['slaves'] for master in masters: if master['ip'] == master_state['hostname']: master['type'] = 'master (leader)' for key in ('id', 'pid', 'version'): master[key] = master_state.get(key) else: master['type'] = 'master' for slave in slaves: slave['type'] = 'agent' nodes = masters + slaves if json_: emitter.publish(nodes) else: for extra_field_name in extra_field_names: field_name = extra_field_name.split(':')[-1] if len(slaves) > 0: try: tables._dotted_itemgetter(field_name)(slaves[0]) except KeyError: emitter.publish(errors.DefaultError( 'Field "%s" is invalid.' % field_name)) return table = tables.node_table(nodes, extra_field_names) output = six.text_type(table) if output: emitter.publish(output) else: emitter.publish(errors.DefaultError('No agents found.'))