ZFSSA List Snapshots Script
Quick script to illustrate interacting with the ZFS Storage Appliance. In this example I am listing ZFSSA snapshots containing a search string. Note I edited this for the article without re-testing it still works.
#!/bin/sh Usage() { echo "$1 -u <Appliance user> -h <appliance> -j <project> -p <pool> -s <containsString>" exit 1 } PROG=$0 while getopts u:h:s:j:p flag do case "$flag" in p) pool="$OPTARG";; j) project="$OPTARG";; s) string="$OPTARG";; u) user="$OPTARG";; h) appliance="$OPTARG";; \?) Usage $PROG ;; esac done [ -z "$pool" -o -z "$project" -o -z "$appliance" -o -z "$user" ] && Usage $PROG ssh -T $user@$appliance << EOF script var MyArguments = { pool: '$pool', project: '$project', string: '$string' } function ListSnapshotsbyS (Arg) { run('cd /'); // Make sure we are at root child context level run('shares'); try { run('set pool=' + Arg.pool); } catch (err) { printf ('ERROR: %s\n',err); return (err); } var allSnaps=[]; try { run('select ' + Arg.project + ' snapshots'); snapshots=list(); for(i=0; i < snapshots.length; i++) { allSnaps.push(snapshots[i]); } run('done'); } catch (err) { printf ('ERROR: %s\n',err); return(err); } for(i=0; i < allSnaps.length; i++) { if (Arg.string !="") { var idx=allSnaps[i].indexOf(Arg.string); if (idx>0) { printf('#%i: %s contained search string %s \n',i,allSnaps[i], Arg.string); } } else { printf('#%i: %s \n',i,allSnaps[i]); } } return(0); } ListSnapshotsbyS(MyArguments); . EOF