summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhengxinwei <zhengxinwei@huawei.com>2023-11-21 20:10:42 +0800
committerzhengxinwei-f <zhengxinwei@huawei.com>2024-01-16 09:28:53 +0800
commit45e38ec52e1c90a25725029e2e7ccaf9264a3d38 (patch)
tree8a83efa48d07daa52fc5c091f7b6883eaa07432d
parenttask state machine (diff)
downloadkubeedge-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.go58
-rw-r--r--cloud/pkg/cloudhub/servers/httpserver/server.go1
-rw-r--r--common/types/types.go8
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