6505c36ecc
virtman-netstats-fix.diff virtman-finish-button-fix.diff virtman-shutoff-fix.diff virtman-set-has-window-fix.diff virtman-grep-fix.diff virtman-no-cd-present-fix.diff virtman-resize-menu-fix.diff virtman-vcpu-count-fix.diff virtman-storage-pool-fix.diff virtman-domain-name-fix.diff virtman-unapplied-changes-fix.diff virtman-details-fix.diff virtman-delete-fix.diff virtman-collidelist-fix.diff virtman-char-device-mode-fix.diff virtinst-hv-version-fix.diff virtinst-initrd-inject-fix.diff virtinst-initrd-inject2-fix.diff virtinst-no-volume-fix.diff virtinst-prompts-fix.diff virtinst-cpu-model-name-fix.diff virtinst-xml-clear-fix.diff virtinst-remote-storage-fix.diff virtinst-error-message-fix.diff virtinst-typo-fix.diff virtinst-cdrom.diff virtinst-storage-ocfs2.diff OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=63
123 lines
4.4 KiB
Diff
123 lines
4.4 KiB
Diff
|
|
Subject: virt-install: Fix several prompting scenarios
|
|
From: Cole Robinson crobinso@redhat.com Thu Aug 25 13:50:21 2011 -0400
|
|
Date: Thu Aug 25 16:00:06 2011 -0400:
|
|
Git: de8aaf09157a31aa8ca66036371751100b3d0edb
|
|
|
|
|
|
Index: virtinst-0.600.0/virt-install
|
|
===================================================================
|
|
--- virtinst-0.600.0.orig/virt-install
|
|
+++ virtinst-0.600.0/virt-install
|
|
@@ -146,20 +146,22 @@ def get_disk(diskopts, size, sparse, gue
|
|
|
|
guest.disks.append(d)
|
|
|
|
-def get_disks(guest, file_paths, disk_paths, size, sparse):
|
|
+def get_disks(guest, file_paths, disk_paths, size, sparse, need_storage):
|
|
is_file_path = (file_paths or (not disk_paths and cli.is_prompt()))
|
|
- disk = (file_paths or disk_paths)
|
|
+ disks = (file_paths or disk_paths)
|
|
+ if not disks and need_storage and cli.is_prompt():
|
|
+ disks = [None]
|
|
|
|
def padlist(l, padsize):
|
|
l = cli.listify(l)
|
|
l.extend((padsize - len(l)) * [None])
|
|
return l
|
|
|
|
- disk = padlist(disk, 0)
|
|
- size = padlist(size, len(disk))
|
|
+ disklist = padlist(disks, 0)
|
|
+ sizelist = padlist(size, len(disklist))
|
|
|
|
- for idx in range(len(disk)):
|
|
- get_disk(disk[idx], size[idx], sparse, guest, is_file_path)
|
|
+ for idx in range(len(disklist)):
|
|
+ get_disk(disklist[idx], sizelist[idx], sparse, guest, is_file_path)
|
|
|
|
def get_networks(guest, options):
|
|
networks, macs = cli.digest_networks(guest, options)
|
|
@@ -288,11 +290,11 @@ def get_virt_type(conn, options):
|
|
# Install media setup/validation #
|
|
##################################
|
|
|
|
-def get_install_media(guest, location, cdpath):
|
|
+def get_install_media(guest, location, cdpath, need_install):
|
|
manual_cdrom = cdrom_specified(guest)
|
|
cdinstall = bool(not location and (cdpath or cdrom_specified(guest)))
|
|
|
|
- if not (location or cdpath or manual_cdrom):
|
|
+ if not (location or cdpath or manual_cdrom or need_install):
|
|
return
|
|
|
|
try:
|
|
@@ -347,26 +349,33 @@ def validate_required_options(options, g
|
|
# Required config. Don't error right away if nothing is specified,
|
|
# aggregate the errors to help first time users get it right
|
|
msg = ""
|
|
- if cli.is_prompt():
|
|
- return
|
|
+ need_storage = False
|
|
+ need_install = False
|
|
|
|
if not options.name:
|
|
msg += "\n" + cli.name_missing
|
|
+
|
|
if not options.memory:
|
|
msg += "\n" + cli.ram_missing
|
|
+
|
|
if (not guest.installer.is_container() and
|
|
not storage_specified(options.file_paths, options.diskopts,
|
|
options.nodisks, options.filesystems)):
|
|
msg += "\n" + disk_missing
|
|
+ need_storage = True
|
|
+
|
|
if (not guest.installer.is_container() and
|
|
(not install_specified(options.location, options.cdrom,
|
|
options.pxe, options.import_install)) and
|
|
(not cdrom_specified(guest, options.diskopts))):
|
|
msg += "\n" + install_missing
|
|
+ need_install = True
|
|
|
|
- if msg:
|
|
+ if msg and not cli.is_prompt():
|
|
fail(msg)
|
|
|
|
+ return need_storage, need_install
|
|
+
|
|
def check_option_collisions(options, guest):
|
|
# Disk collisions
|
|
if options.nodisks and (options.file_paths or
|
|
@@ -508,15 +517,15 @@ def build_guest_instance(conn, options):
|
|
|
|
# Do this after setting up all optional parameters, so we report error
|
|
# about those first.
|
|
- validate_required_options(options, guest)
|
|
+ need_storage, need_install = validate_required_options(options, guest)
|
|
|
|
# Actually set required options
|
|
cli.get_name(options.name, guest)
|
|
cli.get_memory(options.memory, guest)
|
|
if not options.nodisks:
|
|
get_disks(guest, options.file_paths, options.diskopts,
|
|
- options.disksize, options.sparse)
|
|
- get_install_media(guest, options.location, options.cdrom)
|
|
+ options.disksize, options.sparse, need_storage)
|
|
+ get_install_media(guest, options.location, options.cdrom, need_install)
|
|
|
|
# Various little validations about option collisions. Need to do
|
|
# this after setting guest.installer at least
|
|
Index: virtinst-0.600.0/virtinst/cli.py
|
|
===================================================================
|
|
--- virtinst-0.600.0.orig/virtinst/cli.py
|
|
+++ virtinst-0.600.0/virtinst/cli.py
|
|
@@ -549,6 +549,7 @@ def prompt_for_input(noprompt_err, promp
|
|
fail(noprompt_err)
|
|
|
|
print_stdout(prompt + " ", do_force=True)
|
|
+ sys.stdout.flush()
|
|
return sys.stdin.readline().strip()
|
|
|
|
def prompt_for_yes_or_no(warning, question):
|