Skip to content

Commit ddee31c

Browse files
authored
fix: return code for denied webhook request (#49)
1 parent 360b8d0 commit ddee31c

File tree

11 files changed

+134
-90
lines changed

11 files changed

+134
-90
lines changed

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2.1.0
1+
2.1.1-dev

api/openapi/openapi.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ openapi: 3.0.3
66
info:
77
title: Cluster Manager 2.0
88
description: This document defines the schema for the Cluster Manager 2.0 REST API.
9-
version: 2.1.0
9+
version: 2.1.1-dev
1010

1111
security:
1212
- HTTP: []
@@ -536,6 +536,8 @@ paths:
536536
$ref: '#/components/responses/400-BadRequest'
537537
"404":
538538
$ref: '#/components/responses/404-NotFound'
539+
"409":
540+
$ref: '#/components/responses/409-Conflict'
539541
"500":
540542
$ref: '#/components/responses/500-InternalServerError'
541543

deployment/charts/cluster-manager/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ type: application
1616
# This is the chart version. This version number should be incremented each time you make changes
1717
# to the chart and its templates, including the app version.
1818
# Versions are expected to follow Semantic Versioning (https://semver.org/)
19-
version: 2.1.0
20-
appVersion: 2.1.0
19+
version: 2.1.1-dev
20+
appVersion: 2.1.1-dev
2121
annotations: {}

deployment/charts/cluster-template-crd/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ apiVersion: v2
66
name: cluster-template-crd
77
description: A Helm chart for the ClusterTemplate CRD
88
type: application
9-
version: 2.1.0
10-
appVersion: 2.1.0
9+
version: 2.1.1-dev
10+
appVersion: 2.1.1-dev
1111
annotations: {}

internal/rest/deletev2templatesname.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ func (s *Server) DeleteV2TemplatesNameVersion(ctx context.Context, request api.D
3232
message := fmt.Sprintf("Template '%s' not found: %v", templateName, err)
3333
slog.Error(message)
3434
return api.DeleteV2TemplatesNameVersion404JSONResponse{N404NotFoundJSONResponse: api.N404NotFoundJSONResponse{Message: &message}}, nil
35+
case errors.IsConflict(err):
36+
message := fmt.Sprintf("Template '%s' is in use: %v", templateName, err)
37+
slog.Error(message)
38+
return api.DeleteV2TemplatesNameVersion409JSONResponse{N409ConflictJSONResponse: api.N409ConflictJSONResponse{Message: &message}}, nil
3539
case err != nil:
3640
message := fmt.Sprintf("Failed to delete template '%s': %v", templateName, err)
3741
slog.Error(message)

internal/rest/deletev2templatesname_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@ func TestDeleteV2TemplatesNameVersion(t *testing.T) {
5858
},
5959
},
6060
},
61+
{
62+
name: "409 Conflict - template in use",
63+
expectedStatusCode: http.StatusConflict,
64+
expectedErrorMessage: "Is in use",
65+
mockDeleteReturn: &errors.StatusError{
66+
ErrStatus: metav1.Status{
67+
Status: metav1.StatusFailure,
68+
Code: http.StatusConflict,
69+
Reason: metav1.StatusReasonConflict,
70+
Message: "Is in use",
71+
},
72+
},
73+
},
6174
{
6275
name: "500 Internal Server Error",
6376
expectedStatusCode: http.StatusInternalServerError,
@@ -113,6 +126,8 @@ func TestDeleteV2TemplatesNameVersion(t *testing.T) {
113126
actualMessage = resp.JSON400.Message
114127
case http.StatusNotFound:
115128
actualMessage = resp.JSON404.Message
129+
case http.StatusConflict:
130+
actualMessage = resp.JSON409.Message
116131
case http.StatusInternalServerError:
117132
actualMessage = resp.JSON500.Message
118133
}

internal/webhook/v1alpha1/clustertemplate_webhook.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,17 @@ import (
1111
"reflect"
1212

1313
"k8s.io/apimachinery/pkg/runtime"
14+
"k8s.io/apimachinery/pkg/runtime/schema"
1415
ctrl "sigs.k8s.io/controller-runtime"
1516
logf "sigs.k8s.io/controller-runtime/pkg/log"
1617
"sigs.k8s.io/controller-runtime/pkg/webhook"
1718
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
1819

20+
"github.com/open-edge-platform/cluster-manager/v2/api/v1alpha1"
1921
clusterv1alpha1 "github.com/open-edge-platform/cluster-manager/v2/api/v1alpha1"
2022
"github.com/open-edge-platform/cluster-manager/v2/pkg/api"
2123
rke2cpv1beta1 "github.com/rancher/cluster-api-provider-rke2/controlplane/api/v1beta1"
24+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
2225
capi "sigs.k8s.io/cluster-api/api/v1beta1"
2326
kubeadmcp "sigs.k8s.io/cluster-api/controlplane/kubeadm/api/v1beta1"
2427
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -132,7 +135,11 @@ func (v *ClusterTemplateCustomValidator) templateNotInUse(ctx context.Context, t
132135
}
133136

134137
if len(clusters.Items) > 0 {
135-
return fmt.Errorf("clusterTemplate is in use")
138+
return k8serrors.NewConflict(
139+
schema.GroupResource{Group: v1alpha1.SchemeBuilder.GroupVersion.Group, Resource: "clustertemplates"},
140+
template.Name,
141+
fmt.Errorf("clusterTemplate is in use"),
142+
)
136143
}
137144
return nil
138145
}

pkg/api/client.gen.go

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/api/server.gen.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/api/spec.gen.go

Lines changed: 79 additions & 79 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)