@@ -3,7 +3,9 @@ package admission
33import (
44 "encoding/json"
55 "fmt"
6+ "log"
67 "net/http"
8+ "strings"
79
810 "github.com/go-logr/logr"
911 "github.com/isaaguilar/terraform-operator/pkg/webhook/admission/convert"
@@ -32,31 +34,47 @@ func (c ConversionWebhook) ServeHTTP(w http.ResponseWriter, r *http.Request) {
3234 return
3335 }
3436
35- convertReview .Response = c .converter (convertReview .Request )
36- w .WriteHeader (http .StatusOK )
37+ response , status := c .converter (convertReview .Request )
38+ convertReview .Response = response
39+ w .WriteHeader (status )
40+ if status == 200 {
41+ log .Printf ("Successfully converted resource(s): %s" , objectNames (convertReview ))
42+ } else {
43+ log .Printf ("Failed to convert resource(s) %s: %s" , objectNames (convertReview ), response .Result .Status )
44+ }
3745 b , _ := json .Marshal (convertReview )
3846 w .Write (b )
3947}
4048
49+ func objectNames (review * apiextensionsv1.ConversionReview ) string {
50+ names := []string {}
51+ for _ , obj := range review .Response .ConvertedObjects {
52+ unstructured := unstructuredv1.Unstructured {}
53+ err := json .Unmarshal (obj .Raw , & unstructured )
54+ if err == nil {
55+ names = append (names , unstructured .GetName ())
56+ }
57+ }
58+ return strings .Join (names , "," )
59+ }
60+
4161// helper to construct error response.
42- func errored (uid types.UID , err error ) * apiextensionsv1.ConversionResponse {
62+ func errored (uid types.UID , err error ) ( * apiextensionsv1.ConversionResponse , int ) {
4363 return & apiextensionsv1.ConversionResponse {
4464 UID : uid ,
4565 Result : metav1.Status {
4666 Status : metav1 .StatusFailure ,
4767 Message : err .Error (),
4868 },
49- }
69+ }, http . StatusBadRequest
5070}
5171
5272// Takes a conversionRequest and always returns a conversionResponse.
53- func (c ConversionWebhook ) converter (request * apiextensionsv1.ConversionRequest ) * apiextensionsv1.ConversionResponse {
54-
73+ func (c ConversionWebhook ) converter (request * apiextensionsv1.ConversionRequest ) (* apiextensionsv1.ConversionResponse , int ) {
5574 desiredAPIVersion := request .DesiredAPIVersion
5675 if desiredAPIVersion == "" {
5776 return errored (request .UID , fmt .Errorf ("conversion request did not have a desired api version" ))
5877 }
59-
6078 responseObjects := make ([]runtime.RawExtension , len (request .Objects ))
6179 for i , obj := range request .Objects {
6280 unstructured := unstructuredv1.Unstructured {}
@@ -109,5 +127,5 @@ func (c ConversionWebhook) converter(request *apiextensionsv1.ConversionRequest)
109127 Result : metav1.Status {
110128 Status : metav1 .StatusSuccess ,
111129 },
112- }
130+ }, http . StatusOK
113131}
0 commit comments