diff -ur a/client/main.c b/client/main.c --- a/client/main.c 2017-08-09 13:13:20.000846414 -0400 +++ b/client/main.c 2017-08-09 13:09:04.294571613 -0400 @@ -110,13 +110,17 @@ } if (args.flags & F_ERR) { - args_usage(argv[0], my_options, (argc == 1)); + if (args.op != FENCE_VALIDATEALL) + args_usage(argv[0], my_options, (argc == 1)); exit(1); } + if (args.op == FENCE_VALIDATEALL) + exit(0); + if (args.op == FENCE_METADATA) { args_metadata(argv[0], my_options); - return 0; + exit(0); } if (args.delay > 0 && diff -ur a/client/options.c b/client/options.c --- a/client/options.c 2017-08-09 13:13:20.007846312 -0400 +++ b/client/options.c 2017-08-09 13:11:23.464550208 -0400 @@ -255,6 +255,8 @@ args->op = FENCE_HOSTLIST; } else if (!strcasecmp(value, "metadata")) { args->op = FENCE_METADATA; + } else if (!strcasecmp(value, "validate-all")) { + args->op = FENCE_VALIDATEALL; } else { printf("Unsupported operation: %s\n", value); args->flags |= F_ERR; @@ -490,12 +492,12 @@ { '\xff', NULL, "option", /* Deprecated */ 0, "string", "reboot", - "Fencing option (null, off, on, [reboot], status, list, monitor, metadata)", + "Fencing option (null, off, on, [reboot], status, list, list-status, monitor, validate-all, metadata)", assign_op }, { 'o', "-o ", "action", 0, "string", "reboot", - "Fencing action (null, off, on, [reboot], status, list, monitor, metadata)", + "Fencing action (null, off, on, [reboot], status, list, list-status, monitor, validate-all, metadata)", assign_op }, { 'H', "-H ", "port", @@ -799,7 +801,8 @@ printf("\t\n"); printf("\t\n"); printf("\t\n"); - printf("\t\n"); + printf("\t\n"); + printf("\t\n"); printf("\n"); printf("\n"); } diff -ur a/include/xvm.h b/include/xvm.h --- a/include/xvm.h 2014-06-23 15:56:09.000000000 -0400 +++ b/include/xvm.h 2017-08-09 13:09:04.295571598 -0400 @@ -52,14 +52,15 @@ #define DEFAULT_AUTH AUTH_SHA256 typedef enum { - FENCE_NULL = 0x0, - FENCE_OFF = 0x1, /* Turn the VM off */ - FENCE_REBOOT = 0x2, /* Hit the reset button */ - FENCE_ON = 0x3, /* Turn the VM on */ - FENCE_STATUS = 0x4, /* virtual machine status (off/on) */ - FENCE_DEVSTATUS = 0x5, /* Status of the fencing device */ - FENCE_HOSTLIST = 0x6, /* List VMs controllable */ - FENCE_METADATA = 0x7 + FENCE_NULL = 0x0, + FENCE_OFF = 0x1, /* Turn the VM off */ + FENCE_REBOOT = 0x2, /* Hit the reset button */ + FENCE_ON = 0x3, /* Turn the VM on */ + FENCE_STATUS = 0x4, /* virtual machine status (off/on) */ + FENCE_DEVSTATUS = 0x5, /* Status of the fencing device */ + FENCE_HOSTLIST = 0x6, /* List VMs controllable */ + FENCE_METADATA = 0x7, /* Print fence agent metadata */ + FENCE_VALIDATEALL = 0x8 /* Validate command-line or stdin arguments and exit */ } fence_cmd_t; #define DEFAULT_TTL 4 diff -ur a/man/fence_virt.8 b/man/fence_virt.8 --- a/man/fence_virt.8 2014-06-23 15:56:09.000000000 -0400 +++ b/man/fence_virt.8 2017-08-09 13:09:04.295571598 -0400 @@ -145,7 +145,7 @@ .TP .B action . -Fencing action (null, off, on, reboot, status, monitor, list, or metadata) (Default Value: reboot). See the FENCING ACTIONS section. +Fencing action (null, off, on, reboot, status, monitor, list, list-status, validate-all, or metadata) (Default Value: reboot). See the FENCING ACTIONS section. .TP .B timeout @@ -255,6 +255,10 @@ on all backends). .TP +\fBvalidate-all\fP +Validate arguments given on either the command line or standard input. If validation fails, the fence agent will exit with code 1, otherwise it will exit with code 0. + +.TP \fBmetadata \fP Print XML metadata to standard output.