pacemaker  1.1.18-36d2962a86
Scalable High-Availability cluster resource manager
Macros | Functions
services.c File Reference
#include <crm_internal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <dirent.h>
#include <fcntl.h>
#include <crm/crm.h>
#include <crm/common/mainloop.h>
#include <crm/services.h>
#include <crm/msg_xml.h>
#include "services_private.h"
Include dependency graph for services.c:

Go to the source code of this file.

Macros

#define _GNU_SOURCE
 
#define lsb_metadata_template
 
#define LSB_INITSCRIPT_INFOBEGIN_TAG   "### BEGIN INIT INFO"
 
#define LSB_INITSCRIPT_INFOEND_TAG   "### END INIT INFO"
 
#define PROVIDES   "# Provides:"
 
#define REQ_START   "# Required-Start:"
 
#define REQ_STOP   "# Required-Stop:"
 
#define SHLD_START   "# Should-Start:"
 
#define SHLD_STOP   "# Should-Stop:"
 
#define DFLT_START   "# Default-Start:"
 
#define DFLT_STOP   "# Default-Stop:"
 
#define SHORT_DSCR   "# Short-Description:"
 
#define DESCRIPTION   "# Description:"
 
#define lsb_meta_helper_free_value(m)
 
#define DESC_MAX   2048
 

Functions

svc_action_tservices_action_create (const char *name, const char *action, int interval, int timeout)
 
const char * resources_find_service_class (const char *agent)
 
svc_action_tresources_action_create (const char *name, const char *standard, const char *provider, const char *agent, const char *action, int interval, int timeout, GHashTable *params, enum svc_action_flags flags)
 Create a new resource action. More...
 
svc_action_tservices_action_create_generic (const char *exec, const char *args[])
 
svc_action_tservices_alert_create (const char *id, const char *exec, int timeout, GHashTable *params, int sequence, void *cb_data)
 Create an alert agent action. More...
 
int services_action_user (svc_action_t *op, const char *user)
 Set the user and group that an action will execute as. More...
 
gboolean services_alert_async (svc_action_t *action, void(*cb)(svc_action_t *op))
 Execute an alert agent action. More...
 
void services_action_cleanup (svc_action_t *op)
 
void services_action_free (svc_action_t *op)
 
gboolean cancel_recurring_action (svc_action_t *op)
 
gboolean services_action_cancel (const char *name, const char *action, int interval)
 Cancel a recurring action. More...
 
gboolean services_action_kick (const char *name, const char *action, int interval)
 
void services_add_inflight_op (svc_action_t *op)
 
void services_untrack_op (svc_action_t *op)
 
gboolean services_action_async (svc_action_t *op, void(*action_callback)(svc_action_t *))
 
gboolean is_op_blocked (const char *rsc)
 
gboolean services_action_sync (svc_action_t *op)
 
GList * get_directory_list (const char *root, gboolean files, gboolean executable)
 Get a list of files or directories in a given path. More...
 
GList * services_list (void)
 
GList * resources_list_standards (void)
 
GList * resources_list_providers (const char *standard)
 Get a list of providers. More...
 
GList * resources_list_agents (const char *standard, const char *provider)
 Get a list of resource agents. More...
 

Macro Definition Documentation

◆ _GNU_SOURCE

#define _GNU_SOURCE

Definition at line 11 of file services.c.

◆ DESC_MAX

#define DESC_MAX   2048

Definition at line 975 of file services.c.

◆ DESCRIPTION

#define DESCRIPTION   "# Description:"

Definition at line 945 of file services.c.

◆ DFLT_START

#define DFLT_START   "# Default-Start:"

Definition at line 942 of file services.c.

◆ DFLT_STOP

#define DFLT_STOP   "# Default-Stop:"

Definition at line 943 of file services.c.

◆ LSB_INITSCRIPT_INFOBEGIN_TAG

#define LSB_INITSCRIPT_INFOBEGIN_TAG   "### BEGIN INIT INFO"

Definition at line 935 of file services.c.

◆ LSB_INITSCRIPT_INFOEND_TAG

#define LSB_INITSCRIPT_INFOEND_TAG   "### END INIT INFO"

Definition at line 936 of file services.c.

◆ lsb_meta_helper_free_value

#define lsb_meta_helper_free_value (   m)
Value:
do { \
if ((m) != NULL) { \
xmlFree(m); \
(m) = NULL; \
} \
} while(0)

Definition at line 947 of file services.c.

◆ lsb_metadata_template

#define lsb_metadata_template
Value:
"<?xml version='1.0'?>\n" \
"<!DOCTYPE resource-agent SYSTEM 'ra-api-1.dtd'>\n" \
"<resource-agent name='%s' version='" PCMK_DEFAULT_AGENT_VERSION "'>\n" \
" <version>1.0</version>\n" \
" <longdesc lang='en'>\n" \
"%s" \
" </longdesc>\n" \
" <shortdesc lang='en'>%s</shortdesc>\n" \
" <parameters>\n" \
" </parameters>\n" \
" <actions>\n" \
" <action name='meta-data' timeout='5' />\n" \
" <action name='start' timeout='15' />\n" \
" <action name='stop' timeout='15' />\n" \
" <action name='status' timeout='15' />\n" \
" <action name='restart' timeout='15' />\n" \
" <action name='force-reload' timeout='15' />\n" \
" <action name='monitor' timeout='15' interval='15' />\n" \
" </actions>\n" \
" <special tag='LSB'>\n" \
" <Provides>%s</Provides>\n" \
" <Required-Start>%s</Required-Start>\n" \
" <Required-Stop>%s</Required-Stop>\n" \
" <Should-Start>%s</Should-Start>\n" \
" <Should-Stop>%s</Should-Stop>\n" \
" <Default-Start>%s</Default-Start>\n" \
" <Default-Stop>%s</Default-Stop>\n" \
" </special>\n" \
"</resource-agent>\n"
#define PCMK_DEFAULT_AGENT_VERSION
Definition: services.h:73

Definition at line 901 of file services.c.

◆ PROVIDES

#define PROVIDES   "# Provides:"

Definition at line 937 of file services.c.

◆ REQ_START

#define REQ_START   "# Required-Start:"

Definition at line 938 of file services.c.

◆ REQ_STOP

#define REQ_STOP   "# Required-Stop:"

Definition at line 939 of file services.c.

◆ SHLD_START

#define SHLD_START   "# Should-Start:"

Definition at line 940 of file services.c.

◆ SHLD_STOP

#define SHLD_STOP   "# Should-Stop:"

Definition at line 941 of file services.c.

◆ SHORT_DSCR

#define SHORT_DSCR   "# Short-Description:"

Definition at line 944 of file services.c.

Function Documentation

◆ cancel_recurring_action()

gboolean cancel_recurring_action ( svc_action_t op)

Definition at line 604 of file services.c.

◆ get_directory_list()

GList* get_directory_list ( const char *  root,
gboolean  files,
gboolean  executable 
)

Get a list of files or directories in a given path.

Parameters
[in]rootfull path to a directory to read
[in]filesreturn list of files if TRUE or directories if FALSE
[in]executableif TRUE and files is TRUE, only return executable files
Returns
a list of what was found. The list items are char *.
Note
It is the caller's responsibility to free the result with g_list_free_full(list, free).

Definition at line 1346 of file services.c.

◆ is_op_blocked()

gboolean is_op_blocked ( const char *  rsc)

Definition at line 845 of file services.c.

◆ resources_action_create()

svc_action_t* resources_action_create ( const char *  name,
const char *  standard,
const char *  provider,
const char *  agent,
const char *  action,
int  interval,
int  timeout,
GHashTable *  params,
enum svc_action_flags  flags 
)

Create a new resource action.

Parameters
[in]namename of resource
[in]standardresource agent standard (ocf, lsb, etc.)
[in]providerresource agent provider
[in]agentresource agent name
[in]actionaction (start, stop, monitor, etc.)
[in]intervalhow often to repeat this action, in milliseconds (if 0, execute only once)
[in]timeoutconsider action failed if it does not complete in this many milliseconds
[in]paramsaction parameters
Returns
newly allocated action instance
Postcondition
After the call, 'params' is owned, and later free'd by the svc_action_t result
Note
The caller is responsible for freeing the return value using services_action_free().

Definition at line 154 of file services.c.

◆ resources_find_service_class()

const char* resources_find_service_class ( const char *  agent)

Find the first class that can provide service::${agent}

Parameters
[in]agentwhich agent to search for
Returns
NULL, or the first class that provides the named agent

Definition at line 59 of file services.c.

◆ resources_list_agents()

GList* resources_list_agents ( const char *  standard,
const char *  provider 
)

Get a list of resource agents.

Parameters
[in]standardlist agents using this standard (e.g. ocf, lsb, etc.) (or NULL for all)
[in]providerlist agents from this provider (or NULL for all)
Returns
a list of resource agents. The list items are char *.
Note
The caller is responsible for freeing the result using g_list_free_full(list, free).

Definition at line 1420 of file services.c.

◆ resources_list_providers()

GList* resources_list_providers ( const char *  standard)

Get a list of providers.

Parameters
[in]standardlist providers of this standard (e.g. ocf, lsb, etc.)
Returns
a list of providers as char * list items (or NULL if standard does not support providers)
Note
The caller is responsible for freeing the result using g_list_free_full(list, free).

Definition at line 1410 of file services.c.

◆ resources_list_standards()

GList* resources_list_standards ( void  )

Get list of available standards

Returns
a list of resource standards. The list items are char *. This list must be destroyed using g_list_free_full(list, free).

Definition at line 1366 of file services.c.

◆ services_action_async()

gboolean services_action_async ( svc_action_t op,
void(*)(svc_action_t *)  action_callback 
)

Run an action asynchronously.

Parameters
[in]opservices action data
[in]action_callbackcallback for when the action completes
Return values
TRUEsuccesfully started execution
FALSEfailed to start execution, no callback will be received

Definition at line 816 of file services.c.

◆ services_action_cancel()

gboolean services_action_cancel ( const char *  name,
const char *  action,
int  interval 
)

Cancel a recurring action.

Parameters
[in]nameName of resource that operation is for
[in]actionName of operation to cancel
[in]intervalInterval of operation to cancel
Returns
TRUE if action was successfully cancelled, FALSE otherwise

Definition at line 630 of file services.c.

◆ services_action_cleanup()

void services_action_cleanup ( svc_action_t op)

Definition at line 516 of file services.c.

◆ services_action_create()

svc_action_t* services_action_create ( const char *  name,
const char *  action,
int  interval,
int  timeout 
)

Definition at line 52 of file services.c.

◆ services_action_create_generic()

svc_action_t* services_action_create_generic ( const char *  exec,
const char *  args[] 
)

Utilize services API to execute an arbitrary command.

This API has useful infrastructure in place to be able to run a command in the background and get notified via a callback when the command finishes.

Parameters
[in]execcommand to execute
[in]argsarguments to the command, NULL terminated
Returns
a svc_action_t object, used to pass to the execute function (services_action_sync() or services_action_async()) and is provided to the callback.

Definition at line 356 of file services.c.

◆ services_action_free()

void services_action_free ( svc_action_t op)

Definition at line 552 of file services.c.

◆ services_action_kick()

gboolean services_action_kick ( const char *  name,
const char *  action,
int  interval 
)

Kick a recurring action so it is scheduled immediately for re-execution

Definition at line 693 of file services.c.

◆ services_action_sync()

gboolean services_action_sync ( svc_action_t op)

Definition at line 1311 of file services.c.

◆ services_action_user()

int services_action_user ( svc_action_t op,
const char *  user 
)

Set the user and group that an action will execute as.

Parameters
[in,out]actionAction to modify
[in]userName of user to execute action as
[in]groupName of group to execute action as
Returns
pcmk_ok on success, -errno otherwise
Note
This will have no effect unless the process executing the action runs as root, and the action is not a systemd or upstart action. We could implement this for systemd by adding User= and Group= to [Service] in the override file, but that seems more likely to cause problems than be useful.

Definition at line 424 of file services.c.

◆ services_add_inflight_op()

void services_add_inflight_op ( svc_action_t op)

Definition at line 784 of file services.c.

◆ services_alert_async()

gboolean services_alert_async ( svc_action_t action,
void(*)(svc_action_t *op)  cb 
)

Execute an alert agent action.

Parameters
[in]actionAction to execute
[in]cbFunction to call when action completes
Returns
TRUE if the library will free action, FALSE otherwise
Note
If this function returns FALSE, it is the caller's responsibility to free the action with services_action_free().

Definition at line 471 of file services.c.

◆ services_alert_create()

svc_action_t* services_alert_create ( const char *  id,
const char *  exec,
int  timeout,
GHashTable *  params,
int  sequence,
void *  cb_data 
)

Create an alert agent action.

Parameters
[in]idAlert ID
[in]execPath to alert agent executable
[in]timeoutAction timeout
[in]paramsParameters to use with action
[in]sequenceAction sequence number
[in]cb_dataData to pass to callback function
Returns
New action on success, NULL on error
Note
It is the caller's responsibility to free cb_data. The caller should not free params explicitly.

Definition at line 394 of file services.c.

◆ services_list()

GList* services_list ( void  )

Get a list of services

Returns
a list of services. The list items are gchar *. This list must be destroyed using g_list_free_full(list, free).

Definition at line 1352 of file services.c.

◆ services_untrack_op()

void services_untrack_op ( svc_action_t op)

Definition at line 805 of file services.c.