summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Eckersberg <jeckersb@redhat.com>2008-02-04 16:10:58 -0500
committerJohn Eckersberg <jeckersb@redhat.com>2008-02-04 16:10:58 -0500
commit323f05de0a3ace6fd39bb75e97ce2ac52db2fa63 (patch)
tree7e481562a324a034bb808c6f9243f1b3478f75cf
parentd4a45d1e6fffd04fef17621d996abfac7183306f (diff)
downloadthird_party-func-323f05de0a3ace6fd39bb75e97ce2ac52db2fa63.tar.gz
third_party-func-323f05de0a3ace6fd39bb75e97ce2ac52db2fa63.tar.xz
third_party-func-323f05de0a3ace6fd39bb75e97ce2ac52db2fa63.zip
Add overlord netapp module so we can create filer objects. Hot.
-rw-r--r--func.spec1
-rw-r--r--func/overlord/modules/netapp.py82
-rw-r--r--setup.py1
3 files changed, 84 insertions, 0 deletions
diff --git a/func.spec b/func.spec
index 4547129..1ce6fe0 100644
--- a/func.spec
+++ b/func.spec
@@ -71,6 +71,7 @@ rm -fr $RPM_BUILD_ROOT
%{python_sitelib}/func/minion/*.py*
%{python_sitelib}/func/overlord/*.py*
%{python_sitelib}/func/overlord/cmd_modules/*.py*
+%{python_sitelib}/func/overlord/modules/*.py*
%{python_sitelib}/func/*.py*
%dir %{python_sitelib}/func/minion/modules
%{python_sitelib}/func/minion/modules/*.py*
diff --git a/func/overlord/modules/netapp.py b/func/overlord/modules/netapp.py
new file mode 100644
index 0000000..987901e
--- /dev/null
+++ b/func/overlord/modules/netapp.py
@@ -0,0 +1,82 @@
+##
+## Overlord library to interface with minion-side netapp operations
+##
+## Most of this is just wrappers to create some cleaner, earier to use
+## interfaces. Also allows users to get function signatures and use
+## nice things like kwargs client side, for those of us who can't live
+## without ipython introspection.
+##
+## Copyright 2008, Red Hat, Inc
+## John Eckersberg <jeckersb@redhat.com>
+##
+## This software may be freely redistributed under the terms of the GNU
+## general public license.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+##
+
+from func.overlord.client import Client
+
+class RemoteError(Exception): pass
+
+def _(res):
+ if type(res) == type([]) and res[0] == 'REMOTE_ERROR':
+ raise RemoteError, res[2]
+ else:
+ return res
+
+class Filer(Client):
+ def __init__(self, filer, admin_host):
+ Client.__init__(self, admin_host)
+ self.filer = filer
+ self.admin_host = admin_host
+
+ def create_volume(self, vol, aggr, size):
+ return _(self.netapp.vol.create(self.filer, vol, aggr, size)[self.admin_host])
+
+ def destroy_volume(self, vol):
+ # offline it first
+ try:
+ self.netapp.vol.offline(self.filer, vol)
+ except:
+ pass
+ return _(self.netapp.vol.destroy(self.filer, vol)[self.admin_host])
+
+ def offline_volume(self, vol):
+ return _(self.netapp.vol.offline(self.filer, vol)[self.admin_host])
+
+ def online_volume(self, vol):
+ return _(self.netapp.vol.online(self.filer, vol)[self.admin_host])
+
+ def get_volume_size(self, vol):
+ return _(self.netapp.vol.size(self.filer, vol)[self.admin_host])
+
+ def resize_volume(self, vol, delta):
+ return _(self.netapp.vol.size(self.filer, vol, delta)[self.admin_host])
+
+ def create_snapshot(self, vol, snap):
+ return _(self.netapp.snap.create(self.filer, vol, snap)[self.admin_host])
+
+ def delete_snapshot(self, vol, snap):
+ return _(self.netapp.snap.delete(self.filer, vol, snap)[self.admin_host])
+
+ def create_clone_volume(self, vol, parent, snap):
+ return _(self.netapp.vol.clone.create(self.filer, vol, parent, snap)[self.admin_host])
+
+ def split_clone_volume(self, vol):
+ return _(self.netapp.vol.clone.split(self.filer, vol)[self.admin_host])
+
+ def list_volumes(self):
+ vols = _(self.netapp.vol.status(self.filer))
+ return_list = []
+ for vol in vols:
+ return_list.append(vol['name'])
+ return return_list
+
+ def volume_details(self, vol=None):
+ if vol:
+ return _(self.netapp.vol.status(self.filer, vol)[self.admin_host])
+ else:
+ return _(self.netapp.vol.status(self.filer)[self.admin_host])
diff --git a/setup.py b/setup.py
index 020cc39..332ff96 100644
--- a/setup.py
+++ b/setup.py
@@ -42,6 +42,7 @@ if __name__ == "__main__":
"%s/minion" % NAME,
"%s/overlord" % NAME,
"%s/overlord/cmd_modules" % NAME,
+ "%s/overlord/modules" % NAME,
"%s/minion/modules" % NAME,
# FIXME if there's a clean/easy way to recursively
# find modules then by all means do it, for now