1*8fc25799SMartin Matuska#! /usr/bin/python2.4 -S 2*8fc25799SMartin Matuska# 3*8fc25799SMartin Matuska# CDDL HEADER START 4*8fc25799SMartin Matuska# 5*8fc25799SMartin Matuska# The contents of this file are subject to the terms of the 6*8fc25799SMartin Matuska# Common Development and Distribution License (the "License"). 7*8fc25799SMartin Matuska# You may not use this file except in compliance with the License. 8*8fc25799SMartin Matuska# 9*8fc25799SMartin Matuska# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*8fc25799SMartin Matuska# or http://www.opensolaris.org/os/licensing. 11*8fc25799SMartin Matuska# See the License for the specific language governing permissions 12*8fc25799SMartin Matuska# and limitations under the License. 13*8fc25799SMartin Matuska# 14*8fc25799SMartin Matuska# When distributing Covered Code, include this CDDL HEADER in each 15*8fc25799SMartin Matuska# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*8fc25799SMartin Matuska# If applicable, add the following below this CDDL HEADER, with the 17*8fc25799SMartin Matuska# fields enclosed by brackets "[]" replaced with your own identifying 18*8fc25799SMartin Matuska# information: Portions Copyright [yyyy] [name of copyright owner] 19*8fc25799SMartin Matuska# 20*8fc25799SMartin Matuska# CDDL HEADER END 21*8fc25799SMartin Matuska# 22*8fc25799SMartin Matuska# Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23*8fc25799SMartin Matuska# Use is subject to license terms. 24*8fc25799SMartin Matuska# 25*8fc25799SMartin Matuska 26*8fc25799SMartin Matuska# Note, we want SIGINT (control-c) to exit the process quietly, to mimic 27*8fc25799SMartin Matuska# the standard behavior of C programs. The best we can do with pure 28*8fc25799SMartin Matuska# Python is to run with -S (to disable "import site"), and start our 29*8fc25799SMartin Matuska# program with a "try" statement. Hopefully nobody hits ^C before our 30*8fc25799SMartin Matuska# try statement is executed. 31*8fc25799SMartin Matuska 32*8fc25799SMartin Matuskatry: 33*8fc25799SMartin Matuska import site 34*8fc25799SMartin Matuska import gettext 35*8fc25799SMartin Matuska import zfs.util 36*8fc25799SMartin Matuska import zfs.ioctl 37*8fc25799SMartin Matuska import sys 38*8fc25799SMartin Matuska import errno 39*8fc25799SMartin Matuska 40*8fc25799SMartin Matuska """This is the main script for doing zfs subcommands. It doesn't know 41*8fc25799SMartin Matuska what subcommands there are, it just looks for a module zfs.<subcommand> 42*8fc25799SMartin Matuska that implements that subcommand.""" 43*8fc25799SMartin Matuska 44*8fc25799SMartin Matuska _ = gettext.translation("SUNW_OST_OSCMD", "/usr/lib/locale", 45*8fc25799SMartin Matuska fallback=True).gettext 46*8fc25799SMartin Matuska 47*8fc25799SMartin Matuska if len(sys.argv) < 2: 48*8fc25799SMartin Matuska sys.exit(_("missing subcommand argument")) 49*8fc25799SMartin Matuska 50*8fc25799SMartin Matuska zfs.ioctl.set_cmdstr(" ".join(["zfs"] + sys.argv[1:])) 51*8fc25799SMartin Matuska 52*8fc25799SMartin Matuska try: 53*8fc25799SMartin Matuska # import zfs.<subcommand> 54*8fc25799SMartin Matuska # subfunc = zfs.<subcommand>.do_<subcommand> 55*8fc25799SMartin Matuska 56*8fc25799SMartin Matuska subcmd = sys.argv[1] 57*8fc25799SMartin Matuska __import__("zfs." + subcmd) 58*8fc25799SMartin Matuska submod = getattr(zfs, subcmd) 59*8fc25799SMartin Matuska subfunc = getattr(submod, "do_" + subcmd) 60*8fc25799SMartin Matuska except (ImportError, AttributeError): 61*8fc25799SMartin Matuska sys.exit(_("invalid subcommand")) 62*8fc25799SMartin Matuska 63*8fc25799SMartin Matuska try: 64*8fc25799SMartin Matuska subfunc() 65*8fc25799SMartin Matuska except zfs.util.ZFSError, e: 66*8fc25799SMartin Matuska print(e) 67*8fc25799SMartin Matuska sys.exit(1) 68*8fc25799SMartin Matuska 69*8fc25799SMartin Matuskaexcept IOError, e: 70*8fc25799SMartin Matuska import errno 71*8fc25799SMartin Matuska import sys 72*8fc25799SMartin Matuska 73*8fc25799SMartin Matuska if e.errno == errno.EPIPE: 74*8fc25799SMartin Matuska sys.exit(1) 75*8fc25799SMartin Matuska raise 76*8fc25799SMartin Matuskaexcept KeyboardInterrupt: 77*8fc25799SMartin Matuska import sys 78*8fc25799SMartin Matuska 79*8fc25799SMartin Matuska sys.exit(1) 80