Skip to content

Commit 1937f78

Browse files
deads2kironcladlou
authored andcommitted
UPSTREAM: 49656: make admission tolerate object without objectmeta for errors
:100644 100644 9f080bf1a3... 9a069a2c99... M staging/src/k8s.io/apiserver/pkg/admission/errors.go :000000 100644 0000000000... 305a39dc12... A staging/src/k8s.io/apiserver/pkg/admission/errors_test.go
1 parent 13d4a1c commit 1937f78

File tree

2 files changed

+70
-2
lines changed

2 files changed

+70
-2
lines changed

staging/src/k8s.io/apiserver/pkg/admission/errors.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,19 @@ import (
2424
)
2525

2626
func extractResourceName(a Attributes) (name string, resource schema.GroupResource, err error) {
27-
name = "Unknown"
2827
resource = a.GetResource().GroupResource()
28+
29+
if len(a.GetName()) > 0 {
30+
return a.GetName(), resource, nil
31+
}
32+
33+
name = "Unknown"
2934
obj := a.GetObject()
3035
if obj != nil {
3136
accessor, err := meta.Accessor(obj)
3237
if err != nil {
33-
return "", schema.GroupResource{}, err
38+
// not all object have ObjectMeta. If we don't, return a name with a slash (always illegal)
39+
return "Unknown/errorGettingName", resource, nil
3440
}
3541

3642
// this is necessary because name object name generation has not occurred yet
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*
2+
Copyright 2015 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package admission
18+
19+
import (
20+
"errors"
21+
"testing"
22+
23+
"k8s.io/apimachinery/pkg/runtime"
24+
"k8s.io/apimachinery/pkg/runtime/schema"
25+
)
26+
27+
// makes sure that we never get:
28+
// Internal error occurred: [some error, object does not implement the Object interfaces]
29+
func TestNewForbidden(t *testing.T) {
30+
attributes := NewAttributesRecord(
31+
&fakeObj{},
32+
nil,
33+
schema.GroupVersionKind{Group: "foo", Version: "bar", Kind: "Baz"},
34+
"",
35+
"",
36+
schema.GroupVersionResource{Group: "foo", Version: "bar", Resource: "baz"},
37+
"",
38+
Create,
39+
nil)
40+
err := errors.New("some error")
41+
expectedErr := `baz.foo "Unknown/errorGettingName" is forbidden: some error`
42+
43+
actualErr := NewForbidden(attributes, err)
44+
if actualErr.Error() != expectedErr {
45+
t.Errorf("expected %v, got %v", expectedErr, actualErr)
46+
}
47+
}
48+
49+
type fakeObj struct{}
50+
type fakeObjKind struct{}
51+
52+
func (f *fakeObj) GetObjectKind() schema.ObjectKind {
53+
return &fakeObjKind{}
54+
}
55+
func (f *fakeObj) DeepCopyObject() runtime.Object {
56+
return f
57+
}
58+
59+
func (f *fakeObjKind) SetGroupVersionKind(kind schema.GroupVersionKind) {}
60+
func (f *fakeObjKind) GroupVersionKind() schema.GroupVersionKind {
61+
return schema.GroupVersionKind{Group: "foo", Version: "bar", Kind: "Baz"}
62+
}

0 commit comments

Comments
 (0)