[libvirt] [PATCH v2] virsh: Teach attach-interface to --print-xml

John Ferlan jferlan at redhat.com
Wed Sep 16 13:36:04 UTC 2015



On 09/10/2015 04:31 AM, Michal Privoznik wrote:
> We have the same argument to many other commands that produce an
> XML based on what user typed. But unfortunately attach-interface
> was missing it. Maybe nobody had needed it yet. Well, I did
> just now.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
> 
> Diff to v1:
> - Commit message grammar fix
> - Fixed usage of virDomain
> 
>  tools/virsh-domain.c | 28 ++++++++++++++++++++--------
>  tools/virsh.pod      |  4 ++++
>  2 files changed, 24 insertions(+), 8 deletions(-)
> 
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index b029b65..ce84930 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -862,6 +862,10 @@ static const vshCmdOptDef opts_attach_interface[] = {
>       .type = VSH_OT_BOOL,
>       .help = N_("affect current domain")
>      },
> +    {.name = "print-xml",
> +     .type = VSH_OT_BOOL,
> +     .help = N_("print XML document rather than attach the interface")
> +    },
>      {.name = NULL}
>  };
>  
> @@ -938,13 +942,6 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
>      if (live)
>          flags |= VIR_DOMAIN_AFFECT_LIVE;
>  
> -    if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
> -        return false;
> -
> -    if (persistent &&
> -        virDomainIsActive(dom) == 1)
> -        flags |= VIR_DOMAIN_AFFECT_LIVE;
> -
>      if (vshCommandOptStringReq(ctl, cmd, "type", &type) < 0 ||
>          vshCommandOptStringReq(ctl, cmd, "source", &source) < 0 ||
>          vshCommandOptStringReq(ctl, cmd, "target", &target) < 0 ||
> @@ -1051,6 +1048,7 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
>          virBufferAddLit(&buf, "</bandwidth>\n");
>      }
>  
> +    virBufferAdjustIndent(&buf, -2);
>      virBufferAddLit(&buf, "</interface>\n");
>  
>      if (virBufferError(&buf)) {
> @@ -1060,6 +1058,19 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
>  
>      xml = virBufferContentAndReset(&buf);
>  
> +    if (vshCommandOptBool(cmd, "print-xml")) {
> +        vshPrint(ctl, "%s", xml);
> +        functionReturn = true;
> +        goto cleanup;
> +    }
> +
> +    if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
> +        goto cleanup;
> +
> +    if (persistent &&
> +        virDomainIsActive(dom) == 1)
> +        flags |= VIR_DOMAIN_AFFECT_LIVE;
> +
>      if (flags || current)
>          ret = virDomainAttachDeviceFlags(dom, xml, flags);
>      else
> @@ -1075,7 +1086,8 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd)
>      }
>  
>   cleanup:

Move the VIR_FREE(xml); to here instead of where it is and before to
initialize it to NULL above...

ACK with those adjustments

John
> -    virDomainFree(dom);
> +    if (dom)
> +        virDomainFree(dom);
>      virBufferFreeAndReset(&buf);
>      return functionReturn;
>  }
> diff --git a/tools/virsh.pod b/tools/virsh.pod
> index 83c445d3..0212e7a 100644
> --- a/tools/virsh.pod
> +++ b/tools/virsh.pod
> @@ -2507,6 +2507,7 @@ Likewise, I<--shareable> is an alias for I<--mode shareable>.
>  [[[I<--live>] [I<--config>] | [I<--current>]] | [I<--persistent>]]
>  [I<--target target>] [I<--mac mac>] [I<--script script>] [I<--model model>]
>  [I<--inbound average,peak,burst,floor>] [I<--outbound average,peak,burst>]
> +[I<--print-xml>]
>  
>  Attach a new network interface to the domain.  I<type> can be
>  I<network> to indicate connection via a libvirt virtual network, or
> @@ -2536,6 +2537,9 @@ kilobytes in a single burst at I<peak> speed as described in the
>  Network XML documentation at
>  L<http://libvirt.org/formatnetwork.html#elementQoS>.
>  
> +If I<--print-xml> is specified, then the XML of the interface that would be
> +attached is printed instead.
> +
>  If I<--live> is specified, affect a running domain.
>  If I<--config> is specified, affect the next startup of a persistent domain.
>  If I<--current> is specified, affect the current domain state.
> 




More information about the libvir-list mailing list