From 0700a4814a598d0e2e9bd54f970c6d3ff66184df Mon Sep 17 00:00:00 2001 From: Oyvind Albrigtsen Date: Tue, 24 Nov 2020 16:17:34 +0100 Subject: [PATCH 1/2] Refactor: move stonith__register_messages() call from pcmk__out_prologue() to the calling functions --- lib/pacemaker/pcmk_fence.c | 14 ++++++++++++++ lib/pacemaker/pcmk_output.c | 1 - 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/pacemaker/pcmk_fence.c b/lib/pacemaker/pcmk_fence.c index 7beedff..d591379 100644 --- a/lib/pacemaker/pcmk_fence.c +++ b/lib/pacemaker/pcmk_fence.c @@ -247,6 +247,8 @@ pcmk_fence_history(xmlNodePtr *xml, stonith_t *st, char *target, unsigned int ti return rc; } + stonith__register_messages(out); + out->quiet = quiet; rc = pcmk__fence_history(out, st, target, timeout, verbose, broadcast, cleanup); @@ -287,6 +289,8 @@ pcmk_fence_installed(xmlNodePtr *xml, stonith_t *st, unsigned int timeout) { return rc; } + stonith__register_messages(out); + rc = pcmk__fence_installed(out, st, timeout); pcmk__out_epilogue(out, xml, rc); return rc; @@ -321,6 +325,8 @@ pcmk_fence_last(xmlNodePtr *xml, const char *target, bool as_nodeid) { return rc; } + stonith__register_messages(out); + rc = pcmk__fence_last(out, target, as_nodeid); pcmk__out_epilogue(out, xml, rc); return rc; @@ -364,6 +370,8 @@ pcmk_fence_list_targets(xmlNodePtr *xml, stonith_t *st, const char *device_id, return rc; } + stonith__register_messages(out); + rc = pcmk__fence_list_targets(out, st, device_id, timeout); pcmk__out_epilogue(out, xml, rc); return rc; @@ -398,6 +406,8 @@ pcmk_fence_metadata(xmlNodePtr *xml, stonith_t *st, char *agent, return rc; } + stonith__register_messages(out); + rc = pcmk__fence_metadata(out, st, agent, timeout); pcmk__out_epilogue(out, xml, rc); return rc; @@ -442,6 +452,8 @@ pcmk_fence_registered(xmlNodePtr *xml, stonith_t *st, char *target, return rc; } + stonith__register_messages(out); + rc = pcmk__fence_registered(out, st, target, timeout); pcmk__out_epilogue(out, xml, rc); return rc; @@ -501,6 +513,8 @@ pcmk_fence_validate(xmlNodePtr *xml, stonith_t *st, const char *agent, return rc; } + stonith__register_messages(out); + rc = pcmk__fence_validate(out, st, agent, id, params, timeout); pcmk__out_epilogue(out, xml, rc); return rc; diff --git a/lib/pacemaker/pcmk_output.c b/lib/pacemaker/pcmk_output.c index 74a7c59..a637031 100644 --- a/lib/pacemaker/pcmk_output.c +++ b/lib/pacemaker/pcmk_output.c @@ -34,7 +34,6 @@ pcmk__out_prologue(pcmk__output_t **out, xmlNodePtr *xml) { return rc; } - stonith__register_messages(*out); return rc; } -- 1.8.3.1 From 27677a6d03ba42aeb0d6a971df9d9b8861232903 Mon Sep 17 00:00:00 2001 From: Oyvind Albrigtsen Date: Tue, 24 Nov 2020 16:19:59 +0100 Subject: [PATCH 2/2] API: libpacemaker: add public API functions for cluster queries --- include/pacemaker.h | 45 +++++++++++++++++++++- lib/pacemaker/pcmk_cluster_queries.c | 75 ++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 2 deletions(-) diff --git a/include/pacemaker.h b/include/pacemaker.h index a1e76d0..b2a73cd 100644 --- a/include/pacemaker.h +++ b/include/pacemaker.h @@ -14,8 +14,6 @@ extern "C" { #endif -#ifdef BUILD_PUBLIC_LIBPACEMAKER - /** * \file * \brief High Level API @@ -26,6 +24,49 @@ extern "C" { # include /*! + * \brief Get controller status + * + * \param[in,out] xml The destination for the result, as an XML tree. + * \param[in] dest_node Destination node for request + * \param[in] message_timeout_ms Message timeout + * + * \return Standard Pacemaker return code + */ +int pcmk_controller_status(xmlNodePtr *xml, char *dest_node, unsigned int message_timeout_ms); + +/*! + * \brief Get designated controller + * + * \param[in,out] xml The destination for the result, as an XML tree. + * \param[in] message_timeout_ms Message timeout + * + * \return Standard Pacemaker return code + */ +int pcmk_designated_controller(xmlNodePtr *xml, unsigned int message_timeout_ms); + +/*! + * \brief Get pacemakerd status + * + * \param[in,out] xml The destination for the result, as an XML tree. + * \param[in] ipc_name IPC name for request + * \param[in] message_timeout_ms Message timeout + * + * \return Standard Pacemaker return code + */ +int pcmk_pacemakerd_status(xmlNodePtr *xml, char *ipc_name, unsigned int message_timeout_ms); + +#ifdef BUILD_PUBLIC_LIBPACEMAKER + +/*! + * \brief Get nodes list + * + * \param[in,out] xml The destination for the result, as an XML tree. + * + * \return Standard Pacemaker return code + */ +int pcmk_list_nodes(xmlNodePtr *xml); + +/*! * \brief Perform a STONITH action. * * \param[in] st A connection to the STONITH API. diff --git a/lib/pacemaker/pcmk_cluster_queries.c b/lib/pacemaker/pcmk_cluster_queries.c index 8d729eb..c705b7f 100644 --- a/lib/pacemaker/pcmk_cluster_queries.c +++ b/lib/pacemaker/pcmk_cluster_queries.c @@ -1,6 +1,7 @@ #include // gboolean, GMainLoop, etc. #include // xmlNode +#include #include #include @@ -282,6 +283,24 @@ pcmk__controller_status(pcmk__output_t *out, char *dest_node, guint message_time } int +pcmk_controller_status(xmlNodePtr *xml, char *dest_node, unsigned int message_timeout_ms) +{ + pcmk__output_t *out = NULL; + int rc = pcmk_rc_ok; + + rc = pcmk__out_prologue(&out, xml); + if (rc != pcmk_rc_ok) { + return rc; + } + + pcmk__register_lib_messages(out); + + rc = pcmk__controller_status(out, dest_node, (guint) message_timeout_ms); + pcmk__out_epilogue(out, xml, rc); + return rc; +} + +int pcmk__designated_controller(pcmk__output_t *out, guint message_timeout_ms) { data_t data = { @@ -309,6 +328,24 @@ pcmk__designated_controller(pcmk__output_t *out, guint message_timeout_ms) } int +pcmk_designated_controller(xmlNodePtr *xml, unsigned int message_timeout_ms) +{ + pcmk__output_t *out = NULL; + int rc = pcmk_rc_ok; + + rc = pcmk__out_prologue(&out, xml); + if (rc != pcmk_rc_ok) { + return rc; + } + + pcmk__register_lib_messages(out); + + rc = pcmk__designated_controller(out, (guint) message_timeout_ms); + pcmk__out_epilogue(out, xml, rc); + return rc; +} + +int pcmk__pacemakerd_status(pcmk__output_t *out, char *ipc_name, guint message_timeout_ms) { data_t data = { @@ -335,6 +372,24 @@ pcmk__pacemakerd_status(pcmk__output_t *out, char *ipc_name, guint message_timeo return data.rc; } +int +pcmk_pacemakerd_status(xmlNodePtr *xml, char *ipc_name, unsigned int message_timeout_ms) +{ + pcmk__output_t *out = NULL; + int rc = pcmk_rc_ok; + + rc = pcmk__out_prologue(&out, xml); + if (rc != pcmk_rc_ok) { + return rc; + } + + pcmk__register_lib_messages(out); + + rc = pcmk__pacemakerd_status(out, ipc_name, (guint) message_timeout_ms); + pcmk__out_epilogue(out, xml, rc); + return rc; +} + // \return Standard Pacemaker return code int pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT) @@ -361,6 +416,26 @@ pcmk__list_nodes(pcmk__output_t *out, gboolean BASH_EXPORT) return pcmk_legacy2rc(rc); } +#ifdef BUILD_PUBLIC_LIBPACEMAKER +int +pcmk_list_nodes(xmlNodePtr *xml) +{ + pcmk__output_t *out = NULL; + int rc = pcmk_rc_ok; + + rc = pcmk__out_prologue(&out, xml); + if (rc != pcmk_rc_ok) { + return rc; + } + + pcmk__register_lib_messages(out); + + rc = pcmk__list_nodes(out, FALSE); + pcmk__out_epilogue(out, xml, rc); + return rc; +} +#endif + // remove when parameters removed from tools/crmadmin.c int pcmk__shutdown_controller(pcmk__output_t *out, char *dest_node) -- 1.8.3.1