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
8895f314
Commit
8895f314
authored
Mar 24, 2017
by
deads2k
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move category expansion out of restmapper
parent
f4986235
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
51 changed files
with
266 additions
and
213 deletions
+266
-213
install.go
federation/apis/core/install/install.go
+0
-5
annotate.go
pkg/kubectl/cmd/annotate.go
+1
-1
apply.go
pkg/kubectl/cmd/apply.go
+1
-1
apply_set_last_applied.go
pkg/kubectl/cmd/apply_set_last_applied.go
+1
-1
apply_view_last_applied.go
pkg/kubectl/cmd/apply_view_last_applied.go
+1
-1
attach.go
pkg/kubectl/cmd/attach.go
+1
-1
autoscale.go
pkg/kubectl/cmd/autoscale.go
+1
-1
certificates.go
pkg/kubectl/cmd/certificates.go
+1
-1
clusterinfo.go
pkg/kubectl/cmd/clusterinfo.go
+1
-1
convert.go
pkg/kubectl/cmd/convert.go
+2
-2
create.go
pkg/kubectl/cmd/create.go
+1
-1
delete.go
pkg/kubectl/cmd/delete.go
+1
-1
describe.go
pkg/kubectl/cmd/describe.go
+2
-2
edit.go
pkg/kubectl/cmd/edit.go
+2
-2
expose.go
pkg/kubectl/cmd/expose.go
+1
-1
get.go
pkg/kubectl/cmd/get.go
+2
-2
label.go
pkg/kubectl/cmd/label.go
+1
-1
logs.go
pkg/kubectl/cmd/logs.go
+1
-1
patch.go
pkg/kubectl/cmd/patch.go
+1
-1
replace.go
pkg/kubectl/cmd/replace.go
+3
-3
rollingupdate.go
pkg/kubectl/cmd/rollingupdate.go
+1
-1
rollout_history.go
pkg/kubectl/cmd/rollout/rollout_history.go
+1
-1
rollout_pause.go
pkg/kubectl/cmd/rollout/rollout_pause.go
+1
-1
rollout_resume.go
pkg/kubectl/cmd/rollout/rollout_resume.go
+1
-1
rollout_status.go
pkg/kubectl/cmd/rollout/rollout_status.go
+1
-1
rollout_undo.go
pkg/kubectl/cmd/rollout/rollout_undo.go
+1
-1
run.go
pkg/kubectl/cmd/run.go
+1
-1
scale.go
pkg/kubectl/cmd/scale.go
+1
-1
set_image.go
pkg/kubectl/cmd/set/set_image.go
+1
-1
set_resources.go
pkg/kubectl/cmd/set/set_resources.go
+1
-1
stop.go
pkg/kubectl/cmd/stop.go
+1
-1
taint.go
pkg/kubectl/cmd/taint.go
+1
-1
fake.go
pkg/kubectl/cmd/testing/fake.go
+5
-1
factory.go
pkg/kubectl/cmd/util/factory.go
+2
-0
factory_builder.go
pkg/kubectl/cmd/util/factory_builder.go
+2
-1
factory_object_mapping.go
pkg/kubectl/cmd/util/factory_object_mapping.go
+14
-0
factory_test.go
pkg/kubectl/cmd/util/factory_test.go
+3
-3
shortcut_restmapper.go
pkg/kubectl/cmd/util/shortcut_restmapper.go
+2
-61
shortcut_restmapper_test.go
pkg/kubectl/cmd/util/shortcut_restmapper_test.go
+7
-30
BUILD
pkg/kubectl/resource/BUILD
+4
-0
builder.go
pkg/kubectl/resource/builder.go
+16
-6
builder_test.go
pkg/kubectl/resource/builder_test.go
+0
-0
categories.go
pkg/kubectl/resource/categories.go
+109
-0
categories_test.go
pkg/kubectl/resource/categories_test.go
+65
-0
codec.go
pkg/registry/extensions/thirdpartyresourcedata/codec.go
+0
-4
interfaces.go
staging/src/k8s.io/apimachinery/pkg/api/meta/interfaces.go
+0
-1
multirestmapper.go
...g/src/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go
+0
-21
multirestmapper_test.go
.../k8s.io/apimachinery/pkg/api/meta/multirestmapper_test.go
+0
-4
priority.go
staging/src/k8s.io/apimachinery/pkg/api/meta/priority.go
+0
-4
restmapper.go
staging/src/k8s.io/apimachinery/pkg/api/meta/restmapper.go
+0
-21
restmapper.go
staging/src/k8s.io/client-go/discovery/restmapper.go
+0
-14
No files found.
federation/apis/core/install/install.go
View file @
8895f314
...
...
@@ -83,9 +83,6 @@ func enableVersions(externalVersions []schema.GroupVersion) error {
return
nil
}
// userResources is a group of resources mostly used by a kubectl user
var
userResources
=
[]
string
{
"svc"
}
func
newRESTMapper
(
externalVersions
[]
schema
.
GroupVersion
)
meta
.
RESTMapper
{
// the list of kinds that are scoped at the root of the api hierarchy
// if a kind is not enumerated here, it is assumed to have a namespace scope
...
...
@@ -100,8 +97,6 @@ func newRESTMapper(externalVersions []schema.GroupVersion) meta.RESTMapper {
"Status"
)
mapper
:=
meta
.
NewDefaultRESTMapperFromScheme
(
externalVersions
,
interfacesFor
,
importPrefix
,
ignoredKinds
,
rootScoped
,
core
.
Scheme
)
// setup aliases for groups of resources
mapper
.
AddResourceAlias
(
"all"
,
userResources
...
)
return
mapper
}
...
...
pkg/kubectl/cmd/annotate.go
View file @
8895f314
...
...
@@ -190,7 +190,7 @@ func (o AnnotateOptions) RunAnnotate(f cmdutil.Factory, cmd *cobra.Command) erro
if
err
!=
nil
{
return
err
}
b
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
b
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
ContinueOnError
()
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
...
...
pkg/kubectl/cmd/apply.go
View file @
8895f314
...
...
@@ -205,7 +205,7 @@ func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opti
}
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
Schema
(
schema
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
...
...
pkg/kubectl/cmd/apply_set_last_applied.go
View file @
8895f314
...
...
@@ -120,7 +120,7 @@ func (o *SetLastAppliedOptions) Complete(f cmdutil.Factory, cmd *cobra.Command)
}
func
(
o
*
SetLastAppliedOptions
)
Validate
(
f
cmdutil
.
Factory
,
cmd
*
cobra
.
Command
)
error
{
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
f
.
CategoryExpander
(),
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
NamespaceParam
(
o
.
Namespace
)
.
DefaultNamespace
()
.
FilenameParam
(
o
.
EnforceNamespace
,
&
o
.
FilenameOptions
)
.
Latest
()
.
...
...
pkg/kubectl/cmd/apply_view_last_applied.go
View file @
8895f314
...
...
@@ -90,7 +90,7 @@ func (o *ViewLastAppliedOptions) Complete(f cmdutil.Factory, args []string) erro
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
ResourceTypeOrNameArgs
(
enforceNamespace
,
args
...
)
.
...
...
pkg/kubectl/cmd/attach.go
View file @
8895f314
...
...
@@ -134,7 +134,7 @@ func (p *AttachOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, argsIn [
}
mapper
,
typer
:=
f
.
Object
()
builder
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
builder
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
switch
len
(
argsIn
)
{
...
...
pkg/kubectl/cmd/autoscale.go
View file @
8895f314
...
...
@@ -91,7 +91,7 @@ func RunAutoscale(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s
}
mapper
,
typer
:=
f
.
Object
()
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
options
)
.
...
...
pkg/kubectl/cmd/certificates.go
View file @
8895f314
...
...
@@ -167,7 +167,7 @@ func (options *CertificateOptions) modifyCertificateCondition(f cmdutil.Factory,
if
err
!=
nil
{
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
FilenameParam
(
false
,
&
options
.
FilenameOptions
)
.
ResourceNames
(
"certificatesigningrequest"
,
options
.
csrNames
...
)
.
...
...
pkg/kubectl/cmd/clusterinfo.go
View file @
8895f314
...
...
@@ -79,7 +79,7 @@ func RunClusterInfo(f cmdutil.Factory, out io.Writer, cmd *cobra.Command) error
}
// TODO use generalized labels once they are implemented (#341)
b
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
b
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
SelectorParam
(
"kubernetes.io/cluster-service=true"
)
.
ResourceTypeOrNameArgs
(
false
,
[]
string
{
"services"
}
...
)
.
...
...
pkg/kubectl/cmd/convert.go
View file @
8895f314
...
...
@@ -132,9 +132,9 @@ func (o *ConvertOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.C
if
o
.
local
{
fmt
.
Fprintln
(
os
.
Stderr
,
"running in local mode..."
)
o
.
builder
=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
DisabledClientForMapping
{
ClientMapper
:
clientMapper
},
f
.
Decoder
(
true
))
o
.
builder
=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
DisabledClientForMapping
{
ClientMapper
:
clientMapper
},
f
.
Decoder
(
true
))
}
else
{
o
.
builder
=
resource
.
NewBuilder
(
mapper
,
typer
,
clientMapper
,
f
.
Decoder
(
true
))
o
.
builder
=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
clientMapper
,
f
.
Decoder
(
true
))
schema
,
err
:=
f
.
Validator
(
cmdutil
.
GetFlagBool
(
cmd
,
"validate"
),
cmdutil
.
GetFlagString
(
cmd
,
"schema-cache-dir"
))
if
err
!=
nil
{
return
err
...
...
pkg/kubectl/cmd/create.go
View file @
8895f314
...
...
@@ -128,7 +128,7 @@ func RunCreate(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opt
if
err
!=
nil
{
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
Schema
(
schema
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
...
...
pkg/kubectl/cmd/delete.go
View file @
8895f314
...
...
@@ -175,7 +175,7 @@ func (o *DeleteOptions) Complete(f cmdutil.Factory, out, errOut io.Writer, args
return
err
}
o
.
Mapper
=
mapper
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
...
...
pkg/kubectl/cmd/describe.go
View file @
8895f314
...
...
@@ -121,7 +121,7 @@ func RunDescribe(f cmdutil.Factory, out, cmdErr io.Writer, cmd *cobra.Command, a
if
err
!=
nil
{
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
AllNamespaces
(
allNamespaces
)
.
FilenameParam
(
enforceNamespace
,
options
)
.
...
...
@@ -181,7 +181,7 @@ func DescribeMatchingResources(mapper meta.RESTMapper, typer runtime.ObjectTyper
if
err
!=
nil
{
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
.
ResourceTypeOrNameArgs
(
true
,
rsrc
)
.
SingleResourceType
()
.
...
...
pkg/kubectl/cmd/edit.go
View file @
8895f314
...
...
@@ -385,7 +385,7 @@ func getMapperAndResult(f cmdutil.Factory, args []string, options *resource.File
return
nil
,
nil
,
nil
,
""
,
err
}
b
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
b
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
if
editMode
==
NormalEditMode
{
// if in normal mode, also read from args, and fetch latest from the server
b
=
b
.
ResourceTypeOrNameArgs
(
true
,
args
...
)
.
Latest
()
...
...
@@ -403,7 +403,7 @@ func getMapperAndResult(f cmdutil.Factory, args []string, options *resource.File
updatedResultGetter
:=
func
(
data
[]
byte
)
*
resource
.
Result
{
// resource builder to read objects from edited data
return
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
return
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
Stream
(
bytes
.
NewReader
(
data
),
"edited-file"
)
.
ContinueOnError
()
.
Flatten
()
.
...
...
pkg/kubectl/cmd/expose.go
View file @
8895f314
...
...
@@ -127,7 +127,7 @@ func RunExpose(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []stri
}
mapper
,
typer
:=
f
.
Object
()
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
options
)
.
...
...
pkg/kubectl/cmd/get.go
View file @
8895f314
...
...
@@ -193,7 +193,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
// handle watch separately since we cannot watch multiple resource types
isWatch
,
isWatchOnly
:=
cmdutil
.
GetFlagBool
(
cmd
,
"watch"
),
cmdutil
.
GetFlagBool
(
cmd
,
"watch-only"
)
if
isWatch
||
isWatchOnly
{
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
AllNamespaces
(
allNamespaces
)
.
FilenameParam
(
enforceNamespace
,
&
options
.
FilenameOptions
)
.
SelectorParam
(
selector
)
.
...
...
@@ -283,7 +283,7 @@ func RunGet(f cmdutil.Factory, out, errOut io.Writer, cmd *cobra.Command, args [
return
nil
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
AllNamespaces
(
allNamespaces
)
.
FilenameParam
(
enforceNamespace
,
&
options
.
FilenameOptions
)
.
SelectorParam
(
selector
)
.
...
...
pkg/kubectl/cmd/label.go
View file @
8895f314
...
...
@@ -185,7 +185,7 @@ func (o *LabelOptions) RunLabel(f cmdutil.Factory, cmd *cobra.Command) error {
if
err
!=
nil
{
return
err
}
b
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
b
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
...
...
pkg/kubectl/cmd/logs.go
View file @
8895f314
...
...
@@ -193,7 +193,7 @@ func (o *LogsOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Comm
mapper
,
typer
:=
f
.
Object
()
decoder
:=
f
.
Decoder
(
true
)
if
o
.
Object
==
nil
{
builder
:=
resource
.
NewBuilder
(
mapper
,
typer
,
o
.
ClientMapper
,
decoder
)
.
builder
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
o
.
ClientMapper
,
decoder
)
.
NamespaceParam
(
o
.
Namespace
)
.
DefaultNamespace
()
.
SingleResourceType
()
if
o
.
ResourceArg
!=
""
{
...
...
pkg/kubectl/cmd/patch.go
View file @
8895f314
...
...
@@ -153,7 +153,7 @@ func RunPatch(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin
if
err
!=
nil
{
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
options
.
FilenameOptions
)
.
...
...
pkg/kubectl/cmd/replace.go
View file @
8895f314
...
...
@@ -129,7 +129,7 @@ func RunReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []str
if
err
!=
nil
{
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
Schema
(
schema
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
...
...
@@ -200,7 +200,7 @@ func forceReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s
if
err
!=
nil
{
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
options
)
.
...
...
@@ -249,7 +249,7 @@ func forceReplace(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []s
})
})
r
=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
r
=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
UnstructuredClientForMapping
),
unstructured
.
UnstructuredJSONScheme
)
.
Schema
(
schema
)
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
...
...
pkg/kubectl/cmd/rollingupdate.go
View file @
8895f314
...
...
@@ -205,7 +205,7 @@ func RunRollingUpdate(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args
return
err
}
request
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
request
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
Schema
(
schema
)
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
resource
.
FilenameOptions
{
Recursive
:
false
,
Filenames
:
[]
string
{
filename
}})
.
...
...
pkg/kubectl/cmd/rollout/rollout_history.go
View file @
8895f314
...
...
@@ -81,7 +81,7 @@ func RunHistory(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []str
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
options
)
.
ResourceTypeOrNameArgs
(
true
,
args
...
)
.
...
...
pkg/kubectl/cmd/rollout/rollout_pause.go
View file @
8895f314
...
...
@@ -111,7 +111,7 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, out i
return
err
}
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
f
.
CategoryExpander
(),
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
ResourceTypeOrNameArgs
(
true
,
args
...
)
.
...
...
pkg/kubectl/cmd/rollout/rollout_resume.go
View file @
8895f314
...
...
@@ -109,7 +109,7 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, out
return
err
}
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
f
.
CategoryExpander
(),
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
ResourceTypeOrNameArgs
(
true
,
args
...
)
.
...
...
pkg/kubectl/cmd/rollout/rollout_status.go
View file @
8895f314
...
...
@@ -84,7 +84,7 @@ func RunStatus(f cmdutil.Factory, cmd *cobra.Command, out io.Writer, args []stri
return
err
}
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
options
)
.
ResourceTypeOrNameArgs
(
true
,
args
...
)
.
...
...
pkg/kubectl/cmd/rollout/rollout_undo.go
View file @
8895f314
...
...
@@ -110,7 +110,7 @@ func (o *UndoOptions) CompleteUndo(f cmdutil.Factory, cmd *cobra.Command, out io
return
err
}
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
o
.
Mapper
,
f
.
CategoryExpander
(),
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
ResourceTypeOrNameArgs
(
true
,
args
...
)
.
...
...
pkg/kubectl/cmd/run.go
View file @
8895f314
...
...
@@ -334,7 +334,7 @@ func Run(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *cobr
return
err
}
_
,
typer
:=
f
.
Object
()
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
.
ResourceNames
(
mapping
.
Resource
,
name
)
.
...
...
pkg/kubectl/cmd/scale.go
View file @
8895f314
...
...
@@ -106,7 +106,7 @@ func RunScale(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin
}
mapper
,
typer
:=
f
.
Object
()
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
options
)
.
...
...
pkg/kubectl/cmd/set/set_image.go
View file @
8895f314
...
...
@@ -136,7 +136,7 @@ func (o *ImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st
return
err
}
builder
:=
resource
.
NewBuilder
(
o
.
Mapper
,
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
builder
:=
resource
.
NewBuilder
(
o
.
Mapper
,
f
.
CategoryExpander
(),
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
FilenameParam
(
enforceNamespace
,
&
o
.
FilenameOptions
)
.
...
...
pkg/kubectl/cmd/set/set_resources.go
View file @
8895f314
...
...
@@ -140,7 +140,7 @@ func (o *ResourcesOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
return
err
}
builder
:=
resource
.
NewBuilder
(
o
.
Mapper
,
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
builder
:=
resource
.
NewBuilder
(
o
.
Mapper
,
f
.
CategoryExpander
(),
o
.
Typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
//FilenameParam(enforceNamespace, o.Filenames...).
...
...
pkg/kubectl/cmd/stop.go
View file @
8895f314
...
...
@@ -84,7 +84,7 @@ func RunStop(f cmdutil.Factory, cmd *cobra.Command, args []string, out io.Writer
}
mapper
,
typer
:=
f
.
Object
()
r
:=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
r
:=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
cmdNamespace
)
.
DefaultNamespace
()
.
ResourceTypeOrNameArgs
(
false
,
args
...
)
.
...
...
pkg/kubectl/cmd/taint.go
View file @
8895f314
...
...
@@ -226,7 +226,7 @@ func (o *TaintOptions) Complete(f cmdutil.Factory, out io.Writer, cmd *cobra.Com
}
mapper
,
typer
:=
f
.
Object
()
o
.
builder
=
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
o
.
builder
=
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
.
ContinueOnError
()
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
if
o
.
all
{
...
...
pkg/kubectl/cmd/testing/fake.go
View file @
8895f314
...
...
@@ -277,6 +277,10 @@ func (f *FakeFactory) UnstructuredObject() (meta.RESTMapper, runtime.ObjectTyper
return
expander
,
typer
,
err
}
func
(
f
*
FakeFactory
)
CategoryExpander
()
resource
.
CategoryExpander
{
return
resource
.
LegacyCategoryExpander
}
func
(
f
*
FakeFactory
)
Decoder
(
bool
)
runtime
.
Decoder
{
return
f
.
Codec
}
...
...
@@ -689,7 +693,7 @@ func (f *fakeAPIFactory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RES
func
(
f
*
fakeAPIFactory
)
NewBuilder
()
*
resource
.
Builder
{
mapper
,
typer
:=
f
.
Object
()
return
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
return
resource
.
NewBuilder
(
mapper
,
f
.
CategoryExpander
(),
typer
,
resource
.
ClientMapperFunc
(
f
.
ClientForMapping
),
f
.
Decoder
(
true
))
}
func
(
f
*
fakeAPIFactory
)
SuggestedPodTemplateResources
()
[]
schema
.
GroupResource
{
...
...
pkg/kubectl/cmd/util/factory.go
View file @
8895f314
...
...
@@ -189,6 +189,8 @@ type ObjectMappingFactory interface {
// Returns interfaces for dealing with arbitrary
// runtime.Unstructured. This performs API calls to discover types.
UnstructuredObject
()
(
meta
.
RESTMapper
,
runtime
.
ObjectTyper
,
error
)
// Returns interface for expanding categories like `all`.
CategoryExpander
()
resource
.
CategoryExpander
// Returns a RESTClient for working with the specified RESTMapping or an error. This is intended
// for working with arbitrary resources and is not guaranteed to point to a Kubernetes APIServer.
ClientForMapping
(
mapping
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
...
...
pkg/kubectl/cmd/util/factory_builder.go
View file @
8895f314
...
...
@@ -126,6 +126,7 @@ func (f *ring2Factory) PrintObject(cmd *cobra.Command, mapper meta.RESTMapper, o
func
(
f
*
ring2Factory
)
NewBuilder
()
*
resource
.
Builder
{
mapper
,
typer
:=
f
.
objectMappingFactory
.
Object
()
categoryExpander
:=
f
.
objectMappingFactory
.
CategoryExpander
()
return
resource
.
NewBuilder
(
mapper
,
typer
,
resource
.
ClientMapperFunc
(
f
.
objectMappingFactory
.
ClientForMapping
),
f
.
clientAccessFactory
.
Decoder
(
true
))
return
resource
.
NewBuilder
(
mapper
,
categoryExpander
,
typer
,
resource
.
ClientMapperFunc
(
f
.
objectMappingFactory
.
ClientForMapping
),
f
.
clientAccessFactory
.
Decoder
(
true
))
}
pkg/kubectl/cmd/util/factory_object_mapping.go
View file @
8895f314
...
...
@@ -105,6 +105,20 @@ func (f *ring1Factory) UnstructuredObject() (meta.RESTMapper, runtime.ObjectType
return
expander
,
typer
,
err
}
func
(
f
*
ring1Factory
)
CategoryExpander
()
resource
.
CategoryExpander
{
var
categoryExpander
resource
.
CategoryExpander
categoryExpander
=
resource
.
LegacyCategoryExpander
discoveryClient
,
err
:=
f
.
clientAccessFactory
.
DiscoveryClient
()
if
err
==
nil
{
// wrap with discovery based filtering
categoryExpander
,
err
=
resource
.
NewDiscoveryFilteredExpander
(
categoryExpander
,
discoveryClient
)
// you only have an error on missing discoveryClient, so this shouldn't fail. Check anyway.
CheckErr
(
err
)
}
return
categoryExpander
}
func
(
f
*
ring1Factory
)
ClientForMapping
(
mapping
*
meta
.
RESTMapping
)
(
resource
.
RESTClient
,
error
)
{
cfg
,
err
:=
f
.
clientAccessFactory
.
ClientConfig
()
if
err
!=
nil
{
...
...
pkg/kubectl/cmd/util/factory_test.go
View file @
8895f314
...
...
@@ -740,12 +740,12 @@ func TestDiscoveryReplaceAliases(t *testing.T) {
{
name
:
"all-replacement"
,
arg
:
"all"
,
expected
:
"pods,replicationcontrollers,services,statefulsets
,horizontalpodautoscalers,jobs,deployments,replicaset
s"
,
expected
:
"pods,replicationcontrollers,services,statefulsets
.apps,horizontalpodautoscalers.autoscaling,jobs.batch,deployments.extensions,replicasets.extension
s"
,
},
{
name
:
"alias-in-comma-separated-arg"
,
arg
:
"all,secrets"
,
expected
:
"pods,replicationcontrollers,services,statefulsets
,horizontalpodautoscalers,jobs,deployments,replicaset
s,secrets"
,
expected
:
"pods,replicationcontrollers,services,statefulsets
.apps,horizontalpodautoscalers.autoscaling,jobs.batch,deployments.extensions,replicasets.extension
s,secrets"
,
},
}
...
...
@@ -754,7 +754,7 @@ func TestDiscoveryReplaceAliases(t *testing.T) {
if
err
!=
nil
{
t
.
Fatalf
(
"Unable to create shortcut expander, err = %s"
,
err
.
Error
())
}
b
:=
resource
.
NewBuilder
(
mapper
,
api
.
Scheme
,
fakeClient
(),
testapi
.
Default
.
Codec
())
b
:=
resource
.
NewBuilder
(
mapper
,
resource
.
LegacyCategoryExpander
,
api
.
Scheme
,
fakeClient
(),
testapi
.
Default
.
Codec
())
for
_
,
test
:=
range
tests
{
replaced
:=
b
.
ReplaceAliases
(
test
.
arg
)
...
...
pkg/kubectl/cmd/util/shortcut_restmapper.go
View file @
8895f314
...
...
@@ -21,6 +21,7 @@ import (
"strings"
"github.com/golang/glog"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/discovery"
...
...
@@ -31,8 +32,6 @@ import (
type
shortcutExpander
struct
{
RESTMapper
meta
.
RESTMapper
All
[]
schema
.
GroupResource
discoveryClient
discovery
.
DiscoveryInterface
}
...
...
@@ -42,33 +41,7 @@ func NewShortcutExpander(delegate meta.RESTMapper, client discovery.DiscoveryInt
if
client
==
nil
{
return
shortcutExpander
{},
errors
.
New
(
"Please provide discovery client to shortcut expander"
)
}
return
shortcutExpander
{
All
:
UserResources
,
RESTMapper
:
delegate
,
discoveryClient
:
client
},
nil
}
func
(
e
shortcutExpander
)
getAll
()
[]
schema
.
GroupResource
{
// Check if we have access to server resources
apiResources
,
err
:=
e
.
discoveryClient
.
ServerResources
()
if
err
!=
nil
{
return
e
.
All
}
availableResources
,
err
:=
discovery
.
GroupVersionResources
(
apiResources
)
if
err
!=
nil
{
return
e
.
All
}
availableAll
:=
[]
schema
.
GroupResource
{}
for
_
,
requestedResource
:=
range
e
.
All
{
for
availableResource
:=
range
availableResources
{
if
requestedResource
.
Group
==
availableResource
.
Group
&&
requestedResource
.
Resource
==
availableResource
.
Resource
{
availableAll
=
append
(
availableAll
,
requestedResource
)
break
}
}
}
return
availableAll
return
shortcutExpander
{
RESTMapper
:
delegate
,
discoveryClient
:
client
},
nil
}
func
(
e
shortcutExpander
)
KindFor
(
resource
schema
.
GroupVersionResource
)
(
schema
.
GroupVersionKind
,
error
)
{
...
...
@@ -99,38 +72,6 @@ func (e shortcutExpander) RESTMappings(gk schema.GroupKind, versions ...string)
return
e
.
RESTMapper
.
RESTMappings
(
gk
,
versions
...
)
}
// UserResources are the resource names that apply to the primary, user facing resources used by
// client tools. They are in deletion-first order - dependent resources should be last.
// Should remain exported in order to expose a current list of resources to downstream
// composition that wants to build on the concept of 'all' for their CLIs.
var
UserResources
=
[]
schema
.
GroupResource
{
{
Group
:
""
,
Resource
:
"pods"
},
{
Group
:
""
,
Resource
:
"replicationcontrollers"
},
{
Group
:
""
,
Resource
:
"services"
},
{
Group
:
"apps"
,
Resource
:
"statefulsets"
},
{
Group
:
"autoscaling"
,
Resource
:
"horizontalpodautoscalers"
},
{
Group
:
"batch"
,
Resource
:
"jobs"
},
{
Group
:
"extensions"
,
Resource
:
"deployments"
},
{
Group
:
"extensions"
,
Resource
:
"replicasets"
},
}
// AliasesForResource returns whether a resource has an alias or not
func
(
e
shortcutExpander
)
AliasesForResource
(
resource
string
)
([]
string
,
bool
)
{
if
strings
.
ToLower
(
resource
)
==
"all"
{
var
resources
[]
schema
.
GroupResource
if
resources
=
e
.
getAll
();
len
(
resources
)
==
0
{
resources
=
UserResources
}
aliases
:=
[]
string
{}
for
_
,
r
:=
range
resources
{
aliases
=
append
(
aliases
,
r
.
Resource
)
}
return
aliases
,
true
}
expanded
:=
e
.
expandResourceShortcut
(
schema
.
GroupVersionResource
{
Resource
:
resource
})
.
Resource
return
[]
string
{
expanded
},
(
expanded
!=
resource
)
}
// getShortcutMappings returns a set of tuples which holds short names for resources.
// First the list of potential resources will be taken from the API server.
// Next we will append the hardcoded list of resources - to be backward compatible with old servers.
...
...
pkg/kubectl/cmd/util/shortcut_restmapper_test.go
View file @
8895f314
...
...
@@ -17,7 +17,6 @@ limitations under the License.
package
util
import
(
"strings"
"testing"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
...
...
@@ -29,43 +28,25 @@ func TestReplaceAliases(t *testing.T) {
tests
:=
[]
struct
{
name
string
arg
string
expected
s
tring
expected
s
chema
.
GroupVersionResource
srvRes
[]
*
metav1
.
APIResourceList
}{
{
name
:
"no-replacement"
,
arg
:
"service"
,
expected
:
"service"
,
srvRes
:
[]
*
metav1
.
APIResourceList
{},
},
{
name
:
"all-replacement"
,
arg
:
"all"
,
expected
:
"pods,replicationcontrollers,services,statefulsets,horizontalpodautoscalers,jobs,deployments,replicasets"
,
srvRes
:
[]
*
metav1
.
APIResourceList
{},
},
{
name
:
"alias-in-comma-separated-arg"
,
arg
:
"all,secrets"
,
expected
:
"pods,replicationcontrollers,services,statefulsets,horizontalpodautoscalers,jobs,deployments,replicasets,secrets"
,
srvRes
:
[]
*
metav1
.
APIResourceList
{},
},
{
name
:
"rc-resolves-to-replicationcontrollers"
,
arg
:
"rc"
,
expected
:
"replicationcontrollers"
,
expected
:
schema
.
GroupVersionResource
{
Resource
:
"replicationcontrollers"
}
,
srvRes
:
[]
*
metav1
.
APIResourceList
{},
},
{
name
:
"storageclasses-no-replacement"
,
arg
:
"storageclasses"
,
expected
:
"storageclasses"
,
expected
:
schema
.
GroupVersionResource
{
Resource
:
"storageclasses"
}
,
srvRes
:
[]
*
metav1
.
APIResourceList
{},
},
{
name
:
"hpa-priority"
,
arg
:
"hpa"
,
expected
:
"superhorizontalpodautoscalers"
,
expected
:
schema
.
GroupVersionResource
{
Resource
:
"superhorizontalpodautoscalers"
}
,
srvRes
:
[]
*
metav1
.
APIResourceList
{
{
GroupVersion
:
"autoscaling/v1"
,
...
...
@@ -96,16 +77,12 @@ func TestReplaceAliases(t *testing.T) {
}
for
_
,
test
:=
range
tests
{
resources
:=
[]
string
{}
ds
.
serverResourcesHandler
=
func
()
([]
*
metav1
.
APIResourceList
,
error
)
{
return
test
.
srvRes
,
nil
}
for
_
,
arg
:=
range
strings
.
Split
(
test
.
arg
,
","
)
{
curr
,
_
:=
mapper
.
AliasesForResource
(
arg
)
resources
=
append
(
resources
,
curr
...
)
}
if
strings
.
Join
(
resources
,
","
)
!=
test
.
expected
{
t
.
Errorf
(
"%s: unexpected argument: expected %s, got %s"
,
test
.
name
,
test
.
expected
,
resources
)
actual
:=
mapper
.
expandResourceShortcut
(
schema
.
GroupVersionResource
{
Resource
:
test
.
arg
})
if
actual
!=
test
.
expected
{
t
.
Errorf
(
"%s: unexpected argument: expected %s, got %s"
,
test
.
name
,
test
.
expected
,
actual
)
}
}
}
...
...
pkg/kubectl/resource/BUILD
View file @
8895f314
...
...
@@ -12,6 +12,7 @@ go_library(
name = "go_default_library",
srcs = [
"builder.go",
"categories.go",
"doc.go",
"helper.go",
"interfaces.go",
...
...
@@ -40,6 +41,7 @@ go_library(
"//vendor:k8s.io/apimachinery/pkg/util/sets",
"//vendor:k8s.io/apimachinery/pkg/util/yaml",
"//vendor:k8s.io/apimachinery/pkg/watch",
"//vendor:k8s.io/client-go/discovery",
"//vendor:k8s.io/client-go/rest",
],
)
...
...
@@ -48,6 +50,7 @@ go_test(
name = "go_default_test",
srcs = [
"builder_test.go",
"categories_test.go",
"helper_test.go",
"visitor_test.go",
],
...
...
@@ -72,6 +75,7 @@ go_test(
"//vendor:k8s.io/apimachinery/pkg/apis/meta/v1",
"//vendor:k8s.io/apimachinery/pkg/labels",
"//vendor:k8s.io/apimachinery/pkg/runtime",
"//vendor:k8s.io/apimachinery/pkg/runtime/schema",
"//vendor:k8s.io/apimachinery/pkg/runtime/serializer/streaming",
"//vendor:k8s.io/apimachinery/pkg/util/errors",
"//vendor:k8s.io/apimachinery/pkg/watch",
...
...
pkg/kubectl/resource/builder.go
View file @
8895f314
...
...
@@ -42,7 +42,8 @@ const defaultHttpGetAttempts int = 3
// from the command line and converting them to a list of resources to iterate
// over using the Visitor interface.
type
Builder
struct
{
mapper
*
Mapper
mapper
*
Mapper
categoryExpander
CategoryExpander
errs
[]
error
...
...
@@ -105,10 +106,11 @@ type resourceTuple struct {
}
// NewBuilder creates a builder that operates on generic objects.
func
NewBuilder
(
mapper
meta
.
RESTMapper
,
typer
runtime
.
ObjectTyper
,
clientMapper
ClientMapper
,
decoder
runtime
.
Decoder
)
*
Builder
{
func
NewBuilder
(
mapper
meta
.
RESTMapper
,
categoryExpander
CategoryExpander
,
typer
runtime
.
ObjectTyper
,
clientMapper
ClientMapper
,
decoder
runtime
.
Decoder
)
*
Builder
{
return
&
Builder
{
mapper
:
&
Mapper
{
typer
,
mapper
,
clientMapper
,
decoder
},
requireObject
:
true
,
mapper
:
&
Mapper
{
typer
,
mapper
,
clientMapper
,
decoder
},
categoryExpander
:
categoryExpander
,
requireObject
:
true
,
}
}
...
...
@@ -371,8 +373,16 @@ func (b *Builder) ResourceTypeOrNameArgs(allowEmptySelector bool, args ...string
func
(
b
*
Builder
)
ReplaceAliases
(
input
string
)
string
{
replaced
:=
[]
string
{}
for
_
,
arg
:=
range
strings
.
Split
(
input
,
","
)
{
if
aliases
,
ok
:=
b
.
mapper
.
AliasesForResource
(
arg
);
ok
{
arg
=
strings
.
Join
(
aliases
,
","
)
if
resources
,
ok
:=
b
.
categoryExpander
.
Expand
(
arg
);
ok
{
asStrings
:=
[]
string
{}
for
_
,
resource
:=
range
resources
{
if
len
(
resource
.
Group
)
==
0
{
asStrings
=
append
(
asStrings
,
resource
.
Resource
)
continue
}
asStrings
=
append
(
asStrings
,
resource
.
Resource
+
"."
+
resource
.
Group
)
}
arg
=
strings
.
Join
(
asStrings
,
","
)
}
replaced
=
append
(
replaced
,
arg
)
}
...
...
pkg/kubectl/resource/builder_test.go
View file @
8895f314
This diff is collapsed.
Click to expand it.
pkg/kubectl/resource/categories.go
0 → 100644
View file @
8895f314
/*
Copyright 2017 The Kubernetes Authors.
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
resource
import
(
"errors"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/discovery"
)
type
CategoryExpander
interface
{
Expand
(
category
string
)
([]
schema
.
GroupResource
,
bool
)
}
type
SimpleCategoryExpander
struct
{
Expansions
map
[
string
][]
schema
.
GroupResource
}
func
(
e
SimpleCategoryExpander
)
Expand
(
category
string
)
([]
schema
.
GroupResource
,
bool
)
{
ret
,
ok
:=
e
.
Expansions
[
category
]
return
ret
,
ok
}
type
discoveryFilteredExpander
struct
{
delegate
CategoryExpander
discoveryClient
discovery
.
DiscoveryInterface
}
// NewDiscoveryFilteredExpander returns a category expander that filters the returned groupresources by
// what the server has available
func
NewDiscoveryFilteredExpander
(
delegate
CategoryExpander
,
client
discovery
.
DiscoveryInterface
)
(
discoveryFilteredExpander
,
error
)
{
if
client
==
nil
{
return
discoveryFilteredExpander
{},
errors
.
New
(
"Please provide discovery client to shortcut expander"
)
}
return
discoveryFilteredExpander
{
delegate
:
delegate
,
discoveryClient
:
client
},
nil
}
func
(
e
discoveryFilteredExpander
)
Expand
(
category
string
)
([]
schema
.
GroupResource
,
bool
)
{
delegateExpansion
,
ok
:=
e
.
delegate
.
Expand
(
category
)
// Check if we have access to server resources
apiResources
,
err
:=
e
.
discoveryClient
.
ServerResources
()
if
err
!=
nil
{
return
delegateExpansion
,
ok
}
availableResources
,
err
:=
discovery
.
GroupVersionResources
(
apiResources
)
if
err
!=
nil
{
return
delegateExpansion
,
ok
}
available
:=
[]
schema
.
GroupResource
{}
for
_
,
requestedResource
:=
range
delegateExpansion
{
for
availableResource
:=
range
availableResources
{
if
requestedResource
.
Group
==
availableResource
.
Group
&&
requestedResource
.
Resource
==
availableResource
.
Resource
{
available
=
append
(
available
,
requestedResource
)
break
}
}
}
return
available
,
ok
}
// legacyUserResources are the resource names that apply to the primary, user facing resources used by
// client tools. They are in deletion-first order - dependent resources should be last.
// Should remain exported in order to expose a current list of resources to downstream
// composition that wants to build on the concept of 'all' for their CLIs.
var
legacyUserResources
=
[]
schema
.
GroupResource
{
{
Group
:
""
,
Resource
:
"pods"
},
{
Group
:
""
,
Resource
:
"replicationcontrollers"
},
{
Group
:
""
,
Resource
:
"services"
},
{
Group
:
"apps"
,
Resource
:
"statefulsets"
},
{
Group
:
"autoscaling"
,
Resource
:
"horizontalpodautoscalers"
},
{
Group
:
"batch"
,
Resource
:
"jobs"
},
{
Group
:
"extensions"
,
Resource
:
"deployments"
},
{
Group
:
"extensions"
,
Resource
:
"replicasets"
},
}
// LegacyCategoryExpander is the old hardcoded expansion
var
LegacyCategoryExpander
CategoryExpander
=
SimpleCategoryExpander
{
Expansions
:
map
[
string
][]
schema
.
GroupResource
{
"all"
:
legacyUserResources
,
},
}
// LegacyFederationCategoryExpander is the old hardcoded expansion for federation
var
LegacyFederationCategoryExpander
CategoryExpander
=
SimpleCategoryExpander
{
Expansions
:
map
[
string
][]
schema
.
GroupResource
{
"all"
:
{{
Group
:
""
,
Resource
:
"services"
}},
},
}
pkg/kubectl/resource/categories_test.go
0 → 100644
View file @
8895f314
/*
Copyright 2017 The Kubernetes Authors.
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
resource
import
(
"reflect"
"testing"
"k8s.io/apimachinery/pkg/runtime/schema"
)
func
TestCategoryExpansion
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
name
string
arg
string
expected
[]
schema
.
GroupResource
expectedOk
bool
}{
{
name
:
"no-replacement"
,
arg
:
"service"
,
expected
:
nil
,
},
{
name
:
"all-replacement"
,
arg
:
"all"
,
expected
:
[]
schema
.
GroupResource
{
{
Resource
:
"pods"
},
{
Resource
:
"replicationcontrollers"
},
{
Resource
:
"services"
},
{
Resource
:
"statefulsets"
,
Group
:
"apps"
},
{
Resource
:
"horizontalpodautoscalers"
,
Group
:
"autoscaling"
},
{
Resource
:
"jobs"
,
Group
:
"batch"
},
{
Resource
:
"deployments"
,
Group
:
"extensions"
},
{
Resource
:
"replicasets"
,
Group
:
"extensions"
},
},
expectedOk
:
true
,
},
}
for
_
,
test
:=
range
tests
{
actual
,
actualOk
:=
LegacyCategoryExpander
.
Expand
(
test
.
arg
)
if
e
,
a
:=
test
.
expected
,
actual
;
!
reflect
.
DeepEqual
(
e
,
a
)
{
t
.
Errorf
(
"%s: expected %s, got %s"
,
test
.
name
,
e
,
a
)
}
if
e
,
a
:=
test
.
expectedOk
,
actualOk
;
e
!=
a
{
t
.
Errorf
(
"%s: expected %v, got %v"
,
test
.
name
,
e
,
a
)
}
}
}
pkg/registry/extensions/thirdpartyresourcedata/codec.go
View file @
8895f314
...
...
@@ -171,10 +171,6 @@ func (t *thirdPartyResourceDataMapper) RESTMappings(gk schema.GroupKind, version
return
mappings
,
nil
}
func
(
t
*
thirdPartyResourceDataMapper
)
AliasesForResource
(
resource
string
)
([]
string
,
bool
)
{
return
t
.
mapper
.
AliasesForResource
(
resource
)
}
func
(
t
*
thirdPartyResourceDataMapper
)
ResourceSingularizer
(
resource
string
)
(
singular
string
,
err
error
)
{
return
t
.
mapper
.
ResourceSingularizer
(
resource
)
}
...
...
staging/src/k8s.io/apimachinery/pkg/api/meta/interfaces.go
View file @
8895f314
...
...
@@ -142,6 +142,5 @@ type RESTMapper interface {
// the provided version(s).
RESTMappings
(
gk
schema
.
GroupKind
,
versions
...
string
)
([]
*
RESTMapping
,
error
)
AliasesForResource
(
resource
string
)
([]
string
,
bool
)
ResourceSingularizer
(
resource
string
)
(
singular
string
,
err
error
)
}
staging/src/k8s.io/apimachinery/pkg/api/meta/multirestmapper.go
View file @
8895f314
...
...
@@ -22,7 +22,6 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
utilerrors
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/apimachinery/pkg/util/sets"
)
// MultiRESTMapper is a wrapper for multiple RESTMappers.
...
...
@@ -209,23 +208,3 @@ func (m MultiRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) (
}
return
allMappings
,
nil
}
// AliasesForResource finds the first alias response for the provided mappers.
func
(
m
MultiRESTMapper
)
AliasesForResource
(
alias
string
)
([]
string
,
bool
)
{
seenAliases
:=
sets
.
NewString
()
allAliases
:=
[]
string
{}
handled
:=
false
for
_
,
t
:=
range
m
{
if
currAliases
,
currOk
:=
t
.
AliasesForResource
(
alias
);
currOk
{
for
_
,
currAlias
:=
range
currAliases
{
if
!
seenAliases
.
Has
(
currAlias
)
{
allAliases
=
append
(
allAliases
,
currAlias
)
seenAliases
.
Insert
(
currAlias
)
}
}
handled
=
true
}
}
return
allAliases
,
handled
}
staging/src/k8s.io/apimachinery/pkg/api/meta/multirestmapper_test.go
View file @
8895f314
...
...
@@ -350,10 +350,6 @@ func (m fixedRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) (
return
m
.
mappings
,
m
.
err
}
func
(
m
fixedRESTMapper
)
AliasesForResource
(
alias
string
)
(
aliases
[]
string
,
ok
bool
)
{
return
nil
,
false
}
func
(
m
fixedRESTMapper
)
ResourceIsValid
(
resource
schema
.
GroupVersionResource
)
bool
{
return
false
}
staging/src/k8s.io/apimachinery/pkg/api/meta/priority.go
View file @
8895f314
...
...
@@ -209,10 +209,6 @@ func (m PriorityRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string
return
m
.
Delegate
.
RESTMappings
(
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
)
}
...
...
staging/src/k8s.io/apimachinery/pkg/api/meta/restmapper.go
View file @
8895f314
...
...
@@ -79,9 +79,6 @@ type DefaultRESTMapper struct {
pluralToSingular
map
[
schema
.
GroupVersionResource
]
schema
.
GroupVersionResource
interfacesFunc
VersionInterfacesFunc
// aliasToResource is used for mapping aliases to resources
aliasToResource
map
[
string
][]
string
}
func
(
m
*
DefaultRESTMapper
)
String
()
string
{
...
...
@@ -105,7 +102,6 @@ func NewDefaultRESTMapper(defaultGroupVersions []schema.GroupVersion, f VersionI
kindToScope
:=
make
(
map
[
schema
.
GroupVersionKind
]
RESTScope
)
singularToPlural
:=
make
(
map
[
schema
.
GroupVersionResource
]
schema
.
GroupVersionResource
)
pluralToSingular
:=
make
(
map
[
schema
.
GroupVersionResource
]
schema
.
GroupVersionResource
)
aliasToResource
:=
make
(
map
[
string
][]
string
)
// TODO: verify name mappings work correctly when versions differ
return
&
DefaultRESTMapper
{
...
...
@@ -115,7 +111,6 @@ func NewDefaultRESTMapper(defaultGroupVersions []schema.GroupVersion, f VersionI
defaultGroupVersions
:
defaultGroupVersions
,
singularToPlural
:
singularToPlural
,
pluralToSingular
:
pluralToSingular
,
aliasToResource
:
aliasToResource
,
interfacesFunc
:
f
,
}
}
...
...
@@ -548,19 +543,3 @@ func (m *DefaultRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string
}
return
mappings
,
nil
}
// AddResourceAlias maps aliases to resources
func
(
m
*
DefaultRESTMapper
)
AddResourceAlias
(
alias
string
,
resources
...
string
)
{
if
len
(
resources
)
==
0
{
return
}
m
.
aliasToResource
[
alias
]
=
resources
}
// AliasesForResource returns whether a resource has an alias or not
func
(
m
*
DefaultRESTMapper
)
AliasesForResource
(
alias
string
)
([]
string
,
bool
)
{
if
res
,
ok
:=
m
.
aliasToResource
[
alias
];
ok
{
return
res
,
true
}
return
nil
,
false
}
staging/src/k8s.io/client-go/discovery/restmapper.go
View file @
8895f314
...
...
@@ -279,20 +279,6 @@ func (d *DeferredDiscoveryRESTMapper) RESTMappings(gk schema.GroupKind, versions
return
}
// AliasesForResource returns whether a resource has an alias or not.
func
(
d
*
DeferredDiscoveryRESTMapper
)
AliasesForResource
(
resource
string
)
(
as
[]
string
,
ok
bool
)
{
del
,
err
:=
d
.
getDelegate
()
if
err
!=
nil
{
return
nil
,
false
}
as
,
ok
=
del
.
AliasesForResource
(
resource
)
if
len
(
as
)
==
0
&&
!
d
.
cl
.
Fresh
()
{
d
.
Reset
()
as
,
ok
=
d
.
AliasesForResource
(
resource
)
}
return
}
// ResourceSingularizer converts a resource name from plural to
// singular (e.g., from pods to pod).
func
(
d
*
DeferredDiscoveryRESTMapper
)
ResourceSingularizer
(
resource
string
)
(
singular
string
,
err
error
)
{
...
...
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