def get_fence_agent_info(argv): if len(argv) != 1: utils.err("One parameter expected") agent = argv[0] if not agent.startswith("stonith:"): utils.err("Invalid fence agent name") runner = utils.cmd_runner() try: metadata_dom = lib_ra.get_fence_agent_metadata( runner, agent.split("stonith:", 1)[1] ) metadata = lib_ra.get_agent_desc(metadata_dom) metadata["name"] = agent metadata["parameters"] = lib_ra.get_fence_agent_parameters( runner, metadata_dom ) print(json.dumps(metadata)) except lib_ra.ResourceAgentLibError as e: utils.process_library_reports( [lib_ra.resource_agent_lib_error_to_report_item(e)] ) except LibraryError as e: utils.process_library_reports(e.args)
def stonith_list_options(stonith_agent): runner = utils.cmd_runner() try: metadata = lib_ra.get_fence_agent_metadata(runner, stonith_agent) desc = lib_ra.get_agent_desc(metadata) params = lib_ra.get_fence_agent_parameters(runner, metadata) resource.resource_print_options(stonith_agent, desc, params) except lib_ra.ResourceAgentLibError as e: utils.process_library_reports( [lib_ra.resource_agent_lib_error_to_report_item(e)] ) except LibraryError as e: utils.process_library_reports(e.args)
def stonith_list_available(argv): if len(argv) != 0: filter_string = argv[0] else: filter_string = "" bad_fence_devices = ["kdump_send", "legacy", "na", "nss_wrapper", "pcmk", "vmware_helper", "ack_manual", "virtd", "sanlockd", "check", "tool", "node"] fence_devices = sorted(glob.glob(utils.fence_bin + "fence_*")) for bfd in bad_fence_devices: try: fence_devices.remove(utils.fence_bin + "fence_"+bfd) except ValueError: continue if not fence_devices: utils.err( "No stonith agents available. Do you have fence agents installed?" ) fence_devices_filtered = [fd for fd in fence_devices if filter_string in fd] if not fence_devices_filtered: utils.err("No stonith agents matching the filter.") for fd in fence_devices_filtered: sd = "" agent_name = os.path.basename(fd) if "--nodesc" not in utils.pcs_options: try: metadata = lib_ra.get_fence_agent_metadata( utils.cmd_runner(), agent_name ) shortdesc = lib_ra.get_agent_desc(metadata)["shortdesc"] if shortdesc: sd = " - " + resource.format_desc( len(agent_name) + 3, shortdesc ) except lib_ra.ResourceAgentLibError as e: utils.process_library_reports([ lib_ra.resource_agent_lib_error_to_report_item( e, ReportItemSeverity.WARNING ) ]) except LibraryError as e: utils.err( e.args[-1].message, False ) continue print(agent_name + sd)
def stonith_list_options(stonith_agent): runner = utils.cmd_runner() try: metadata = lib_ra.get_fence_agent_metadata(runner, stonith_agent) desc = lib_ra.get_agent_desc(metadata) params = lib_ra.get_fence_agent_parameters(runner, metadata) # Fence agents just list the actions, usually without any attributes. # We could print them but it wouldn't add any usefull information. resource.resource_print_options(stonith_agent, desc, params, actions=[]) except lib_ra.ResourceAgentLibError as e: utils.process_library_reports( [lib_ra.resource_agent_lib_error_to_report_item(e)] ) except LibraryError as e: utils.process_library_reports(e.args)
def stonith_create(argv): if len(argv) < 2: usage.stonith(["create"]) sys.exit(1) stonith_id = argv.pop(0) stonith_type = argv.pop(0) st_values, op_values, meta_values = resource.parse_resource_options( argv, with_clone=False ) try: metadata = lib_ra.get_fence_agent_metadata( utils.cmd_runner(), stonith_type ) if stonith_does_agent_provide_unfencing(metadata): meta_values = [ meta for meta in meta_values if not meta.startswith("provides=") ] meta_values.append("provides=unfencing") except lib_ra.ResourceAgentLibError as e: forced = utils.get_modificators().get("force", False) if forced: severity = ReportItemSeverity.WARNING else: severity = ReportItemSeverity.ERROR utils.process_library_reports([ lib_ra.resource_agent_lib_error_to_report_item( e, severity, not forced ) ]) except LibraryError as e: utils.process_library_reports(e.args) resource.resource_create( stonith_id, "stonith:" + stonith_type, st_values, op_values, meta_values, group=utils.pcs_options.get("--group", None) )