Line data Source code
1 : /* 2 : * Copyright 2004-2024 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/common/scheduler.h> 13 : #include <crm/common/scheduler_internal.h> 14 : 15 : /*! 16 : * \brief Get readable description of a resource role 17 : * 18 : * \param[in] role Resource role 19 : * 20 : * \return Static string describing \p role, suitable for logging or display 21 : */ 22 : const char * 23 0 : pcmk_role_text(enum rsc_role_e role) 24 : { 25 0 : switch (role) { 26 0 : case pcmk_role_stopped: 27 0 : return PCMK_ROLE_STOPPED; 28 : 29 0 : case pcmk_role_started: 30 0 : return PCMK_ROLE_STARTED; 31 : 32 0 : case pcmk_role_unpromoted: 33 : #ifdef PCMK__COMPAT_2_0 34 : return PCMK__ROLE_UNPROMOTED_LEGACY; 35 : #else 36 0 : return PCMK_ROLE_UNPROMOTED; 37 : #endif 38 : 39 0 : case pcmk_role_promoted: 40 : #ifdef PCMK__COMPAT_2_0 41 : return PCMK__ROLE_PROMOTED_LEGACY; 42 : #else 43 0 : return PCMK_ROLE_PROMOTED; 44 : #endif 45 : 46 0 : default: // pcmk_role_unknown 47 0 : return PCMK__ROLE_UNKNOWN; 48 : } 49 : } 50 : 51 : /*! 52 : * \brief Parse a resource role from a string role specification 53 : * 54 : * \param[in] role Role specification 55 : * 56 : * \return Resource role corresponding to \p role 57 : */ 58 : enum rsc_role_e 59 0 : pcmk_parse_role(const char *role) 60 : { 61 0 : if (pcmk__str_eq(role, PCMK__ROLE_UNKNOWN, 62 : pcmk__str_casei|pcmk__str_null_matches)) { 63 0 : return pcmk_role_unknown; 64 0 : } else if (pcmk__str_eq(role, PCMK_ROLE_STOPPED, pcmk__str_casei)) { 65 0 : return pcmk_role_stopped; 66 0 : } else if (pcmk__str_eq(role, PCMK_ROLE_STARTED, pcmk__str_casei)) { 67 0 : return pcmk_role_started; 68 0 : } else if (pcmk__str_eq(role, PCMK__ROLE_UNPROMOTED_LEGACY, pcmk__str_casei)) { 69 0 : pcmk__warn_once(pcmk__wo_slave_role, 70 : "Support for the " PCMK__ROLE_UNPROMOTED_LEGACY 71 : " role is deprecated and will be removed in a " 72 : "future release. Use " PCMK_ROLE_UNPROMOTED 73 : " instead."); 74 0 : return pcmk_role_unpromoted; 75 0 : } else if (pcmk__str_eq(role, PCMK_ROLE_UNPROMOTED, pcmk__str_casei)) { 76 0 : return pcmk_role_unpromoted; 77 0 : } else if (pcmk__str_eq(role, PCMK__ROLE_PROMOTED_LEGACY, pcmk__str_casei)) { 78 0 : pcmk__warn_once(pcmk__wo_master_role, 79 : "Support for the " PCMK__ROLE_PROMOTED_LEGACY 80 : " role is deprecated and will be removed in a " 81 : "future release. Use " PCMK_ROLE_PROMOTED 82 : " instead."); 83 0 : return pcmk_role_promoted; 84 0 : } else if (pcmk__str_eq(role, PCMK_ROLE_PROMOTED, pcmk__str_casei)) { 85 0 : return pcmk_role_promoted; 86 : } 87 0 : return pcmk_role_unknown; // Invalid role given 88 : }