diff options
| author | zhengxinwei <zhengxinwei@huawei.com> | 2023-11-21 20:10:42 +0800 |
|---|---|---|
| committer | zhengxinwei-f <zhengxinwei@huawei.com> | 2024-01-16 09:28:53 +0800 |
| commit | 45e38ec52e1c90a25725029e2e7ccaf9264a3d38 (patch) | |
| tree | 8a83efa48d07daa52fc5c091f7b6883eaa07432d | |
| parent | task state machine (diff) | |
| download | kubeedge-45e38ec52e1c90a25725029e2e7ccaf9264a3d38.tar.gz | |
notify the task manager of the task status
Signed-off-by: zhengxinwei <zhengxinwei@huawei.com>
| -rw-r--r-- | cloud/pkg/cloudhub/servers/httpserver/report_task_status.go | 58 | ||||
| -rw-r--r-- | cloud/pkg/cloudhub/servers/httpserver/server.go | 1 | ||||
| -rw-r--r-- | common/types/types.go | 8 |
3 files changed, 67 insertions, 0 deletions
diff --git a/cloud/pkg/cloudhub/servers/httpserver/report_task_status.go b/cloud/pkg/cloudhub/servers/httpserver/report_task_status.go new file mode 100644 index 000000000..70e53cc57 --- /dev/null +++ b/cloud/pkg/cloudhub/servers/httpserver/report_task_status.go @@ -0,0 +1,58 @@ +package httpserver + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + + "github.com/emicklei/go-restful" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/klog/v2" + + beehiveContext "github.com/kubeedge/beehive/pkg/core/context" + beehiveModel "github.com/kubeedge/beehive/pkg/core/model" + "github.com/kubeedge/kubeedge/cloud/pkg/common/modules" + "github.com/kubeedge/kubeedge/cloud/pkg/nodeupgradejobcontroller/controller" + commontypes "github.com/kubeedge/kubeedge/common/types" +) + +const ( + millionByte = int64(3 * 1024 * 1024) +) + +// reportTaskStatus report the status of task +func reportTaskStatus(request *restful.Request, response *restful.Response) { + resp := commontypes.TaskStatus{} + + taskID := request.PathParameter("taskID") + nodeID := request.PathParameter("nodeID") + + lr := &io.LimitedReader{ + R: request.Request.Body, + N: millionByte + 1, + } + body, err := io.ReadAll(lr) + if err != nil { + response.WriteError(http.StatusBadRequest, fmt.Errorf("failed to get req body: %v", err)) + return + } + if lr.N <= 0 { + response.WriteError(http.StatusBadRequest, errors.NewRequestEntityTooLargeError(fmt.Sprintf("the request body can only be up to 1MB in size"))) + return + } + if err = json.Unmarshal(body, &resp); err != nil { + response.WriteError(http.StatusBadRequest, fmt.Errorf("failed to marshal task info: %v", err)) + return + } + + //TODO The resource operation should be refactored, like: {type}/task/{taskID}/node/{nodeId} + msg := beehiveModel.NewMessage("").SetRoute(modules.CloudHubModuleName, modules.CloudHubModuleGroup). + SetResourceOperation(fmt.Sprintf("%s/%s/node/%s", resp.Type, taskID, nodeID), controller.NodeUpgrade).FillBody(resp) + //TODO The message should be sent to the task manager. + beehiveContext.Send(modules.NodeUpgradeJobControllerModuleName, *msg) + + if _, err = response.Write([]byte("ok")); err != nil { + klog.Errorf("failed to send the task resp to edge , err: %v", err) + } +} diff --git a/cloud/pkg/cloudhub/servers/httpserver/server.go b/cloud/pkg/cloudhub/servers/httpserver/server.go index 0104c8045..18caa9ad0 100644 --- a/cloud/pkg/cloudhub/servers/httpserver/server.go +++ b/cloud/pkg/cloudhub/servers/httpserver/server.go @@ -46,6 +46,7 @@ func StartHTTPServer() { ws.Route(ws.GET(constants.DefaultCertURL).To(edgeCoreClientCert)) ws.Route(ws.GET(constants.DefaultCAURL).To(getCA)) ws.Route(ws.POST(constants.DefaultNodeUpgradeURL).To(upgradeEdge)) + ws.Route(ws.POST(constants.DefaultTaskStateReportURL).To(reportTaskStatus)) serverContainer.Add(ws) addr := fmt.Sprintf("%s:%d", hubconfig.Config.HTTPS.Address, hubconfig.Config.HTTPS.Port) diff --git a/common/types/types.go b/common/types/types.go index e03667a1b..74c7cf6ea 100644 --- a/common/types/types.go +++ b/common/types/types.go @@ -50,6 +50,14 @@ type NodeUpgradeJobResponse struct { Reason string } +type TaskStatus struct { + Type string + Status string + Event string + Action string + Reason string +} + // ObjectResp is the object that api-server response type ObjectResp struct { Object metaV1.Object |
