@@ -315,7 +315,7 @@ get_usage(zfs_help_t idx)
315
315
"[-S property]... [-t type[,...]] "
316
316
"[filesystem|volume|snapshot] ...\n" ));
317
317
case HELP_MOUNT :
318
- return (gettext ("\tmount\n"
318
+ return (gettext ("\tmount [-j] \n"
319
319
"\tmount [-flvO] [-o opts] <-a|-R filesystem|"
320
320
"filesystem>\n" ));
321
321
case HELP_PROMOTE :
@@ -7447,14 +7447,17 @@ share_mount(int op, int argc, char **argv)
7447
7447
int do_all = 0 ;
7448
7448
int recursive = 0 ;
7449
7449
boolean_t verbose = B_FALSE ;
7450
+ boolean_t json = B_FALSE ;
7450
7451
int c , ret = 0 ;
7451
7452
char * options = NULL ;
7452
7453
int flags = 0 ;
7454
+ nvlist_t * jsobj , * data , * item ;
7453
7455
const uint_t mount_nthr = 512 ;
7454
7456
uint_t nthr ;
7457
+ jsobj = data = item = NULL ;
7455
7458
7456
7459
/* check options */
7457
- while ((c = getopt (argc , argv , op == OP_MOUNT ? ":aRlvo :Of" : "al" ))
7460
+ while ((c = getopt (argc , argv , op == OP_MOUNT ? ":ajRlvo :Of" : "al" ))
7458
7461
!= -1 ) {
7459
7462
switch (c ) {
7460
7463
case 'a' :
@@ -7469,6 +7472,11 @@ share_mount(int op, int argc, char **argv)
7469
7472
case 'l' :
7470
7473
flags |= MS_CRYPT ;
7471
7474
break ;
7475
+ case 'j' :
7476
+ json = B_TRUE ;
7477
+ jsobj = zfs_json_schema (0 , 1 );
7478
+ data = fnvlist_alloc ();
7479
+ break ;
7472
7480
case 'o' :
7473
7481
if (* optarg == '\0' ) {
7474
7482
(void ) fprintf (stderr , gettext ("empty mount "
@@ -7503,6 +7511,11 @@ share_mount(int op, int argc, char **argv)
7503
7511
argc -= optind ;
7504
7512
argv += optind ;
7505
7513
7514
+ if (json && argc != 0 ) {
7515
+ (void ) fprintf (stderr , gettext ("too many arguments\n" ));
7516
+ usage (B_FALSE );
7517
+ }
7518
+
7506
7519
/* check number of arguments */
7507
7520
if (do_all || recursive ) {
7508
7521
enum sa_protocol protocol = SA_NO_PROTOCOL ;
@@ -7606,12 +7619,30 @@ share_mount(int op, int argc, char **argv)
7606
7619
if (strcmp (entry .mnt_fstype , MNTTYPE_ZFS ) != 0 ||
7607
7620
strchr (entry .mnt_special , '@' ) != NULL )
7608
7621
continue ;
7609
-
7610
- (void ) printf ("%-30s %s\n" , entry .mnt_special ,
7611
- entry .mnt_mountp );
7622
+ if (json ) {
7623
+ item = fnvlist_alloc ();
7624
+ fnvlist_add_string (item , "filesystem" ,
7625
+ entry .mnt_special );
7626
+ fnvlist_add_string (item , "mountpoint" ,
7627
+ entry .mnt_mountp );
7628
+ fnvlist_add_nvlist (data , entry .mnt_special ,
7629
+ item );
7630
+ fnvlist_free (item );
7631
+ } else {
7632
+ (void ) printf ("%-30s %s\n" , entry .mnt_special ,
7633
+ entry .mnt_mountp );
7634
+ }
7612
7635
}
7613
7636
7614
7637
(void ) fclose (mnttab );
7638
+ if (json ) {
7639
+ fnvlist_add_nvlist (jsobj , "datasets" , data );
7640
+ if (nvlist_empty (data ))
7641
+ fnvlist_free (jsobj );
7642
+ else
7643
+ zcmd_print_json (jsobj );
7644
+ fnvlist_free (data );
7645
+ }
7615
7646
} else {
7616
7647
zfs_handle_t * zhp ;
7617
7648
0 commit comments