1 /* 2 * Copyright 2022 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__CRM_COMMON_IPC_ATTRD_INTERNAL__H 11 # define PCMK__CRM_COMMON_IPC_ATTRD_INTERNAL__H 12 13 #include <glib.h> // GList 14 #include <crm/common/ipc.h> // pcmk_ipc_api_t 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 //! Possible types of attribute manager replies 21 enum pcmk__attrd_api_reply { 22 pcmk__attrd_reply_unknown, 23 pcmk__attrd_reply_query, 24 }; 25 26 // Information passed with pcmk__attrd_reply_query 27 typedef struct { 28 const char *node; 29 const char *name; 30 const char *value; 31 } pcmk__attrd_query_pair_t; 32 33 /*! 34 * Attribute manager reply passed to event callback 35 * 36 * \note The pointers in the reply are only guaranteed to be meaningful for the 37 * execution of the callback; if the values are needed for later, the 38 * callback should copy them. 39 */ 40 typedef struct { 41 enum pcmk__attrd_api_reply reply_type; 42 43 union { 44 // pcmk__attrd_reply_query 45 GList *pairs; 46 } data; 47 } pcmk__attrd_api_reply_t; 48 49 /*! 50 * \internal 51 * \brief Send a request to pacemaker-attrd to clear resource failure 52 * 53 * \param[in,out] api pacemaker-attrd IPC object 54 * \param[in] node Affect only this node (or NULL for all nodes) 55 * \param[in] resource Name of resource to clear (or NULL for all) 56 * \param[in] operation Name of operation to clear (or NULL for all) 57 * \param[in] interval_spec If operation is not NULL, its interval 58 * \param[in] user_name ACL user to pass to pacemaker-attrd 59 * \param[in] options Bitmask of pcmk__node_attr_opts 60 * 61 * \note If \p api is NULL, a new temporary connection will be created 62 * just for this operation and destroyed afterwards. If \p api is 63 * not NULL but is not yet connected to pacemaker-attrd, the object 64 * will be connected for this operation and left connected afterwards. 65 * This allows for reusing an IPC connection. 66 * 67 * \return Standard Pacemaker return code 68 */ 69 int pcmk__attrd_api_clear_failures(pcmk_ipc_api_t *api, const char *node, 70 const char *resource, const char *operation, 71 const char *interval_spec, const char *user_name, 72 uint32_t options); 73 74 /*! 75 * \internal 76 * 77 * \brief Delete a previously set attribute by setting its value to NULL 78 * 79 * \param[in,out] api Connection to pacemaker-attrd (or NULL to use 80 * a temporary new connection) 81 * \param[in] node Delete attribute for this node (or NULL for local) 82 * \param[in] name Attribute name 83 * \param[in] options Bitmask of pcmk__node_attr_opts 84 * 85 * \return Standard Pacemaker return code 86 */ 87 int pcmk__attrd_api_delete(pcmk_ipc_api_t *api, const char *node, const char *name, 88 uint32_t options); 89 90 /*! 91 * \internal 92 * \brief Purge a node from pacemaker-attrd 93 * 94 * \param[in,out] api pacemaker-attrd IPC object 95 * \param[in] node Node to remove 96 * 97 * \note If \p api is NULL, a new temporary connection will be created 98 * just for this operation and destroyed afterwards. If \p api is 99 * not NULL but is not yet connected to pacemaker-attrd, the object 100 * will be connected for this operation and left connected afterwards. 101 * This allows for reusing an IPC connection. 102 * 103 * \return Standard Pacemaker return code 104 */ 105 int pcmk__attrd_api_purge(pcmk_ipc_api_t *api, const char *node); 106 107 /*! 108 * \internal 109 * \brief Get the value of an attribute from pacemaker-attrd 110 * 111 * \param[in,out] api Connection to pacemaker-attrd 112 * \param[in] node Look up the attribute for this node 113 * (or NULL for all nodes) 114 * \param[in] name Attribute name 115 * \param[in] options Bitmask of pcmk__node_attr_opts 116 * 117 * \return Standard Pacemaker return code 118 */ 119 int pcmk__attrd_api_query(pcmk_ipc_api_t *api, const char *node, const char *name, 120 uint32_t options); 121 122 /*! 123 * \internal 124 * \brief Tell pacemaker-attrd to update the CIB with current values 125 * 126 * \param[in,out] api pacemaker-attrd IPC object 127 * \param[in] node Affect only this node (or NULL for all nodes) 128 * 129 * \note If \p api is NULL, a new temporary connection will be created 130 * just for this operation and destroyed afterwards. If \p api is 131 * not NULL but is not yet connected to pacemaker-attrd, the object 132 * will be connected for this operation and left connected afterwards. 133 * This allows for reusing an IPC connection. 134 * 135 * \return Standard Pacemaker return code 136 */ 137 int pcmk__attrd_api_refresh(pcmk_ipc_api_t *api, const char *node); 138 139 /*! 140 * \internal 141 * \brief Update an attribute's value, time to wait, or both 142 * 143 * \param[in,out] api pacemaker-attrd IPC object 144 * \param[in] node Affect only this node (or NULL for current node) 145 * \param[in] name Attribute name 146 * \param[in] value The attribute's new value, or NULL to unset 147 * \param[in] dampen The new time to wait value, or NULL to unset 148 * \param[in] set ID of attribute set to use (or NULL for first) 149 * \param[in] user_name ACL user to pass to pacemaker-attrd 150 * \param[in] options Bitmask of pcmk__node_attr_opts 151 * 152 * \note If \p api is NULL, a new temporary connection will be created 153 * just for this operation and destroyed afterwards. If \p api is 154 * not NULL but is not yet connected to pacemaker-attrd, the object 155 * will be connected for this operation and left connected afterwards. 156 * This allows for reusing an IPC connection. 157 * 158 * \return Standard Pacemaker return code 159 */ 160 int pcmk__attrd_api_update(pcmk_ipc_api_t *api, const char *node, const char *name, 161 const char *value, const char *dampen, const char *set, 162 const char *user_name, uint32_t options); 163 164 /*! 165 * \internal 166 * \brief Like pcmk__attrd_api_update, but for multiple attributes at once 167 * 168 * \param[in,out] api pacemaker-attrd IPC object 169 * \param[in,out] attrs A list of pcmk__attr_query_pair_t structs 170 * \param[in] dampen The new time to wait value, or NULL to unset 171 * \param[in] set ID of attribute set to use (or NULL for first) 172 * \param[in] user_name ACL user to pass to pacemaker-attrd 173 * \param[in] options Bitmask of pcmk__node_attr_opts 174 * 175 * \note If \p api is NULL, a new temporary connection will be created 176 * just for this operation and destroyed afterwards. If \p api is 177 * not NULL but is not yet connected to pacemaker-attrd, the object 178 * will be connected for this operation and left connected afterwards. 179 * This allows for reusing an IPC connection. 180 * 181 * \note Not all attrd versions support setting multiple attributes at once. 182 * For those servers that do not, this function will fall back to just 183 * sending a separate IPC request for each attribute. 184 * 185 * \return Standard Pacemaker return code 186 */ 187 int pcmk__attrd_api_update_list(pcmk_ipc_api_t *api, GList *attrs, 188 const char *dampen, const char *set, 189 const char *user_name, uint32_t options); 190 191 #ifdef __cplusplus 192 } 193 #endif 194 195 #endif // PCMK__CRM_COMMON_IPC_ATTRD_INTERNAL__H