mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
virsh-domain-monitor: Use the virsh wrappers for getting XML to simplify code
Reuse virshDomainGetXML and virshDomainGetXMLFromDom.
This commit is contained in:
parent
c8a637c7d0
commit
6bd2889014
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user