[virt-tools-list] [virt-manager PATCH] virt-xml: refactor the handling of --define and --update

Cole Robinson crobinso at redhat.com
Thu Jul 2 00:04:40 UTC 2015


On 07/01/2015 06:42 AM, Pavel Hrdina wrote:
> The code was wrong in many ways.  The main issue was, that for live
> updates we were using config XML instead of live XML.
> 
> This patch fixes the --update and --define options to work properly as
> described in man page.
> 
> Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1192875
> 
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
>  virt-xml | 60 ++++++++++++++++++++++++++++++++----------------------------
>  1 file changed, 32 insertions(+), 28 deletions(-)
> 
> diff --git a/virt-xml b/virt-xml
> index 744af3d..3cd0211 100755
> --- a/virt-xml
> +++ b/virt-xml
> @@ -295,6 +295,33 @@ def update_changes(domain, devs, action, confirm):
>              print_stdout("")
>  
>  
> +def prepare_changes(xmlobj, options, parsermap, parserobj):
> +    origxml = xmlobj.get_xml_config()
> +
> +    if options.edit != -1:
> +        devs = action_edit(xmlobj, options, parsermap, parserobj)
> +        action = "update"
> +
> +    elif options.add_device:
> +        devs = action_add_device(xmlobj, options, parsermap, parserobj)
> +        action = "hotplug"
> +
> +    elif options.remove_device:
> +        devs = action_remove_device(xmlobj, options, parsermap, parserobj)
> +        action = "hotunplug"
> +
> +    newxml = xmlobj.get_xml_config()
> +    diff = get_diff(origxml, newxml)
> +
> +    if options.print_diff:
> +        if diff:
> +            print_stdout(diff)
> +    elif options.print_xml:
> +        print_stdout(newxml)
> +
> +    return devs, action
> +
> +
>  #######################
>  # CLI option handling #
>  #######################
> @@ -410,10 +437,6 @@ def main(conn=None):
>      elif not options.build_xml:
>          inactive_xmlobj = _make_guest(conn, options.stdinxml)
>  
> -    origxml = None
> -    if inactive_xmlobj:
> -        origxml = inactive_xmlobj.get_xml_config()
> -
>      check_action_collision(options)
>      parserobj = check_xmlopt_collision(options, parsermap)
>  
> @@ -421,38 +444,19 @@ def main(conn=None):
>          fail(_("Don't know how to --update for --%s") %
>               (parserobj.cli_arg_name))
>  
> -    if options.edit != -1:
> -        devs = action_edit(inactive_xmlobj, options, parsermap, parserobj)
> -        action = "update"
> -
> -    elif options.add_device:
> -        devs = action_add_device(inactive_xmlobj, options,
> -                                 parsermap, parserobj)
> -        action = "hotplug"
> -
> -    elif options.remove_device:
> -        devs = action_remove_device(inactive_xmlobj, options,
> -                                    parsermap, parserobj)
> -        action = "hotunplug"
> -
> -    elif options.build_xml:
> +    if options.build_xml:
>          devs = action_build_xml(conn, options, parsermap, parserobj)
>          for dev in util.listify(devs):
>              print_stdout(dev.get_xml_config())
>          return 0
>  
> -    newxml = inactive_xmlobj.get_xml_config()
> -    diff = get_diff(origxml, newxml)
> -
> -    if options.print_diff:
> -        if diff:
> -            print_stdout(diff)
> -    elif options.print_xml:
> -        print_stdout(newxml)
> -
>      if options.update and active_xmlobj:
> +        devs, action = prepare_changes(active_xmlobj, options,
> +                                       parsermap, parserobj)
>          update_changes(domain, devs, action, options.confirm)
>      if options.define:
> +        devs, action = prepare_changes(inactive_xmlobj, options,
> +                                       parsermap, parserobj)
>          define_changes(conn, inactive_xmlobj, devs, action, options.confirm)
>          if not options.update and active_xmlobj:
>              print_stdout(
> 

Breaks the test suite for me

- Cole




More information about the virt-tools-list mailing list