57 lines
1.2 KiB
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
|
|
}
|