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@xxxxxxxxxx> > --- > > 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. > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list