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
2b84d58b
Commit
2b84d58b
authored
Feb 15, 2016
by
deads2k
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add a PriorityRESTMapper that can choose particular group/version of a resource
parent
2e64a0d1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
418 additions
and
3 deletions
+418
-3
priority.go
pkg/api/meta/priority.go
+173
-0
priority_test.go
pkg/api/meta/priority_test.go
+206
-0
cmd_test.go
pkg/kubectl/cmd/cmd_test.go
+20
-2
factory.go
pkg/kubectl/cmd/util/factory.go
+19
-1
No files found.
pkg/api/meta/priority.go
0 → 100644
View file @
2b84d58b
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
meta
import
(
"fmt"
"k8s.io/kubernetes/pkg/api/unversioned"
)
const
(
AnyGroup
=
"*"
AnyVersion
=
"*"
AnyResource
=
"*"
AnyKind
=
"*"
)
// PriorityRESTMapper is a wrapper for automatically choosing a particular Resource or Kind
// when multiple matches are possible
type
PriorityRESTMapper
struct
{
// Delegate is the RESTMapper to use to locate all the Kind and Resource matches
Delegate
RESTMapper
// ResourcePriority is a list of priority patterns to apply to matching resources.
// The list of all matching resources is narrowed based on the patterns until only one remains.
// A pattern with no matches is skipped. A pattern with more than one match uses its
// matches as the list to continue matching against.
ResourcePriority
[]
unversioned
.
GroupVersionResource
// KindPriority is a list of priority patterns to apply to matching kinds.
// The list of all matching kinds is narrowed based on the patterns until only one remains.
// A pattern with no matches is skipped. A pattern with more than one match uses its
// matches as the list to continue matching against.
KindPriority
[]
unversioned
.
GroupVersionKind
}
func
(
m
PriorityRESTMapper
)
String
()
string
{
return
fmt
.
Sprintf
(
"PriorityRESTMapper{
\n\t
%v
\n\t
%v
\n\t
%v
\n
}"
,
m
.
ResourcePriority
,
m
.
KindPriority
,
m
.
Delegate
)
}
// ResourceFor finds all resources, then passes them through the ResourcePriority patterns to find a single matching hit.
func
(
m
PriorityRESTMapper
)
ResourceFor
(
partiallySpecifiedResource
unversioned
.
GroupVersionResource
)
(
unversioned
.
GroupVersionResource
,
error
)
{
originalGVRs
,
err
:=
m
.
Delegate
.
ResourcesFor
(
partiallySpecifiedResource
)
if
err
!=
nil
{
return
unversioned
.
GroupVersionResource
{},
err
}
if
len
(
originalGVRs
)
==
1
{
return
originalGVRs
[
0
],
nil
}
remainingGVRs
:=
append
([]
unversioned
.
GroupVersionResource
{},
originalGVRs
...
)
for
_
,
pattern
:=
range
m
.
ResourcePriority
{
matchedGVRs
:=
[]
unversioned
.
GroupVersionResource
{}
for
_
,
gvr
:=
range
remainingGVRs
{
if
resourceMatches
(
pattern
,
gvr
)
{
matchedGVRs
=
append
(
matchedGVRs
,
gvr
)
}
}
switch
len
(
matchedGVRs
)
{
case
0
:
// if you have no matches, then nothing matched this pattern just move to the next
continue
case
1
:
// one match, return
return
matchedGVRs
[
0
],
nil
default
:
// more than one match, use the matched hits as the list moving to the next pattern.
// this way you can have a series of selection criteria
remainingGVRs
=
matchedGVRs
}
}
return
unversioned
.
GroupVersionResource
{},
&
AmbiguousResourceError
{
PartialResource
:
partiallySpecifiedResource
,
MatchingResources
:
originalGVRs
}
}
// KindFor finds all kinds, then passes them through the KindPriority patterns to find a single matching hit.
func
(
m
PriorityRESTMapper
)
KindFor
(
partiallySpecifiedResource
unversioned
.
GroupVersionResource
)
(
unversioned
.
GroupVersionKind
,
error
)
{
originalGVKs
,
err
:=
m
.
Delegate
.
KindsFor
(
partiallySpecifiedResource
)
if
err
!=
nil
{
return
unversioned
.
GroupVersionKind
{},
err
}
if
len
(
originalGVKs
)
==
1
{
return
originalGVKs
[
0
],
nil
}
remainingGVKs
:=
append
([]
unversioned
.
GroupVersionKind
{},
originalGVKs
...
)
for
_
,
pattern
:=
range
m
.
KindPriority
{
matchedGVKs
:=
[]
unversioned
.
GroupVersionKind
{}
for
_
,
gvr
:=
range
remainingGVKs
{
if
kindMatches
(
pattern
,
gvr
)
{
matchedGVKs
=
append
(
matchedGVKs
,
gvr
)
}
}
switch
len
(
matchedGVKs
)
{
case
0
:
// if you have no matches, then nothing matched this pattern just move to the next
continue
case
1
:
// one match, return
return
matchedGVKs
[
0
],
nil
default
:
// more than one match, use the matched hits as the list moving to the next pattern.
// this way you can have a series of selection criteria
remainingGVKs
=
matchedGVKs
}
}
return
unversioned
.
GroupVersionKind
{},
&
AmbiguousResourceError
{
PartialResource
:
partiallySpecifiedResource
,
MatchingKinds
:
originalGVKs
}
}
func
resourceMatches
(
pattern
unversioned
.
GroupVersionResource
,
resource
unversioned
.
GroupVersionResource
)
bool
{
if
pattern
.
Group
!=
AnyGroup
&&
pattern
.
Group
!=
resource
.
Group
{
return
false
}
if
pattern
.
Version
!=
AnyVersion
&&
pattern
.
Version
!=
resource
.
Version
{
return
false
}
if
pattern
.
Resource
!=
AnyResource
&&
pattern
.
Resource
!=
resource
.
Resource
{
return
false
}
return
true
}
func
kindMatches
(
pattern
unversioned
.
GroupVersionKind
,
kind
unversioned
.
GroupVersionKind
)
bool
{
if
pattern
.
Group
!=
AnyGroup
&&
pattern
.
Group
!=
kind
.
Group
{
return
false
}
if
pattern
.
Version
!=
AnyVersion
&&
pattern
.
Version
!=
kind
.
Version
{
return
false
}
if
pattern
.
Kind
!=
AnyKind
&&
pattern
.
Kind
!=
kind
.
Kind
{
return
false
}
return
true
}
func
(
m
PriorityRESTMapper
)
RESTMapping
(
gk
unversioned
.
GroupKind
,
versions
...
string
)
(
mapping
*
RESTMapping
,
err
error
)
{
return
m
.
Delegate
.
RESTMapping
(
gk
,
versions
...
)
}
func
(
m
PriorityRESTMapper
)
AliasesForResource
(
alias
string
)
(
aliases
[]
string
,
ok
bool
)
{
return
m
.
Delegate
.
AliasesForResource
(
alias
)
}
func
(
m
PriorityRESTMapper
)
ResourceSingularizer
(
resource
string
)
(
singular
string
,
err
error
)
{
return
m
.
Delegate
.
ResourceSingularizer
(
resource
)
}
func
(
m
PriorityRESTMapper
)
ResourcesFor
(
partiallySpecifiedResource
unversioned
.
GroupVersionResource
)
([]
unversioned
.
GroupVersionResource
,
error
)
{
return
m
.
Delegate
.
ResourcesFor
(
partiallySpecifiedResource
)
}
func
(
m
PriorityRESTMapper
)
KindsFor
(
partiallySpecifiedResource
unversioned
.
GroupVersionResource
)
(
gvk
[]
unversioned
.
GroupVersionKind
,
err
error
)
{
return
m
.
Delegate
.
KindsFor
(
partiallySpecifiedResource
)
}
pkg/api/meta/priority_test.go
0 → 100644
View file @
2b84d58b
/*
Copyright 2016 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
meta
import
(
"strings"
"testing"
"k8s.io/kubernetes/pkg/api/unversioned"
)
func
TestPriorityRESTMapperResourceForErrorHandling
(
t
*
testing
.
T
)
{
tcs
:=
[]
struct
{
name
string
delegate
RESTMapper
resourcePatterns
[]
unversioned
.
GroupVersionResource
result
unversioned
.
GroupVersionResource
err
string
}{
{
name
:
"single hit"
,
delegate
:
fixedRESTMapper
{
resourcesFor
:
[]
unversioned
.
GroupVersionResource
{{
Resource
:
"single-hit"
}}},
result
:
unversioned
.
GroupVersionResource
{
Resource
:
"single-hit"
},
},
{
name
:
"ambiguous match"
,
delegate
:
fixedRESTMapper
{
resourcesFor
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Resource
:
"second"
},
}},
err
:
"matches multiple resources"
,
},
{
name
:
"group selection"
,
delegate
:
fixedRESTMapper
{
resourcesFor
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Resource
:
"second"
},
}},
resourcePatterns
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"one"
,
Version
:
AnyVersion
,
Resource
:
AnyResource
},
},
result
:
unversioned
.
GroupVersionResource
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
},
{
name
:
"empty match continues"
,
delegate
:
fixedRESTMapper
{
resourcesFor
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Resource
:
"second"
},
}},
resourcePatterns
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"fail"
,
Version
:
AnyVersion
,
Resource
:
AnyResource
},
{
Group
:
"one"
,
Version
:
AnyVersion
,
Resource
:
AnyResource
},
},
result
:
unversioned
.
GroupVersionResource
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
},
{
name
:
"group followed by version selection"
,
delegate
:
fixedRESTMapper
{
resourcesFor
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Resource
:
"second"
},
{
Group
:
"one"
,
Version
:
"c"
,
Resource
:
"third"
},
}},
resourcePatterns
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"one"
,
Version
:
AnyVersion
,
Resource
:
AnyResource
},
{
Group
:
AnyGroup
,
Version
:
"a"
,
Resource
:
AnyResource
},
},
result
:
unversioned
.
GroupVersionResource
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
},
{
name
:
"resource selection"
,
delegate
:
fixedRESTMapper
{
resourcesFor
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"first"
},
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"second"
},
}},
resourcePatterns
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
AnyGroup
,
Version
:
AnyVersion
,
Resource
:
"second"
},
},
result
:
unversioned
.
GroupVersionResource
{
Group
:
"one"
,
Version
:
"a"
,
Resource
:
"second"
},
},
}
for
_
,
tc
:=
range
tcs
{
mapper
:=
PriorityRESTMapper
{
Delegate
:
tc
.
delegate
,
ResourcePriority
:
tc
.
resourcePatterns
}
actualResult
,
actualErr
:=
mapper
.
ResourceFor
(
unversioned
.
GroupVersionResource
{})
if
e
,
a
:=
tc
.
result
,
actualResult
;
e
!=
a
{
t
.
Errorf
(
"%s: expected %v, got %v"
,
tc
.
name
,
e
,
a
)
}
if
len
(
tc
.
err
)
==
0
&&
actualErr
==
nil
{
continue
}
if
len
(
tc
.
err
)
>
0
&&
actualErr
==
nil
{
t
.
Errorf
(
"%s: missing expected err: %v"
,
tc
.
name
,
tc
.
err
)
continue
}
if
!
strings
.
Contains
(
actualErr
.
Error
(),
tc
.
err
)
{
t
.
Errorf
(
"%s: expected %v, got %v"
,
tc
.
name
,
tc
.
err
,
actualErr
)
}
}
}
func
TestPriorityRESTMapperKindForErrorHandling
(
t
*
testing
.
T
)
{
tcs
:=
[]
struct
{
name
string
delegate
RESTMapper
kindPatterns
[]
unversioned
.
GroupVersionKind
result
unversioned
.
GroupVersionKind
err
string
}{
{
name
:
"single hit"
,
delegate
:
fixedRESTMapper
{
kindsFor
:
[]
unversioned
.
GroupVersionKind
{{
Kind
:
"single-hit"
}}},
result
:
unversioned
.
GroupVersionKind
{
Kind
:
"single-hit"
},
},
{
name
:
"ambiguous match"
,
delegate
:
fixedRESTMapper
{
kindsFor
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Kind
:
"second"
},
}},
err
:
"matches multiple kinds"
,
},
{
name
:
"group selection"
,
delegate
:
fixedRESTMapper
{
kindsFor
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Kind
:
"second"
},
}},
kindPatterns
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"one"
,
Version
:
AnyVersion
,
Kind
:
AnyKind
},
},
result
:
unversioned
.
GroupVersionKind
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
},
{
name
:
"empty match continues"
,
delegate
:
fixedRESTMapper
{
kindsFor
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Kind
:
"second"
},
}},
kindPatterns
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"fail"
,
Version
:
AnyVersion
,
Kind
:
AnyKind
},
{
Group
:
"one"
,
Version
:
AnyVersion
,
Kind
:
AnyKind
},
},
result
:
unversioned
.
GroupVersionKind
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
},
{
name
:
"group followed by version selection"
,
delegate
:
fixedRESTMapper
{
kindsFor
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
{
Group
:
"two"
,
Version
:
"b"
,
Kind
:
"second"
},
{
Group
:
"one"
,
Version
:
"c"
,
Kind
:
"third"
},
}},
kindPatterns
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"one"
,
Version
:
AnyVersion
,
Kind
:
AnyKind
},
{
Group
:
AnyGroup
,
Version
:
"a"
,
Kind
:
AnyKind
},
},
result
:
unversioned
.
GroupVersionKind
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
},
{
name
:
"kind selection"
,
delegate
:
fixedRESTMapper
{
kindsFor
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"first"
},
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"second"
},
}},
kindPatterns
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
AnyGroup
,
Version
:
AnyVersion
,
Kind
:
"second"
},
},
result
:
unversioned
.
GroupVersionKind
{
Group
:
"one"
,
Version
:
"a"
,
Kind
:
"second"
},
},
}
for
_
,
tc
:=
range
tcs
{
mapper
:=
PriorityRESTMapper
{
Delegate
:
tc
.
delegate
,
KindPriority
:
tc
.
kindPatterns
}
actualResult
,
actualErr
:=
mapper
.
KindFor
(
unversioned
.
GroupVersionResource
{})
if
e
,
a
:=
tc
.
result
,
actualResult
;
e
!=
a
{
t
.
Errorf
(
"%s: expected %v, got %v"
,
tc
.
name
,
e
,
a
)
}
if
len
(
tc
.
err
)
==
0
&&
actualErr
==
nil
{
continue
}
if
len
(
tc
.
err
)
>
0
&&
actualErr
==
nil
{
t
.
Errorf
(
"%s: missing expected err: %v"
,
tc
.
name
,
tc
.
err
)
continue
}
if
!
strings
.
Contains
(
actualErr
.
Error
(),
tc
.
err
)
{
t
.
Errorf
(
"%s: expected %v, got %v"
,
tc
.
name
,
tc
.
err
,
actualErr
)
}
}
}
pkg/kubectl/cmd/cmd_test.go
View file @
2b84d58b
...
@@ -180,7 +180,16 @@ func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec) {
...
@@ -180,7 +180,16 @@ func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec) {
}
}
return
&
cmdutil
.
Factory
{
return
&
cmdutil
.
Factory
{
Object
:
func
()
(
meta
.
RESTMapper
,
runtime
.
ObjectTyper
)
{
Object
:
func
()
(
meta
.
RESTMapper
,
runtime
.
ObjectTyper
)
{
return
t
.
Mapper
,
t
.
Typer
priorityRESTMapper
:=
meta
.
PriorityRESTMapper
{
Delegate
:
t
.
Mapper
,
ResourcePriority
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
meta
.
AnyGroup
,
Version
:
"v1"
,
Resource
:
meta
.
AnyResource
},
},
KindPriority
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
meta
.
AnyGroup
,
Version
:
"v1"
,
Kind
:
meta
.
AnyKind
},
},
}
return
priorityRESTMapper
,
t
.
Typer
},
},
ClientForMapping
:
func
(
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
ClientForMapping
:
func
(
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
return
t
.
Client
,
t
.
Err
return
t
.
Client
,
t
.
Err
...
@@ -212,7 +221,16 @@ func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec) {
...
@@ -212,7 +221,16 @@ func NewTestFactory() (*cmdutil.Factory, *testFactory, runtime.Codec) {
func
NewMixedFactory
(
apiClient
resource
.
RESTClient
)
(
*
cmdutil
.
Factory
,
*
testFactory
,
runtime
.
Codec
)
{
func
NewMixedFactory
(
apiClient
resource
.
RESTClient
)
(
*
cmdutil
.
Factory
,
*
testFactory
,
runtime
.
Codec
)
{
f
,
t
,
c
:=
NewTestFactory
()
f
,
t
,
c
:=
NewTestFactory
()
f
.
Object
=
func
()
(
meta
.
RESTMapper
,
runtime
.
ObjectTyper
)
{
f
.
Object
=
func
()
(
meta
.
RESTMapper
,
runtime
.
ObjectTyper
)
{
return
meta
.
MultiRESTMapper
{
t
.
Mapper
,
testapi
.
Default
.
RESTMapper
()},
runtime
.
MultiObjectTyper
{
t
.
Typer
,
api
.
Scheme
}
priorityRESTMapper
:=
meta
.
PriorityRESTMapper
{
Delegate
:
meta
.
MultiRESTMapper
{
t
.
Mapper
,
testapi
.
Default
.
RESTMapper
()},
ResourcePriority
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
meta
.
AnyGroup
,
Version
:
"v1"
,
Resource
:
meta
.
AnyResource
},
},
KindPriority
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
meta
.
AnyGroup
,
Version
:
"v1"
,
Kind
:
meta
.
AnyKind
},
},
}
return
priorityRESTMapper
,
runtime
.
MultiObjectTyper
{
t
.
Typer
,
api
.
Scheme
}
}
}
f
.
ClientForMapping
=
func
(
m
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
f
.
ClientForMapping
=
func
(
m
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
if
m
.
ObjectConvertor
==
api
.
Scheme
{
if
m
.
ObjectConvertor
==
api
.
Scheme
{
...
...
pkg/kubectl/cmd/util/factory.go
View file @
2b84d58b
...
@@ -43,6 +43,7 @@ import (
...
@@ -43,6 +43,7 @@ import (
"k8s.io/kubernetes/pkg/apis/autoscaling"
"k8s.io/kubernetes/pkg/apis/autoscaling"
"k8s.io/kubernetes/pkg/apis/batch"
"k8s.io/kubernetes/pkg/apis/batch"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/metrics"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
clientset
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
client
"k8s.io/kubernetes/pkg/client/unversioned"
client
"k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
...
@@ -202,7 +203,24 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
...
@@ -202,7 +203,24 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
cmdApiVersion
=
*
cfg
.
GroupVersion
cmdApiVersion
=
*
cfg
.
GroupVersion
}
}
return
kubectl
.
OutputVersionMapper
{
RESTMapper
:
mapper
,
OutputVersions
:
[]
unversioned
.
GroupVersion
{
cmdApiVersion
}},
api
.
Scheme
outputRESTMapper
:=
kubectl
.
OutputVersionMapper
{
RESTMapper
:
mapper
,
OutputVersions
:
[]
unversioned
.
GroupVersion
{
cmdApiVersion
}}
// eventually this should allow me choose a group priority based on the order of the discovery doc, for now hardcode a given order
priorityRESTMapper
:=
meta
.
PriorityRESTMapper
{
Delegate
:
outputRESTMapper
,
ResourcePriority
:
[]
unversioned
.
GroupVersionResource
{
{
Group
:
api
.
GroupName
,
Version
:
meta
.
AnyVersion
,
Resource
:
meta
.
AnyResource
},
{
Group
:
extensions
.
GroupName
,
Version
:
meta
.
AnyVersion
,
Resource
:
meta
.
AnyResource
},
{
Group
:
metrics
.
GroupName
,
Version
:
meta
.
AnyVersion
,
Resource
:
meta
.
AnyResource
},
},
KindPriority
:
[]
unversioned
.
GroupVersionKind
{
{
Group
:
api
.
GroupName
,
Version
:
meta
.
AnyVersion
,
Kind
:
meta
.
AnyKind
},
{
Group
:
extensions
.
GroupName
,
Version
:
meta
.
AnyVersion
,
Kind
:
meta
.
AnyKind
},
{
Group
:
metrics
.
GroupName
,
Version
:
meta
.
AnyVersion
,
Kind
:
meta
.
AnyKind
},
},
}
return
priorityRESTMapper
,
api
.
Scheme
},
},
Client
:
func
()
(
*
client
.
Client
,
error
)
{
Client
:
func
()
(
*
client
.
Client
,
error
)
{
return
clients
.
ClientForVersion
(
nil
)
return
clients
.
ClientForVersion
(
nil
)
...
...
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