blob: c11a14ca57c367a1ea27c959e7c551ca23f8d31e [file] [log] [blame] [edit]
/*****************************************************************************\
* cray_config.c
*
*****************************************************************************
* Copyright (C) 2011 SchedMD LLC <http://www.schedmd.com>.
* Supported by the Oak Ridge National Laboratory Extreme Scale Systems Center
* Written by Danny Auble <da@schedmd.com>
*
* This file is part of SLURM, a resource management program.
* For details, see <http://www.schedmd.com/slurmdocs/>.
* Please also read the included file: DISCLAIMER.
*
* SLURM is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* In addition, as a special exception, the copyright holders give permission
* to link the code of portions of this program with the OpenSSL library under
* certain conditions as described in each individual source file, and
* distribute linked combinations including the two. You must obey the GNU
* General Public License in all respects for all of the code used other than
* OpenSSL. If you modify file(s) with this exception, you may extend this
* exception to your version of the file(s), but you are not obligated to do
* so. If you do not wish to do so, delete this exception statement from your
* version. If you delete this exception statement from all source files in
* the program, then also delete it here.
*
* SLURM is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along
* with SLURM; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\*****************************************************************************/
#include "cray_config.h"
#include "src/common/slurm_xlator.h" /* Must be first */
#include "src/common/read_config.h"
#include "src/common/parse_spec.h"
#include "src/common/xstring.h"
#include "src/common/xmalloc.h"
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
cray_config_t *cray_conf = NULL;
s_p_options_t cray_conf_file_options[] = {
{"AlpsDir", S_P_STRING}, /* Vestigial option */
{"apbasil", S_P_STRING},
{"apkill", S_P_STRING},
{"SDBdb", S_P_STRING},
{"SDBhost", S_P_STRING},
{"SDBpass", S_P_STRING},
{"SDBport", S_P_UINT32},
{"SDBuser", S_P_STRING},
{"SyncTimeout", S_P_UINT32},
{NULL}
};
static char *_get_cray_conf(void)
{
char *val = getenv("SLURM_CONF");
char *rc = NULL;
int i;
if (!val)
return xstrdup(CRAY_CONFIG_FILE);
/* Replace file name on end of path */
i = strlen(val) - strlen("slurm.conf") + strlen("cray.conf") + 1;
rc = xmalloc(i);
strcpy(rc, val);
val = strrchr(rc, (int)'/');
if (val) /* absolute path */
val++;
else /* not absolute path */
val = rc;
strcpy(val, "cray.conf");
return rc;
}
extern int create_config(void)
{
int rc = SLURM_SUCCESS;
char* cray_conf_file = NULL;
static time_t last_config_update = (time_t) 0;
struct stat config_stat;
s_p_hashtbl_t *tbl = NULL;
if (cray_conf)
return SLURM_ERROR;
cray_conf = xmalloc(sizeof(cray_config_t));
cray_conf_file = _get_cray_conf();
if (stat(cray_conf_file, &config_stat) < 0) {
cray_conf->apbasil = xstrdup(DEFAULT_APBASIL);
cray_conf->apkill = xstrdup(DEFAULT_APKILL);
cray_conf->sdb_db = xstrdup(DEFAULT_CRAY_SDB_DB);
cray_conf->sdb_host = xstrdup(DEFAULT_CRAY_SDB_HOST);
cray_conf->sdb_pass = xstrdup(DEFAULT_CRAY_SDB_PASS);
cray_conf->sdb_port = DEFAULT_CRAY_SDB_PORT;
cray_conf->sdb_user = xstrdup(DEFAULT_CRAY_SDB_USER);
cray_conf->sync_timeout = DEFAULT_CRAY_SYNC_TIMEOUT;
xfree(cray_conf_file);
goto end_it;
}
if (cray_conf->slurm_debug_flags & DEBUG_FLAG_SELECT_TYPE)
info("Reading the cray.conf file");
if (last_config_update) {
if (last_config_update == config_stat.st_mtime) {
if (cray_conf->slurm_debug_flags
& DEBUG_FLAG_SELECT_TYPE)
info("%s unchanged", cray_conf_file);
} else {
info("Restart slurmctld for %s changes "
"to take effect",
cray_conf_file);
}
last_config_update = config_stat.st_mtime;
xfree(cray_conf_file);
return SLURM_SUCCESS;
}
tbl = s_p_hashtbl_create(cray_conf_file_options);
if (s_p_parse_file(tbl, NULL, cray_conf_file, false) == SLURM_ERROR)
fatal("something wrong with opening/reading cray "
"conf file");
xfree(cray_conf_file);
if (!s_p_get_string(&cray_conf->apbasil, "apbasil", tbl))
cray_conf->apbasil = xstrdup(DEFAULT_APBASIL);
if (!s_p_get_string(&cray_conf->apkill, "apkill", tbl))
cray_conf->apkill = xstrdup(DEFAULT_APKILL);
if (!s_p_get_string(&cray_conf->sdb_db, "SDBdb", tbl))
cray_conf->sdb_db = xstrdup(DEFAULT_CRAY_SDB_DB);
if (!s_p_get_string(&cray_conf->sdb_host, "SDBhost", tbl))
cray_conf->sdb_host = xstrdup(DEFAULT_CRAY_SDB_HOST);
if (!s_p_get_string(&cray_conf->sdb_pass, "SDBpass", tbl))
cray_conf->sdb_pass = xstrdup(DEFAULT_CRAY_SDB_PASS);
if (!s_p_get_uint32(&cray_conf->sdb_port, "SDBport", tbl))
cray_conf->sdb_port = DEFAULT_CRAY_SDB_PORT;
if (!s_p_get_string(&cray_conf->sdb_user, "SDBuser", tbl))
cray_conf->sdb_user = xstrdup(DEFAULT_CRAY_SDB_USER);
if (!s_p_get_uint32(&cray_conf->sync_timeout, "SyncTimeout", tbl))
cray_conf->sync_timeout = DEFAULT_CRAY_SYNC_TIMEOUT;
s_p_hashtbl_destroy(tbl);
end_it:
cray_conf->slurm_debug_flags = slurmctld_conf.debug_flags;
#if 0
info("Cray conf is...");
info("\tapbasil=\t%s", cray_conf->apbasil);
info("\tapkill=\t\t%s", cray_conf->apkill);
info("\tSDBdb=\t\t%s", cray_conf->sdb_db);
info("\tSDBhost=\t%s", cray_conf->sdb_host);
info("\tSDBpass=\t%s", cray_conf->sdb_pass);
info("\tSDBport=\t%u", cray_conf->sdb_port);
info("\tSDBuser=\t%s", cray_conf->sdb_user);
info("\tSyncTimeout=\t%u", cray_conf->sync_timeout);
#endif
return rc;
}
extern int destroy_config(void)
{
int rc = SLURM_SUCCESS;
if (cray_conf) {
xfree(cray_conf->apbasil);
xfree(cray_conf->apkill);
xfree(cray_conf->sdb_db);
xfree(cray_conf->sdb_host);
xfree(cray_conf->sdb_pass);
xfree(cray_conf->sdb_user);
xfree(cray_conf);
}
return rc;
}