From 0a0efdf2af6a1538a2a914a4f75240f4c9ea7d2e Mon Sep 17 00:00:00 2001
From: Moe Jette <jette1@llnl.gov>
Date: Sun, 10 Apr 2011 02:24:58 +0000
Subject: [PATCH] sprio: add support for the SLURM_CLUSTERS environment
 variable

This adds support for the SLURM_CLUSTERS environment variable also for sprio.
It also makes the test for the priority plugin type dependent on whether
running with multiple cluster support or not.
---
 doc/man/man1/sprio.1 |  8 ++++++++
 src/sprio/opts.c     | 20 ++++++++++++++++++--
 src/sprio/sprio.c    | 27 ++++++++++++++-------------
 3 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/doc/man/man1/sprio.1 b/doc/man/man1/sprio.1
index b3aab2ebfad..e1d8ad0348a 100644
--- a/doc/man/man1/sprio.1
+++ b/doc/man/man1/sprio.1
@@ -141,6 +141,14 @@ Print version information and exit.
 factor.  This is for information purposes only.  Actual job data is
 suppressed.
 
+.SH "ENVIRONMENT VARIABLES"
+.PP
+If no corresponding commandline option is specified, \fBsprio\fR will use the value of
+the following environment variables.
+.TP 20
+\fBSLURM_CLUSTERS\fR
+Same as \fB\-\-clusters\fR
+
 .SH "EXAMPLES"
 .eo
 Print the list of all pending jobs with their weighted priorities
diff --git a/src/sprio/opts.c b/src/sprio/opts.c
index ddfffe834d7..7611829d8d6 100644
--- a/src/sprio/opts.c
+++ b/src/sprio/opts.c
@@ -76,6 +76,18 @@ static void  _parse_token( char *token, char *field, int *field_size,
 static void  _print_options( void );
 static void  _usage( void );
 
+static void _opt_env(void)
+{
+	char *env_val;
+
+	if ((env_val = getenv("SLURM_CLUSTERS"))) {
+		if (!(params.clusters = slurmdb_get_info_cluster(env_val))) {
+			error("'%s' invalid entry for SLURM_CLUSTERS", env_val);
+			exit(1);
+		}
+	}
+}
+
 /*
  * parse_command_line
  */
@@ -102,6 +114,9 @@ parse_command_line( int argc, char* argv[] )
 		{NULL,         0,                 0, 0}
 	};
 
+	/* get defaults from environment */
+	_opt_env();
+
 	while((opt_char = getopt_long(argc, argv, "hj::lM:no:u:vVw",
 				      long_options, &option_index)) != -1) {
 		switch (opt_char) {
@@ -131,7 +146,6 @@ parse_command_line( int argc, char* argv[] )
 				      optarg);
 				exit(1);
 			}
-			working_cluster_rec = list_peek(params.clusters);
 			break;
 		case (int) 'n':
 			params.normalized = true;
@@ -175,8 +189,10 @@ parse_command_line( int argc, char* argv[] )
 		}
 	}
 
-	if ( params.verbose )
+	if (params.verbose)
 		_print_options();
+	if (params.clusters)
+		working_cluster_rec = list_peek(params.clusters);
 }
 
 /*
diff --git a/src/sprio/sprio.c b/src/sprio/sprio.c
index f176eeaf6d9..eca8b4172dd 100644
--- a/src/sprio/sprio.c
+++ b/src/sprio/sprio.c
@@ -75,24 +75,12 @@ static int _get_info(priority_factors_request_msg_t *factors_req,
 
 int main (int argc, char *argv[])
 {
-	char *temp = NULL;
+	char *prio_type = NULL;
 	int error_code = SLURM_SUCCESS;
 	priority_factors_request_msg_t req_msg;
 	priority_factors_response_msg_t *resp_msg = NULL;
 	log_options_t opts = LOG_OPTS_STDERR_ONLY ;
 
-	/* Check to see if we are running a supported accounting plugin */
-	temp = slurm_get_priority_type();
-	if(strcasecmp(temp, "priority/multifactor")) {
-		fprintf (stderr, "You are not running a supported "
-			 "priority plugin\n(%s).\n"
-			 "Only 'priority/multifactor' is supported.\n",
-			temp);
-		xfree(temp);
-		exit(1);
-	}
-	xfree(temp);
-
 	log_init(xbasename(argv[0]), opts, SYSLOG_FACILITY_USER, NULL);
 
 	parse_command_line( argc, argv );
@@ -115,6 +103,7 @@ int main (int argc, char *argv[])
 		weight_js   = slurm_ctl_conf_ptr->priority_weight_js;
 		weight_part = slurm_ctl_conf_ptr->priority_weight_part;
 		weight_qos  = slurm_ctl_conf_ptr->priority_weight_qos;
+		prio_type   = xstrdup(slurm_ctl_conf_ptr->priority_type);
 		slurm_free_ctl_conf(slurm_ctl_conf_ptr);
 	} else {
 		weight_age  = slurm_get_priority_weight_age();
@@ -122,8 +111,20 @@ int main (int argc, char *argv[])
 		weight_js   = slurm_get_priority_weight_job_size();
 		weight_part = slurm_get_priority_weight_partition();
 		weight_qos  = slurm_get_priority_weight_qos();
+		prio_type   = slurm_get_priority_type();
 	}
 
+	/* Check to see if we are running a supported accounting plugin */
+	if (strcasecmp(prio_type, "priority/multifactor")) {
+		fprintf (stderr, "You are not running a supported "
+			 "priority plugin\n(%s).\n"
+			 "Only 'priority/multifactor' is supported.\n",
+			 prio_type);
+		exit(1);
+	}
+	xfree(prio_type);
+
+
 	memset(&req_msg, 0, sizeof(priority_factors_request_msg_t));
 
 	if (params.jobs)
-- 
GitLab