Updated chroot's cleanup function
[tools/mic.git] / mic / creator.py
1 #!/usr/bin/python -t
2
3 from __future__ import with_statement
4 import os
5 import sys
6 import string
7 import optparse
8 import logging
9
10 import mic.utils.cmdln as cmdln
11 import mic.configmgr as configmgr
12 import mic.pluginmgr as pluginmgr
13
14 class Creator(cmdln.Cmdln):
15     """
16     ${command_list}
17     ${help_list}
18     ${option_list}
19     """
20     name = 'mic create(cr)'
21     conf = None
22     man_header = None
23     man_footer = None
24
25     def __init__(self, *args, **kwargs):
26         cmdln.Cmdln.__init__(self, *args, **kwargs)
27         # load configmgr
28         self.configmgr = configmgr.getConfigMgr()
29         # load pluginmgr
30         self.pluginmgr = pluginmgr.PluginMgr()
31         self.pluginmgr.loadPlugins()
32         self.plugincmds = self.pluginmgr.getImagerPlugins()
33         # mix-in do_subcmd interface
34         for subcmd, klass in self.plugincmds:
35             if not hasattr(klass, 'do_create'):
36                 logging.warn("Unsurpport subcmd: %s" % subcmd)
37                 continue
38             func = getattr(klass, 'do_create')
39             setattr(self.__class__, "do_"+subcmd, func)
40
41     def get_optparser(self):
42         optparser = cmdln.CmdlnOptionParser(self)
43         optparser.add_option('-d', '--debug', action='store_true', help='print debug info')
44         optparser.add_option('-v', '--verbose', action='store_true', help='verbose output')
45         #optparser.add_option('-o', '--outdir', type='string', action='store', dest='outdir', default=None, help='output directory')
46         return optparser 
47
48     def preoptparse(self, argv):
49         pass
50
51     def postoptparse(self):
52         if self.options.verbose is True:
53             logging.getLogger().setLevel(logging.INFO)
54         if self.options.debug is True:
55             logging.getLogger().setLevel(logging.DEBUG)
56         #if self.options.outdir is not None:
57         #    self.configmgr.create['outdir'] = self.options.outdir
58
59     def main(self, argv=None):
60         if argv is None:
61             argv = sys.argv
62         else:
63             argv = argv[:] # don't modify caller's list
64
65         self.optparser = self.get_optparser()
66         if self.optparser: # i.e. optparser=None means don't process for opts
67             try:
68                 self.preoptparse(argv)
69                 self.options, args = self.optparser.parse_args(argv)
70             except cmdln.CmdlnUserError, ex:
71                 msg = "%s: %s\nTry '%s help' for info.\n"\
72                       % (self.name, ex, self.name)
73                 self.stderr.write(self._str(msg))
74                 self.stderr.flush()
75                 return 1
76             except cmdln.StopOptionProcessing, ex:
77                 return 0
78         else:
79             self.options, args = None, argv[1:]
80         self.postoptparse()
81
82         if args:
83             if os.geteuid() != 0:
84                 print >> sys.stderr, "You must run %s as root" % sys.argv[0]
85                 return 1
86
87             return self.cmd(args)
88         else:
89             return self.emptyline()