LCOV - code coverage report
Current view: top level - pacemaker - pcmk_agents.c (source / functions) Hit Total Coverage
Test: Pacemaker code coverage Lines: 0 119 0.0 %
Date: 2024-05-07 11:09:47 Functions: 0 8 0.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright 2023 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             : #include <crm_internal.h>
      11             : 
      12             : #include <crm/lrmd_internal.h>
      13             : #include <pacemaker.h>
      14             : #include <pacemaker-internal.h>
      15             : 
      16             : int
      17           0 : pcmk__list_alternatives(pcmk__output_t *out, const char *agent_spec)
      18             : {
      19           0 :     int rc = pcmk_rc_ok;
      20           0 :     lrmd_t *lrmd_conn = NULL;
      21           0 :     lrmd_list_t *list = NULL;
      22             : 
      23           0 :     CRM_ASSERT(out != NULL && agent_spec != NULL);
      24             : 
      25           0 :     rc = lrmd__new(&lrmd_conn, NULL, NULL, 0);
      26           0 :     if (rc != pcmk_rc_ok) {
      27           0 :         goto error;
      28             :     }
      29             : 
      30           0 :     rc = lrmd_conn->cmds->list_ocf_providers(lrmd_conn, agent_spec, &list);
      31             : 
      32           0 :     if (rc > 0) {
      33           0 :         rc = out->message(out, "alternatives-list", list, agent_spec);
      34             :     } else {
      35           0 :         rc = pcmk_rc_error;
      36             :     }
      37             : 
      38           0 : error:
      39           0 :     if (rc != pcmk_rc_ok) {
      40           0 :        out->err(out, _("No %s found for %s"), "OCF providers", agent_spec);
      41           0 :        rc = ENXIO;
      42             :     }
      43             : 
      44           0 :     lrmd_api_delete(lrmd_conn);
      45           0 :     return rc;
      46             : }
      47             : 
      48             : // Documented in pacemaker.h
      49             : int
      50           0 : pcmk_list_alternatives(xmlNodePtr *xml, const char *agent_spec)
      51             : {
      52           0 :     pcmk__output_t *out = NULL;
      53           0 :     int rc = pcmk_rc_ok;
      54             : 
      55           0 :     rc = pcmk__xml_output_new(&out, xml);
      56           0 :     if (rc != pcmk_rc_ok) {
      57           0 :         return rc;
      58             :     }
      59             : 
      60           0 :     lrmd__register_messages(out);
      61             : 
      62           0 :     rc = pcmk__list_alternatives(out, agent_spec);
      63           0 :     pcmk__xml_output_finish(out, pcmk_rc2exitc(rc), xml);
      64           0 :     return rc;
      65             : }
      66             : 
      67             : /*!
      68             :  * \internal
      69             :  * \brief List all agents available for the named standard and/or provider
      70             :  *
      71             :  * \param[in,out] out           Output object
      72             :  * \param[in]     agent_spec    STD[:PROV]
      73             :  *
      74             :  * \return Standard Pacemaker return code
      75             :  */
      76             : int
      77           0 : pcmk__list_agents(pcmk__output_t *out, char *agent_spec)
      78             : {
      79           0 :     int rc = pcmk_rc_ok;
      80           0 :     char *provider = NULL;
      81           0 :     lrmd_t *lrmd_conn = NULL;
      82           0 :     lrmd_list_t *list = NULL;
      83             : 
      84           0 :     CRM_ASSERT(out != NULL && agent_spec != NULL);
      85             : 
      86           0 :     rc = lrmd__new(&lrmd_conn, NULL, NULL, 0);
      87           0 :     if (rc != pcmk_rc_ok) {
      88           0 :         goto error;
      89             :     }
      90             : 
      91           0 :     provider = strchr(agent_spec, ':');
      92             : 
      93           0 :     if (provider) {
      94           0 :         *provider++ = 0;
      95             :     }
      96             : 
      97           0 :     rc = lrmd_conn->cmds->list_agents(lrmd_conn, &list, agent_spec, provider);
      98             : 
      99           0 :     if (rc > 0) {
     100           0 :         rc = out->message(out, "agents-list", list, agent_spec, provider);
     101             :     } else {
     102           0 :         rc = pcmk_rc_error;
     103             :     }
     104             : 
     105           0 : error:
     106           0 :     if (rc != pcmk_rc_ok) {
     107           0 :         if (provider == NULL) {
     108           0 :            out->err(out, _("No agents found for standard '%s'"), agent_spec);
     109             :         } else {
     110           0 :            out->err(out, _("No agents found for standard '%s' and provider '%s'"),
     111             :                     agent_spec, provider);
     112             :         }
     113             :     }
     114             : 
     115           0 :     lrmd_api_delete(lrmd_conn);
     116           0 :     return rc;
     117             : }
     118             : 
     119             : // Documented in pacemaker.h
     120             : int
     121           0 : pcmk_list_agents(xmlNodePtr *xml, char *agent_spec)
     122             : {
     123           0 :     pcmk__output_t *out = NULL;
     124           0 :     int rc = pcmk_rc_ok;
     125             : 
     126           0 :     rc = pcmk__xml_output_new(&out, xml);
     127           0 :     if (rc != pcmk_rc_ok) {
     128           0 :         return rc;
     129             :     }
     130             : 
     131           0 :     lrmd__register_messages(out);
     132             : 
     133           0 :     rc = pcmk__list_agents(out, agent_spec);
     134           0 :     pcmk__xml_output_finish(out, pcmk_rc2exitc(rc), xml);
     135           0 :     return rc;
     136             : }
     137             : 
     138             : int
     139           0 : pcmk__list_providers(pcmk__output_t *out, const char *agent_spec)
     140             : {
     141           0 :     int rc = pcmk_rc_ok;
     142           0 :     lrmd_t *lrmd_conn = NULL;
     143           0 :     lrmd_list_t *list = NULL;
     144             : 
     145           0 :     CRM_ASSERT(out != NULL);
     146             : 
     147           0 :     rc = lrmd__new(&lrmd_conn, NULL, NULL, 0);
     148           0 :     if (rc != pcmk_rc_ok) {
     149           0 :         goto error;
     150             :     }
     151             : 
     152           0 :     rc = lrmd_conn->cmds->list_ocf_providers(lrmd_conn, agent_spec, &list);
     153             : 
     154           0 :     if (rc > 0) {
     155           0 :         rc = out->message(out, "providers-list", list, agent_spec);
     156             :     } else {
     157           0 :         rc = pcmk_rc_error;
     158             :     }
     159             : 
     160           0 : error:
     161           0 :     if (rc != pcmk_rc_ok) {
     162           0 :         if (agent_spec == NULL) {
     163           0 :            out->err(out, _("No %s found"), "OCF providers");
     164             :         } else {
     165           0 :            out->err(out, _("No %s found for %s"), "OCF providers", agent_spec);
     166             :         }
     167             : 
     168           0 :         rc = ENXIO;
     169             :     }
     170             : 
     171           0 :     lrmd_api_delete(lrmd_conn);
     172           0 :     return rc;
     173             : }
     174             : 
     175             : // Documented in pacemaker.h
     176             : int
     177           0 : pcmk_list_providers(xmlNodePtr *xml, const char *agent_spec)
     178             : {
     179           0 :     pcmk__output_t *out = NULL;
     180           0 :     int rc = pcmk_rc_ok;
     181             : 
     182           0 :     rc = pcmk__xml_output_new(&out, xml);
     183           0 :     if (rc != pcmk_rc_ok) {
     184           0 :         return rc;
     185             :     }
     186             : 
     187           0 :     lrmd__register_messages(out);
     188             : 
     189           0 :     rc = pcmk__list_providers(out, agent_spec);
     190           0 :     pcmk__xml_output_finish(out, pcmk_rc2exitc(rc), xml);
     191           0 :     return rc;
     192             : }
     193             : 
     194             : int
     195           0 : pcmk__list_standards(pcmk__output_t *out)
     196             : {
     197           0 :     int rc = pcmk_rc_ok;
     198           0 :     lrmd_t *lrmd_conn = NULL;
     199           0 :     lrmd_list_t *list = NULL;
     200             : 
     201           0 :     CRM_ASSERT(out != NULL);
     202             : 
     203           0 :     rc = lrmd__new(&lrmd_conn, NULL, NULL, 0);
     204           0 :     if (rc != pcmk_rc_ok) {
     205           0 :         goto error;
     206             :     }
     207             : 
     208           0 :     rc = lrmd_conn->cmds->list_standards(lrmd_conn, &list);
     209             : 
     210           0 :     if (rc > 0) {
     211           0 :         rc = out->message(out, "standards-list", list);
     212             :     } else {
     213           0 :         rc = pcmk_rc_error;
     214             :     }
     215             : 
     216           0 : error:
     217           0 :     if (rc != pcmk_rc_ok) {
     218           0 :        out->err(out, _("No %s found"), "standards");
     219           0 :        rc = ENXIO;
     220             :     }
     221             : 
     222           0 :     lrmd_api_delete(lrmd_conn);
     223           0 :     return rc;
     224             : }
     225             : 
     226             : // Documented in pacemaker.h
     227             : int
     228           0 : pcmk_list_standards(xmlNodePtr *xml)
     229             : {
     230           0 :     pcmk__output_t *out = NULL;
     231           0 :     int rc = pcmk_rc_ok;
     232             : 
     233           0 :     rc = pcmk__xml_output_new(&out, xml);
     234           0 :     if (rc != pcmk_rc_ok) {
     235           0 :         return rc;
     236             :     }
     237             : 
     238           0 :     lrmd__register_messages(out);
     239             : 
     240           0 :     rc = pcmk__list_standards(out);
     241           0 :     pcmk__xml_output_finish(out, pcmk_rc2exitc(rc), xml);
     242           0 :     return rc;
     243             : }

Generated by: LCOV version 1.14