def _get_ocf_resource_agent_metadata(runner, provider, agent): """ Returns metadata dom for specified ocf resource agent Raises AgentNotFound if specified agent is relative path or file is not runnable. Raises UnableToGetAgentMetadata if there was problem getting or parsing metadata. runner -- CommandRunner provider -- resource agent provider agent -- resource agent name """ agent_name = "ocf:" + provider + ":" + agent script_path = os.path.join(settings.ocf_resources, provider, agent) if not __is_path_abs(script_path) or not is_path_runnable(script_path): raise AgentNotFound(agent_name) output, retval = runner.run( [script_path, "meta-data"], env_extend={"OCF_ROOT": settings.ocf_root}, ignore_stderr=True ) if output.strip() == "": raise UnableToGetAgentMetadata(agent_name, output) try: return etree.fromstring(output) except etree.XMLSyntaxError as e: raise UnableToGetAgentMetadata(agent_name, str(e))
def get_fence_agent_metadata(runner, fence_agent): """ Returns dom of metadata for specified fence agent Raises AgentNotFound if fence_agent doesn't starts with fence_ or it is relative path or file is not runnable. Raises UnableToGetAgentMetadata if there was problem getting or parsing metadata. runner -- CommandRunner fence_agent -- fence agent name, should start with 'fence_' """ script_path = os.path.join(settings.fence_agent_binaries, fence_agent) if not ( fence_agent.startswith("fence_") and __is_path_abs(script_path) and is_path_runnable(script_path) ): raise AgentNotFound(fence_agent) output, retval = runner.run( [script_path, "-o", "metadata"], ignore_stderr=True ) if output.strip() == "": raise UnableToGetAgentMetadata(fence_agent, output) try: return etree.fromstring(output) except etree.XMLSyntaxError as e: raise UnableToGetAgentMetadata(fence_agent, str(e))