Zfssa list snapshots script
wordpress meta
title: 'ZFSSA List Snapshots Script'
date: '2014-12-20T07:05:40-06:00'
status: publish
permalink: /zfssa-list-snapshots-script
author: admin
excerpt: ''
type: post
id: 783
category:
- Bash
- ZFS
tag: []
post_format: []
title: 'ZFSSA List Snapshots Script'
date: '2014-12-20T07:05:40-06:00'
status: publish
permalink: /zfssa-list-snapshots-script
author: admin
excerpt: ''
type: post
id: 783
category:
- Bash
- ZFS
tag: []
post_format: []
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