Zfs storage appliance restful api
wordpress meta
title: 'ZFS Storage Appliance RESTful API'
date: '2015-08-27T15:52:08-05:00'
status: publish
permalink: /zfs-storage-appliance-restful-api
author: admin
excerpt: ''
type: post
id: 890
category:
- ZFS
tag: []
post_format: []
title: 'ZFS Storage Appliance RESTful API'
date: '2015-08-27T15:52:08-05:00'
status: publish
permalink: /zfs-storage-appliance-restful-api
author: admin
excerpt: ''
type: post
id: 890
category:
- ZFS
tag: []
post_format: []
Until now I have used ssh and javascript to do some of the more advanced automation tasks like snapshots, cloning and replication. I am starting to look at porting to REST and here is a quick example of two functions.
** I needed fabric and python-requests linux packages installed for python.
#!/usr/bin/env fab
from fabric.api import task,hosts,settings,env
from fabric.utils import abort
import requests, json, os
from datetime import date
#requests.packages.urllib3.disable_warnings()
today = date.today()
# ZFSSA API URL
url = "https://192.168.2.200:215"
# ZFSSA authentication credentials, it reads username and password from environment variables ZFSUSER and ZFSPASSWORD
zfsauth = (os.getenv('ZFSUSER'), os.getenv('ZFSPASSWORD'))
jsonheader={'Content-Type': 'application/json'}
# This gets the pool list
def list_pools():
r = requests.get("%s/api/storage/v1/pools" % (url), auth=zfsauth, verify=False, headers=jsonheader)
if r.status_code != 200:
abort("Error getting pools %s %s" % (r.status_code, r.text))
j = json.loads(r.text)
#print j
for pool in j["pools"]:
#print pool
#{u'status': u'online', u'profile': u'stripe', u'name': u'tank1', u'owner': u'zfsapp1', u'usage': {}, u'href': u'/api/storage/v1/pools/tank1', u'peer': u'00000000-0000-0000-0000-000000000000', u'asn': u'91bdcaef-fea5-e796-8793-f2eefa46200a'}ation
print "pool: %s and status: %s" % (pool["name"], pool["status"])
# Create project
def create_project(pool, projname):
# First check if the target project name already exists
r = requests.get("%s/api/storage/v1/pools/%s/projects/%s" % (url, pool, projname), auth=zfsauth, verify=False, headers=jsonheader)
if r.status_code != 404:
abort("ZFS project %s already exists (or other error): %s" % (projname, r.status_code))
payload = { 'name': projname, 'sharenfs': 'ro' }
r = requests.post("%s/api/storage/v1/pools/%s/projects" % (url, pool), auth=zfsauth, verify=False, data=json.dumps(payload), headers=jsonheader)
if r.status_code == 201:
print "project created"
else:
abort("Error creating project %s %s" % (r.status_code, r.text))
print "\n\nTest list pools and create a project\n"
list_pools()
create_project('tank1','proj-01')
References:
http://www.oracle.com/technetwork/articles/servers-storage-admin/zfs-appliance-scripting-1508184.html
http://docs.oracle.com/cd/E51475_01/html/E52433/
http://ilmarkerm.blogspot.com/2014/12/sample-code-using-oracle-zfs-storage.html