OSDN Git Service

Add validate
[karesansui/karesansui.git] / bin / append_disk.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, 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('-d', '--disk', dest='disk', help=_('Disk image file'))
40     optp.add_option('-t', '--target', dest='target', help=_('Device target'), default=None)
41     return optp.parse_args()
42
43 def chkopts(opts):
44     if not opts.name:
45         raise KssCommandOptException('ERROR: %s option is required.' % '-n or --name')
46     if not opts.disk or not os.path.exists(opts.disk):
47         raise KssCommandOptException('ERROR: disk image not found.')
48     """TODO: valid
49     オプションチェック
50     """
51
52 class AppendDisk(KssCommand):
53
54     def process(self):
55         (opts, args) = getopts()
56         chkopts(opts)
57         self.up_progress(10)
58
59         conn = KaresansuiVirtConnection(readonly=False)
60         try:
61             conn.set_domain_name(opts.name)
62
63             self.up_progress(10)
64             if not opts.target:
65                 opts.target = conn.guest.next_disk_target()
66
67             conn.guest.append_disk(opts.disk,opts.target)
68             self.up_progress(50)
69         finally:
70             conn.close()
71
72         self.logger.info('Appended disk device. - dom=%s target=%s path=%s' \
73                          % (opts.name, opts.target, opts.disk))
74         print >>sys.stdout, _('Appended disk device. - dom=%s target=%s path=%s') \
75               % (opts.name,opts.target,opts.disk)
76         return True
77
78 if __name__ == "__main__":
79     target = AppendDisk()
80     sys.exit(target.run())