MCPcopy Create free account
hub / github.com/cloudfoundry/brokerapi / Update

Method Update

handlers/update.go:18–73  ·  view source on GitHub ↗
(w http.ResponseWriter, req *http.Request)

Source from the content-addressed store, hash-verified

16const updateLogKey = "update"
17
18func (h APIHandler) Update(w http.ResponseWriter, req *http.Request) {
19 instanceID := req.PathValue("instance_id")
20
21 logger := h.logger.Session(req.Context(), updateLogKey, blog.InstanceID(instanceID))
22
23 requestId := fmt.Sprintf("%v", req.Context().Value(middlewares.RequestIdentityKey))
24
25 var details domain.UpdateDetails
26 if err := json.NewDecoder(req.Body).Decode(&details); err != nil {
27 logger.Error(invalidServiceDetailsErrorKey, err)
28 h.respond(w, http.StatusUnprocessableEntity, requestId, apiresponses.ErrorResponse{
29 Description: err.Error(),
30 })
31 return
32 }
33
34 if details.ServiceID == "" {
35 logger.Error(serviceIdMissingKey, serviceIdError)
36 h.respond(w, http.StatusBadRequest, requestId, apiresponses.ErrorResponse{
37 Description: serviceIdError.Error(),
38 })
39 return
40 }
41
42 acceptsIncompleteFlag, _ := strconv.ParseBool(req.URL.Query().Get("accepts_incomplete"))
43
44 updateServiceSpec, err := h.serviceBroker.Update(req.Context(), instanceID, details, acceptsIncompleteFlag)
45 if err != nil {
46 switch err := err.(type) {
47 case *apiresponses.FailureResponse:
48 logger.Error(err.LoggerAction(), err)
49 h.respond(w, err.ValidatedStatusCode(slog.New(logger)), requestId, err.ErrorResponse())
50 default:
51 logger.Error(unknownErrorKey, err)
52 h.respond(w, http.StatusInternalServerError, requestId, apiresponses.ErrorResponse{
53 Description: err.Error(),
54 })
55 }
56 return
57 }
58
59 var metadata any
60 if !updateServiceSpec.Metadata.IsEmpty() {
61 metadata = updateServiceSpec.Metadata
62 }
63
64 statusCode := http.StatusOK
65 if updateServiceSpec.IsAsync {
66 statusCode = http.StatusAccepted
67 }
68 h.respond(w, statusCode, requestId, apiresponses.UpdateResponse{
69 OperationData: updateServiceSpec.OperationData,
70 DashboardURL: updateServiceSpec.DashboardURL,
71 Metadata: metadata,
72 })
73}

Callers

nothing calls this directly

Calls 9

respondMethod · 0.95
InstanceIDFunction · 0.92
SessionMethod · 0.80
ErrorMethod · 0.80
LoggerActionMethod · 0.80
ValidatedStatusCodeMethod · 0.80
ErrorResponseMethod · 0.80
UpdateMethod · 0.65
IsEmptyMethod · 0.45

Tested by

no test coverage detected