1 /* 2 * Copyright 2019-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 PACEMAKER__H 11 # define PACEMAKER__H 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 /** 18 * \file 19 * \brief High Level API 20 * \ingroup pacemaker 21 */ 22 23 # include <glib.h> 24 # include <libxml/tree.h> 25 # include <crm/pengine/pe_types.h> 26 27 # include <crm/stonith-ng.h> 28 29 /*! 30 * \brief Get controller status 31 * 32 * \param[in,out] xml The destination for the result, as an XML tree. 33 * \param[in] dest_node Destination node for request 34 * \param[in] message_timeout_ms Message timeout 35 * 36 * \return Standard Pacemaker return code 37 */ 38 int pcmk_controller_status(xmlNodePtr *xml, char *dest_node, unsigned int message_timeout_ms); 39 40 /*! 41 * \brief Get designated controller 42 * 43 * \param[in,out] xml The destination for the result, as an XML tree. 44 * \param[in] message_timeout_ms Message timeout 45 * 46 * \return Standard Pacemaker return code 47 */ 48 int pcmk_designated_controller(xmlNodePtr *xml, unsigned int message_timeout_ms); 49 50 /*! 51 * \brief Get pacemakerd status 52 * 53 * \param[in,out] xml The destination for the result, as an XML tree. 54 * \param[in] ipc_name IPC name for request 55 * \param[in] message_timeout_ms Message timeout 56 * 57 * \return Standard Pacemaker return code 58 */ 59 int pcmk_pacemakerd_status(xmlNodePtr *xml, char *ipc_name, unsigned int message_timeout_ms); 60 61 /*! 62 * \brief Calculate and output resource operation digests 63 * 64 * \param[out] xml Where to store XML with result 65 * \param[in] rsc Resource to calculate digests for 66 * \param[in] node Node whose operation history should be used 67 * \param[in] overrides Hash table of configuration parameters to override 68 * \param[in] data_set Cluster working set (with status) 69 * 70 * \return Standard Pacemaker return code 71 */ 72 int pcmk_resource_digests(xmlNodePtr *xml, pe_resource_t *rsc, 73 pe_node_t *node, GHashTable *overrides, 74 pe_working_set_t *data_set); 75 76 /*! 77 * \brief Get nodes list 78 * 79 * \param[in,out] xml The destination for the result, as an XML tree. 80 * \param[in] node_types Node type(s) to return (default: all) 81 * 82 * \return Standard Pacemaker return code 83 */ 84 int pcmk_list_nodes(xmlNodePtr *xml, char *node_types); 85 86 #ifdef BUILD_PUBLIC_LIBPACEMAKER 87 88 /*! 89 * \brief Perform a STONITH action. 90 * 91 * \param[in] st A connection to the STONITH API. 92 * \param[in] target The node receiving the action. 93 * \param[in] action The action to perform. 94 * \param[in] name Who requested the fence action? 95 * \param[in] timeout How long to wait for the operation to complete (in ms). 96 * \param[in] tolerance If a successful action for \p target happened within 97 * this many ms, return 0 without performing the action 98 * again. 99 * \param[in] delay Apply a fencing delay. Value -1 means disable also any 100 * static/random fencing delays from pcmk_delay_base/max. 101 * 102 * \return Standard Pacemaker return code 103 */ 104 int pcmk_fence_action(stonith_t *st, const char *target, const char *action, 105 const char *name, unsigned int timeout, unsigned int tolerance, 106 int delay); 107 108 /*! 109 * \brief List the fencing operations that have occurred for a specific node. 110 * 111 * \note If \p xml is not NULL, it will be freed first and the previous 112 * contents lost. 113 * 114 * \param[in,out] xml The destination for the result, as an XML tree. 115 * \param[in] st A connection to the STONITH API. 116 * \param[in] target The node to get history for. 117 * \param[in] timeout How long to wait for the operation to complete (in ms). 118 * \param[in] quiet Suppress most output. 119 * \param[in] verbose Include additional output. 120 * \param[in] broadcast Gather fencing history from all nodes. 121 * \param[in] cleanup Clean up fencing history after listing. 122 * 123 * \return Standard Pacemaker return code 124 */ 125 int pcmk_fence_history(xmlNodePtr *xml, stonith_t *st, char *target, 126 unsigned int timeout, bool quiet, int verbose, 127 bool broadcast, bool cleanup); 128 129 /*! 130 * \brief List all installed STONITH agents. 131 * 132 * \note If \p xml is not NULL, it will be freed first and the previous 133 * contents lost. 134 * 135 * \param[in,out] xml The destination for the result, as an XML tree. 136 * \param[in] st A connection to the STONITH API. 137 * \param[in] timeout How long to wait for the operation to complete (in ms). 138 * 139 * \return Standard Pacemaker return code 140 */ 141 int pcmk_fence_installed(xmlNodePtr *xml, stonith_t *st, unsigned int timeout); 142 143 /*! 144 * \brief When was a device last fenced? 145 * 146 * \note If \p xml is not NULL, it will be freed first and the previous 147 * contents lost. 148 * 149 * \param[in,out] xml The destination for the result, as an XML tree. 150 * \param[in] target The node that was fenced. 151 * \param[in] as_nodeid 152 * 153 * \return Standard Pacemaker return code 154 */ 155 int pcmk_fence_last(xmlNodePtr *xml, const char *target, bool as_nodeid); 156 157 /*! 158 * \brief List nodes that can be fenced. 159 * 160 * \note If \p xml is not NULL, it will be freed first and the previous 161 * contents lost. 162 * 163 * \param[in,out] xml The destination for the result, as an XML tree 164 * \param[in] st A connection to the STONITH API 165 * \param[in] device_id Resource ID of fence device to check 166 * \param[in] timeout How long to wait for the operation to complete (in ms) 167 * 168 * \return Standard Pacemaker return code 169 */ 170 int pcmk_fence_list_targets(xmlNodePtr *xml, stonith_t *st, 171 const char *device_id, unsigned int timeout); 172 173 /*! 174 * \brief Get metadata for a resource. 175 * 176 * \note If \p xml is not NULL, it will be freed first and the previous 177 * contents lost. 178 * 179 * \param[in,out] xml The destination for the result, as an XML tree. 180 * \param[in] st A connection to the STONITH API. 181 * \param[in] agent The fence agent to get metadata for. 182 * \param[in] timeout How long to wait for the operation to complete (in ms). 183 * 184 * \return Standard Pacemaker return code 185 */ 186 int pcmk_fence_metadata(xmlNodePtr *xml, stonith_t *st, char *agent, 187 unsigned int timeout); 188 189 /*! 190 * \brief List registered fence devices. 191 * 192 * \note If \p xml is not NULL, it will be freed first and the previous 193 * contents lost. 194 * 195 * \param[in,out] xml The destination for the result, as an XML tree. 196 * \param[in] st A connection to the STONITH API. 197 * \param[in] target If not NULL, only return devices that can fence 198 * this node. 199 * \param[in] timeout How long to wait for the operation to complete (in ms). 200 * 201 * \return Standard Pacemaker return code 202 */ 203 int pcmk_fence_registered(xmlNodePtr *xml, stonith_t *st, char *target, 204 unsigned int timeout); 205 206 /*! 207 * \brief Register a fencing level for a specific node, node regex, or attribute. 208 * 209 * \p target can take three different forms: 210 * - name=value, in which case \p target is an attribute. 211 * - @pattern, in which case \p target is a node regex. 212 * - Otherwise, \p target is a node name. 213 * 214 * \param[in] st A connection to the STONITH API. 215 * \param[in] target The object to register a fencing level for. 216 * \param[in] fence_level Index number of level to add. 217 * \param[in] devices Devices to use in level. 218 * 219 * \return Standard Pacemaker return code 220 */ 221 int pcmk_fence_register_level(stonith_t *st, char *target, int fence_level, 222 stonith_key_value_t *devices); 223 224 /*! 225 * \brief Unregister a fencing level for a specific node, node regex, or attribute. 226 * 227 * \p target can take three different forms: 228 * - name=value, in which case \p target is an attribute. 229 * - @pattern, in which case \p target is a node regex. 230 * - Otherwise, \p target is a node name. 231 * 232 * \param[in] st A connection to the STONITH API. 233 * \param[in] target The object to unregister a fencing level for. 234 * \param[in] fence_level Index number of level to remove. 235 * 236 * \return Standard Pacemaker return code 237 */ 238 int pcmk_fence_unregister_level(stonith_t *st, char *target, int fence_level); 239 240 /*! 241 * \brief Validate a STONITH device configuration. 242 * 243 * \note If \p xml is not NULL, it will be freed first and the previous 244 * contents lost. 245 * 246 * \param[in,out] xml The destination for the result, as an XML tree. 247 * \param[in] st A connection to the STONITH API. 248 * \param[in] agent The agent to validate (for example, "fence_xvm"). 249 * \param[in] id STONITH device ID (may be NULL). 250 * \param[in] params STONITH device configuration parameters. 251 * \param[in] timeout How long to wait for the operation to complete (in ms). 252 * 253 * \return Standard Pacemaker return code 254 */ 255 int pcmk_fence_validate(xmlNodePtr *xml, stonith_t *st, const char *agent, 256 const char *id, stonith_key_value_t *params, 257 unsigned int timeout); 258 259 #endif 260 261 #ifdef __cplusplus 262 } 263 #endif 264 265 #endif