From d56a3df418b90f4a6f303a3830732b5fde8d3a10 Mon Sep 17 00:00:00 2001 From: AlexChen Date: Wed, 20 Oct 2021 11:07:34 +0800 Subject: [PATCH] hotpatch: implement hotpatch virsh api Signed-off-by: Hao Wang Signed-off-by: Bihong Yu Signed-off-by: AlexChen --- tools/virsh-domain.c | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 9d22e219f7..d88ac3cca6 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -13556,6 +13556,78 @@ cmdGuestInfo(vshControl *ctl, const vshCmd *cmd) return ret; } +/* + * "hotpatch" command + */ +static const vshCmdInfo info_hotpatch[] = { + {.name = "help", + .data = N_("Manage hotpatch of a live domain") + }, + {.name = "desc", + .data = N_("Manage hotpatch of a live domain") + }, + {.name = NULL} +}; + +static const vshCmdOptDef opts_hotpatch[] = { + VIRSH_COMMON_OPT_DOMAIN_FULL(0), + {.name = "action", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("hotpatch action, choose from , and ") + }, + {.name = "patch", + .type = VSH_OT_STRING, + .help = N_("the absolute path of the hotpatch file, mandatory when action=apply") + }, + {.name = "id", + .type = VSH_OT_STRING, + .help = N_("the unique id of the target patch, mandatory when action=unapply") + }, + {.name = NULL} +}; + +VIR_ENUM_DECL(virDomainHotpatchAction); +VIR_ENUM_IMPL(virDomainHotpatchAction, + VIR_DOMAIN_HOTPATCH_LAST, + "none", + "apply", + "unapply", + "query"); + +static bool +cmdHotpatch(vshControl *ctl, + const vshCmd *cmd) +{ + g_autoptr(virshDomain) dom = NULL; + const char *patch = NULL; + const char *id = NULL; + const char *actionstr = NULL; + int action = -1; + g_autofree char *ret = NULL; + + if (!(dom = virshCommandOptDomain(ctl, cmd, NULL))) + return false; + + if (vshCommandOptStringReq(ctl, cmd, "action", &actionstr) < 0) + return false; + + if (actionstr) + action = virDomainHotpatchActionTypeFromString(actionstr); + + if (vshCommandOptStringReq(ctl, cmd, "patch", &patch) < 0) + return false; + + if (vshCommandOptStringReq(ctl, cmd, "id", &id) < 0) + return false; + + if (!(ret = virDomainHotpatchManage(dom, action, patch, id, 0))) + return false; + + vshPrint(ctl, _("%s"), ret); + return true; +} + /* * "get-user-sshkeys" command */ @@ -14456,5 +14528,11 @@ const vshCmdDef domManagementCmds[] = { .info = info_dom_fd_associate, .flags = 0 }, + {.name = "hotpatch", + .handler = cmdHotpatch, + .opts = opts_hotpatch, + .info = info_hotpatch, + .flags = 0 + }, {.name = NULL} }; -- 2.27.0