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=$0while getopts u:h:s:j:p flagdo case "$flag" in p) pool="$OPTARG";; j) project="$OPTARG";; s) string="$OPTARG";; u) user="$OPTARG";; h) appliance="$OPTARG";; \?) Usage $PROG ;; esacdone
[ -z "$pool" -o -z "$project" -o -z "$appliance" -o -z "$user" ] && Usage $PROG
ssh -T $user@$appliance << EOFscriptvar 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