[et-mgmt-tools] Re-usage of existing disks/virt-install
Cole Robinson
crobinso at redhat.com
Wed Mar 5 21:53:41 UTC 2008
Daniel P. Berrange wrote:
> On Wed, Feb 20, 2008 at 10:02:27AM -0500, Cole Robinson wrote:
>> Alexander Todorov wrote:
>>> -----BEGIN PGP SIGNED MESSAGE-----
>>> Hash: SHA512
>>>
>>> Hello,
>>> I've been using a shell script to help me with some testing which installs the
>>> same Xen guest over and over again. Now I've noticed that in
>>> python-virtinst-0.300.2-3.fc8 there's new functionality. virt-install will check
>>> if the file exists and ask to overwrite, then it will ask if you want to use the
>>> same file if it's being used by another guest (in my case inactive).
>>>
>>> That's breaking the cli by making it interactive. This has impact on old scripts
>>> which do not require further interaction.
>>>
>>> Can we consider a --yes or a similar option to deal with this problem?
>>> Any opinions are welcome.
>>>
>>> Thanks,
>>> Alexander.
>> Complete agreement here, I actually cooked up something similar to this a while
>> ago and posted it to the list, but never committed it. There should probably
>> be an option to answer yes where applicable, but also an option to outright fail
>> on any prompt.
>>
>> Something like --noprompt={fail,yes}, defaults to fail. Unfortunately this doesn't
>> look very intuitive but my brain isn't thinking of anything cleaner at the moment.
>
> Personally I think the check for a file existing on disk is an utter waste
> of time & just serves to seriously annoy & should be removed. Fine checking
> for it being in use in an existing guest though.
>
> The -f, or --force is the common nomenculture used to rm/cp/mv to stop it
> prompting
>
> Dan.
The file check is now gone upstream, but a --force option is still a good idea.
Patch below.
Thanks,
Cole
diff -r faf95c934129 virt-clone
--- a/virt-clone Tue Mar 04 09:54:33 2008 -0500
+++ b/virt-clone Wed Mar 05 16:49:08 2008 -0500
@@ -164,6 +164,9 @@ def parse_args():
# Misc options
parser.add_option("-d", "--debug", action="store_true", dest="debug",
help=_("Print debugging information"))
+ parser.add_option("", "--force", action="store_true", dest="force",
+ help=_("Do not prompt for input. Answers yes where applicable, terminates for all other prompts"),
+ default=False)
(options,args) = parser.parse_args()
return options
@@ -173,6 +176,7 @@ def main():
options = parse_args()
cli.setupLogging("virt-clone", options.debug)
+ cli.set_force(options.force)
logging.debug("start clone with HV " + options.connect)
diff -r faf95c934129 virt-image
--- a/virt-image Tue Mar 04 09:54:33 2008 -0500
+++ b/virt-image Wed Mar 05 16:49:08 2008 -0500
@@ -139,6 +139,9 @@ def parse_args():
help=_("Print the libvirt XML, but do not start the domain"))
parser.add_option("", "--boot", type="int", dest="boot",
help=_("The zero-based index of the boot record to use"))
+ parser.add_option("", "--force", action="store_true", dest="force",
+ help=_("Do not prompt for input. Answers yes where applicable, terminates for all other prompts"),
+ default=False)
(options,args) = parser.parse_args()
if len(args) < 1:
@@ -162,6 +165,7 @@ def main():
options = parse_args()
cli.setupLogging("virt-image", options.debug)
+ cli.set_force(options.force)
conn = cli.getConnection(options.connect)
type = None
diff -r faf95c934129 virt-install
--- a/virt-install Tue Mar 04 09:54:33 2008 -0500
+++ b/virt-install Wed Mar 05 16:49:08 2008 -0500
@@ -273,6 +273,9 @@ def parse_args():
help=_("Print debugging information"))
parser.add_option("", "--noreboot", action="store_true", dest="noreboot",
help=_("Disables the automatic rebooting when the installation is complete."))
+ parser.add_option("", "--force", action="store_true", dest="force",
+ help=_("Do not prompt for input. Answers yes where applicable, terminates for all other prompts"),
+ default=False)
(options,args) = parser.parse_args()
@@ -338,6 +341,7 @@ def main():
options = parse_args()
cli.setupLogging("virt-install", options.debug)
+ cli.set_force(options.force)
conn = cli.getConnection(options.connect)
capabilities = virtinst.CapabilitiesParser.parse(conn.getCapabilities())
diff -r faf95c934129 virtinst/cli.py
--- a/virtinst/cli.py Tue Mar 04 09:54:33 2008 -0500
+++ b/virtinst/cli.py Wed Mar 05 16:49:08 2008 -0500
@@ -29,6 +29,7 @@ import Guest
import Guest
MIN_RAM = 64
+force = False
#
# Setup helpers
@@ -94,9 +95,15 @@ def getConnection(connect):
# Prompting
#
+def set_force(val=True):
+ global force
+ force = val
+
def prompt_for_input(prompt = "", val = None):
if val is not None:
return val
+ if force:
+ raise RuntimeError(_("Force flag is set but input was required. Prompt was: %s" % prompt))
print prompt + " ",
return sys.stdin.readline().strip()
@@ -110,6 +117,10 @@ def yes_or_no(s):
def prompt_for_yes_or_no(prompt):
"""catches yes_or_no errors and ensures a valid bool return"""
+ if force:
+ logging.debug("Forcing return value of True to prompt '%s'")
+ return True
+
while 1:
input = prompt_for_input(prompt, None)
try:
More information about the et-mgmt-tools
mailing list