.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_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
	resv_desc_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_front_end_msg\fR (
.br
	update_front_end_msg_t *\fIupdate_front_end_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
	resv_desc_msg_t *\fIupdate_resv_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_reconfigure\fR ( );
.LP
int \fBslurm_shutdown\fR (
.br
	uint16_t \fIshutdown_options\fP
.br
);
.LP
int \fBslurm_takeover\fR ( );
.LP
int \fBslurm_update_front_end\fR (
.br
	update_front_end_msg_t *\fIupdate_front_end_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
	resv_desc_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_front_end_msg_ptr\fP
Specifies the pointer to a front end node 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_update_front_end_msg\fR Initialize the contents of an update
front end node descriptor with default values. Note:
\fBslurm_init_update_front_end_msg\fR is not equivalent to setting the data
structure values to zero. Execute this function before executing
\fBslurm_update_front_end\fR.
.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_init_update_node_msg\fR Initialize the contents of an update node
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_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_front_end\fR Request that the state of one or more front end
nodes be updated.
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.
.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 <stdlib.h>
.br
#include <slurm/slurm.h>
.br
#include <slurm/slurm_errno.h>
.LP
int main (int argc, char *argv[])
.br
{
.br
	update_node_msg_t       update_node_msg;
.br
	update_part_msg_t       update_part_msg;
.br
	delete_part_msg_t       delete_part_msg;
.br
	resv_desc_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_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_DRAIN ;
.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.
Copyright (C) 2008\-2010 Lawrence Livermore National Security.
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 <http://slurm.schedmd.com/>.
.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)
