pacemaker 2.1.1-77db578727
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
services.h
Go to the documentation of this file.
1/*
2 * Copyright 2010-2021 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8 */
9
10#ifndef __PCMK_SERVICES__
11# define __PCMK_SERVICES__
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
23# include <glib.h>
24# include <stdio.h>
25# include <stdint.h>
26# include <string.h>
27# include <stdbool.h>
28# include <sys/types.h>
29
30# include <crm_config.h> // OCF_ROOT_DIR
31# include "common/results.h"
32
33# ifndef LSB_ROOT_DIR
34# define LSB_ROOT_DIR "/etc/init.d"
35# endif
36
37/* TODO: Autodetect these two ?*/
38# ifndef SYSTEMCTL
39# define SYSTEMCTL "/bin/systemctl"
40# endif
41
42/* Known resource classes */
43#define PCMK_RESOURCE_CLASS_OCF "ocf"
44#define PCMK_RESOURCE_CLASS_SERVICE "service"
45#define PCMK_RESOURCE_CLASS_LSB "lsb"
46#define PCMK_RESOURCE_CLASS_SYSTEMD "systemd"
47#define PCMK_RESOURCE_CLASS_UPSTART "upstart"
48#define PCMK_RESOURCE_CLASS_NAGIOS "nagios"
49#define PCMK_RESOURCE_CLASS_STONITH "stonith"
50
51/* This is the string passed in the OCF_EXIT_REASON_PREFIX environment variable.
52 * The stderr output that occurs after this prefix is encountered is considered
53 * the exit reason for a completed operation.
54 */
55#define PCMK_OCF_REASON_PREFIX "ocf-exit-reason:"
56
57// Agent version to use if agent doesn't specify one
58#define PCMK_DEFAULT_AGENT_VERSION "0.1"
59
70
71/* The return codes for the status operation are not the same for other
72 * operatios - go figure
73 */
85
100
111
113 /* On timeout, only kill pid, do not kill entire pid group */
116};
117
119typedef struct svc_action_s {
120 char *id;
121 char *rsc;
122 char *action;
124
125 char *standard;
126 char *provider;
127 char *agent;
128
130 GHashTable *params; /* used for setting up environment for ocf-ra &
131 alert agents
132 and to be sent via stdin for fence-agents
133 */
134
135 int rc;
136 int pid;
143
146
153 void *cb_data;
154
157
168 GList *get_directory_list(const char *root, gboolean files, gboolean executable);
169
176 GList *services_list(void);
177
186 GList *resources_list_providers(const char *standard);
187
197 GList *resources_list_agents(const char *standard, const char *provider);
198
205 GList *resources_list_standards(void);
206
216 gboolean resources_agent_exists(const char *standard, const char *provider, const char *agent);
217
218svc_action_t *services_action_create(const char *name, const char *action,
219 guint interval_ms, int timeout /* ms */);
220
239svc_action_t *resources_action_create(const char *name, const char *standard,
240 const char *provider, const char *agent,
241 const char *action, guint interval_ms,
242 int timeout /* ms */, GHashTable *params,
244
248gboolean services_action_kick(const char *name, const char *action,
249 guint interval_ms);
250
251 const char *resources_find_service_class(const char *agent);
252
266 svc_action_t *services_action_create_generic(const char *exec, const char *args[]);
267
270 int services_action_user(svc_action_t *op, const char *user);
271
272 gboolean services_action_sync(svc_action_t * op);
273
285 void (*action_callback) (svc_action_t *),
286 void (*action_fork_callback) (svc_action_t *));
287
289 void (*action_callback) (svc_action_t *));
290
291gboolean services_action_cancel(const char *name, const char *action,
292 guint interval_ms);
293
294/* functions for alert agents */
295svc_action_t *services_alert_create(const char *id, const char *exec,
296 int timeout, GHashTable *params,
297 int sequence, void *cb_data);
299 void (*cb)(svc_action_t *op));
300
301 static inline const char *services_lrm_status_str(enum op_status status) {
302 switch (status) {
304 return "pending";
305 case PCMK_LRM_OP_DONE:return "complete";
306 case PCMK_LRM_OP_CANCELLED:return "Cancelled";
307 case PCMK_LRM_OP_TIMEOUT:return "Timed Out";
308 case PCMK_LRM_OP_NOTSUPPORTED:return "NOT SUPPORTED";
309 case PCMK_LRM_OP_ERROR:return "Error";
310 case PCMK_LRM_OP_NOT_INSTALLED:return "Not installed";
311 case PCMK_LRM_OP_NOT_CONNECTED:return "No executor connection";
312 case PCMK_LRM_OP_INVALID:return "Cannot execute now";
313 default:return "UNKNOWN!";
314 }
315 }
316
317 static inline const char *services_ocf_exitcode_str(enum ocf_exitcode code) {
318 switch (code) {
319 case PCMK_OCF_OK:
320 return "ok";
322 return "error";
324 return "invalid parameter";
326 return "unimplemented feature";
328 return "insufficient privileges";
330 return "not installed";
332 return "not configured";
334 return "not running";
336 return "promoted";
338 return "promoted (failed)";
339 case PCMK_OCF_SIGNAL:
340 return "OCF_SIGNAL";
342 return "OCF_NOT_SUPPORTED";
343 case PCMK_OCF_PENDING:
344 return "OCF_PENDING";
346 return "OCF_CANCELLED";
347 case PCMK_OCF_TIMEOUT:
348 return "OCF_TIMEOUT";
350 return "OCF_OTHER_ERROR";
352 return "OCF_DEGRADED";
354 return "promoted (degraded)";
355 default:
356 return "unknown";
357 }
358 }
359
368 static inline enum ocf_exitcode
369 services_get_ocf_exitcode(const char *action, int lsb_exitcode)
370 {
371 /* For non-status actions, LSB and OCF share error code meaning <= 7 */
372 if (action && strcmp(action, "status") && strcmp(action, "monitor")) {
375 }
376 return (enum ocf_exitcode)lsb_exitcode;
377 }
378
379 /* status has different return codes */
380 switch (lsb_exitcode) {
382 return PCMK_OCF_OK;
391 }
393 }
394
395# ifdef __cplusplus
396}
397# endif
398
399#endif /* __PCMK_SERVICES__ */
uint64_t flags
Definition remote.c:3
unsigned int timeout
Definition pcmk_fence.c:32
char * name
Definition pcmk_fence.c:31
const char * action
Definition pcmk_fence.c:30
Function and executable result codes.
ocf_exitcode
Definition results.h:150
@ PCMK_OCF_INSUFFICIENT_PRIV
Definition results.h:155
@ PCMK_OCF_FAILED_PROMOTED
Definition results.h:160
@ PCMK_OCF_RUNNING_PROMOTED
Definition results.h:159
@ PCMK_OCF_DEGRADED_PROMOTED
Definition results.h:167
@ PCMK_OCF_UNIMPLEMENT_FEATURE
Definition results.h:154
@ PCMK_OCF_NOT_CONFIGURED
Definition results.h:157
@ PCMK_OCF_SIGNAL
Definition results.h:171
@ PCMK_OCF_DEGRADED
Definition results.h:166
@ PCMK_OCF_NOT_INSTALLED
Definition results.h:156
@ PCMK_OCF_UNKNOWN_ERROR
Definition results.h:152
@ PCMK_OCF_PENDING
Definition results.h:173
@ PCMK_OCF_CANCELLED
Definition results.h:174
@ PCMK_OCF_INVALID_PARAM
Definition results.h:153
@ PCMK_OCF_NOT_RUNNING
Definition results.h:158
@ PCMK_OCF_OK
Definition results.h:151
@ PCMK_OCF_TIMEOUT
Definition results.h:175
@ PCMK_OCF_NOT_SUPPORTED
Definition results.h:172
@ PCMK_OCF_OTHER_ERROR
Definition results.h:176
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.
Definition services.c:390
const char * resources_find_service_class(const char *agent)
Find first service class that can provide a specified agent.
Definition services.c:71
op_status
Definition services.h:86
@ PCMK_LRM_OP_DONE
Definition services.h:89
@ PCMK_LRM_OP_NOT_INSTALLED
Definition services.h:96
@ PCMK_LRM_OP_TIMEOUT
Definition services.h:91
@ PCMK_LRM_OP_INVALID
Definition services.h:98
@ PCMK_LRM_OP_CANCELLED
Definition services.h:90
@ PCMK_LRM_OP_ERROR_HARD
Definition services.h:94
@ PCMK_LRM_OP_ERROR_FATAL
Definition services.h:95
@ PCMK_LRM_OP_UNKNOWN
Definition services.h:87
@ PCMK_LRM_OP_PENDING
Definition services.h:88
@ PCMK_LRM_OP_NOT_CONNECTED
Definition services.h:97
@ PCMK_LRM_OP_NOTSUPPORTED
Definition services.h:92
@ PCMK_LRM_OP_ERROR
Definition services.h:93
gboolean resources_agent_exists(const char *standard, const char *provider, const char *agent)
Definition services.c:1073
gboolean services_action_kick(const char *name, const char *action, guint interval_ms)
Definition services.c:658
int services_action_user(svc_action_t *op, const char *user)
Set the user and group that an action will execute as.
Definition services.c:420
GList * services_list(void)
GList * resources_list_agents(const char *standard, const char *provider)
Get a list of resource agents.
Definition services.c:1017
svc_action_flags
Definition services.h:112
@ SVC_ACTION_NON_BLOCKED
Definition services.h:115
@ SVC_ACTION_LEAVE_GROUP
Definition services.h:114
svc_action_t * services_action_create(const char *name, const char *action, guint interval_ms, int timeout)
lsb_status_exitcode
Definition services.h:74
@ PCMK_LSB_STATUS_NOT_INSTALLED
Definition services.h:82
@ PCMK_LSB_STATUS_OK
Definition services.h:75
@ PCMK_LSB_STATUS_VAR_PID
Definition services.h:76
@ PCMK_LSB_STATUS_INSUFFICIENT_PRIV
Definition services.h:83
@ PCMK_LSB_STATUS_UNKNOWN
Definition services.h:79
@ PCMK_LSB_STATUS_VAR_LOCK
Definition services.h:77
@ PCMK_LSB_STATUS_NOT_RUNNING
Definition services.h:78
nagios_exitcode
Definition services.h:101
@ NAGIOS_INSUFFICIENT_PRIV
Definition services.h:108
@ NAGIOS_STATE_UNKNOWN
Definition services.h:105
@ NAGIOS_STATE_CRITICAL
Definition services.h:104
@ NAGIOS_STATE_OK
Definition services.h:102
@ NAGIOS_STATE_DEPENDENT
Definition services.h:106
@ NAGIOS_STATE_WARNING
Definition services.h:103
@ NAGIOS_NOT_INSTALLED
Definition services.h:109
gboolean services_action_async(svc_action_t *op, void(*action_callback)(svc_action_t *))
Definition services.c:813
gboolean services_action_cancel(const char *name, const char *action, guint interval_ms)
Cancel a recurring action.
Definition services.c:591
gboolean services_action_sync(svc_action_t *op)
Definition services.c:918
GList * resources_list_standards(void)
Definition services.c:959
void services_action_free(svc_action_t *op)
Definition services.c:513
lsb_exitcode
Definition services.h:60
@ PCMK_LSB_OK
Definition services.h:61
@ PCMK_LSB_NOT_RUNNING
Definition services.h:68
@ PCMK_LSB_UNIMPLEMENT_FEATURE
Definition services.h:64
@ PCMK_LSB_NOT_INSTALLED
Definition services.h:66
@ PCMK_LSB_UNKNOWN_ERROR
Definition services.h:62
@ PCMK_LSB_NOT_CONFIGURED
Definition services.h:67
@ PCMK_LSB_INVALID_PARAM
Definition services.h:63
@ PCMK_LSB_INSUFFICIENT_PRIV
Definition services.h:65
gboolean services_alert_async(svc_action_t *action, void(*cb)(svc_action_t *op))
Execute an alert agent action.
Definition services.c:438
struct svc_action_s svc_action_t
svc_action_t * resources_action_create(const char *name, const char *standard, const char *provider, const char *agent, const char *action, guint interval_ms, int timeout, GHashTable *params, enum svc_action_flags flags)
Create a new resource action.
Definition services.c:335
void services_action_cleanup(svc_action_t *op)
Definition services.c:474
GList * resources_list_providers(const char *standard)
Get a list of providers.
Definition services.c:1007
svc_action_t * services_action_create_generic(const char *exec, const char *args[])
Definition services.c:352
GList * get_directory_list(const char *root, gboolean files, gboolean executable)
Get a list of files or directories in a given path.
Definition services.c:953
gboolean services_action_async_fork_notify(svc_action_t *op, void(*action_callback)(svc_action_t *), void(*action_fork_callback)(svc_action_t *))
Definition services.c:781
char * id
Definition services.h:120
void * cb_data
Definition services.h:153
char * provider
Definition services.h:126
char * agent
Definition services.h:127
char * standard
Definition services.h:125
char * rsc
Definition services.h:121
char * action
Definition services.h:122
enum svc_action_flags flags
Definition services.h:142
int expected_rc
Definition services.h:140
char * stderr_data
Definition services.h:144
GHashTable * params
Definition services.h:130
int synchronous
Definition services.h:141
char * stdout_data
Definition services.h:145
guint interval_ms
Definition services.h:123
svc_action_private_t * opaque
Definition services.h:155