提交 3b20e50d 编写于 作者: P Peter Krempa

virsh: domain: Split out code to lookup domain from string

Split out guts of the function to reuse it to get domain objects from
string.
上级 76a5bc4e
...@@ -60,57 +60,79 @@ ...@@ -60,57 +60,79 @@
# define SA_SIGINFO 0 # define SA_SIGINFO 0
#endif #endif
virDomainPtr
vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd, static virDomainPtr
const char **name, unsigned int flags) vshLookupDomainInternal(vshControl *ctl,
const char *cmdname,
const char *name,
unsigned int flags)
{ {
virDomainPtr dom = NULL; virDomainPtr dom = NULL;
const char *n = NULL;
int id; int id;
const char *optname = "domain";
virCheckFlags(VSH_BYID | VSH_BYUUID | VSH_BYNAME, NULL); virCheckFlags(VSH_BYID | VSH_BYUUID | VSH_BYNAME, NULL);
if (!vshCmdHasOption(ctl, cmd, optname))
return NULL;
if (vshCommandOptStringReq(ctl, cmd, optname, &n) < 0)
return NULL;
vshDebug(ctl, VSH_ERR_INFO, "%s: found option <%s>: %s\n",
cmd->def->name, optname, n);
if (name)
*name = n;
/* try it by ID */ /* try it by ID */
if (flags & VSH_BYID) { if (flags & VSH_BYID) {
if (virStrToLong_i(n, NULL, 10, &id) == 0 && id >= 0) { if (virStrToLong_i(name, NULL, 10, &id) == 0 && id >= 0) {
vshDebug(ctl, VSH_ERR_DEBUG, vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> looks like ID\n",
"%s: <%s> seems like domain ID\n", cmdname);
cmd->def->name, optname);
dom = virDomainLookupByID(ctl->conn, id); dom = virDomainLookupByID(ctl->conn, id);
} }
} }
/* try it by UUID */ /* try it by UUID */
if (!dom && (flags & VSH_BYUUID) && if (!dom && (flags & VSH_BYUUID) &&
strlen(n) == VIR_UUID_STRING_BUFLEN-1) { strlen(name) == VIR_UUID_STRING_BUFLEN-1) {
vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as domain UUID\n", vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> trying as domain UUID\n",
cmd->def->name, optname); cmdname);
dom = virDomainLookupByUUIDString(ctl->conn, n); dom = virDomainLookupByUUIDString(ctl->conn, name);
} }
/* try it by NAME */ /* try it by NAME */
if (!dom && (flags & VSH_BYNAME)) { if (!dom && (flags & VSH_BYNAME)) {
vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as domain NAME\n", vshDebug(ctl, VSH_ERR_DEBUG, "%s: <domain> trying as domain NAME\n",
cmd->def->name, optname); cmdname);
dom = virDomainLookupByName(ctl->conn, n); dom = virDomainLookupByName(ctl->conn, name);
} }
if (!dom) if (!dom)
vshError(ctl, _("failed to get domain '%s'"), n); vshError(ctl, _("failed to get domain '%s'"), name);
return dom; return dom;
} }
virDomainPtr
vshLookupDomainBy(vshControl *ctl,
const char *name,
unsigned int flags)
{
return vshLookupDomainInternal(ctl, "unknown", name, flags);
}
virDomainPtr
vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
const char **name, unsigned int flags)
{
const char *n = NULL;
const char *optname = "domain";
if (!vshCmdHasOption(ctl, cmd, optname))
return NULL;
if (vshCommandOptStringReq(ctl, cmd, optname, &n) < 0)
return NULL;
vshDebug(ctl, VSH_ERR_INFO, "%s: found option <%s>: %s\n",
cmd->def->name, optname, n);
if (name)
*name = n;
return vshLookupDomainInternal(ctl, cmd->def->name, n, flags);
}
VIR_ENUM_DECL(vshDomainVcpuState) VIR_ENUM_DECL(vshDomainVcpuState)
VIR_ENUM_IMPL(vshDomainVcpuState, VIR_ENUM_IMPL(vshDomainVcpuState,
VIR_VCPU_LAST, VIR_VCPU_LAST,
......
...@@ -28,6 +28,10 @@ ...@@ -28,6 +28,10 @@
# include "virsh.h" # include "virsh.h"
virDomainPtr vshLookupDomainBy(vshControl *ctl,
const char *name,
unsigned int flags);
virDomainPtr vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd, virDomainPtr vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd,
const char **name, unsigned int flags); const char **name, unsigned int flags);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册