def remove_node(runner, node_name): stdout, stderr, retval = runner.run([ __exec("crm_node"), "--force", "--remove", node_name, ]) if retval != 0: raise LibraryError( reports.node_remove_in_pacemaker_failed(node_name, reason=join_multilines( [stderr, stdout])))
def remove_node(runner, node_name): stdout, stderr, retval = runner.run([ __exec("crm_node"), "--force", "--remove", node_name, ]) if retval != 0: raise LibraryError( reports.node_remove_in_pacemaker_failed( [node_name], reason=join_multilines([stderr, stdout]) ) )
def _process_response(self, response): report = self._get_response_report(response) if report is not None: self._report(report) return node_label = response.request.target.label try: output = json.loads(response.data) if output["code"] != "success": self._report( reports.node_remove_in_pacemaker_failed( self._nodes_to_remove, node=node_label, reason=output["message"], )) except (KeyError, json.JSONDecodeError): self._report(reports.invalid_response_format(node_label))
def _process_response(self, response): report = self._get_response_report(response) if report is not None: self._report(report) return node_label = response.request.target.label try: output = json.loads(response.data) if output["code"] != "success": self._report( reports.node_remove_in_pacemaker_failed( self._nodes_to_remove, node=node_label, reason=output["message"], ) ) except (KeyError, json.JSONDecodeError): self._report(reports.invalid_response_format(node_label))
def remove_nodes_from_cib(env, node_list): """ Remove specified nodes from CIB. When pcmk is running 'crm_node -R <node>' will be used. Otherwise nodes will be removed directly from CIB file. env LibraryEnvironment node_list iterable -- names of nodes to remove """ # TODO: more advanced error handling # TODO: Tests if not env.is_cib_live: raise LibraryError(reports.live_environment_required(["CIB"])) if is_service_running(env.cmd_runner(), "pacemaker"): for node in node_list: # this may raise a LibraryError # NOTE: crm_node cannot remove multiple nodes at once remove_node(env.cmd_runner(), node) return # TODO: We need to remove nodes from the CIB file. We don't want to do it # using environment as this is a special case in which we have to edit CIB # file directly. for node in node_list: stdout, stderr, retval = env.cmd_runner().run( [ settings.cibadmin, "--delete-all", "--force", f"--xpath=/cib/configuration/nodes/node[@uname='{node}']", ], env_extend={"CIB_file": os.path.join(settings.cib_dir, "cib.xml")} ) if retval != 0: raise LibraryError( reports.node_remove_in_pacemaker_failed( [node], reason=join_multilines([stderr, stdout]) ) )