Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:Update
pacemaker
pacemaker-libcrmcommon-functions-agent-specific...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pacemaker-libcrmcommon-functions-agent-specifications.patch of Package pacemaker
commit d16acf031b3502dfccb8ae3bac5c0203f9f0c0d1 Author: Ken Gaillot <kgaillot@redhat.com> Date: Fri Oct 6 16:23:05 2017 -0500 Feature: libcrmcommon: add functions for using agent specifications Index: pacemaker/include/crm/common/util.h =================================================================== --- pacemaker.orig/include/crm/common/util.h +++ pacemaker/include/crm/common/util.h @@ -140,4 +140,8 @@ void crm_gnutls_global_init(void); int crm_exit(int rc); bool pcmk_acl_required(const char *user); +bool crm_provider_required(const char *standard); +int crm_parse_agent_spec(const char *spec, char **standard, char **provider, + char **type); + #endif Index: pacemaker/lib/common/utils.c =================================================================== --- pacemaker.orig/lib/common/utils.c +++ pacemaker/lib/common/utils.c @@ -2435,3 +2435,81 @@ crm_gnutls_global_init(void) } #endif +/*! + * \brief Check whether a resource standard requires a provider to be specified + * + * \param[in] standard Standard name + * + * \return TRUE if standard requires a provider, FALSE otherwise + */ +bool +crm_provider_required(const char *standard) +{ + CRM_CHECK(standard != NULL, return FALSE); + + /* @TODO + * - this should probably be case-sensitive, but isn't, + * for backward compatibility + * - it might be nice to keep standards' capabilities (supports provider, + * master/slave, etc.) as structured data somewhere + */ + if (!strcasecmp(standard, "ocf")) { + return TRUE; + } + return FALSE; +} + +/*! + * \brief Parse a "standard[:provider]:type" agent specification + * + * \param[in] spec Agent specification + * \param[out] standard Newly allocated memory containing agent standard (or NULL) + * \param[out] provider Newly allocated memory containing agent provider (or NULL) + * \param[put] type Newly allocated memory containing agent type (or NULL) + * + * \return pcmk_ok if the string could be parsed, -EINVAL otherwise + * + * \note It is acceptable for the type to contain a ':' if the standard supports + * that. For example, systemd supports the form "systemd:UNIT@A:B". + * \note It is the caller's responsibility to free the returned values. + */ +int +crm_parse_agent_spec(const char *spec, char **standard, char **provider, + char **type) +{ + char *colon; + + CRM_CHECK(spec && standard && provider && type, return -EINVAL); + *standard = NULL; + *provider = NULL; + *type = NULL; + + colon = strchr(spec, ':'); + if ((colon == NULL) || (colon == spec)) { + return -EINVAL; + } + + *standard = calloc(colon - spec + 1, sizeof(char)); + strncpy(*standard, spec, colon - spec); + spec = colon + 1; + + if (crm_provider_required(*standard)) { + colon = strchr(spec, ':'); + if ((colon == NULL) || (colon == spec)) { + free(*standard); + return -EINVAL; + } + *provider = calloc(colon - spec + 1, sizeof(char)); + strncpy(*provider, spec, colon - spec); + spec = colon + 1; + } + + if (*spec == '\0') { + free(*standard); + free(*provider); + return -EINVAL; + } + + *type = strdup(spec); + return pcmk_ok; +}
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor