From a307cc919648e14c2bee2cd5d60a5ab07344712c Mon Sep 17 00:00:00 2001 From: wanyaoqi <18528551+wanyaoqi@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:03:40 +0800 Subject: [PATCH] fix(host): parse qga command and args (#20506) --- pkg/hostman/guestman/guesthandlers/guesthandler.go | 8 +++++--- pkg/hostman/monitor/qga/qga.go | 9 +++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/pkg/hostman/guestman/guesthandlers/guesthandler.go b/pkg/hostman/guestman/guesthandlers/guesthandler.go index 1933bf6d3c..67a47c831d 100644 --- a/pkg/hostman/guestman/guesthandlers/guesthandler.go +++ b/pkg/hostman/guestman/guesthandlers/guesthandler.go @@ -901,11 +901,13 @@ func qgaCommand(ctx context.Context, userCred mcclient.TokenCredential, sid stri return nil, httperrors.NewInputParameterError("failed parse qga command") } qgaCmd := &monitor.Command{} - err = cmdJson.Unmarshal(qgaCmd) + qgaCmd.Execute, err = cmdJson.GetString("execute") if err != nil { - return nil, httperrors.NewInputParameterError("failed unmarshal qga command") + return nil, httperrors.NewInputParameterError("failed get qga command") + } + if cmdJson.Contains("arguments") { + qgaCmd.Args, _ = cmdJson.Get("arguments") } - return gm.QgaCommand(qgaCmd, sid, input.Timeout) } diff --git a/pkg/hostman/monitor/qga/qga.go b/pkg/hostman/monitor/qga/qga.go index ea74539fbc..eb9c68b8b4 100644 --- a/pkg/hostman/monitor/qga/qga.go +++ b/pkg/hostman/monitor/qga/qga.go @@ -27,6 +27,7 @@ import ( "time" "unsafe" + "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/pkg/errors" @@ -171,12 +172,8 @@ func (qga *QemuGuestAgent) execCmd(cmd *monitor.Command, expectResp bool, readTi } } - rawCmd, err := json.Marshal(cmd) - if err != nil { - return nil, errors.Wrap(err, "marshal qga cmd") - } - - err = qga.write(rawCmd) + rawCmd := jsonutils.Marshal(cmd).String() + err := qga.write([]byte(rawCmd)) if err != nil { return nil, errors.Wrap(err, "write cmd") }