.TH "Slurm API" "3" "May 2009" "Morris Jette" "Slurm administrative calls"
.SH "NAME"
slurm_create_partition, slurm_create_reservation,
slurm_delete_partition, slurm_delete_reservation,
slurm_init_part_desc_msg, slurm_init_resv_desc_msg,
slurm_reconfigure, slurm_shutdown, slurm_takeover, slurm_update_job,
,slurm_init_update_node_msg slurm_update_node, slurm_update_partition,
slurm_update_reservation
\- Slurm administrative functions
.SH "SYNTAX"
.LP
#include <slurm/slurm.h>
.LP
int \fBslurm_create_partition\fR (
.br
	update_part_msg_t *\fIupdate_part_msg_ptr\fP
.br
);
.LP
int \fBslurm_create_reservation\fR (
.br
	reserve_request_msg_t *\fIupdate_resv_msg_ptr\fP
.br
);
.LP
int \fBslurm_delete_partition\fR (
.br
	delete_part_msg_t *\fIdelete_part_msg_ptr\fP
.br
);
.LP
int \fBslurm_delete_reservation\fR (
.br
	reservation_name_msg_t *\fIdelete_resv_msg_ptr\fP
.br
);
.LP
void \fBslurm_init_part_desc_msg\fR (
.br
	update_part_msg_t *\fIupdate_part_msg_ptr\fP
.br
);
.LP
void \fBslurm_init_resv_desc_msg\fR (
.br
	reserve_request_msg_t *\fIupdate_resv_msg_ptr\fP
.br
);
.LP
int \fBslurm_reconfigure\fR ( );
.LP
int \fBslurm_shutdown\fR (
.br
	uint16_t \fIshutdown_options\fP
.br
);
.LP
int \fBslurm_takeover\fR ( );
.LP
int \fBslurm_update_job\fR (
.br
	job_desc_msg_t *\fIupdate_job_msg_ptr\fP
.br
);
.LP
void \fBslurm_init_update_node_msg\fR(
.br
	update_node_msg_t *\fIupdate_node_msg_ptr\fP
.br
);
.LP
int \fBslurm_update_node\fR (
.br
	update_node_msg_t *\fIupdate_node_msg_ptr\fP
.br
);
.LP
int \fBslurm_update_partition\fR (
.br
	update_part_msg_t *\fIupdate_part_msg_ptr\fP
.br
);
.LP
int \fBslurm_update_reservation\fR (
.br
	reserve_request_msg_t *\fIupdate_resv_msg_ptr\fP
.br
);
.SH "ARGUMENTS"
.LP
.TP
\fIshutdown_options\fP
0: all slurm daemons are shutdown
.br
1: slurmctld generates a core file
.br
2: only the slurmctld is shutdown (no core file)
.TP
\fIdelete_part_msg_ptr\fP
Specifies the pointer to a partition delete request specification.
See slurm.h for full details on the data structure's contents.
.TP
\fIdelete_resv_msg_ptr\fP
Specifies the pointer to a reservation delete request specification.
See slurm.h for full details on the data structure's contents.
.TP
\fIupdate_job_msg_ptr\fP
Specifies the pointer to a job update request specification. See slurm.h
for full details on the data structure's contents.
.TP
\fIupdate_node_msg_ptr\fP
Specifies the pointer to a node update request specification. See slurm.h
for full details on the data structure's contents.
.TP
\fIupdate_part_msg_ptr\fP
Specifies the pointer to a partition create or update request specification.
See slurm.h for full details on the data structure's contents.
.TP
\fIupdate_resv_msg_ptr\fP
Specifies the pointer to a reservation create or update request specification.
See slurm.h for full details on the data structure's contents.
.SH "DESCRIPTION"
.LP
\fBslurm_create_partition\fR Request that a new partition be created.
Initialize the data structure using the \fBslurm_init_part_desc_msg\fR
function prior to setting values of the parameters to be changed.
Note: \fBslurm_init_part_desc_msg\fR is not equivalent to setting the data
structure values to zero.  A partition name must be set for the call to
succeed.
This function may only be successfully executed by user root.
.LP
\fBslurm_create_reservation\fR Request that a new reservation be created.
Initialize the data structure using the \fBslurm_init_resv_desc_msg\fR
function prior to setting values of the parameters to be changed.
Note: \fBslurm_init_resv_desc_msg\fR is not equivalent to setting the data
structure values to zero.  The reservation's time limits, user or
account restrictions, and node names or a node count must be specified for
the call to succeed.
This function may only be successfully executed by user root.
.LP
\fBslurm_delete_partition\fR Request that the specified partition be deleted.
All jobs associated with the identified partition will be terminated and
purged.  This function may only be successfully executed by user root.
.LP
\fBslurm_delete_reservation\fR Request that the specified reservation be
deleted. This function may only be successfully executed by user root.
.LP
\fBslurm_init_part_desc_msg\fR Initialize the contents of a partition
descriptor with default values. Note: \fBslurm_init_part_desc_msg\fR is
not equivalent to setting the data structure values to zero. Execute
this function before executing \fBslurm_create_partition\fR or
\fBslurm_update_partition\fR.
.LP
\fBslurm_init_resv_desc_msg\fR Initialize the contents of a reservation
descriptor with default values. Note: \fBslurm_init_resv_desc_msg\fR is
not equivalent to setting the data structure values to zero. Execute this
function before executing \fBslurm_create_reservation\fR or
\fBslurm_update_reservation\fR.
.LP
\fBslurm_reconfigure\fR Request that the Slurm controller re\-read its
configuration file. The new configuration parameters take effect
immediately. This function may only be successfully executed by user root.
.LP
\fBslurm_shutdown\fR Request that the Slurm controller terminate. This
function may only be successfully executed by user root.
.LP
\fBslurm_takeover\fR Request that the Slurm primary controller shutdown
immediately and the backup controller take over.
This function may only be successfully executed by user root.
.LP
\fBslurm_update_job\fR Request that the configuration of a job be updated. Note
that most, but not all parameters of a job may be changed by this function.
Initialize the data structure using the \fBslurm_init_job_desc_msg\fR function
prior to setting values of the parameters to be changed. Note:
\fBslurm_init_job_desc_msg\fR is not equivalent to setting the data structure
values to zero. This function may only be successfully executed by user root.
Note the job priority of zero represents a job that will not be scheduled.
Slurm uses the priority one to represent jobs that can not be scheduled until
additional nodes are returned to service (i.e. not DOWN, DRAINED, or FAILED).
This permits lower priority jobs to utilize those resources which are available.
.LP
\fBslurm_init_update_node_msg\fR Initialize the contents of an update mpde
descriptor with default values. Note: \fBslurm_init_update_node_msg\fR is
not equivalent to setting the data structure values to zero. Execute
this function before executing \fBslurm_update_node\fR.
.LP
\fBslurm_update_node\fR Request that the state of one or more nodes be updated.
Note that the state of a node (e.g. DRAINING, IDLE, etc.) may be changed, but
its hardware configuration may not be changed by this function. If the hardware
configuration of a node changes, update the Slurm configuration file and execute
the \fBslurm_reconfigure\fR function. This function may only be successfully
executed by user root. If used by some autonomous program, the state value
most likely to be used is \fBNODE_STATE_DRAIN\fR or \fBNODE_STATE_FAILING\fR.
The node state flag \fBNODE_STATE_NO_RESPOND\fR may be specified without
changing the underlying node state. Note that the node's
\fBNODE_STATE_NO_RESPOND\fR flag will be cleared as soon as the slurmd
daemon on that node communicates with the slurmctld daemon.
Likewise the state \fBNODE_STATE_DOWN\fR indicates that the slurmd daemon
is not responding (and has not responded for an interval at least as long
as the \fBSlurmdTimeout\fR configuration parameter). The node will leave the
\fBNODE_STATE_DOWN\fR state as soon as  the slurmd daemon communicates.
.LP
\fBslurm_update_partition\fR Request that the configuration of a
partition be updated.  Note that most, but not all parameters of a
partition may be changed by this function. Initialize the data
structure using the \fBslurm_init_part_desc_msg\fR function prior
to setting values of the parameters to be changed. Note:
\fBslurm_init_part_desc_msg\fR is not equivalent to setting the
data structure values to zero. This function may only be
successfully executed by user root.
.LP
\fBslurm_update_reservation\fR Request that the configuration of a
reservation be updated.  Initialize the data structure using the
\fBslurm_init_resv_desc_msg\fR function prior to setting values of
the parameters to be changed. Note:  \fBslurm_init_resv_desc_msg\fR
is not equivalent to setting the data structure values to zero. This
function may only be successfully executed by user root.
.SH "RETURN VALUE"
.LP
On success, zero is returned. On error, \-1 is returned, and the Slurm error
code is set appropriately.
.LP
Exception:  A successful slurm_create_reservation call returns a string
containing the name of the reservation, in memory to be freed by the caller.
A failed call returns NULL and sets the Slurm error code.
.SH "ERRORS"
.LP
\fBSLURM_PROTOCOL_VERSION_ERROR\fR Protocol version has changed, re\-link your
code.
.LP
\fBESLURM_INVALID_NODE_NAME\fR The requested node name(s) is/are not valid.
.LP
\fBESLURM_INVALID_NODE_STATE\fR The specified state node state or requested
node state transition is not valid.
.LP
\fBESLURM_INVALID_PARTITION_NAME\fR The requested partition name is not valid.
.LP
\fBESLURM_INVALID_AUTHTYPE_CHANGE\fR The \fBAuthType\fR parameter can
not be changed using the \fBslurm_reconfigure\fR function, but all SLURM
daemons and commands must be restarted. See \fBslurm.conf\fR(5) for more
information.
.LP
\fBESLURM_INVALID_SCHEDTYPE_CHANGE\fR The \fBSchedulerType\fR parameter can
not be changed using the \fBslurm_reconfigure\fR function, but the
\fBslurmctld\fR daemon must be restarted. Manual changes to existing job
parameters may also be required. See \fBslurm.conf\fR(5) for more information.
.LP
\fBESLURM_INVALID_SWITCHTYPE_CHANGE\fR The \fBSwitchType\fR parameter can
not be changed using the \fBslurm_reconfigure\fR function, but all
SLURM daemons and commands must be restarted. All previously running
jobs will be lost. See \fBslurm.conf\fR(5) for more information.
.LP
\fBESLURM_ACCESS_DENIED\fR The requesting user lacks authorization for
the requested action (e.g. trying to delete or modify another user's job).
.LP
\fBSLURM_PROTOCOL_SOCKET_IMPL_TIMEOUT\fR Timeout in communicating with
SLURM controller.
.LP
\fBESLURM_RESERVATION_ACCESS\fR  Requestor is not authorized to access the
reservation.
.LP
\fBESLURM_RESERVATION_INVALID\fR  Invalid reservation parameter given,
e.g. wrong name given.
.LP
\fBESLURM_INVALID_TIME_VALUE\fR  Invalid time value.
.LP
\fBESLURM_RESERVATION_BUSY\fR  Reservation is busy, e.g. trying to delete a
reservation while in use.
.LP
\fBESLURM_RESERVATION_NOT_USABLE\fR  Reservation not usable, e.g. trying to
use an expired reservation.
.SH "EXAMPLE"
.LP
#include <stdio.h>
.br
#include <slurm/slurm.h>
.br
#include <slurm/slurm_errno.h>
.LP
int main (int argc, char *argv[])
.br
{
.br
	job_desc_msg_t          update_job_msg;
.br
	update_node_msg_t       update_node_msg;
.br
	partition_desc_msg_t    update_part_msg;
.br
	delete_part_msg_t       delete_part_msg;
.br
	reserve_request_msg_t   resv_msg;
.br
	char                   *resv_name = NULL;
.LP
	if (slurm_reconfigure ( )) {
.br
		slurm_perror ("slurm_reconfigure error");
.br
		exit (1);
.br
	}
.LP
	slurm_init_job_desc_msg( &update_job_msg );
.br
	update_job_msg.job_id = 1234;
.br
	update_job_msg time_limit = 200;
.br
	if (slurm_update_job (&update_job_msg)) {
.br
		slurm_perror ("slurm_update_job error");
.br
		exit (1);
.br
	}
.LP
	slurm_init_part_desc_msg ( &update_part_msg );
.br
	update_part_msg.name = "test.partition";
.br
	update_part_msg.state_up = 0;  /* partition down */
.br
	if (slurm_create_partition (&update_part_msg)) {
.br
		slurm_perror ("slurm_create_partition error");
.br
		exit (1);
.br
	}
.LP
	update_part_msg.state_up = 1;  /* partition up */
.br
	if (slurm_update_partition (&update_part_msg)) {
.br
		slurm_perror ("slurm_update_partition error");
.br
		exit (1);
.br
	}
.LP
	delete_part_msg.name = "test.partition";
.br
	if (slurm_delete_partition (&delete_part_msg)) {
.br
		slurm_perror ("slurm_delete_partition error");
.br
		exit (1);
.br
	}
.LP
	slurm_init_update_node_msg (&update_node_msg);
.br
	update_node_msg.node_names = "lx[10\-12]";
.br
	update_node_msg.node_state = NODE_STATE_DRAINING ;
.br
	if (slurm_update_node (&update_node_msg)) {
.br
		slurm_perror ("slurm_update_node error");
.br
		exit (1);
.br
	}
.LP
	slurm_init_resv_desc_msg ( &resv_msg );
.br
	resv_msg.start_time = time(NULL) + 60*60;  /* One hour from now */
.br
	resv_msg.duration = 720;  /* 12 hours/720 minutes */
.br
	resv_msg.node_cnt = 10;
.br
	resv_msg.accounts = "admin";
.br
	resv_name = slurm_create_reservation (&resv_msg);
.br
	if (!resv_name) {
.br
		slurm_perror ("slurm_create_reservation error");
.br
		exit (1);
.br
	}
.br
	free(resv_name);
.br
	exit (0);
.br
}

.SH "NOTE"
These functions are included in the libslurm library,
which must be linked to your process for use
(e.g. "cc \-lslurm myprog.c").

.SH "COPYING"
Copyright (C) 2002\-2007 The Regents of the University of California.
Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
CODE\-OCEC\-09\-009. All rights reserved.
.LP
This file is part of SLURM, a resource management program.
For details, see <https://computing.llnl.gov/linux/slurm/>.
.LP
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.
.LP
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.
.SH "SEE ALSO"
.LP
\fBscontrol\fR(1), \fBslurm_get_errno\fR(3), \fBslurm_init_job_desc_msg\fR(3),
\fBslurm_perror\fR(3), \fBslurm_strerror\fR(3), \fBslurm.conf\fR(5)
