1*83d13c2eSAlexander Pyhalov#!@PYTHON@ -Es 214843421SMatthew Ahrens# 314843421SMatthew Ahrens# CDDL HEADER START 414843421SMatthew Ahrens# 514843421SMatthew Ahrens# The contents of this file are subject to the terms of the 614843421SMatthew Ahrens# Common Development and Distribution License (the "License"). 714843421SMatthew Ahrens# You may not use this file except in compliance with the License. 814843421SMatthew Ahrens# 914843421SMatthew Ahrens# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 1014843421SMatthew Ahrens# or http://www.opensolaris.org/os/licensing. 1114843421SMatthew Ahrens# See the License for the specific language governing permissions 1214843421SMatthew Ahrens# and limitations under the License. 1314843421SMatthew Ahrens# 1414843421SMatthew Ahrens# When distributing Covered Code, include this CDDL HEADER in each 1514843421SMatthew Ahrens# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1614843421SMatthew Ahrens# If applicable, add the following below this CDDL HEADER, with the 1714843421SMatthew Ahrens# fields enclosed by brackets "[]" replaced with your own identifying 1814843421SMatthew Ahrens# information: Portions Copyright [yyyy] [name of copyright owner] 1914843421SMatthew Ahrens# 2014843421SMatthew Ahrens# CDDL HEADER END 2114843421SMatthew Ahrens# 226d52f363SLori Alt# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 238cfa78e6SAndy Fiddaman# Copyright 2018 OmniOS Community Edition (OmniOSce) Association. 2414843421SMatthew Ahrens# 2514843421SMatthew Ahrens 2614843421SMatthew Ahrens# Note, we want SIGINT (control-c) to exit the process quietly, to mimic 2714843421SMatthew Ahrens# the standard behavior of C programs. The best we can do with pure 2814843421SMatthew Ahrens# Python is to run with -S (to disable "import site"), and start our 2914843421SMatthew Ahrens# program with a "try" statement. Hopefully nobody hits ^C before our 3014843421SMatthew Ahrens# try statement is executed. 3114843421SMatthew Ahrens 3214843421SMatthew Ahrenstry: 3314843421SMatthew Ahrens import site 3414843421SMatthew Ahrens import gettext 3514843421SMatthew Ahrens import zfs.util 3614843421SMatthew Ahrens import zfs.ioctl 3714843421SMatthew Ahrens import sys 3814843421SMatthew Ahrens import errno 39e4d060fbSSam Falkner import solaris.misc 4014843421SMatthew Ahrens 4114843421SMatthew Ahrens """This is the main script for doing zfs subcommands. It doesn't know 4214843421SMatthew Ahrens what subcommands there are, it just looks for a module zfs.<subcommand> 4314843421SMatthew Ahrens that implements that subcommand.""" 4414843421SMatthew Ahrens 45e4d060fbSSam Falkner try: 4614843421SMatthew Ahrens _ = gettext.translation("SUNW_OST_OSCMD", "/usr/lib/locale", 4714843421SMatthew Ahrens fallback=True).gettext 48e4d060fbSSam Falkner except: 49e4d060fbSSam Falkner _ = solaris.misc.gettext 5014843421SMatthew Ahrens 5114843421SMatthew Ahrens if len(sys.argv) < 2: 5214843421SMatthew Ahrens sys.exit(_("missing subcommand argument")) 5314843421SMatthew Ahrens 5414843421SMatthew Ahrens zfs.ioctl.set_cmdstr(" ".join(["zfs"] + sys.argv[1:])) 5514843421SMatthew Ahrens 5614843421SMatthew Ahrens try: 5714843421SMatthew Ahrens # import zfs.<subcommand> 5814843421SMatthew Ahrens # subfunc = zfs.<subcommand>.do_<subcommand> 5914843421SMatthew Ahrens 6014843421SMatthew Ahrens subcmd = sys.argv[1] 6114843421SMatthew Ahrens __import__("zfs." + subcmd) 6214843421SMatthew Ahrens submod = getattr(zfs, subcmd) 6314843421SMatthew Ahrens subfunc = getattr(submod, "do_" + subcmd) 6414843421SMatthew Ahrens except (ImportError, AttributeError): 6514843421SMatthew Ahrens sys.exit(_("invalid subcommand")) 6614843421SMatthew Ahrens 6714843421SMatthew Ahrens try: 6814843421SMatthew Ahrens subfunc() 698cfa78e6SAndy Fiddaman except zfs.util.ZFSError as e: 7014843421SMatthew Ahrens print(e) 7114843421SMatthew Ahrens sys.exit(1) 7214843421SMatthew Ahrens 738cfa78e6SAndy Fiddamanexcept IOError as e: 7414843421SMatthew Ahrens import errno 7514843421SMatthew Ahrens import sys 7614843421SMatthew Ahrens 7714843421SMatthew Ahrens if e.errno == errno.EPIPE: 7814843421SMatthew Ahrens sys.exit(1) 7914843421SMatthew Ahrens raise 8014843421SMatthew Ahrensexcept KeyboardInterrupt: 8114843421SMatthew Ahrens import sys 8214843421SMatthew Ahrens 8314843421SMatthew Ahrens sys.exit(1) 84