/* Dump the configuration in name,value pairs for output to * "statsmgr show config", caller must call list_destroy() */ extern List dump_config(void) { config_key_pair_t *key_pair; char time_str[32]; List my_list = list_create(destroy_config_key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveDir"); key_pair->value = xstrdup(slurmdbd_conf->archive_dir); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveEvents"); key_pair->value = xstrdup( SLURMDB_PURGE_ARCHIVE_SET( slurmdbd_conf->purge_event) ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveJobs"); key_pair->value = xstrdup( SLURMDB_PURGE_ARCHIVE_SET( slurmdbd_conf->purge_job) ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveResvs"); key_pair->value = xstrdup( SLURMDB_PURGE_ARCHIVE_SET( slurmdbd_conf->purge_resv) ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveScript"); key_pair->value = xstrdup(slurmdbd_conf->archive_script); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveSteps"); key_pair->value = xstrdup( SLURMDB_PURGE_ARCHIVE_SET( slurmdbd_conf->purge_step) ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveSuspend"); key_pair->value = xstrdup( SLURMDB_PURGE_ARCHIVE_SET( slurmdbd_conf->purge_suspend) ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveTXN"); key_pair->value = xstrdup( SLURMDB_PURGE_ARCHIVE_SET( slurmdbd_conf->purge_txn) ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("ArchiveUsage"); key_pair->value = xstrdup( SLURMDB_PURGE_ARCHIVE_SET( slurmdbd_conf->purge_usage) ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("AuthInfo"); key_pair->value = xstrdup(slurmdbd_conf->auth_info); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("AuthType"); key_pair->value = xstrdup(slurmdbd_conf->auth_type); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("BOOT_TIME"); key_pair->value = xmalloc(128); slurm_make_time_str ((time_t *)&boot_time, key_pair->value, 128); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("CommitDelay"); key_pair->value = xstrdup(slurmdbd_conf->commit_delay ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DbdAddr"); key_pair->value = xstrdup(slurmdbd_conf->dbd_addr); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DbdBackupHost"); key_pair->value = xstrdup(slurmdbd_conf->dbd_backup); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DbdHost"); key_pair->value = xstrdup(slurmdbd_conf->dbd_host); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DbdPort"); key_pair->value = xstrdup_printf("%u", slurmdbd_conf->dbd_port); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DebugFlags"); key_pair->value = debug_flags2str(slurmdbd_conf->debug_flags); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DebugLevel"); key_pair->value = xstrdup(log_num2string(slurmdbd_conf->debug_level)); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DebugLevelSyslog"); key_pair->value = xstrdup(log_num2string(slurmdbd_conf->syslog_debug)); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("DefaultQOS"); key_pair->value = xstrdup(slurmdbd_conf->default_qos); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("LogFile"); key_pair->value = xstrdup(slurmdbd_conf->log_file); list_append(my_list, key_pair); secs2time_str(slurmdbd_conf->max_time_range, time_str, sizeof(time_str)); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("MaxQueryTimeRange"); key_pair->value = xstrdup_printf("%s", time_str); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("MessageTimeout"); key_pair->value = xstrdup_printf("%u secs", slurmdbd_conf->msg_timeout); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PidFile"); key_pair->value = xstrdup(slurmdbd_conf->pid_file); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PluginDir"); key_pair->value = xstrdup(slurmdbd_conf->plugindir); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PrivateData"); key_pair->value = xmalloc(128); private_data_string(slurmdbd_conf->private_data, key_pair->value, 128); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PurgeEventAfter"); if (slurmdbd_conf->purge_event != NO_VAL) { key_pair->value = xmalloc(32); slurmdb_purge_string(slurmdbd_conf->purge_event, key_pair->value, 32, 1); } else key_pair->value = xstrdup("NONE"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PurgeJobAfter"); if (slurmdbd_conf->purge_job != NO_VAL) { key_pair->value = xmalloc(32); slurmdb_purge_string(slurmdbd_conf->purge_job, key_pair->value, 32, 1); } else key_pair->value = xstrdup("NONE"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PurgeResvAfter"); if (slurmdbd_conf->purge_resv != NO_VAL) { key_pair->value = xmalloc(32); slurmdb_purge_string(slurmdbd_conf->purge_resv, key_pair->value, 32, 1); } else key_pair->value = xstrdup("NONE"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PurgeStepAfter"); if (slurmdbd_conf->purge_step != NO_VAL) { key_pair->value = xmalloc(32); slurmdb_purge_string(slurmdbd_conf->purge_step, key_pair->value, 32, 1); } else key_pair->value = xstrdup("NONE"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PurgeSuspendAfter"); if (slurmdbd_conf->purge_suspend != NO_VAL) { key_pair->value = xmalloc(32); slurmdb_purge_string(slurmdbd_conf->purge_suspend, key_pair->value, 32, 1); } else key_pair->value = xstrdup("NONE"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PurgeTXNAfter"); if (slurmdbd_conf->purge_txn != NO_VAL) { key_pair->value = xmalloc(32); slurmdb_purge_string(slurmdbd_conf->purge_txn, key_pair->value, 32, 1); } else key_pair->value = xstrdup("NONE"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("PurgeUsageAfter"); if (slurmdbd_conf->purge_usage != NO_VAL) { key_pair->value = xmalloc(32); slurmdb_purge_string(slurmdbd_conf->purge_usage, key_pair->value, 32, 1); } else key_pair->value = xstrdup("NONE"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("SLURMDBD_CONF"); key_pair->value = get_extra_conf_path("slurmdbd.conf"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("SLURMDBD_VERSION"); key_pair->value = xstrdup(SLURM_VERSION_STRING); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("SlurmUser"); key_pair->value = xstrdup_printf("%s(%u)", slurmdbd_conf->slurm_user_name, slurmdbd_conf->slurm_user_id); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("StorageBackupHost"); key_pair->value = xstrdup(slurmdbd_conf->storage_backup_host); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("StorageHost"); key_pair->value = xstrdup(slurmdbd_conf->storage_host); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("StorageLoc"); key_pair->value = xstrdup(slurmdbd_conf->storage_loc); list_append(my_list, key_pair); /* StoragePass should NOT be passed due to security reasons */ key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("StoragePort"); key_pair->value = xstrdup_printf("%u", slurmdbd_conf->storage_port); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("StorageType"); key_pair->value = xstrdup(slurmdbd_conf->storage_type); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("StorageUser"); key_pair->value = xstrdup(slurmdbd_conf->storage_user); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("TCPTimeout"); key_pair->value = xstrdup_printf("%u secs", slurmdbd_conf->tcp_timeout); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("TrackWCKey"); key_pair->value = xstrdup(slurmdbd_conf->track_wckey ? "Yes" : "No"); list_append(my_list, key_pair); key_pair = xmalloc(sizeof(config_key_pair_t)); key_pair->name = xstrdup("TrackSlurmctldDown"); key_pair->value = xstrdup(slurmdbd_conf->track_ctld ? "Yes" : "No"); list_append(my_list, key_pair); return my_list; }
/* execute archive script */ extern int archive_run_script(slurmdb_archive_cond_t *arch_cond, char *cluster_name, time_t last_submit) { char * args[] = {arch_cond->archive_script, NULL}; struct stat st; char **env = NULL; time_t curr_end; if (stat(arch_cond->archive_script, &st) < 0) { error("archive_run_script: failed to stat %s: %m", arch_cond->archive_script); return SLURM_ERROR; } if (!(st.st_mode & S_IFREG)) { errno = EACCES; error("archive_run_script: %s isn't a regular file", arch_cond->archive_script); return SLURM_ERROR; } if (access(arch_cond->archive_script, X_OK) < 0) { errno = EACCES; error("archive_run_script: %s is not executable", arch_cond->archive_script); return SLURM_ERROR; } env = env_array_create(); env_array_append_fmt(&env, "SLURM_ARCHIVE_CLUSTER", "%s", cluster_name); if (arch_cond->purge_event != NO_VAL) { if (!(curr_end = archive_setup_end_time( last_submit, arch_cond->purge_event))) { error("Parsing purge events failed"); return SLURM_ERROR; } env_array_append_fmt(&env, "SLURM_ARCHIVE_EVENTS", "%u", SLURMDB_PURGE_ARCHIVE_SET( arch_cond->purge_event)); env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_EVENT", "%ld", (long)curr_end); } if (arch_cond->purge_job != NO_VAL) { if (!(curr_end = archive_setup_end_time( last_submit, arch_cond->purge_job))) { error("Parsing purge job failed"); return SLURM_ERROR; } env_array_append_fmt(&env, "SLURM_ARCHIVE_JOBS", "%u", SLURMDB_PURGE_ARCHIVE_SET( arch_cond->purge_job)); env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_JOB", "%ld", (long)curr_end); } if (arch_cond->purge_resv != NO_VAL) { if (!(curr_end = archive_setup_end_time( last_submit, arch_cond->purge_job))) { error("Parsing purge job failed"); return SLURM_ERROR; } env_array_append_fmt(&env, "SLURM_ARCHIVE_RESV", "%u", SLURMDB_PURGE_ARCHIVE_SET( arch_cond->purge_job)); env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_RESV", "%ld", (long)curr_end); } if (arch_cond->purge_step != NO_VAL) { if (!(curr_end = archive_setup_end_time( last_submit, arch_cond->purge_step))) { error("Parsing purge step"); return SLURM_ERROR; } env_array_append_fmt(&env, "SLURM_ARCHIVE_STEPS", "%u", SLURMDB_PURGE_ARCHIVE_SET( arch_cond->purge_step)); env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_STEP", "%ld", (long)curr_end); } if (arch_cond->purge_suspend != NO_VAL) { if (!(curr_end = archive_setup_end_time( last_submit, arch_cond->purge_suspend))) { error("Parsing purge suspend"); return SLURM_ERROR; } env_array_append_fmt(&env, "SLURM_ARCHIVE_SUSPEND", "%u", SLURMDB_PURGE_ARCHIVE_SET( arch_cond->purge_suspend)); env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_SUSPEND", "%ld", (long)curr_end); } if (arch_cond->purge_txn != NO_VAL) { if (!(curr_end = archive_setup_end_time( last_submit, arch_cond->purge_txn))) { error("Parsing purge txn"); return SLURM_ERROR; } env_array_append_fmt(&env, "SLURM_ARCHIVE_TXN", "%u", SLURMDB_PURGE_ARCHIVE_SET( arch_cond->purge_txn)); env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_TXN", "%ld", (long)curr_end); } if (arch_cond->purge_usage != NO_VAL) { if (!(curr_end = archive_setup_end_time( last_submit, arch_cond->purge_usage))) { error("Parsing purge usage"); return SLURM_ERROR; } env_array_append_fmt(&env, "SLURM_ARCHIVE_USAGE", "%u", SLURMDB_PURGE_ARCHIVE_SET( arch_cond->purge_usage)); env_array_append_fmt(&env, "SLURM_ARCHIVE_LAST_USAGE", "%ld", (long)curr_end); } #ifdef _PATH_STDPATH env_array_append (&env, "PATH", _PATH_STDPATH); #else env_array_append (&env, "PATH", "/bin:/usr/bin"); #endif execve(arch_cond->archive_script, args, env); env_array_free(env); return SLURM_SUCCESS; }