OSDN Git Service

Merge branch 'dev' of ssh://raid.local.hde.co.jp/hde/karesansui/karesansui into dev
[karesansui/karesansui.git] / bin / set_memory.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
21 import __cmd__
22
23 try:
24     import karesansui
25     from karesansui import __version__
26     from karesansui.lib.virt.virt import KaresansuiVirtConnection
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     optp.add_option('-s', '--memory', dest='memory', help=_('Memory size (MB)'), default=None)
40     optp.add_option('-m', '--maxmem', dest='maxmem', help=_('Max memory size (MB)'), default=None)
41     return optp.parse_args()
42
43 def chkopts(opts):
44     if not opts.name:
45         KssCommandOptException('ERROR: %s option is required.' % '-n or --name')
46
47 class SetMemory(KssCommand):
48
49     def process(self):
50         (opts, args) = getopts()
51         chkopts(opts)
52         self.up_progress(10)
53
54         if opts.maxmem:
55             opts.maxmem = str(opts.maxmem) + 'm'
56         if opts.memory:
57             opts.memory = str(opts.memory) + 'm'
58
59         self.up_progress(10)
60         conn = KaresansuiVirtConnection(readonly=False)
61         try:
62             conn.set_domain_name(opts.name)
63
64             active_guests = conn.list_active_guest()
65             inactive_guests = conn.list_inactive_guest()
66             if opts.name in active_guests or opts.name in inactive_guests:
67                 try:
68                     self.up_progress(10)
69                     conn.guest.set_memory(opts.maxmem,opts.memory)
70                     self.up_progress(20)
71                     info = conn.guest.get_info()
72                     self.up_progress(10)
73
74                     self.logger.info('Set memory size. - dom=%s max=%d mem=%d' \
75                                      % (opts.name, info['maxMem'], info['memory']))
76                     print >>sys.stdout, _('Set memory size. - dom=%s max=%d mem=%d') \
77                           % (opts.name, info['maxMem'], info['memory'])
78
79                 except Exception, e:
80                     self.logger.error('Failed to set memory size. - dom=%s' % (opts.name))
81                     print >>sys.stderr, _('Failed to set memory size. - dom=%s') % (opts.name)
82                     raise e
83
84             else:
85                 raise KssCommandException('guest not found. - dom=%s' % (opts.name))
86
87             return True
88         finally:
89             conn.close()
90
91
92 if __name__ == "__main__":
93     target = SetMemory()
94     sys.exit(target.run())