changeset 13755:80fe82480d1e

2447 beadm should be more descriptive about some errors Reviewed by: Dan McDonald <danmcd@nexenta.com> Reviewed by: Jim Klimov <jim@cos.ru> Approved by: Richard Lowe <richlowe@richlowe.net>
author Alexander Eremin <a.eremin@nexenta.com>
date Tue, 24 Jul 2012 04:11:09 -0500
parents 7231b684c18b
children 281242a86f07
files usr/src/cmd/beadm/beadm.c usr/src/man/man1m/beadm.1m
diffstat 2 files changed, 173 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/beadm/beadm.c	Mon Jul 09 21:10:26 2012 +0100
+++ b/usr/src/cmd/beadm/beadm.c	Tue Jul 24 04:11:09 2012 -0500
@@ -123,21 +123,21 @@
 	    "\n"
 	    "\tsubcommands:\n"
 	    "\n"
-	    "\tbeadm activate beName\n"
-	    "\tbeadm create [-d BE_desc]\n"
+	    "\tbeadm activate [-v] beName\n"
+	    "\tbeadm create [-a] [-d BE_desc]\n"
 	    "\t\t[-o property=value] ... [-p zpool] \n"
-	    "\t\t[-e nonActiveBe | beName@snapshot] beName\n"
+	    "\t\t[-e nonActiveBe | beName@snapshot] [-v] beName\n"
 	    "\tbeadm create [-d BE_desc]\n"
-	    "\t\t[-o property=value] ... [-p zpool] beName@snapshot\n"
-	    "\tbeadm destroy [-Ffs] beName \n"
-	    "\tbeadm destroy [-F] beName@snapshot \n"
-	    "\tbeadm list [[-a] | [-d] [-s]] [-H] [beName]\n"
-	    "\tbeadm mount [-s ro|rw] beName [mountpoint]\n"
-	    "\tbeadm unmount [-f] beName | mountpoint\n"
-	    "\tbeadm umount [-f] beName | mountpoint\n"
-	    "\tbeadm rename origBeName newBeName\n"
-	    "\tbeadm rollback beName snapshot\n"
-	    "\tbeadm rollback beName@snapshot\n"));
+	    "\t\t[-o property=value] ... [-p zpool] [-v] beName@snapshot\n"
+	    "\tbeadm destroy [-Ffsv] beName \n"
+	    "\tbeadm destroy [-Fv] beName@snapshot \n"
+	    "\tbeadm list [[-a] | [-d] [-s]] [-H] [-v] [beName]\n"
+	    "\tbeadm mount [-s ro|rw] [-v] beName [mountpoint]\n"
+	    "\tbeadm unmount [-fv] beName | mountpoint\n"
+	    "\tbeadm umount [-fv] beName | mountpoint\n"
+	    "\tbeadm rename [-v] origBeName newBeName\n"
+	    "\tbeadm rollback [-v] beName snapshot\n"
+	    "\tbeadm rollback [-v] beName@snapshot\n"));
 }
 
 static int
@@ -664,8 +664,20 @@
 {
 	nvlist_t	*be_attrs;
 	int		err = 1;
+	int		c;
 	char		*obe_name;
 
+	while ((c = getopt(argc, argv, "v")) != -1) {
+		switch (c) {
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
+		default:
+			usage();
+			return (1);
+		}
+	}
+
 	argc -= optind;
 	argv += optind;
 
@@ -728,7 +740,7 @@
 	char		*propval = NULL;
 	char		*strval = NULL;
 
-	while ((c = getopt(argc, argv, "ad:e:io:p:")) != -1) {
+	while ((c = getopt(argc, argv, "ad:e:io:p:v")) != -1) {
 		switch (c) {
 		case 'a':
 			activate = B_TRUE;
@@ -766,6 +778,9 @@
 		case 'p':
 			nbe_zpool = optarg;
 			break;
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
 		default:
 			usage();
 			goto out2;
@@ -939,7 +954,7 @@
 	char		*snap_name;
 	char		*be_name;
 
-	while ((c = getopt(argc, argv, "fFs")) != -1) {
+	while ((c = getopt(argc, argv, "fFsv")) != -1) {
 		switch (c) {
 		case 'f':
 			destroy_flags |= BE_DESTROY_FLAG_FORCE_UNMOUNT;
@@ -947,6 +962,9 @@
 		case 's':
 			destroy_flags |= BE_DESTROY_FLAG_SNAPSHOTS;
 			break;
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
 		case 'F':
 			suppress_prompt = B_TRUE;
 			break;
@@ -1061,7 +1079,7 @@
 	int		c = 0;
 	char		*be_name = NULL;
 
-	while ((c = getopt(argc, argv, "nadsH")) != -1) {
+	while ((c = getopt(argc, argv, "adsvH")) != -1) {
 		switch (c) {
 		case 'a':
 			all = B_TRUE;
@@ -1072,6 +1090,9 @@
 		case 's':
 			snaps = B_TRUE;
 			break;
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
 		case 'H':
 			parsable = B_TRUE;
 			break;
@@ -1145,7 +1166,7 @@
 	char		*mountpoint;
 	char		*tmp_mp = NULL;
 
-	while ((c = getopt(argc, argv, "s:")) != -1) {
+	while ((c = getopt(argc, argv, "s:v")) != -1) {
 		switch (c) {
 		case 's':
 			shared_fs = B_TRUE;
@@ -1162,6 +1183,9 @@
 			}
 
 			break;
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
 		default:
 			usage();
 			return (1);
@@ -1223,7 +1247,6 @@
 		(void) printf(_("Mounted successfully on: '%s'\n"), mountpoint);
 		break;
 	case BE_ERR_BE_NOENT:
-		err = 1;
 		(void) fprintf(stderr, _("%s does not exist or appear "
 		    "to be a valid BE.\nPlease check that the name of "
 		    "the BE provided is correct.\n"), obe_name);
@@ -1235,13 +1258,11 @@
 		break;
 	case BE_ERR_PERM:
 	case BE_ERR_ACCESS:
-		err = 1;
 		(void) fprintf(stderr, _("Unable to mount %s.\n"), obe_name);
 		(void) fprintf(stderr, _("You have insufficient privileges to "
 		    "execute this command.\n"));
 		break;
 	default:
-		err = 1;
 		(void) fprintf(stderr, _("Unable to mount %s.\n"), obe_name);
 		(void) fprintf(stderr, "%s\n", be_err_to_str(err));
 	}
@@ -1262,11 +1283,14 @@
 	int		c;
 	int		unmount_flags = 0;
 
-	while ((c = getopt(argc, argv, "f")) != -1) {
+	while ((c = getopt(argc, argv, "fv")) != -1) {
 		switch (c) {
 		case 'f':
 			unmount_flags |= BE_UNMOUNT_FLAG_FORCE;
 			break;
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
 		default:
 			usage();
 			return (1);
@@ -1337,6 +1361,18 @@
 	char		*obe_name;
 	char		*nbe_name;
 	int err = 1;
+	int c;
+
+	while ((c = getopt(argc, argv, "v")) != -1) {
+		switch (c) {
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
+		default:
+			usage();
+			return (1);
+		}
+	}
 
 	argc -= optind;
 	argv += optind;
@@ -1394,6 +1430,18 @@
 	char		*obe_name;
 	char		*snap_name;
 	int		err = 1;
+	int		c;
+
+	while ((c = getopt(argc, argv, "v")) != -1) {
+		switch (c) {
+		case 'v':
+			libbe_print_errors(B_TRUE);
+			break;
+		default:
+			usage();
+			return (1);
+		}
+	}
 
 	argc -= optind;
 	argv += optind;
--- a/usr/src/man/man1m/beadm.1m	Mon Jul 09 21:10:26 2012 +0100
+++ b/usr/src/man/man1m/beadm.1m	Tue Jul 24 04:11:09 2012 -0500
@@ -6,54 +6,55 @@
 .SH SYNOPSIS
 .LP
 .nf
-\fBbeadm\fR create [\fB-a\fR] [\fB-d\fR \fIdescription\fR]
+\fBbeadm\fR \fBcreate\fR [\fB-a\fR] [\fB-d\fR \fIdescription\fR]
      [\fB-e\fR \fInon-activeBeName\fR | \fIbeName@snapshot\fR]
-     [\fB-o\fR \fIproperty=value\fR] ... [\fB-p\fR \fIzpool\FI] \fIbeName\fR
+     [\fB-o\fR \fIproperty=value\fR] ... [\fB-p\fR \fIzpool\fR]
+     [\fB-v\fR] \fIbeName\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBcreate\fR \fIbeName@snapshot\fR
+\fBbeadm\fR \fBcreate\fR [\fB-v\fR] \fIbeName@snapshot\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBdestroy\fR [\fB-fFs\fR] \fIbeName\fR | \fIbeName@snapshot\fR
+\fBbeadm\fR \fBdestroy\fR [\fB-fFsv\fR] \fIbeName\fR | \fIbeName@snapshot\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBlist\fR [\fB-a\fR | \fB-ds\fR] [\fB-H\fR] [\fIbeName\fR]
+\fBbeadm\fR \fBlist\fR [\fB-a\fR | \fB-ds\fR] [\fB-H\fR] [\fB-v\fR] [\fIbeName\fR]
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBmount\fR \fIbeName\fR \fImountpoint\fR
+\fBbeadm\fR \fBmount\fR [\fB-v\fR] \fIbeName\fR \fImountpoint\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBunmount\fR [\fB-f\fR] \fIbeName\fR | \fImountpoint\fR
+\fBbeadm\fR \fBunmount\fR [\fB-fv\fR] \fIbeName\fR | \fImountpoint\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBrename\fR \fIbeName\fR \fInewBeName\fR
+\fBbeadm\fR \fBrename\fR [\fB-v\fR] \fIbeName\fR \fInewBeName\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBactivate\fR \fIbeName\fR
+\fBbeadm\fR \fBactivate\fR [\fB-v\fR] \fIbeName\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBrollback\fR \fIbeName\fR \fIsnapshot\fR
+\fBbeadm\fR \fBrollback\fR [\fB-v\fR] \fIbeName\fR \fIsnapshot\fR
 .fi
 
 .LP
 .nf
-\fBbeadm\fR \fBrollback\fR \fIbeName@snapshot\fR
+\fBbeadm\fR \fBrollback\fR [\fB-v\fR] \fIbeName@snapshot\fR
 .fi
 
 .SH DESCRIPTION
@@ -160,9 +161,9 @@
 .ne 2
 .na
 \fBbeadm\fR \fBcreate\fR [\fB-a\fR] [\fB-d\fR \fIdescription\fR]
-[\fB-e\fR \fInon-activeBeName\fR | \fIbeName@snapshot\fR]
-         [\fB-o\fR
-\fIproperty=value\fR] ... [\fB-p\fR \fIzpool\fR] \fIbeName\fR
+     [\fB-e\fR \fInon-activeBeName\fR | \fIbeName@snapshot\fR]
+     [\fB-o\fR \fIproperty=value\fR] ... [\fB-p\fR \fIzpool\fR]
+     [\fB-v\fR] \fIbeName\fR
 
 .ad
 .sp .6
@@ -239,22 +240,40 @@
 default
 behavior is to create the new BE in the same pool as as the origin BE.
 .RE
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBcreate\fR \fIbeName@snapshot\fR
+\fBbeadm\fR \fBcreate\fR [\fB-v\fR] \fIbeName@snapshot\fR
 .ad
 .sp .6
 .RS 4n
 Creates a snapshot of the existing BE named beName.
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBdestroy\fR [\fB-fFs\fR] \fIbeName\fR | \fIbeName@snapshot\fR
+\fBbeadm\fR \fBdestroy\fR [\fB-fFsv\fR] \fIbeName\fR | \fIbeName@snapshot\fR
 .ad
 .sp .6
 .RS 4n
@@ -294,12 +313,21 @@
 Destroy all snapshots of the boot
 environment.
 .RE
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBlist\fR [\fB-a\fR | \fB-ds\fR] [\fB-H\fR] [\fIbeName\fR]
+\fBbeadm\fR \fBlist\fR [\fB-a\fR | \fB-ds\fR] [\fB-H\fR] [\fB-v\fR] [\fIbeName\fR]
 .ad
 .sp .6
 .RS 4n
@@ -358,23 +386,41 @@
 Do not list header information.  Each field in the list information is
 separated by a semicolon.
 .RE
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBmount\fR \fIbeName\fR \fImountpoint\fR
+\fBbeadm\fR \fBmount\fR [\fB-v\fR] \fIbeName\fR \fImountpoint\fR
 .ad
 .sp .6
 .RS 4n
 Mounts a boot environment named beName at mountpoint.  mountpoint must be an
 already existing empty directory.
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBunmount\fR [\fB-f\fR] \fIbeName\fR | \fImountpoint\fR
+\fBbeadm\fR \fBunmount\fR [\fB-fv\fR] \fIbeName\fR | \fImountpoint\fR
 .ad
 .sp .6
 .RS 4n
@@ -389,37 +435,73 @@
 .RS 4n
 Forcefully unmount the boot environment even if its currently busy.
 .RE
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBrename\fR \fIbeName\fR \fInewBeName\fR
+\fBbeadm\fR \fBrename\fR [\fB-v\fR] \fIbeName\fR \fInewBeName\fR
 .ad
 .sp .6
 .RS 4n
 Renames the boot environment named \fIbeName\fR to \fInewBeName\fR.
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBrollback\fR \fIbeName\fR \fIsnapshot\fR | \fIbeName@snapshot\fR
+\fBbeadm\fR \fBrollback\fR [\fB-v\fR] \fIbeName\fR \fIsnapshot\fR | \fIbeName@snapshot\fR
 .ad
 .sp .6
 .RS 4n
 Roll back the boot environment named \fIbeName\fR to existing snapshot
 of the boot environment named \fIbeName@snapshot\fR.
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .sp
 .ne 2
 .na
-\fBbeadm\fR \fBactivate\fR \fIbeName\fR
+\fBbeadm\fR \fBactivate\fR [\fB-v\fR] \fIbeName\fR
 .ad
 .sp .6
 .RS 4n
 Makes beName the active BE on next reboot.
+.sp
+.ne 2
+.na
+\fB-v\fR
+.ad
+.sp .6
+.RS 4n
+Verbose mode. Displays verbose error messages from \fBbeadm\fR.
+.RE
 .RE
 
 .SH ALTERNATE BE LOCATION