1b5daea771
In some (most) cases VM needs to be started to complete resize operation. This may be unexpected, so make it clear and do not start the VM when the user did not explicitly allow that. Fixes QubesOS/qubes-issues#1268
73 lines
2.2 KiB
Python
Executable File
73 lines
2.2 KiB
Python
Executable File
#!/usr/bin/python2
|
|
# -*- encoding: utf8 -*-
|
|
#
|
|
# The Qubes OS Project, http://www.qubes-os.org
|
|
#
|
|
# Copyright (C) 2014 Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
#
|
|
|
|
from qubes.qubes import QubesVmCollection
|
|
from qubes.qubes import QubesException
|
|
from qubes.qubesutils import parse_size
|
|
from optparse import OptionParser
|
|
import subprocess
|
|
import os
|
|
import re
|
|
import sys
|
|
|
|
def main():
|
|
usage = "usage: %prog <vm-name> <size>"
|
|
parser = OptionParser (usage)
|
|
|
|
parser.add_option("--allow-start", action="store_true",
|
|
dest="allow_start", default=False,
|
|
help="Allow VM to be started to complete the operation")
|
|
|
|
(options, args) = parser.parse_args ()
|
|
if (len (args) != 2):
|
|
parser.error ("You must specify VM name and new size!")
|
|
vmname = args[0]
|
|
size = args[1]
|
|
|
|
qvm_collection = QubesVmCollection()
|
|
qvm_collection.lock_db_for_reading()
|
|
qvm_collection.load()
|
|
qvm_collection.unlock_db()
|
|
|
|
vm = qvm_collection.get_vm_by_name(vmname)
|
|
if vm is None:
|
|
print >> sys.stderr, "A VM with the name '{0}' does not exist in the system.".format(vmname)
|
|
exit(1)
|
|
|
|
size_bytes = parse_size(size)
|
|
|
|
if not hasattr(vm, 'resize_root_img'):
|
|
print >> sys.stderr, "Operation not supported for this VM type"
|
|
exit(1)
|
|
|
|
try:
|
|
vm.resize_root_img(size_bytes, allow_start=options.allow_start)
|
|
except (IOError, OSError, QubesException) as err:
|
|
print >> sys.stderr, "ERROR: {0}".format(err)
|
|
exit (1)
|
|
|
|
exit (0)
|
|
|
|
|
|
main()
|