OSDN Git Service

Merge branch 'dev' of ssh://raid.local.hde.co.jp/hde/karesansui/karesansui into dev
[karesansui/karesansui.git] / bin / start_guest.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #
4 # This file is part of Karesansui.
5 #
6 # Copyright (C) 2009-2010 HDE, Inc.
7 #
8 # This program is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU General Public License
10 # as published by the Free Software Foundation; either version 2
11 # of the License, or (at your option) any later version.
12 #
13
14 import os
15 import sys
16 import logging
17 from optparse import OptionParser
18
19 from ksscommand import KssCommand, KssCommandException, KssCommandOptException
20 import __cmd__
21
22 try:
23     import karesansui
24     from karesansui import __version__
25     from karesansui.lib.virt.virt import KaresansuiVirtConnection, \
26                  VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTDOWN
27     from karesansui.lib.utils import load_locale
28 except ImportError:
29     print >>sys.stderr, "[Error] karesansui package was not found."
30     sys.exit(1)
31
32 _ = load_locale()
33
34 usage = '%prog [options]'
35
36 def getopts():
37     optp = OptionParser(usage=usage, version=__version__)
38     optp.add_option('-n', '--name', dest='name', help=_('Domain Name'))
39     return optp.parse_args()
40
41 def chkopts(opts):
42     if not opts.name:
43         raise KssCommandOptException('ERROR: -n or --name option is required.')
44
45 class StartGuest(KssCommand):
46
47     def process(self):
48         (opts, args) = getopts()
49         chkopts(opts)
50         self.up_progress(10)
51
52         conn = KaresansuiVirtConnection(readonly=False)
53         try:
54             conn.set_domain_name(opts.name)
55
56             active_guests = conn.list_active_guest()
57             inactive_guests = conn.list_inactive_guest()
58             if opts.name in active_guests or opts.name in inactive_guests:
59                 try:
60                     self.up_progress(10)
61                     conn.start_guest()
62                     self.up_progress(30)
63                 except:
64                     self.logger.error('Failed to start guest. - dom=%s' % (opts.name))
65                     print >>sys.stderr, _('Failed to start guest. - dom=%s') % (opts.name)
66                     raise
67
68                 self.up_progress(10)
69                 status = conn.guest.status()
70                 self.up_progress(10)
71                 if status != VIR_DOMAIN_SHUTOFF and status != VIR_DOMAIN_SHUTDOWN:
72                     self.logger.info('Succeeded to start guest. - dom=%s' % (opts.name))
73                     print >>sys.stderr, _('Succeeded to start guest. - dom=%s') % (opts.name)
74
75             else:
76                 raise KssCommandException(
77                     'guest not found. - dom=%s' % (opts.name))
78
79             return True
80         finally:
81             conn.close()
82
83 if __name__ == "__main__":
84     target = StartGuest()
85     sys.exit(target.run())