diff --git a/client-cli/pvc/cli/cli.py b/client-cli/pvc/cli/cli.py index 418261e5..2d58e3f8 100644 --- a/client-cli/pvc/cli/cli.py +++ b/client-cli/pvc/cli/cli.py @@ -538,14 +538,15 @@ def cli_cluster_fault_list(limit, format_function): name="ack", short_help="Acknowledge a cluster fault.", ) -@click.argument("fault_id") +@click.argument("fault_id", nargs=-1) @connection_req def cli_cluster_fault_acknowledge(fault_id): """ - Acknowledge the cluster fault FAULT_ID. + Acknowledge the cluster fault FAULT_ID; multiple FAULT_IDs may be specified. """ - retcode, retdata = pvc.lib.faults.acknowledge(CLI_CONFIG, fault_id) + faults = list(fault_id) + retcode, retdata = pvc.lib.faults.acknowledge(CLI_CONFIG, faults) finish(retcode, retdata) @@ -574,14 +575,15 @@ def cli_cluster_fault_acknowledge_all(): name="delete", short_help="Delete a cluster fault.", ) -@click.argument("fault_id") +@click.argument("fault_id", nargs=-1) @connection_req def cli_cluster_fault_delete(fault_id): """ - Delete the cluster fault FAULT_ID. + Delete the cluster fault FAULT_ID; multiple FAULT_IDs may be specified. """ - retcode, retdata = pvc.lib.faults.delete(CLI_CONFIG, fault_id) + faults = list(fault_id) + retcode, retdata = pvc.lib.faults.delete(CLI_CONFIG, faults) finish(retcode, retdata) diff --git a/client-cli/pvc/lib/faults.py b/client-cli/pvc/lib/faults.py index 11b9b64e..d2334b1e 100644 --- a/client-cli/pvc/lib/faults.py +++ b/client-cli/pvc/lib/faults.py @@ -45,20 +45,29 @@ def get_list(config, limit=None, sort_key="last_reported"): return False, response.json().get("message", "") -def acknowledge(config, fault_id): +def acknowledge(config, faults): """ - Acknowledge a PVC fault + Acknowledge one or more PVC faults - API endpoint: PUT /api/v1/faults/ + API endpoint: PUT /api/v1/faults/ for fault_id in faults API arguments: API schema: {json_message} """ - response = call_api(config, "put", f"/faults/{fault_id}") + status_codes = list() + bad_msgs = list() + for fault_id in faults: + response = call_api(config, "put", f"/faults/{fault_id}") - if response.status_code == 200: - return True, response.json().get("message", "") + if response.status_code == 200: + status_codes.append(True) + else: + status_codes.append(False) + bad_msgs.append(response.json().get("message", "")) + + if all(status_codes): + return True, f"Successfully acknowledged fault(s) {', '.join(faults)}" else: - return False, response.json().get("message", "") + return False, ", ".join(bad_msgs) def acknowledge_all(config): @@ -77,20 +86,29 @@ def acknowledge_all(config): return False, response.json().get("message", "") -def delete(config, fault_id): +def delete(config, faults): """ - Delete a PVC fault + Delete one or more PVC faults - API endpoint: DELETE /api/v1/faults/ + API endpoint: DELETE /api/v1/faults/ for fault_id in faults API arguments: API schema: {json_message} """ - response = call_api(config, "delete", f"/faults/{fault_id}") + status_codes = list() + bad_msgs = list() + for fault_id in faults: + response = call_api(config, "delete", f"/faults/{fault_id}") - if response.status_code == 200: - return True, response.json().get("message", "") + if response.status_code == 200: + status_codes.append(True) + else: + status_codes.append(False) + bad_msgs.append(response.json().get("message", "")) + + if all(status_codes): + return True, f"Successfully deleted fault(s) {', '.join(faults)}" else: - return False, response.json().get("message", "") + return False, ", ".join(bad_msgs) def delete_all(config):