mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
apiextensions: unify webhook conversion error messages
This commit is contained in:
parent
6d70e7ff01
commit
24a9581f1c
@ -184,21 +184,20 @@ func (c *webhookConverter) Convert(in runtime.Object, toGV schema.GroupVersion)
|
|||||||
r := c.restClient.Post().Context(ctx).Body(request).Do()
|
r := c.restClient.Post().Context(ctx).Body(request).Do()
|
||||||
if err := r.Into(response); err != nil {
|
if err := r.Into(response); err != nil {
|
||||||
// TODO: Return a webhook specific error to be able to convert it to meta.Status
|
// TODO: Return a webhook specific error to be able to convert it to meta.Status
|
||||||
return nil, fmt.Errorf("calling to conversion webhook failed for %s: %v", c.name, err)
|
return nil, fmt.Errorf("conversion webhook for %v failed: %v", in.GetObjectKind(), err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if response.Response == nil {
|
if response.Response == nil {
|
||||||
// TODO: Return a webhook specific error to be able to convert it to meta.Status
|
// TODO: Return a webhook specific error to be able to convert it to meta.Status
|
||||||
return nil, fmt.Errorf("conversion webhook response was absent for %s", c.name)
|
return nil, fmt.Errorf("conversion webhook for %v lacked response", in.GetObjectKind())
|
||||||
}
|
}
|
||||||
|
|
||||||
if response.Response.Result.Status != v1.StatusSuccess {
|
if response.Response.Result.Status != v1.StatusSuccess {
|
||||||
// TODO return status message as error
|
return nil, fmt.Errorf("conversion webhook for %v failed: %v", in.GetObjectKind(), response.Response.Result.Message)
|
||||||
return nil, fmt.Errorf("conversion request failed for %v, Response: %v", in.GetObjectKind(), response)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(response.Response.ConvertedObjects) != len(request.Request.Objects) {
|
if len(response.Response.ConvertedObjects) != len(request.Request.Objects) {
|
||||||
return nil, fmt.Errorf("expected %v converted objects, got %v", len(request.Request.Objects), len(response.Response.ConvertedObjects))
|
return nil, fmt.Errorf("conversion webhook for %v returned %d objects, expected %d", in.GetObjectKind(), len(response.Response.ConvertedObjects), len(request.Request.Objects))
|
||||||
}
|
}
|
||||||
|
|
||||||
if isList {
|
if isList {
|
||||||
@ -215,25 +214,25 @@ func (c *webhookConverter) Convert(in runtime.Object, toGV schema.GroupVersion)
|
|||||||
}
|
}
|
||||||
converted, err := getRawExtensionObject(response.Response.ConvertedObjects[convertedIndex])
|
converted, err := getRawExtensionObject(response.Response.ConvertedObjects[convertedIndex])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("invalid converted object at index %v: %v", convertedIndex, err)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid converted object at index %v: %v", in.GetObjectKind(), convertedIndex, err)
|
||||||
}
|
}
|
||||||
convertedIndex++
|
convertedIndex++
|
||||||
if expected, got := toGV, converted.GetObjectKind().GroupVersionKind().GroupVersion(); expected != got {
|
if expected, got := toGV, converted.GetObjectKind().GroupVersionKind().GroupVersion(); expected != got {
|
||||||
return nil, fmt.Errorf("invalid converted object at index %v: invalid groupVersion, expected=%v, got=%v", convertedIndex, expected, got)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid converted object at index %v: invalid groupVersion, expected=%v, got=%v", in.GetObjectKind(), convertedIndex, expected, got)
|
||||||
}
|
}
|
||||||
if expected, got := original.GetObjectKind().GroupVersionKind().Kind, converted.GetObjectKind().GroupVersionKind().Kind; expected != got {
|
if expected, got := original.GetObjectKind().GroupVersionKind().Kind, converted.GetObjectKind().GroupVersionKind().Kind; expected != got {
|
||||||
return nil, fmt.Errorf("invalid converted object at index %v: invalid kind, expected=%v, got=%v", convertedIndex, expected, got)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid converted object at index %v: invalid kind, expected=%v, got=%v", in.GetObjectKind(), convertedIndex, expected, got)
|
||||||
}
|
}
|
||||||
unstructConverted, ok := converted.(*unstructured.Unstructured)
|
unstructConverted, ok := converted.(*unstructured.Unstructured)
|
||||||
if !ok {
|
if !ok {
|
||||||
// this should not happened
|
// this should not happened
|
||||||
return nil, fmt.Errorf("invalid converted object at index %v: invalid type, expected=Unstructured, got=%T", convertedIndex, converted)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid converted object at index %v: invalid type, expected=Unstructured, got=%T", in.GetObjectKind(), convertedIndex, converted)
|
||||||
}
|
}
|
||||||
if err := validateConvertedObject(original, unstructConverted); err != nil {
|
if err := validateConvertedObject(original, unstructConverted); err != nil {
|
||||||
return nil, fmt.Errorf("invalid converted object at index %v: %v", convertedIndex, err)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid converted object at index %v: %v", in.GetObjectKind(), convertedIndex, err)
|
||||||
}
|
}
|
||||||
if err := restoreObjectMeta(original, unstructConverted); err != nil {
|
if err := restoreObjectMeta(original, unstructConverted); err != nil {
|
||||||
return nil, fmt.Errorf("invalid metadata in object at index %v: %v", convertedIndex, err)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid metadata in object at index %v: %v", in.GetObjectKind(), convertedIndex, err)
|
||||||
}
|
}
|
||||||
convertedList.Items[i] = *unstructConverted
|
convertedList.Items[i] = *unstructConverted
|
||||||
}
|
}
|
||||||
@ -243,33 +242,33 @@ func (c *webhookConverter) Convert(in runtime.Object, toGV schema.GroupVersion)
|
|||||||
|
|
||||||
if len(response.Response.ConvertedObjects) != 1 {
|
if len(response.Response.ConvertedObjects) != 1 {
|
||||||
// This should not happened
|
// This should not happened
|
||||||
return nil, fmt.Errorf("CR conversion failed")
|
return nil, fmt.Errorf("conversion webhook for %v failed", in.GetObjectKind())
|
||||||
}
|
}
|
||||||
converted, err := getRawExtensionObject(response.Response.ConvertedObjects[0])
|
converted, err := getRawExtensionObject(response.Response.ConvertedObjects[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if e, a := toGV, converted.GetObjectKind().GroupVersionKind().GroupVersion(); e != a {
|
if e, a := toGV, converted.GetObjectKind().GroupVersionKind().GroupVersion(); e != a {
|
||||||
return nil, fmt.Errorf("invalid converted object: invalid groupVersion, e=%v, a=%v", e, a)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid object: invalid groupVersion, e=%v, a=%v", in.GetObjectKind(), e, a)
|
||||||
}
|
}
|
||||||
if e, a := in.GetObjectKind().GroupVersionKind().Kind, converted.GetObjectKind().GroupVersionKind().Kind; e != a {
|
if e, a := in.GetObjectKind().GroupVersionKind().Kind, converted.GetObjectKind().GroupVersionKind().Kind; e != a {
|
||||||
return nil, fmt.Errorf("invalid converted object: invalid kind, e=%v, a=%v", e, a)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid object: invalid kind, e=%v, a=%v", in.GetObjectKind(), e, a)
|
||||||
}
|
}
|
||||||
unstructConverted, ok := converted.(*unstructured.Unstructured)
|
unstructConverted, ok := converted.(*unstructured.Unstructured)
|
||||||
if !ok {
|
if !ok {
|
||||||
// this should not happened
|
// this should not happened
|
||||||
return nil, fmt.Errorf("CR conversion failed")
|
return nil, fmt.Errorf("conversion webhook for %v failed", in.GetObjectKind())
|
||||||
}
|
}
|
||||||
unstructIn, ok := in.(*unstructured.Unstructured)
|
unstructIn, ok := in.(*unstructured.Unstructured)
|
||||||
if !ok {
|
if !ok {
|
||||||
// this should not happened
|
// this should not happened
|
||||||
return nil, fmt.Errorf("CR conversion failed")
|
return nil, fmt.Errorf("conversion webhook for %v failed", in.GetObjectKind())
|
||||||
}
|
}
|
||||||
if err := validateConvertedObject(unstructIn, unstructConverted); err != nil {
|
if err := validateConvertedObject(unstructIn, unstructConverted); err != nil {
|
||||||
return nil, fmt.Errorf("invalid converted object: %v", err)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid object: %v", in.GetObjectKind(), err)
|
||||||
}
|
}
|
||||||
if err := restoreObjectMeta(unstructIn, unstructConverted); err != nil {
|
if err := restoreObjectMeta(unstructIn, unstructConverted); err != nil {
|
||||||
return nil, fmt.Errorf("invalid metadata in converted object: %v", err)
|
return nil, fmt.Errorf("conversion webhook for %v returned invalid metadata: %v", in.GetObjectKind(), err)
|
||||||
}
|
}
|
||||||
return converted, nil
|
return converted, nil
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ func testWebhookConverter(t *testing.T, defaulting bool) {
|
|||||||
{
|
{
|
||||||
group: "empty-response",
|
group: "empty-response",
|
||||||
handler: NewReviewWebhookHandler(t, emptyResponseConverter),
|
handler: NewReviewWebhookHandler(t, emptyResponseConverter),
|
||||||
checks: checks(expectConversionFailureMessage("empty-response", "expected 1 converted objects")),
|
checks: checks(expectConversionFailureMessage("empty-response", "returned 0 objects, expected 1")),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
group: "failure-message",
|
group: "failure-message",
|
||||||
|
Loading…
Reference in New Issue
Block a user