/* * _show_it - list the slurm configuration per the supplied arguments * IN argc - count of arguments * IN argv - list of arguments * undocumented association options wopi and wopl * without parent info and without parent limits */ static void _show_it (int argc, char *argv[]) { int error_code = SLURM_SUCCESS; int command_len = 0; if (!argv[0]) goto helpme; command_len = strlen(argv[0]); /* reset the connection to get the most recent stuff */ acct_storage_g_commit(db_conn, 0); /* First identify the entity to list */ if (strncasecmp(argv[0], "Accounts", MAX(command_len, 2)) == 0 || !strncasecmp(argv[0], "Acct", MAX(command_len, 4))) { error_code = sacctmgr_list_account((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "Associations", MAX(command_len, 2)) == 0) { error_code = sacctmgr_list_assoc((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "Clusters", MAX(command_len, 2)) == 0) { error_code = sacctmgr_list_cluster((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "Configuration", MAX(command_len, 2)) == 0) { error_code = sacctmgr_list_config(true); } else if (strncasecmp(argv[0], "Events", MAX(command_len, 1)) == 0) { error_code = sacctmgr_list_event((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "Problems", MAX(command_len, 1)) == 0) { error_code = sacctmgr_list_problem((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "QOS", MAX(command_len, 1)) == 0) { error_code = sacctmgr_list_qos((argc - 1), &argv[1]); } else if (!strncasecmp(argv[0], "Resource", MAX(command_len, 1))) { error_code = sacctmgr_list_res((argc - 1), &argv[1]); } else if (!strncasecmp(argv[0], "Transactions", MAX(command_len, 1)) || !strncasecmp(argv[0], "Txn", MAX(command_len, 1))) { error_code = sacctmgr_list_txn((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "Users", MAX(command_len, 1)) == 0) { error_code = sacctmgr_list_user((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "WCKeys", MAX(command_len, 1)) == 0) { error_code = sacctmgr_list_wckey((argc - 1), &argv[1]); } else if (strncasecmp(argv[0], "tres", MAX(command_len, 2)) == 0) { error_code = sacctmgr_list_tres(argc - 1, &argv[1]); } else { helpme: exit_code = 1; fprintf(stderr, "No valid entity in list command\n"); fprintf(stderr, "Input line must include "); fprintf(stderr, "\"Account\", \"Association\", " "\"Cluster\", \"Configuration\",\n\"Event\", " "\"Problem\", \"QOS\", \"Resource\", \"Transaction\", " "\"User\", or \"WCKey\"\n"); } if (error_code != SLURM_SUCCESS) { exit_code = 1; } }
int main(int argc, char **argv) { int error_code = SLURM_SUCCESS, i, opt_char, input_field_count; char **input_fields; log_options_t opts = LOG_OPTS_STDERR_ONLY ; int local_exit_code = 0; char *temp = NULL; int option_index; static struct option long_options[] = { {"help", 0, 0, 'h'}, {"usage", 0, 0, 'h'}, {"immediate",0, 0, 'i'}, {"noheader",0, 0, 'n'}, {"oneliner", 0, 0, 'o'}, {"parsable", 0, 0, 'p'}, {"parsable2", 0, 0, 'P'}, {"quiet", 0, 0, 'Q'}, {"readonly", 0, 0, 'r'}, {"associations", 0, 0, 's'}, {"verbose", 0, 0, 'v'}, {"version", 0, 0, 'V'}, {NULL, 0, 0, 0} }; command_name = argv[0]; rollback_flag = 1; exit_code = 0; exit_flag = 0; input_field_count = 0; quiet_flag = 0; readonly_flag = 0; verbosity = 0; slurm_conf_init(NULL); log_init("sacctmgr", opts, SYSLOG_FACILITY_DAEMON, NULL); while((opt_char = getopt_long(argc, argv, "hionpPQrsvV", long_options, &option_index)) != -1) { switch (opt_char) { case (int)'?': fprintf(stderr, "Try \"sacctmgr --help\" " "for more information\n"); exit(1); break; case (int)'h': _usage (); exit(exit_code); break; case (int)'i': rollback_flag = 0; break; case (int)'o': one_liner = 1; break; case (int)'n': print_fields_have_header = 0; break; case (int)'p': print_fields_parsable_print = PRINT_FIELDS_PARSABLE_ENDING; break; case (int)'P': print_fields_parsable_print = PRINT_FIELDS_PARSABLE_NO_ENDING; break; case (int)'Q': quiet_flag = 1; break; case (int)'r': readonly_flag = 1; break; case (int)'s': with_assoc_flag = 1; break; case (int)'v': quiet_flag = -1; verbosity++; break; case (int)'V': _print_version(); exit(exit_code); break; default: exit_code = 1; fprintf(stderr, "getopt error, returned %c\n", opt_char); exit(exit_code); } } if (argc > MAX_INPUT_FIELDS) /* bogus input, but continue anyway */ input_words = argc; else input_words = 128; input_fields = (char **) xmalloc (sizeof (char *) * input_words); if (optind < argc) { for (i = optind; i < argc; i++) { input_fields[input_field_count++] = argv[i]; } } if (verbosity) { opts.stderr_level += verbosity; opts.prefix_level = 1; log_alter(opts, 0, NULL); } /* Check to see if we are running a supported accounting plugin */ temp = slurm_get_accounting_storage_type(); if (xstrcasecmp(temp, "accounting_storage/slurmdbd") && xstrcasecmp(temp, "accounting_storage/mysql")) { fprintf (stderr, "You are not running a supported " "accounting_storage plugin\n(%s).\n" "Only 'accounting_storage/slurmdbd' " "and 'accounting_storage/mysql' are supported.\n", temp); xfree(temp); exit(1); } xfree(temp); errno = 0; db_conn = slurmdb_connection_get(); if (errno != SLURM_SUCCESS) { int tmp_errno = errno; if ((input_field_count == 2) && (!strncasecmp(argv[2], "Configuration", strlen(argv[1]))) && ((!strncasecmp(argv[1], "list", strlen(argv[0]))) || (!strncasecmp(argv[1], "show", strlen(argv[0]))))) { if (tmp_errno == ESLURM_DB_CONNECTION) { tmp_errno = 0; sacctmgr_list_config(true); } else sacctmgr_list_config(false); } errno = tmp_errno; if (errno) error("Problem talking to the database: %m"); exit(1); } my_uid = getuid(); if (input_field_count) exit_flag = 1; else error_code = _get_command (&input_field_count, input_fields); while (error_code == SLURM_SUCCESS) { error_code = _process_command (input_field_count, input_fields); if (error_code || exit_flag) break; error_code = _get_command (&input_field_count, input_fields); /* This is here so if someone made a mistake we allow * them to fix it and let the process happen since there * are checks for global exit_code we need to reset it. */ if (exit_code) { local_exit_code = exit_code; exit_code = 0; } } /* readline library writes \n when echoes the input string, it does * not when it sees the EOF, so in that case we have to print it to * align the terminal prompt. */ if (exit_flag == 2) putchar('\n'); if (local_exit_code) exit_code = local_exit_code; acct_storage_g_close_connection(&db_conn); slurm_acct_storage_fini(); FREE_NULL_LIST(g_qos_list); FREE_NULL_LIST(g_res_list); FREE_NULL_LIST(g_tres_list); exit(exit_code); }