keel/pkg/http/policy_endpoint.go

57 lines
1.2 KiB
Go

package http
import (
"encoding/json"
"fmt"
"net/http"
"github.com/keel-hq/keel/types"
)
type resourcePolicyUpdateRequest struct {
Policy string `json:"policy"`
Identifier string `json:"identifier"`
Provider string `json:"provider"`
}
func (s *TriggerServer) policyUpdateHandler(resp http.ResponseWriter, req *http.Request) {
var policyRequest resourcePolicyUpdateRequest
dec := json.NewDecoder(req.Body)
defer req.Body.Close()
err := dec.Decode(&policyRequest)
if err != nil {
resp.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(resp, "%s", err)
return
}
if policyRequest.Identifier == "" {
http.Error(resp, "identifier cannot be empty", http.StatusBadRequest)
return
}
for _, v := range s.grc.Values() {
if v.Identifier == policyRequest.Identifier {
labels := v.GetLabels()
delete(labels, types.KeelPolicyLabel)
v.SetLabels(labels)
ann := v.GetAnnotations()
ann[types.KeelPolicyLabel] = policyRequest.Policy
v.SetAnnotations(ann)
err := s.kubernetesClient.Update(v)
response(&APIResponse{Status: "updated"}, 200, err, resp, req)
return
}
}
resp.WriteHeader(http.StatusNotFound)
fmt.Fprintf(resp, "resource with identifier '%s' not found", policyRequest.Identifier)
return
}