root/include/pcmki/pcmki_fence.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 /*
   2  * Copyright 2019-2025 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 #ifndef PCMK__PCMKI_PCMKI_FENCE__H
  10 #define PCMK__PCMKI_PCMKI_FENCE__H
  11 
  12 #include <crm/stonith-ng.h>
  13 #include <crm/common/output_internal.h>
  14 
  15 #ifdef __cplusplus
  16 extern "C" {
  17 #endif
  18 
  19 /*!
  20  * \brief Control how much of the fencing history is output.
  21  */
  22 enum pcmk__fence_history {
  23     pcmk__fence_history_none,
  24     pcmk__fence_history_reduced,
  25     pcmk__fence_history_full
  26 };
  27 
  28 /*!
  29  * \brief Ask the cluster to perform fencing
  30  *
  31  * \note This is the internal version of pcmk_request_fencing(). External users
  32  *       of the pacemaker API should use that function instead.
  33  *
  34  * \param[in,out] st        A connection to the fencer API
  35  * \param[in]     target    The node that should be fenced
  36  * \param[in]     action    The fencing action (on, off, reboot) to perform
  37  * \param[in]     name      Who requested the fence action?
  38  * \param[in]     timeout   How long to wait for operation to complete (in ms)
  39  * \param[in]     tolerance If a successful action for \p target happened within
  40  *                          this many milliseconds, return success without
  41  *                          performing the action again
  42  * \param[in]     delay     Apply this delay (in milliseconds) before initiating
  43  *                          fencing action (a value of -1 applies no delay and
  44  *                          disables any fencing delay from pcmk_delay_base and
  45  *                          pcmk_delay_max)
  46  * \param[out]     reason   If not NULL, where to put descriptive failure reason
  47  *
  48  * \return Standard Pacemaker return code
  49  * \note If \p reason is not NULL, the caller is responsible for freeing its
  50  *       returned value.
  51  * \todo delay is eventually used with pcmk__create_timer() and should be guint
  52  */
  53 int pcmk__request_fencing(stonith_t *st, const char *target, const char *action,
  54                           const char *name, unsigned int timeout,
  55                           unsigned int tolerance, int delay, char **reason);
  56 
  57 /*!
  58  * \brief List the fencing operations that have occurred for a specific node
  59  *
  60  * \note This is the internal version of pcmk_fence_history().  External users
  61  *       of the pacemaker API should use that function instead.
  62  *
  63  * \note \p out should be initialized with pcmk__output_new() before calling this
  64  *       function and destroyed with out->finish and pcmk__output_free() before
  65  *       reusing it with any other functions in this library.
  66  *
  67  * \param[in,out] out       The output functions structure
  68  * \param[in,out] st        A connection to the fencer API
  69  * \param[in]     target    The node to get history for
  70  * \param[in]     timeout   How long to wait for operation to complete (in ms)
  71  * \param[in]     verbose   Include additional output
  72  * \param[in]     broadcast Gather fencing history from all nodes
  73  * \param[in]     cleanup   Clean up fencing history after listing
  74  *
  75  * \return Standard Pacemaker return code
  76  */
  77 int pcmk__fence_history(pcmk__output_t *out, stonith_t *st, const char *target,
  78                         unsigned int timeout, int verbose, bool broadcast,
  79                         bool cleanup);
  80 
  81 /*!
  82  * \brief List all installed fence agents
  83  *
  84  * \note This is the internal version of pcmk_fence_installed().  External users
  85  *       of the pacemaker API should use that function instead.
  86  *
  87  * \note \p out should be initialized with pcmk__output_new() before calling this
  88  *       function and destroyed with out->finish and pcmk__output_free() before
  89  *       reusing it with any other functions in this library.
  90  *
  91  * \param[in,out] out     The output functions structure
  92  * \param[in,out] st      A connection to the fencer API
  93  *
  94  * \return Standard Pacemaker return code
  95  */
  96 int pcmk__fence_installed(pcmk__output_t *out, stonith_t *st);
  97 
  98 /*!
  99  * \brief When was a device last fenced?
 100  *
 101  * \note This is the internal version of pcmk_fence_last().  External users
 102  *       of the pacemaker API should use that function instead.
 103  *
 104  * \note \p out should be initialized with pcmk__output_new() before calling this
 105  *       function and destroyed with out->finish and pcmk__output_free() before
 106  *       reusing it with any other functions in this library.
 107  *
 108  * \param[in,out] out       The output functions structure.
 109  * \param[in]     target    The node that was fenced.
 110  * \param[in]     as_nodeid
 111  *
 112  * \return Standard Pacemaker return code
 113  */
 114 int pcmk__fence_last(pcmk__output_t *out, const char *target, bool as_nodeid);
 115 
 116 /*!
 117  * \brief List nodes that can be fenced
 118  *
 119  * \note This is the internal version of pcmk_fence_list_targets().  External users
 120  *       of the pacemaker API should use that function instead.
 121  *
 122  * \note \p out should be initialized with pcmk__output_new() before calling this
 123  *       function and destroyed with out->finish and pcmk__output_free() before
 124  *       reusing it with any other functions in this library.
 125  *
 126  * \param[in,out] out        The output functions structure
 127  * \param[in,out] st         A connection to the fencer API
 128  * \param[in]     device_id  Resource ID of fence device to check
 129  * \param[in]     timeout    How long to wait for operation to complete (in ms)
 130  *
 131  * \return Standard Pacemaker return code
 132  */
 133 int pcmk__fence_list_targets(pcmk__output_t *out, stonith_t *st,
 134                              const char *device_id, unsigned int timeout);
 135 
 136 /*!
 137  * \brief Get metadata for a fence agent
 138  *
 139  * \note This is the internal version of pcmk_fence_metadata().  External users
 140  *       of the pacemaker API should use that function instead.
 141  *
 142  * \note \p out should be initialized with pcmk__output_new() before calling this
 143  *       function and destroyed with out->finish and pcmk__output_free() before
 144  *       reusing it with any other functions in this library.
 145  *
 146  * \param[in,out] out     The output functions structure
 147  * \param[in,out] st      A connection to the fencer API
 148  * \param[in]     agent   The fence agent to get metadata for
 149  * \param[in]     timeout How long to wait for the operation to complete (in ms)
 150  *
 151  * \return Standard Pacemaker return code
 152  */
 153 int pcmk__fence_metadata(pcmk__output_t *out, stonith_t *st, const char *agent,
 154                          unsigned int timeout);
 155 
 156 /*!
 157  * \brief List registered fence devices
 158  *
 159  * \note This is the internal version of pcmk_fence_metadata().  External users
 160  *       of the pacemaker API should use that function instead.
 161  *
 162  * \note \p out should be initialized with pcmk__output_new() before calling this
 163  *       function and destroyed with out->finish and pcmk__output_free() before
 164  *       reusing it with any other functions in this library.
 165  *
 166  * \param[in,out] out     The output functions structure
 167  * \param[in,out] st      A connection to the fencer API
 168  * \param[in]     target  If not NULL, return only devices that can fence this
 169  * \param[in]     timeout How long to wait for the operation to complete (in ms)
 170  *
 171  * \return Standard Pacemaker return code
 172  */
 173 int pcmk__fence_registered(pcmk__output_t *out, stonith_t *st,
 174                            const char *target, unsigned int timeout);
 175 
 176 /*!
 177  * \brief Register a fencing level for a specific node, node regex, or attribute
 178  *
 179  * \note This is the internal version of pcmk_fence_register_level().  External users
 180  *       of the pacemaker API should use that function instead.
 181  *
 182  * \p target can take three different forms:
 183  *   - name=value, in which case \p target is an attribute.
 184  *   - @pattern, in which case \p target is a node regex.
 185  *   - Otherwise, \p target is a node name.
 186  *
 187  * \param[in,out] st          A connection to the fencer API
 188  * \param[in]     target      The object to register a fencing level for
 189  * \param[in]     fence_level Index number of level to add
 190  * \param[in]     devices     Devices to use in level as a list of char *
 191  *
 192  * \return Standard Pacemaker return code
 193  */
 194 int pcmk__fence_register_level(stonith_t *st, const char *target,
 195                                int fence_level, GList *devices);
 196 
 197 /*!
 198  * \brief Unregister a fencing level for specific node, node regex, or attribute
 199  *
 200  * \note This is the internal version of pcmk_fence_unregister_level().  External users
 201  *       of the pacemaker API should use that function instead.
 202  *
 203  * \p target can take three different forms:
 204  *   - name=value, in which case \p target is an attribute.
 205  *   - @pattern, in which case \p target is a node regex.
 206  *   - Otherwise, \p target is a node name.
 207  *
 208  * \param[in,out] st          A connection to the fencer API
 209  * \param[in]     target      The object to unregister a fencing level for
 210  * \param[in]     fence_level Index number of level to remove
 211  *
 212  * \return Standard Pacemaker return code
 213  */
 214 int pcmk__fence_unregister_level(stonith_t *st, const char *target,
 215                                  int fence_level);
 216 
 217 /*!
 218  * \brief Validate a fence device configuration
 219  *
 220  * \note This is the internal version of pcmk_stonith_validate().  External users
 221  *       of the pacemaker API should use that function instead.
 222  *
 223  * \note \p out should be initialized with pcmk__output_new() before calling this
 224  *       function and destroyed with out->finish and pcmk__output_free() before
 225  *       reusing it with any other functions in this library.
 226  *
 227  * \param[in,out] out     The output functions structure
 228  * \param[in,out] st      A connection to the fencer API
 229  * \param[in]     agent   The agent to validate (for example, "fence_xvm")
 230  * \param[in]     id      Fence device ID (may be NULL)
 231  * \param[in]     params  Fence device configuration parameters
 232  * \param[in]     timeout How long to wait for the operation to complete (in ms)
 233  *
 234  * \return Standard Pacemaker return code
 235  */
 236 int pcmk__fence_validate(pcmk__output_t *out, stonith_t *st, const char *agent,
 237                          const char *id, GHashTable *params, unsigned int timeout);
 238 
 239 /*!
 240  * \brief Fetch fencing history, optionally reducing it
 241  *
 242  * \param[in,out] st               A connection to the fencer API
 243  * \param[out]    stonith_history  Destination for storing the history
 244  * \param[in]     fence_history    How much of the fencing history to display
 245  *
 246  * \return Standard Pacemaker return code
 247  */
 248 int
 249 pcmk__get_fencing_history(stonith_t *st, stonith_history_t **stonith_history,
 250                           enum pcmk__fence_history fence_history);
 251 
 252 #ifdef __cplusplus
 253 }
 254 #endif
 255 
 256 #endif // PCMK__PCMKI_PCMKI_FENCE__H

/* [previous][next][first][last][top][bottom][index][help] */