virsh-domain-monitor: Use the virsh wrappers for getting XML to simplify code

Reuse virshDomainGetXML and virshDomainGetXMLFromDom.
This commit is contained in:
Peter Krempa 2017-04-11 17:33:53 +02:00
parent c8a637c7d0
commit 6bd2889014

View File

@ -63,7 +63,6 @@ virshGetDomainDescription(vshControl *ctl, virDomainPtr dom, bool title,
unsigned int flags) unsigned int flags)
{ {
char *desc = NULL; char *desc = NULL;
char *domxml = NULL;
virErrorPtr err = NULL; virErrorPtr err = NULL;
xmlDocPtr doc = NULL; xmlDocPtr doc = NULL;
xmlXPathContextPtr ctxt = NULL; xmlXPathContextPtr ctxt = NULL;
@ -90,16 +89,9 @@ virshGetDomainDescription(vshControl *ctl, virDomainPtr dom, bool title,
} }
/* fall back to xml */ /* fall back to xml */
/* get domain's xml description and extract the title/description */ if (virshDomainGetXMLFromDom(ctl, dom, flags, &doc, &ctxt) < 0)
if (!(domxml = virDomainGetXMLDesc(dom, flags))) {
vshError(ctl, "%s", _("Failed to retrieve domain XML"));
goto cleanup; goto cleanup;
}
doc = virXMLParseStringCtxt(domxml, _("(domain_definition)"), &ctxt);
if (!doc) {
vshError(ctl, "%s", _("Couldn't parse domain XML"));
goto cleanup;
}
if (title) if (title)
desc = virXPathString("string(./title[1])", ctxt); desc = virXPathString("string(./title[1])", ctxt);
else else
@ -109,7 +101,6 @@ virshGetDomainDescription(vshControl *ctl, virDomainPtr dom, bool title,
desc = vshStrdup(ctl, ""); desc = vshStrdup(ctl, "");
cleanup: cleanup:
VIR_FREE(domxml);
xmlXPathFreeContext(ctxt); xmlXPathFreeContext(ctxt);
xmlFreeDoc(doc); xmlFreeDoc(doc);
@ -465,10 +456,8 @@ static const vshCmdOptDef opts_domblklist[] = {
static bool static bool
cmdDomblklist(vshControl *ctl, const vshCmd *cmd) cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
{ {
virDomainPtr dom;
bool ret = false; bool ret = false;
unsigned int flags = 0; unsigned int flags = 0;
char *xml = NULL;
xmlDocPtr xmldoc = NULL; xmlDocPtr xmldoc = NULL;
xmlXPathContextPtr ctxt = NULL; xmlXPathContextPtr ctxt = NULL;
int ndisks; int ndisks;
@ -485,15 +474,7 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
details = vshCommandOptBool(cmd, "details"); details = vshCommandOptBool(cmd, "details");
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) if (virshDomainGetXML(ctl, cmd, flags, &xmldoc, &ctxt) < 0)
return false;
xml = virDomainGetXMLDesc(dom, flags);
if (!xml)
goto cleanup;
xmldoc = virXMLParseStringCtxt(xml, _("(domain_definition)"), &ctxt);
if (!xmldoc)
goto cleanup; goto cleanup;
ndisks = virXPathNodeSet("./devices/disk", ctxt, &disks); ndisks = virXPathNodeSet("./devices/disk", ctxt, &disks);
@ -553,8 +534,6 @@ cmdDomblklist(vshControl *ctl, const vshCmd *cmd)
VIR_FREE(disks); VIR_FREE(disks);
xmlXPathFreeContext(ctxt); xmlXPathFreeContext(ctxt);
xmlFreeDoc(xmldoc); xmlFreeDoc(xmldoc);
VIR_FREE(xml);
virshDomainFree(dom);
return ret; return ret;
} }
@ -579,10 +558,8 @@ static const vshCmdOptDef opts_domiflist[] = {
static bool static bool
cmdDomiflist(vshControl *ctl, const vshCmd *cmd) cmdDomiflist(vshControl *ctl, const vshCmd *cmd)
{ {
virDomainPtr dom;
bool ret = false; bool ret = false;
unsigned int flags = 0; unsigned int flags = 0;
char *xml = NULL;
xmlDocPtr xmldoc = NULL; xmlDocPtr xmldoc = NULL;
xmlXPathContextPtr ctxt = NULL; xmlXPathContextPtr ctxt = NULL;
int ninterfaces; int ninterfaces;
@ -592,15 +569,7 @@ cmdDomiflist(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptBool(cmd, "inactive")) if (vshCommandOptBool(cmd, "inactive"))
flags |= VIR_DOMAIN_XML_INACTIVE; flags |= VIR_DOMAIN_XML_INACTIVE;
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) if (virshDomainGetXML(ctl, cmd, flags, &xmldoc, &ctxt) < 0)
return false;
xml = virDomainGetXMLDesc(dom, flags);
if (!xml)
goto cleanup;
xmldoc = virXMLParseStringCtxt(xml, _("(domain_definition)"), &ctxt);
if (!xmldoc)
goto cleanup; goto cleanup;
ninterfaces = virXPathNodeSet("./devices/interface", ctxt, &interfaces); ninterfaces = virXPathNodeSet("./devices/interface", ctxt, &interfaces);
@ -648,8 +617,6 @@ cmdDomiflist(vshControl *ctl, const vshCmd *cmd)
cleanup: cleanup:
VIR_FREE(interfaces); VIR_FREE(interfaces);
virshDomainFree(dom);
VIR_FREE(xml);
xmlFreeDoc(xmldoc); xmlFreeDoc(xmldoc);
xmlXPathFreeContext(ctxt); xmlXPathFreeContext(ctxt);
return ret; return ret;
@ -686,13 +653,11 @@ static const vshCmdOptDef opts_domif_getlink[] = {
static bool static bool
cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd) cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd)
{ {
virDomainPtr dom;
const char *iface = NULL; const char *iface = NULL;
char *state = NULL; char *state = NULL;
char *xpath = NULL; char *xpath = NULL;
virMacAddr macaddr; virMacAddr macaddr;
char macstr[VIR_MAC_STRING_BUFLEN] = ""; char macstr[VIR_MAC_STRING_BUFLEN] = "";
char *desc = NULL;
xmlDocPtr xml = NULL; xmlDocPtr xml = NULL;
xmlXPathContextPtr ctxt = NULL; xmlXPathContextPtr ctxt = NULL;
xmlNodePtr *interfaces = NULL; xmlNodePtr *interfaces = NULL;
@ -703,21 +668,11 @@ cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptStringReq(ctl, cmd, "interface", &iface) < 0) if (vshCommandOptStringReq(ctl, cmd, "interface", &iface) < 0)
return false; return false;
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
return false;
if (vshCommandOptBool(cmd, "config")) if (vshCommandOptBool(cmd, "config"))
flags = VIR_DOMAIN_XML_INACTIVE; flags = VIR_DOMAIN_XML_INACTIVE;
if (!(desc = virDomainGetXMLDesc(dom, flags))) { if (virshDomainGetXML(ctl, cmd, flags, &xml, &ctxt) < 0)
vshError(ctl, _("Failed to get domain description xml"));
goto cleanup; goto cleanup;
}
if (!(xml = virXMLParseStringCtxt(desc, _("(domain_definition)"), &ctxt))) {
vshError(ctl, _("Failed to parse domain description xml"));
goto cleanup;
}
/* normalize the mac addr */ /* normalize the mac addr */
if (virMacAddrParse(iface, &macaddr) == 0) if (virMacAddrParse(iface, &macaddr) == 0)
@ -752,13 +707,11 @@ cmdDomIfGetLink(vshControl *ctl, const vshCmd *cmd)
ret = true; ret = true;
cleanup: cleanup:
VIR_FREE(desc);
VIR_FREE(state); VIR_FREE(state);
VIR_FREE(interfaces); VIR_FREE(interfaces);
VIR_FREE(xpath); VIR_FREE(xpath);
xmlXPathFreeContext(ctxt); xmlXPathFreeContext(ctxt);
xmlFreeDoc(xml); xmlFreeDoc(xml);
virshDomainFree(dom);
return ret; return ret;
} }