Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
5c4479f5
Commit
5c4479f5
authored
Dec 17, 2015
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #18442 from deads2k/gv-restmapper-10
Auto commit by PR queue bot
parents
efc821a1
41b78ad2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
145 additions
and
71 deletions
+145
-71
install_test.go
pkg/api/install/install_test.go
+1
-1
interfaces.go
pkg/api/meta/interfaces.go
+14
-3
restmapper.go
pkg/api/meta/restmapper.go
+0
-0
restmapper_test.go
pkg/api/meta/restmapper_test.go
+0
-0
group_version.go
pkg/api/unversioned/group_version.go
+4
-0
install_test.go
pkg/apis/componentconfig/install/install_test.go
+1
-1
install_test.go
pkg/apis/extensions/install/install_test.go
+1
-1
scale.go
pkg/client/unversioned/scale.go
+13
-4
fixture.go
pkg/client/unversioned/testclient/fixture.go
+7
-7
explain.go
pkg/kubectl/cmd/explain.go
+1
-1
rollingupdate.go
pkg/kubectl/cmd/rollingupdate.go
+3
-3
factory.go
pkg/kubectl/cmd/util/factory.go
+1
-5
explain.go
pkg/kubectl/explain.go
+1
-1
kubectl.go
pkg/kubectl/kubectl.go
+21
-20
builder.go
pkg/kubectl/resource/builder.go
+3
-2
resource_printer.go
pkg/kubectl/resource_printer.go
+19
-6
codec.go
pkg/registry/thirdpartyresourcedata/codec.go
+47
-7
codec_test.go
pkg/registry/thirdpartyresourcedata/codec_test.go
+2
-2
admission.go
plugin/pkg/admission/namespace/autoprovision/admission.go
+2
-2
admission.go
plugin/pkg/admission/namespace/exists/admission.go
+2
-2
admission.go
plugin/pkg/admission/namespace/lifecycle/admission.go
+2
-3
No files found.
pkg/api/install/install_test.go
View file @
5c4479f5
...
...
@@ -78,7 +78,7 @@ func TestRESTMapper(t *testing.T) {
rcGVK
:=
gv
.
WithKind
(
"ReplicationController"
)
podTemplateGVK
:=
gv
.
WithKind
(
"PodTemplate"
)
if
gvk
,
err
:=
latest
.
GroupOrDie
(
internal
.
GroupName
)
.
RESTMapper
.
KindFor
(
"replicationcontrollers"
);
err
!=
nil
||
gvk
!=
rcGVK
{
if
gvk
,
err
:=
latest
.
GroupOrDie
(
internal
.
GroupName
)
.
RESTMapper
.
KindFor
(
internal
.
SchemeGroupVersion
.
WithResource
(
"replicationcontrollers"
)
);
err
!=
nil
||
gvk
!=
rcGVK
{
t
.
Errorf
(
"unexpected version mapping: %v %v"
,
gvk
,
err
)
}
...
...
pkg/api/meta/interfaces.go
View file @
5c4479f5
...
...
@@ -158,12 +158,23 @@ type RESTMapping struct {
// TODO(caesarxuchao): Add proper multi-group support so that kinds & resources are
// scoped to groups. See http://issues.k8s.io/12413 and http://issues.k8s.io/10009.
type
RESTMapper
interface
{
// KindFor takes a resource and returns back the unambiguous Kind (GroupVersionKind)
KindFor
(
resource
string
)
(
unversioned
.
GroupVersionKind
,
error
)
// KindFor takes a partial resource and returns back the single match. Returns an error if there are multiple matches
KindFor
(
resource
unversioned
.
GroupVersionResource
)
(
unversioned
.
GroupVersionKind
,
error
)
// KindsFor takes a partial resource and returns back the list of potential kinds in priority order
KindsFor
(
resource
unversioned
.
GroupVersionResource
)
([]
unversioned
.
GroupVersionKind
,
error
)
// ResourceFor takes a partial resource and returns back the single match. Returns an error if there are multiple matches
ResourceFor
(
input
unversioned
.
GroupVersionResource
)
(
unversioned
.
GroupVersionResource
,
error
)
// ResourcesFor takes a partial resource and returns back the list of potential resource in priority order
ResourcesFor
(
input
unversioned
.
GroupVersionResource
)
([]
unversioned
.
GroupVersionResource
,
error
)
RESTMapping
(
gk
unversioned
.
GroupKind
,
versions
...
string
)
(
*
RESTMapping
,
error
)
AliasesForResource
(
resource
string
)
([]
string
,
bool
)
ResourceSingularizer
(
resource
string
)
(
singular
string
,
err
error
)
ResourceIsValid
(
resource
string
)
bool
// ResourceIsValid takes a partial resource and returns back whether or not the resource matches at least one kind
ResourceIsValid
(
resource
unversioned
.
GroupVersionResource
)
bool
}
pkg/api/meta/restmapper.go
View file @
5c4479f5
This diff is collapsed.
Click to expand it.
pkg/api/meta/restmapper_test.go
View file @
5c4479f5
This diff is collapsed.
Click to expand it.
pkg/api/unversioned/group_version.go
View file @
5c4479f5
...
...
@@ -29,6 +29,10 @@ type GroupResource struct {
Resource
string
}
func
(
gr
GroupResource
)
WithVersion
(
version
string
)
GroupVersionResource
{
return
GroupVersionResource
{
Group
:
gr
.
Group
,
Version
:
version
,
Resource
:
gr
.
Resource
}
}
func
(
gr
*
GroupResource
)
String
()
string
{
return
strings
.
Join
([]
string
{
gr
.
Group
,
", Resource="
,
gr
.
Resource
},
""
)
}
...
...
pkg/apis/componentconfig/install/install_test.go
View file @
5c4479f5
...
...
@@ -57,7 +57,7 @@ func TestRESTMapper(t *testing.T) {
gv
:=
unversioned
.
GroupVersion
{
Group
:
componentconfig
.
GroupName
,
Version
:
"v1alpha1"
}
proxyGVK
:=
gv
.
WithKind
(
"KubeProxyConfiguration"
)
if
gvk
,
err
:=
latest
.
GroupOrDie
(
componentconfig
.
GroupName
)
.
RESTMapper
.
KindFor
(
"kubeproxyconfiguration"
);
err
!=
nil
||
gvk
!=
proxyGVK
{
if
gvk
,
err
:=
latest
.
GroupOrDie
(
componentconfig
.
GroupName
)
.
RESTMapper
.
KindFor
(
gv
.
WithResource
(
"kubeproxyconfiguration"
)
);
err
!=
nil
||
gvk
!=
proxyGVK
{
t
.
Errorf
(
"unexpected version mapping: %v %v"
,
gvk
,
err
)
}
...
...
pkg/apis/extensions/install/install_test.go
View file @
5c4479f5
...
...
@@ -80,7 +80,7 @@ func TestRESTMapper(t *testing.T) {
hpaGVK
:=
gv
.
WithKind
(
"HorizontalPodAutoscaler"
)
daemonSetGVK
:=
gv
.
WithKind
(
"DaemonSet"
)
if
gvk
,
err
:=
latest
.
GroupOrDie
(
extensions
.
GroupName
)
.
RESTMapper
.
KindFor
(
"horizontalpodautoscalers"
);
err
!=
nil
||
gvk
!=
hpaGVK
{
if
gvk
,
err
:=
latest
.
GroupOrDie
(
extensions
.
GroupName
)
.
RESTMapper
.
KindFor
(
gv
.
WithResource
(
"horizontalpodautoscalers"
)
);
err
!=
nil
||
gvk
!=
hpaGVK
{
t
.
Errorf
(
"unexpected version mapping: %v %v"
,
gvk
,
err
)
}
...
...
pkg/client/unversioned/scale.go
View file @
5c4479f5
...
...
@@ -18,6 +18,7 @@ package unversioned
import
(
"k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/extensions"
)
...
...
@@ -48,17 +49,25 @@ func newScales(c *ExtensionsClient, namespace string) *scales {
// Get takes the reference to scale subresource and returns the subresource or error, if one occurs.
func
(
c
*
scales
)
Get
(
kind
string
,
name
string
)
(
result
*
extensions
.
Scale
,
err
error
)
{
result
=
&
extensions
.
Scale
{}
resource
,
_
:=
meta
.
KindToResource
(
kind
,
false
)
err
=
c
.
client
.
Get
()
.
Namespace
(
c
.
ns
)
.
Resource
(
resource
)
.
Name
(
name
)
.
SubResource
(
"scale"
)
.
Do
()
.
Into
(
result
)
// TODO this method needs to take a proper unambiguous kind
fullyQualifiedKind
:=
unversioned
.
GroupVersionKind
{
Kind
:
kind
}
resource
,
_
:=
meta
.
KindToResource
(
fullyQualifiedKind
,
false
)
err
=
c
.
client
.
Get
()
.
Namespace
(
c
.
ns
)
.
Resource
(
resource
.
Resource
)
.
Name
(
name
)
.
SubResource
(
"scale"
)
.
Do
()
.
Into
(
result
)
return
}
func
(
c
*
scales
)
Update
(
kind
string
,
scale
*
extensions
.
Scale
)
(
result
*
extensions
.
Scale
,
err
error
)
{
result
=
&
extensions
.
Scale
{}
resource
,
_
:=
meta
.
KindToResource
(
kind
,
false
)
// TODO this method needs to take a proper unambiguous kind
fullyQualifiedKind
:=
unversioned
.
GroupVersionKind
{
Kind
:
kind
}
resource
,
_
:=
meta
.
KindToResource
(
fullyQualifiedKind
,
false
)
err
=
c
.
client
.
Put
()
.
Namespace
(
scale
.
Namespace
)
.
Resource
(
resource
)
.
Resource
(
resource
.
Resource
)
.
Name
(
scale
.
Name
)
.
SubResource
(
"scale"
)
.
Body
(
scale
)
.
...
...
pkg/client/unversioned/testclient/fixture.go
View file @
5c4479f5
...
...
@@ -59,7 +59,7 @@ type ObjectScheme interface {
func
ObjectReaction
(
o
ObjectRetriever
,
mapper
meta
.
RESTMapper
)
ReactionFunc
{
return
func
(
action
Action
)
(
bool
,
runtime
.
Object
,
error
)
{
gvk
,
err
:=
mapper
.
KindFor
(
action
.
GetResource
()
)
kind
,
err
:=
mapper
.
KindFor
(
unversioned
.
GroupVersionResource
{
Resource
:
action
.
GetResource
()}
)
if
err
!=
nil
{
return
false
,
nil
,
fmt
.
Errorf
(
"unrecognized action %s: %v"
,
action
.
GetResource
(),
err
)
}
...
...
@@ -67,16 +67,16 @@ func ObjectReaction(o ObjectRetriever, mapper meta.RESTMapper) ReactionFunc {
// TODO: have mapper return a Kind for a subresource?
switch
castAction
:=
action
.
(
type
)
{
case
ListAction
:
gvk
.
Kind
+=
"List"
resource
,
err
:=
o
.
Kind
(
gvk
,
""
)
kind
.
Kind
+=
"List"
resource
,
err
:=
o
.
Kind
(
kind
,
""
)
return
true
,
resource
,
err
case
GetAction
:
resource
,
err
:=
o
.
Kind
(
gvk
,
castAction
.
GetName
())
resource
,
err
:=
o
.
Kind
(
kind
,
castAction
.
GetName
())
return
true
,
resource
,
err
case
DeleteAction
:
resource
,
err
:=
o
.
Kind
(
gvk
,
castAction
.
GetName
())
resource
,
err
:=
o
.
Kind
(
kind
,
castAction
.
GetName
())
return
true
,
resource
,
err
case
CreateAction
:
...
...
@@ -84,7 +84,7 @@ func ObjectReaction(o ObjectRetriever, mapper meta.RESTMapper) ReactionFunc {
if
err
!=
nil
{
return
true
,
nil
,
err
}
resource
,
err
:=
o
.
Kind
(
gvk
,
meta
.
Name
)
resource
,
err
:=
o
.
Kind
(
kind
,
meta
.
Name
)
return
true
,
resource
,
err
case
UpdateAction
:
...
...
@@ -92,7 +92,7 @@ func ObjectReaction(o ObjectRetriever, mapper meta.RESTMapper) ReactionFunc {
if
err
!=
nil
{
return
true
,
nil
,
err
}
resource
,
err
:=
o
.
Kind
(
gvk
,
meta
.
Name
)
resource
,
err
:=
o
.
Kind
(
kind
,
meta
.
Name
)
return
true
,
resource
,
err
default
:
...
...
pkg/kubectl/cmd/explain.go
View file @
5c4479f5
...
...
@@ -84,7 +84,7 @@ func RunExplain(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []st
}
// TODO: We should deduce the group for a resource by discovering the supported resources at server.
gvk
,
err
:=
mapper
.
KindFor
(
inModel
)
gvk
,
err
:=
mapper
.
KindFor
(
unversioned
.
GroupVersionResource
{
Resource
:
inModel
}
)
if
err
!=
nil
{
return
err
}
...
...
pkg/kubectl/cmd/rollingupdate.go
View file @
5c4479f5
...
...
@@ -360,12 +360,12 @@ func RunRollingUpdate(f *cmdutil.Factory, out io.Writer, cmd *cobra.Command, arg
if
outputFormat
!=
""
{
return
f
.
PrintObject
(
cmd
,
newRc
,
out
)
}
gvk
,
err
:=
api
.
Scheme
.
ObjectKind
(
newRc
)
kind
,
err
:=
api
.
Scheme
.
ObjectKind
(
newRc
)
if
err
!=
nil
{
return
err
}
_
,
res
:=
meta
.
KindToResource
(
gvk
.
K
ind
,
false
)
cmdutil
.
PrintSuccess
(
mapper
,
false
,
out
,
res
,
oldName
,
message
)
_
,
res
:=
meta
.
KindToResource
(
k
ind
,
false
)
cmdutil
.
PrintSuccess
(
mapper
,
false
,
out
,
res
.
Resource
,
oldName
,
message
)
return
nil
}
...
...
pkg/kubectl/cmd/util/factory.go
View file @
5c4479f5
...
...
@@ -175,16 +175,12 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
return
clients
.
ClientConfigForVersion
(
nil
)
},
RESTClient
:
func
(
mapping
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
gvk
,
err
:=
api
.
RESTMapper
.
KindFor
(
mapping
.
Resource
)
if
err
!=
nil
{
return
nil
,
err
}
mappingVersion
:=
mapping
.
GroupVersionKind
.
GroupVersion
()
client
,
err
:=
clients
.
ClientForVersion
(
&
mappingVersion
)
if
err
!=
nil
{
return
nil
,
err
}
switch
gvk
.
Group
{
switch
mapping
.
GroupVersionKind
.
Group
{
case
api
.
GroupName
:
return
client
.
RESTClient
,
nil
case
extensions
.
GroupName
:
...
...
pkg/kubectl/explain.go
View file @
5c4479f5
...
...
@@ -44,7 +44,7 @@ func GetSwaggerSchema(version unversioned.GroupVersion, kubeClient client.Interf
// SplitAndParseResourceRequest separates the users input into a model and fields
func
SplitAndParseResourceRequest
(
inResource
string
,
mapper
meta
.
RESTMapper
)
(
string
,
[]
string
,
error
)
{
inResource
,
fieldsPath
:=
splitDotNotation
(
inResource
)
inResource
,
_
=
mapper
.
ResourceSingularizer
(
expandResourceShortcut
(
inResource
)
)
inResource
,
_
=
mapper
.
ResourceSingularizer
(
expandResourceShortcut
(
unversioned
.
GroupVersionResource
{
Resource
:
inResource
})
.
Resource
)
return
inResource
,
fieldsPath
,
nil
}
...
...
pkg/kubectl/kubectl.go
View file @
5c4479f5
...
...
@@ -23,6 +23,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/apis/extensions"
)
const
kubectlAnnotationPrefix
=
"kubectl.kubernetes.io/"
...
...
@@ -80,40 +81,40 @@ var _ meta.RESTMapper = &ShortcutExpander{}
// KindFor implements meta.RESTMapper. It expands the resource first, then invokes the wrapped
// mapper.
func
(
e
ShortcutExpander
)
KindFor
(
resource
string
)
(
unversioned
.
GroupVersionKind
,
error
)
{
func
(
e
ShortcutExpander
)
KindFor
(
resource
unversioned
.
GroupVersionResource
)
(
unversioned
.
GroupVersionKind
,
error
)
{
resource
=
expandResourceShortcut
(
resource
)
return
e
.
RESTMapper
.
KindFor
(
resource
)
}
// ResourceIsValid takes a string (kind) and checks if it's a valid resource.
// It expands the resource first, then invokes the wrapped mapper.
func
(
e
ShortcutExpander
)
ResourceIsValid
(
resource
string
)
bool
{
func
(
e
ShortcutExpander
)
ResourceIsValid
(
resource
unversioned
.
GroupVersionResource
)
bool
{
return
e
.
RESTMapper
.
ResourceIsValid
(
expandResourceShortcut
(
resource
))
}
// expandResourceShortcut will return the expanded version of resource
// (something that a pkg/api/meta.RESTMapper can understand), if it is
// indeed a shortcut. Otherwise, will return resource unmodified.
func
expandResourceShortcut
(
resource
string
)
string
{
shortForms
:=
map
[
string
]
string
{
func
expandResourceShortcut
(
resource
unversioned
.
GroupVersionResource
)
unversioned
.
GroupVersionResource
{
shortForms
:=
map
[
string
]
unversioned
.
GroupVersionResource
{
// Please keep this alphabetized
"cs"
:
"componentstatuses"
,
"ds"
:
"daemonsets"
,
"ep"
:
"endpoints"
,
"ev"
:
"events"
,
"hpa"
:
"horizontalpodautoscalers"
,
"ing"
:
"ingresses"
,
"limits"
:
"limitranges"
,
"no"
:
"nodes"
,
"ns"
:
"namespaces"
,
"po"
:
"pods"
,
"pvc"
:
"persistentvolumeclaims"
,
"pv"
:
"persistentvolumes"
,
"quota"
:
"resourcequotas"
,
"rc"
:
"replicationcontrollers"
,
"svc"
:
"services"
,
"cs"
:
api
.
SchemeGroupVersion
.
WithResource
(
"componentstatuses"
)
,
"ds"
:
extensions
.
SchemeGroupVersion
.
WithResource
(
"daemonsets"
)
,
"ep"
:
api
.
SchemeGroupVersion
.
WithResource
(
"endpoints"
)
,
"ev"
:
api
.
SchemeGroupVersion
.
WithResource
(
"events"
)
,
"hpa"
:
extensions
.
SchemeGroupVersion
.
WithResource
(
"horizontalpodautoscalers"
)
,
"ing"
:
extensions
.
SchemeGroupVersion
.
WithResource
(
"ingresses"
)
,
"limits"
:
api
.
SchemeGroupVersion
.
WithResource
(
"limitranges"
)
,
"no"
:
api
.
SchemeGroupVersion
.
WithResource
(
"nodes"
)
,
"ns"
:
api
.
SchemeGroupVersion
.
WithResource
(
"namespaces"
)
,
"po"
:
api
.
SchemeGroupVersion
.
WithResource
(
"pods"
)
,
"pvc"
:
api
.
SchemeGroupVersion
.
WithResource
(
"persistentvolumeclaims"
)
,
"pv"
:
api
.
SchemeGroupVersion
.
WithResource
(
"persistentvolumes"
)
,
"quota"
:
api
.
SchemeGroupVersion
.
WithResource
(
"resourcequotas"
)
,
"rc"
:
api
.
SchemeGroupVersion
.
WithResource
(
"replicationcontrollers"
)
,
"svc"
:
api
.
SchemeGroupVersion
.
WithResource
(
"services"
)
,
}
if
expanded
,
ok
:=
shortForms
[
resource
];
ok
{
if
expanded
,
ok
:=
shortForms
[
resource
.
Resource
];
ok
{
return
expanded
}
return
resource
...
...
pkg/kubectl/resource/builder.go
View file @
5c4479f5
...
...
@@ -25,6 +25,7 @@ import (
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/meta"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/validation"
"k8s.io/kubernetes/pkg/labels"
"k8s.io/kubernetes/pkg/runtime"
...
...
@@ -426,7 +427,7 @@ func (b *Builder) resourceMappings() ([]*meta.RESTMapping, error) {
}
mappings
:=
[]
*
meta
.
RESTMapping
{}
for
_
,
r
:=
range
b
.
resources
{
gvk
,
err
:=
b
.
mapper
.
KindFor
(
r
)
gvk
,
err
:=
b
.
mapper
.
KindFor
(
unversioned
.
GroupVersionResource
{
Resource
:
r
}
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -446,7 +447,7 @@ func (b *Builder) resourceTupleMappings() (map[string]*meta.RESTMapping, error)
if
_
,
ok
:=
mappings
[
r
.
Resource
];
ok
{
continue
}
gvk
,
err
:=
b
.
mapper
.
KindFor
(
r
.
Resource
)
gvk
,
err
:=
b
.
mapper
.
KindFor
(
unversioned
.
GroupVersionResource
{
Resource
:
r
.
Resource
}
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
pkg/kubectl/resource_printer.go
View file @
5c4479f5
...
...
@@ -203,11 +203,24 @@ type NamePrinter struct {
// and print "resource/name" pair. If the object is a List, print all items in it.
func
(
p
*
NamePrinter
)
PrintObj
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
objvalue
:=
reflect
.
ValueOf
(
obj
)
.
Elem
()
kind
:=
objvalue
.
FieldByName
(
"Kind"
)
if
!
kind
.
IsValid
()
{
kind
=
reflect
.
ValueOf
(
"<unknown>"
)
kindString
:=
objvalue
.
FieldByName
(
"Kind"
)
groupVersionString
:=
objvalue
.
FieldByName
(
"APIVersion"
)
kind
:=
unversioned
.
GroupVersionKind
{}
if
!
kindString
.
IsValid
()
{
kindString
=
reflect
.
ValueOf
(
"<unknown>"
)
}
if
kind
.
String
()
==
"List"
{
kind
.
Kind
=
kindString
.
String
()
if
!
groupVersionString
.
IsValid
()
{
groupVersionString
=
reflect
.
ValueOf
(
"<unknown>/<unknown>"
)
}
gv
,
err
:=
unversioned
.
ParseGroupVersion
(
groupVersionString
.
String
())
if
err
!=
nil
{
kind
.
Group
=
gv
.
Group
kind
.
Version
=
gv
.
Version
}
if
kind
.
Kind
==
"List"
{
items
:=
objvalue
.
FieldByName
(
"Items"
)
if
items
.
Type
()
.
String
()
==
"[]runtime.RawExtension"
{
for
i
:=
0
;
i
<
items
.
Len
();
i
++
{
...
...
@@ -237,9 +250,9 @@ func (p *NamePrinter) PrintObj(obj runtime.Object, w io.Writer) error {
if
!
name
.
IsValid
()
{
name
=
reflect
.
ValueOf
(
"<unknown>"
)
}
_
,
resource
:=
meta
.
KindToResource
(
kind
.
String
()
,
false
)
_
,
resource
:=
meta
.
KindToResource
(
kind
,
false
)
fmt
.
Fprintf
(
w
,
"%s/%s
\n
"
,
resource
,
name
)
fmt
.
Fprintf
(
w
,
"%s/%s
\n
"
,
resource
.
Resource
,
name
)
}
return
nil
...
...
pkg/registry/thirdpartyresourcedata/codec.go
View file @
5c4479f5
...
...
@@ -41,14 +41,55 @@ type thirdPartyResourceDataMapper struct {
var
_
meta
.
RESTMapper
=
&
thirdPartyResourceDataMapper
{}
func
(
t
*
thirdPartyResourceDataMapper
)
isThirdPartyResource
(
resource
string
)
bool
{
plural
,
_
:=
meta
.
KindToResource
(
t
.
kind
,
false
)
return
resource
==
plural
func
(
t
*
thirdPartyResourceDataMapper
)
getResource
()
unversioned
.
GroupVersionResource
{
plural
,
_
:=
meta
.
KindToResource
(
t
.
getKind
(),
false
)
return
plural
}
func
(
t
*
thirdPartyResourceDataMapper
)
getKind
()
unversioned
.
GroupVersionKind
{
return
unversioned
.
GroupVersionKind
{
Group
:
t
.
group
,
Version
:
t
.
version
,
Kind
:
t
.
kind
}
}
func
(
t
*
thirdPartyResourceDataMapper
)
isThirdPartyResource
(
partialResource
unversioned
.
GroupVersionResource
)
bool
{
actualResource
:=
t
.
getResource
()
if
strings
.
ToLower
(
partialResource
.
Resource
)
!=
strings
.
ToLower
(
actualResource
.
Resource
)
{
return
false
}
if
len
(
partialResource
.
Group
)
!=
0
&&
partialResource
.
Group
!=
actualResource
.
Group
{
return
false
}
if
len
(
partialResource
.
Version
)
!=
0
&&
partialResource
.
Version
!=
actualResource
.
Version
{
return
false
}
return
true
}
func
(
t
*
thirdPartyResourceDataMapper
)
ResourcesFor
(
resource
unversioned
.
GroupVersionResource
)
([]
unversioned
.
GroupVersionResource
,
error
)
{
if
t
.
isThirdPartyResource
(
resource
)
{
return
[]
unversioned
.
GroupVersionResource
{
t
.
getResource
()},
nil
}
return
t
.
mapper
.
ResourcesFor
(
resource
)
}
func
(
t
*
thirdPartyResourceDataMapper
)
KindsFor
(
resource
unversioned
.
GroupVersionResource
)
([]
unversioned
.
GroupVersionKind
,
error
)
{
if
t
.
isThirdPartyResource
(
resource
)
{
return
[]
unversioned
.
GroupVersionKind
{
t
.
getKind
()},
nil
}
return
t
.
mapper
.
KindsFor
(
resource
)
}
func
(
t
*
thirdPartyResourceDataMapper
)
ResourceFor
(
resource
unversioned
.
GroupVersionResource
)
(
unversioned
.
GroupVersionResource
,
error
)
{
if
t
.
isThirdPartyResource
(
resource
)
{
return
t
.
getResource
(),
nil
}
return
t
.
mapper
.
ResourceFor
(
resource
)
}
func
(
t
*
thirdPartyResourceDataMapper
)
KindFor
(
resource
string
)
(
unversioned
.
GroupVersionKind
,
error
)
{
func
(
t
*
thirdPartyResourceDataMapper
)
KindFor
(
resource
unversioned
.
GroupVersionResource
)
(
unversioned
.
GroupVersionKind
,
error
)
{
if
t
.
isThirdPartyResource
(
resource
)
{
return
unversioned
.
GroupVersionKind
{
Group
:
t
.
group
,
Version
:
t
.
version
,
Kind
:
t
.
kind
}
,
nil
return
t
.
getKind
()
,
nil
}
return
t
.
mapper
.
KindFor
(
resource
)
}
...
...
@@ -86,8 +127,7 @@ func (t *thirdPartyResourceDataMapper) ResourceSingularizer(resource string) (si
return
t
.
mapper
.
ResourceSingularizer
(
resource
)
}
// ResourceIsValid takes a string (kind) and checks if it's a valid resource
func
(
t
*
thirdPartyResourceDataMapper
)
ResourceIsValid
(
resource
string
)
bool
{
func
(
t
*
thirdPartyResourceDataMapper
)
ResourceIsValid
(
resource
unversioned
.
GroupVersionResource
)
bool
{
return
t
.
isThirdPartyResource
(
resource
)
||
t
.
mapper
.
ResourceIsValid
(
resource
)
}
...
...
pkg/registry/thirdpartyresourcedata/codec_test.go
View file @
5c4479f5
...
...
@@ -212,9 +212,9 @@ func TestResourceIsValid(t *testing.T) {
for
_
,
test
:=
range
tests
{
mapper
:=
&
thirdPartyResourceDataMapper
{
kind
:
test
.
kind
}
mapper
.
mapper
=
api
.
RESTMapper
valid
:=
mapper
.
ResourceIsValid
(
test
.
resource
)
valid
:=
mapper
.
ResourceIsValid
(
unversioned
.
GroupVersionResource
{
Resource
:
test
.
resource
}
)
if
valid
!=
test
.
valid
{
t
.
Errorf
(
"
expected: %v, saw: %v for %s"
,
test
.
valid
,
valid
,
test
.
name
)
t
.
Errorf
(
"
%s: expected: %v, actual: %v"
,
test
.
name
,
test
.
valid
,
valid
)
}
}
}
plugin/pkg/admission/namespace/autoprovision/admission.go
View file @
5c4479f5
...
...
@@ -45,11 +45,11 @@ type provision struct {
}
func
(
p
*
provision
)
Admit
(
a
admission
.
Attributes
)
(
err
error
)
{
gvk
,
err
:=
api
.
RESTMapper
.
KindFor
(
a
.
GetResource
()
.
Resource
)
kind
,
err
:=
api
.
RESTMapper
.
KindFor
(
a
.
GetResource
()
.
WithVersion
(
""
)
)
if
err
!=
nil
{
return
admission
.
NewForbidden
(
a
,
err
)
}
mapping
,
err
:=
api
.
RESTMapper
.
RESTMapping
(
gvk
.
GroupKind
(),
gvk
.
Version
)
mapping
,
err
:=
api
.
RESTMapper
.
RESTMapping
(
kind
.
GroupKind
(),
kind
.
Version
)
if
err
!=
nil
{
return
admission
.
NewForbidden
(
a
,
err
)
}
...
...
plugin/pkg/admission/namespace/exists/admission.go
View file @
5c4479f5
...
...
@@ -46,11 +46,11 @@ type exists struct {
}
func
(
e
*
exists
)
Admit
(
a
admission
.
Attributes
)
(
err
error
)
{
gvk
,
err
:=
api
.
RESTMapper
.
KindFor
(
a
.
GetResource
()
.
Resource
)
kind
,
err
:=
api
.
RESTMapper
.
KindFor
(
a
.
GetResource
()
.
WithVersion
(
""
)
)
if
err
!=
nil
{
return
errors
.
NewInternalError
(
err
)
}
mapping
,
err
:=
api
.
RESTMapper
.
RESTMapping
(
gvk
.
GroupKind
(),
gvk
.
Version
)
mapping
,
err
:=
api
.
RESTMapper
.
RESTMapping
(
kind
.
GroupKind
(),
kind
.
Version
)
if
err
!=
nil
{
return
errors
.
NewInternalError
(
err
)
}
...
...
plugin/pkg/admission/namespace/lifecycle/admission.go
View file @
5c4479f5
...
...
@@ -48,17 +48,16 @@ type lifecycle struct {
}
func
(
l
*
lifecycle
)
Admit
(
a
admission
.
Attributes
)
(
err
error
)
{
// prevent deletion of immortal namespaces
if
a
.
GetOperation
()
==
admission
.
Delete
&&
a
.
GetKind
()
==
api
.
Kind
(
"Namespace"
)
&&
l
.
immortalNamespaces
.
Has
(
a
.
GetName
())
{
return
errors
.
NewForbidden
(
a
.
GetKind
()
.
Kind
,
a
.
GetName
(),
fmt
.
Errorf
(
"this namespace may not be deleted"
))
}
gvk
,
err
:=
api
.
RESTMapper
.
KindFor
(
a
.
GetResource
()
.
Resource
)
kind
,
err
:=
api
.
RESTMapper
.
KindFor
(
a
.
GetResource
()
.
WithVersion
(
""
)
)
if
err
!=
nil
{
return
errors
.
NewInternalError
(
err
)
}
mapping
,
err
:=
api
.
RESTMapper
.
RESTMapping
(
gvk
.
GroupKind
(),
gvk
.
Version
)
mapping
,
err
:=
api
.
RESTMapper
.
RESTMapping
(
kind
.
GroupKind
(),
kind
.
Version
)
if
err
!=
nil
{
return
errors
.
NewInternalError
(
err
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment