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
1cb797e3
Commit
1cb797e3
authored
Apr 30, 2018
by
David Eads
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
acknowledge that creation of a restmapper can fail and that we cannot have a default
parent
ef0d1ab8
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
130 additions
and
85 deletions
+130
-85
apply_set_last_applied.go
pkg/kubectl/cmd/apply_set_last_applied.go
+0
-2
cani.go
pkg/kubectl/cmd/auth/cani.go
+4
-1
autoscale.go
pkg/kubectl/cmd/autoscale.go
+6
-2
create.go
pkg/kubectl/cmd/create/create.go
+4
-1
create_clusterrole_test.go
pkg/kubectl/cmd/create/create_clusterrole_test.go
+6
-2
create_role.go
pkg/kubectl/cmd/create/create_role.go
+4
-1
create_role_test.go
pkg/kubectl/cmd/create/create_role_test.go
+6
-2
drain.go
pkg/kubectl/cmd/drain.go
+0
-2
drain_test.go
pkg/kubectl/cmd/drain_test.go
+0
-1
explain.go
pkg/kubectl/cmd/explain.go
+6
-2
expose.go
pkg/kubectl/cmd/expose.go
+4
-1
rollout_pause.go
pkg/kubectl/cmd/rollout/rollout_pause.go
+0
-4
rollout_resume.go
pkg/kubectl/cmd/rollout/rollout_resume.go
+0
-4
rollout_undo.go
pkg/kubectl/cmd/rollout/rollout_undo.go
+0
-3
run.go
pkg/kubectl/cmd/run.go
+4
-1
set_selector.go
pkg/kubectl/cmd/set/set_selector.go
+0
-4
fake.go
pkg/kubectl/cmd/testing/fake.go
+4
-4
factory.go
pkg/kubectl/cmd/util/factory.go
+1
-1
factory_builder.go
pkg/kubectl/cmd/util/factory_builder.go
+7
-3
factory_object_mapping.go
pkg/kubectl/cmd/util/factory_object_mapping.go
+3
-10
factory_test.go
pkg/kubectl/cmd/util/factory_test.go
+1
-0
builder.go
pkg/kubectl/resource/builder.go
+18
-0
interfaces.go
pkg/kubectl/resource/interfaces.go
+2
-0
mapper.go
pkg/kubectl/resource/mapper.go
+41
-31
print_test.go
test/integration/apiserver/print_test.go
+5
-2
etcd_storage_path_test.go
test/integration/etcd/etcd_storage_path_test.go
+4
-1
No files found.
pkg/kubectl/cmd/apply_set_last_applied.go
View file @
1cb797e3
...
...
@@ -46,7 +46,6 @@ type SetLastAppliedOptions struct {
FilenameOptions
resource
.
FilenameOptions
infoList
[]
*
resource
.
Info
mapper
meta
.
RESTMapper
namespace
string
enforceNamespace
bool
dryRun
bool
...
...
@@ -117,7 +116,6 @@ func (o *SetLastAppliedOptions) Complete(f cmdutil.Factory, cmd *cobra.Command)
o
.
output
=
cmdutil
.
GetFlagString
(
cmd
,
"output"
)
o
.
shortOutput
=
o
.
output
==
"name"
o
.
mapper
=
f
.
RESTMapper
()
var
err
error
o
.
namespace
,
o
.
enforceNamespace
,
err
=
f
.
DefaultNamespace
()
if
err
!=
nil
{
...
...
pkg/kubectl/cmd/auth/cani.go
View file @
1cb797e3
...
...
@@ -127,7 +127,10 @@ func (o *CanIOptions) Complete(f cmdutil.Factory, args []string) error {
break
}
resourceTokens
:=
strings
.
SplitN
(
args
[
1
],
"/"
,
2
)
restMapper
:=
f
.
RESTMapper
()
restMapper
,
err
:=
f
.
RESTMapper
()
if
err
!=
nil
{
return
err
}
o
.
Resource
=
o
.
resourceFor
(
restMapper
,
resourceTokens
[
0
])
if
len
(
resourceTokens
)
>
1
{
o
.
ResourceName
=
resourceTokens
[
1
]
...
...
pkg/kubectl/cmd/autoscale.go
View file @
1cb797e3
...
...
@@ -127,16 +127,20 @@ func NewCmdAutoscale(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *
}
func
(
o
*
AutoscaleOptions
)
Complete
(
f
cmdutil
.
Factory
,
cmd
*
cobra
.
Command
,
args
[]
string
)
error
{
var
err
error
o
.
dryRun
=
cmdutil
.
GetFlagBool
(
cmd
,
"dry-run"
)
o
.
createAnnotation
=
cmdutil
.
GetFlagBool
(
cmd
,
cmdutil
.
ApplyAnnotationsFlag
)
o
.
builder
=
f
.
NewBuilder
()
o
.
canBeAutoscaled
=
f
.
CanBeAutoscaled
o
.
mapper
=
f
.
RESTMapper
()
o
.
mapper
,
err
=
f
.
RESTMapper
()
if
err
!=
nil
{
return
err
}
o
.
clientForMapping
=
f
.
ClientForMapping
o
.
args
=
args
o
.
RecordFlags
.
Complete
(
f
.
Command
(
cmd
,
false
))
var
err
error
o
.
Recorder
,
err
=
o
.
RecordFlags
.
ToRecorder
()
if
err
!=
nil
{
return
err
...
...
pkg/kubectl/cmd/create/create.go
View file @
1cb797e3
...
...
@@ -389,7 +389,10 @@ func RunCreateSubcommand(f cmdutil.Factory, options *CreateSubcommandOptions) er
if
err
!=
nil
{
return
err
}
mapper
:=
f
.
RESTMapper
()
mapper
,
err
:=
f
.
RESTMapper
()
if
err
!=
nil
{
return
err
}
if
!
options
.
DryRun
{
// create subcommands have compiled knowledge of things they create, so type them directly
gvks
,
_
,
err
:=
legacyscheme
.
Scheme
.
ObjectKinds
(
obj
)
...
...
pkg/kubectl/cmd/create/create_clusterrole_test.go
View file @
1cb797e3
...
...
@@ -437,8 +437,12 @@ func TestClusterRoleValidate(t *testing.T) {
for
name
,
test
:=
range
tests
{
t
.
Run
(
name
,
func
(
t
*
testing
.
T
)
{
test
.
clusterRoleOptions
.
Mapper
=
tf
.
RESTMapper
()
err
:=
test
.
clusterRoleOptions
.
Validate
()
var
err
error
test
.
clusterRoleOptions
.
Mapper
,
err
=
tf
.
RESTMapper
()
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
err
=
test
.
clusterRoleOptions
.
Validate
()
if
test
.
expectErr
&&
err
==
nil
{
t
.
Errorf
(
"%s: expect error happens, but validate passes."
,
name
)
}
...
...
pkg/kubectl/cmd/create/create_role.go
View file @
1cb797e3
...
...
@@ -205,7 +205,10 @@ func (o *CreateRoleOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args
o
.
ResourceNames
=
resourceNames
// Complete other options for Run.
o
.
Mapper
=
f
.
RESTMapper
()
o
.
Mapper
,
err
=
f
.
RESTMapper
()
if
err
!=
nil
{
return
err
}
o
.
DryRun
=
cmdutil
.
GetDryRunFlag
(
cmd
)
o
.
OutputFormat
=
cmdutil
.
GetFlagString
(
cmd
,
"output"
)
...
...
pkg/kubectl/cmd/create/create_role_test.go
View file @
1cb797e3
...
...
@@ -339,8 +339,12 @@ func TestValidate(t *testing.T) {
}
for
name
,
test
:=
range
tests
{
test
.
roleOptions
.
Mapper
=
tf
.
RESTMapper
()
err
:=
test
.
roleOptions
.
Validate
()
var
err
error
test
.
roleOptions
.
Mapper
,
err
=
tf
.
RESTMapper
()
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
err
=
test
.
roleOptions
.
Validate
()
if
test
.
expectErr
&&
err
==
nil
{
t
.
Errorf
(
"%s: expect error happens but validate passes."
,
name
)
}
...
...
pkg/kubectl/cmd/drain.go
View file @
1cb797e3
...
...
@@ -29,7 +29,6 @@ import (
corev1
"k8s.io/api/core/v1"
policyv1beta1
"k8s.io/api/policy/v1beta1"
apierrors
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/labels"
...
...
@@ -68,7 +67,6 @@ type DrainOptions struct {
DeleteLocalData
bool
Selector
string
PodSelector
string
mapper
meta
.
RESTMapper
nodeInfos
[]
*
resource
.
Info
typer
runtime
.
ObjectTyper
...
...
pkg/kubectl/cmd/drain_test.go
View file @
1cb797e3
...
...
@@ -836,7 +836,6 @@ func TestDeletePods(t *testing.T) {
o
:=
DrainOptions
{
PrintFlags
:
printers
.
NewPrintFlags
(
"drained"
),
}
o
.
mapper
=
tf
.
RESTMapper
()
o
.
Out
=
os
.
Stdout
o
.
ToPrinter
=
func
(
operation
string
)
(
printers
.
ResourcePrinterFunc
,
error
)
{
...
...
pkg/kubectl/cmd/explain.go
View file @
1cb797e3
...
...
@@ -91,12 +91,16 @@ func NewCmdExplain(parent string, f cmdutil.Factory, streams genericclioptions.I
}
func
(
o
*
ExplainOptions
)
Complete
(
f
cmdutil
.
Factory
,
cmd
*
cobra
.
Command
)
error
{
var
err
error
o
.
Recursive
=
cmdutil
.
GetFlagBool
(
cmd
,
"recursive"
)
o
.
ApiVersion
=
cmdutil
.
GetFlagString
(
cmd
,
"api-version"
)
o
.
Mapper
=
f
.
RESTMapper
()
o
.
Mapper
,
err
=
f
.
RESTMapper
()
if
err
!=
nil
{
return
err
}
var
err
error
o
.
Schema
,
err
=
f
.
OpenAPISchema
()
if
err
!=
nil
{
return
err
...
...
pkg/kubectl/cmd/expose.go
View file @
1cb797e3
...
...
@@ -187,7 +187,10 @@ func (o *ExposeServiceOptions) Complete(f cmdutil.Factory, cmd *cobra.Command) e
o
.
MapBasedSelectorForObject
=
f
.
MapBasedSelectorForObject
o
.
PortsForObject
=
f
.
PortsForObject
o
.
ProtocolsForObject
=
f
.
ProtocolsForObject
o
.
Mapper
=
f
.
RESTMapper
()
o
.
Mapper
,
err
=
f
.
RESTMapper
()
if
err
!=
nil
{
return
err
}
o
.
LabelsForObject
=
f
.
LabelsForObject
o
.
Namespace
,
o
.
EnforceNamespace
,
err
=
f
.
DefaultNamespace
()
...
...
pkg/kubectl/cmd/rollout/rollout_pause.go
View file @
1cb797e3
...
...
@@ -21,7 +21,6 @@ import (
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/types"
utilerrors
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/kubernetes/pkg/api/legacyscheme"
...
...
@@ -43,7 +42,6 @@ type PauseConfig struct {
ToPrinter
func
(
string
)
(
printers
.
ResourcePrinterFunc
,
error
)
Pauser
func
(
info
*
resource
.
Info
)
([]
byte
,
error
)
Mapper
meta
.
RESTMapper
Infos
[]
*
resource
.
Info
genericclioptions
.
IOStreams
...
...
@@ -105,8 +103,6 @@ func (o *PauseConfig) CompletePause(f cmdutil.Factory, cmd *cobra.Command, args
return
cmdutil
.
UsageErrorf
(
cmd
,
"%s"
,
cmd
.
Use
)
}
o
.
Mapper
=
f
.
RESTMapper
()
o
.
Pauser
=
f
.
Pauser
cmdNamespace
,
enforceNamespace
,
err
:=
f
.
DefaultNamespace
()
...
...
pkg/kubectl/cmd/rollout/rollout_resume.go
View file @
1cb797e3
...
...
@@ -21,7 +21,6 @@ import (
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/types"
utilerrors
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/kubernetes/pkg/api/legacyscheme"
...
...
@@ -43,7 +42,6 @@ type ResumeConfig struct {
ToPrinter
func
(
string
)
(
printers
.
ResourcePrinterFunc
,
error
)
Resumer
func
(
object
*
resource
.
Info
)
([]
byte
,
error
)
Mapper
meta
.
RESTMapper
Infos
[]
*
resource
.
Info
genericclioptions
.
IOStreams
...
...
@@ -103,8 +101,6 @@ func (o *ResumeConfig) CompleteResume(f cmdutil.Factory, cmd *cobra.Command, arg
return
cmdutil
.
UsageErrorf
(
cmd
,
"%s"
,
cmd
.
Use
)
}
o
.
Mapper
=
f
.
RESTMapper
()
o
.
Resumer
=
f
.
Resumer
cmdNamespace
,
enforceNamespace
,
err
:=
f
.
DefaultNamespace
()
...
...
pkg/kubectl/cmd/rollout/rollout_undo.go
View file @
1cb797e3
...
...
@@ -19,7 +19,6 @@ package rollout
import
(
"io"
"k8s.io/apimachinery/pkg/api/meta"
utilerrors
"k8s.io/apimachinery/pkg/util/errors"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/kubectl"
...
...
@@ -41,7 +40,6 @@ type UndoOptions struct {
ToPrinter
func
(
string
)
(
printers
.
ResourcePrinterFunc
,
error
)
Rollbackers
[]
kubectl
.
Rollbacker
Mapper
meta
.
RESTMapper
Infos
[]
*
resource
.
Info
ToRevision
int64
DryRun
bool
...
...
@@ -107,7 +105,6 @@ func (o *UndoOptions) CompleteUndo(f cmdutil.Factory, cmd *cobra.Command, out io
}
o
.
ToRevision
=
cmdutil
.
GetFlagInt64
(
cmd
,
"to-revision"
)
o
.
Mapper
=
f
.
RESTMapper
()
o
.
Out
=
out
o
.
DryRun
=
cmdutil
.
GetDryRunFlag
(
cmd
)
...
...
pkg/kubectl/cmd/run.go
View file @
1cb797e3
...
...
@@ -643,7 +643,10 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command
return
nil
,
err
}
mapper
:=
f
.
RESTMapper
()
mapper
,
err
:=
f
.
RESTMapper
()
if
err
!=
nil
{
return
nil
,
err
}
// run has compiled knowledge of the thing is is creating
groupVersionKinds
,
_
,
err
:=
legacyscheme
.
Scheme
.
ObjectKinds
(
obj
)
if
err
!=
nil
{
...
...
pkg/kubectl/cmd/set/set_selector.go
View file @
1cb797e3
...
...
@@ -59,7 +59,6 @@ type SetSelectorOptions struct {
Recorder
genericclioptions
.
Recorder
builder
*
resource
.
Builder
mapper
meta
.
RESTMapper
genericclioptions
.
IOStreams
}
...
...
@@ -140,9 +139,6 @@ func (o *SetSelectorOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
return
err
}
mapper
:=
f
.
RESTMapper
()
o
.
mapper
=
mapper
o
.
resources
,
o
.
selector
,
err
=
getResourcesAndSelector
(
args
)
if
err
!=
nil
{
return
err
...
...
pkg/kubectl/cmd/testing/fake.go
View file @
1cb797e3
...
...
@@ -338,7 +338,7 @@ func (f *TestFactory) Command(*cobra.Command, bool) string {
}
func
(
f
*
TestFactory
)
NewBuilder
()
*
resource
.
Builder
{
mapper
:=
f
.
RESTMapper
()
mapper
,
err
:=
f
.
RESTMapper
()
return
resource
.
NewBuilder
(
&
resource
.
Mapper
{
...
...
@@ -352,7 +352,7 @@ func (f *TestFactory) NewBuilder() *resource.Builder {
Decoder
:
unstructured
.
UnstructuredJSONScheme
,
},
f
.
CategoryExpander
(),
)
)
.
AddError
(
err
)
}
func
(
f
*
TestFactory
)
KubernetesClientSet
()
(
*
kubernetes
.
Clientset
,
error
)
{
...
...
@@ -426,7 +426,7 @@ func (f *TestFactory) ClientSetForVersion(requiredVersion *schema.GroupVersion)
return
f
.
ClientSet
()
}
func
(
f
*
TestFactory
)
RESTMapper
()
meta
.
RESTMapper
{
func
(
f
*
TestFactory
)
RESTMapper
()
(
meta
.
RESTMapper
,
error
)
{
groupResources
:=
testDynamicResources
()
mapper
:=
discovery
.
NewRESTMapper
(
groupResources
)
// for backwards compatibility with existing tests, allow rest mappings from the scheme to show up
...
...
@@ -441,7 +441,7 @@ func (f *TestFactory) RESTMapper() meta.RESTMapper {
// TODO: should probably be the external scheme
fakeDs
:=
&
fakeCachedDiscoveryClient
{}
expander
:=
cmdutil
.
NewShortcutExpander
(
mapper
,
fakeDs
)
return
expander
return
expander
,
nil
}
func
(
f
*
TestFactory
)
LogsForObject
(
object
,
options
runtime
.
Object
,
timeout
time
.
Duration
)
(
*
restclient
.
Request
,
error
)
{
...
...
pkg/kubectl/cmd/util/factory.go
View file @
1cb797e3
...
...
@@ -164,7 +164,7 @@ type ClientAccessFactory interface {
// Generally they provide object typing and functions that build requests based on the negotiated clients.
type
ObjectMappingFactory
interface
{
// Returns interfaces for dealing with arbitrary runtime.Objects.
RESTMapper
()
meta
.
RESTMapper
RESTMapper
()
(
meta
.
RESTMapper
,
error
)
// Returns interface for expanding categories like `all`.
CategoryExpander
()
categories
.
CategoryExpander
// Returns a RESTClient for working with the specified RESTMapping or an error. This is intended
...
...
pkg/kubectl/cmd/util/factory_builder.go
View file @
1cb797e3
...
...
@@ -47,7 +47,7 @@ func NewBuilderFactory(clientAccessFactory ClientAccessFactory, objectMappingFac
// NewBuilder returns a new resource builder for structured api objects.
func
(
f
*
ring2Factory
)
NewBuilder
()
*
resource
.
Builder
{
clientMapperFunc
:=
resource
.
ClientMapperFunc
(
f
.
objectMappingFactory
.
ClientForMapping
)
mapper
:=
f
.
objectMappingFactory
.
RESTMapper
()
mapper
,
mapperErr
:=
f
.
objectMappingFactory
.
RESTMapper
()
unstructuredClientMapperFunc
:=
resource
.
ClientMapperFunc
(
f
.
objectMappingFactory
.
UnstructuredClientForMapping
)
...
...
@@ -65,7 +65,7 @@ func (f *ring2Factory) NewBuilder() *resource.Builder {
Decoder
:
unstructured
.
UnstructuredJSONScheme
,
},
categoryExpander
,
)
)
.
AddError
(
mapperErr
)
}
// PluginLoader loads plugins from a path set by the KUBECTL_PLUGINS_PATH env var.
...
...
@@ -97,7 +97,11 @@ func (f *ring2Factory) ScaleClient() (scaleclient.ScalesGetter, error) {
return
nil
,
err
}
resolver
:=
scaleclient
.
NewDiscoveryScaleKindResolver
(
discoClient
)
mapper
:=
f
.
objectMappingFactory
.
RESTMapper
()
mapper
,
err
:=
f
.
objectMappingFactory
.
RESTMapper
()
if
err
!=
nil
{
return
nil
,
err
}
return
scaleclient
.
New
(
restClient
,
mapper
,
dynamic
.
LegacyAPIPathResolverFunc
,
resolver
),
nil
}
...
...
pkg/kubectl/cmd/util/factory_object_mapping.go
View file @
1cb797e3
...
...
@@ -69,11 +69,8 @@ func NewObjectMappingFactory(clientAccessFactory ClientAccessFactory) ObjectMapp
return
f
}
// objectLoader attempts to perform discovery against the server, and will fall back to
// the built in mapper if necessary. It supports unstructured objects either way, since
// the underlying Scheme supports Unstructured. The mapper will return converters that can
// convert versioned types to unstructured and back.
func
(
f
*
ring1Factory
)
restMapper
()
(
meta
.
RESTMapper
,
error
)
{
// RESTMapper returns a mapper.
func
(
f
*
ring1Factory
)
RESTMapper
()
(
meta
.
RESTMapper
,
error
)
{
discoveryClient
,
err
:=
f
.
clientAccessFactory
.
DiscoveryClient
()
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -83,11 +80,7 @@ func (f *ring1Factory) restMapper() (meta.RESTMapper, error) {
mapper
:=
discovery
.
NewDeferredDiscoveryRESTMapper
(
discoveryClient
)
// TODO: should this also indicate it recognizes typed objects?
expander
:=
NewShortcutExpander
(
mapper
,
discoveryClient
)
return
expander
,
err
}
func
(
f
*
ring1Factory
)
RESTMapper
()
meta
.
RESTMapper
{
return
meta
.
NewLazyRESTMapperLoader
(
f
.
restMapper
)
return
expander
,
nil
}
func
(
f
*
ring1Factory
)
CategoryExpander
()
categories
.
CategoryExpander
{
...
...
pkg/kubectl/cmd/util/factory_test.go
View file @
1cb797e3
...
...
@@ -35,6 +35,7 @@ import (
"k8s.io/apimachinery/pkg/watch"
manualfake
"k8s.io/client-go/rest/fake"
testcore
"k8s.io/client-go/testing"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/testapi"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
...
...
pkg/kubectl/resource/builder.go
View file @
1cb797e3
...
...
@@ -56,6 +56,9 @@ type Builder struct {
// it does not ever need to rely upon discovery.
objectTyper
runtime
.
ObjectTyper
// local indicates that we cannot make server calls
local
bool
errs
[]
error
paths
[]
Visitor
...
...
@@ -142,6 +145,14 @@ func (b *Builder) Schema(schema validation.Schema) *Builder {
return
b
}
func
(
b
*
Builder
)
AddError
(
err
error
)
*
Builder
{
if
err
==
nil
{
return
b
}
b
.
errs
=
append
(
b
.
errs
,
err
)
return
b
}
// FilenameParam groups input in two categories: URLs and files (files, directories, STDIN)
// If enforceNamespace is false, namespaces in the specs will be allowed to
// override the default namespace. If it is true, namespaces that don't match
...
...
@@ -192,6 +203,7 @@ func (b *Builder) Unstructured() *Builder {
return
b
}
b
.
mapper
=
b
.
unstructured
b
.
mapper
.
localFn
=
b
.
isLocal
b
.
objectTyper
=
unstructuredscheme
.
NewUnstructuredObjectTyper
()
return
b
...
...
@@ -212,6 +224,7 @@ func (b *Builder) Internal(typer runtime.ObjectTyper) *Builder {
return
b
}
b
.
mapper
=
b
.
internal
b
.
mapper
.
localFn
=
b
.
isLocal
b
.
objectTyper
=
typer
return
b
...
...
@@ -227,12 +240,17 @@ func (b *Builder) LocalParam(local bool) *Builder {
// Local will avoid asking the server for results.
func
(
b
*
Builder
)
Local
()
*
Builder
{
b
.
local
=
true
mapper
:=
*
b
.
mapper
mapper
.
ClientMapper
=
DisabledClientForMapping
{
ClientMapper
:
mapper
.
ClientMapper
}
b
.
mapper
=
&
mapper
return
b
}
func
(
b
*
Builder
)
isLocal
()
bool
{
return
b
.
local
}
// Mapper returns a copy of the current mapper.
func
(
b
*
Builder
)
Mapper
()
*
Mapper
{
mapper
:=
*
b
.
mapper
...
...
pkg/kubectl/resource/interfaces.go
View file @
1cb797e3
...
...
@@ -22,6 +22,8 @@ import (
client
"k8s.io/client-go/rest"
)
type
RESTMapperFunc
func
()
(
meta
.
RESTMapper
,
error
)
// RESTClient is a client helper for dealing with RESTful resources
// in a generic way.
type
RESTClient
interface
{
...
...
pkg/kubectl/resource/mapper.go
View file @
1cb797e3
...
...
@@ -28,6 +28,9 @@ import (
// Mapper is a convenience struct for holding references to the interfaces
// needed to create Info for arbitrary objects.
type
Mapper
struct
{
// localFn indicates the call can't make server requests
localFn
func
()
bool
RESTMapper
meta
.
RESTMapper
ClientMapper
ClientMapper
Decoder
runtime
.
Decoder
...
...
@@ -42,31 +45,34 @@ func (m *Mapper) InfoForData(data []byte, source string) (*Info, error) {
return
nil
,
fmt
.
Errorf
(
"unable to decode %q: %v"
,
source
,
err
)
}
mapping
,
err
:=
m
.
RESTMapper
.
RESTMapping
(
gvk
.
GroupKind
(),
gvk
.
Version
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to recognize %q: %v"
,
source
,
err
)
}
client
,
err
:=
m
.
ClientMapper
.
ClientForMapping
(
mapping
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to connect to a server to handle %q: %v"
,
mapping
.
Resource
,
err
)
}
name
,
_
:=
metadataAccessor
.
Name
(
obj
)
namespace
,
_
:=
metadataAccessor
.
Namespace
(
obj
)
resourceVersion
,
_
:=
metadataAccessor
.
ResourceVersion
(
obj
)
return
&
Info
{
Client
:
client
,
Mapping
:
mapping
,
ret
:=
&
Info
{
Source
:
source
,
Namespace
:
namespace
,
Name
:
name
,
ResourceVersion
:
resourceVersion
,
Object
:
obj
,
},
nil
}
if
m
.
localFn
==
nil
||
!
m
.
localFn
()
{
mapping
,
err
:=
m
.
RESTMapper
.
RESTMapping
(
gvk
.
GroupKind
(),
gvk
.
Version
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to recognize %q: %v"
,
source
,
err
)
}
ret
.
Mapping
=
mapping
client
,
err
:=
m
.
ClientMapper
.
ClientForMapping
(
mapping
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to connect to a server to handle %q: %v"
,
mapping
.
Resource
,
err
)
}
ret
.
Client
=
client
}
return
ret
,
nil
}
// InfoForObject creates an Info object for the given Object. An error is returned
...
...
@@ -78,33 +84,37 @@ func (m *Mapper) InfoForObject(obj runtime.Object, typer runtime.ObjectTyper, pr
return
nil
,
fmt
.
Errorf
(
"unable to get type info from the object %q: %v"
,
reflect
.
TypeOf
(
obj
),
err
)
}
g
roupVersionKind
:=
groupVersionKinds
[
0
]
g
vk
:=
groupVersionKinds
[
0
]
if
len
(
groupVersionKinds
)
>
1
&&
len
(
preferredGVKs
)
>
0
{
groupVersionKind
=
preferredObjectKind
(
groupVersionKinds
,
preferredGVKs
)
}
mapping
,
err
:=
m
.
RESTMapper
.
RESTMapping
(
groupVersionKind
.
GroupKind
(),
groupVersionKind
.
Version
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to recognize %v: %v"
,
groupVersionKind
,
err
)
gvk
=
preferredObjectKind
(
groupVersionKinds
,
preferredGVKs
)
}
client
,
err
:=
m
.
ClientMapper
.
ClientForMapping
(
mapping
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to connect to a server to handle %q: %v"
,
mapping
.
Resource
,
err
)
}
name
,
_
:=
metadataAccessor
.
Name
(
obj
)
namespace
,
_
:=
metadataAccessor
.
Namespace
(
obj
)
resourceVersion
,
_
:=
metadataAccessor
.
ResourceVersion
(
obj
)
return
&
Info
{
Client
:
client
,
Mapping
:
mapping
,
ret
:=
&
Info
{
Namespace
:
namespace
,
Name
:
name
,
ResourceVersion
:
resourceVersion
,
Object
:
obj
,
},
nil
}
if
m
.
localFn
==
nil
||
!
m
.
localFn
()
{
mapping
,
err
:=
m
.
RESTMapper
.
RESTMapping
(
gvk
.
GroupKind
(),
gvk
.
Version
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to recognize %v"
,
err
)
}
ret
.
Mapping
=
mapping
client
,
err
:=
m
.
ClientMapper
.
ClientForMapping
(
mapping
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"unable to connect to a server to handle %q: %v"
,
mapping
.
Resource
,
err
)
}
ret
.
Client
=
client
}
return
ret
,
nil
}
// preferredObjectKind picks the possibility that most closely matches the priority list in this order:
...
...
test/integration/apiserver/print_test.go
View file @
1cb797e3
...
...
@@ -147,8 +147,11 @@ func TestServerSidePrint(t *testing.T) {
printer
:=
newFakePrinter
(
printersinternal
.
AddHandlers
)
factory
:=
util
.
NewFactory
(
clientcmd
.
NewDefaultClientConfig
(
*
createKubeConfig
(
s
.
URL
),
&
clientcmd
.
ConfigOverrides
{}))
mapper
:=
factory
.
RESTMapper
()
mapper
,
err
:=
factory
.
RESTMapper
()
if
err
!=
nil
{
t
.
Errorf
(
"unexpected error getting mapper: %v"
,
err
)
return
}
for
gvk
,
apiType
:=
range
legacyscheme
.
Scheme
.
AllKnownTypes
()
{
// we do not care about internal objects or lists // TODO make sure this is always true
if
gvk
.
Version
==
runtime
.
APIVersionInternal
||
strings
.
HasSuffix
(
apiType
.
Name
(),
"List"
)
{
...
...
test/integration/etcd/etcd_storage_path_test.go
View file @
1cb797e3
...
...
@@ -811,7 +811,10 @@ func startRealMasterOrDie(t *testing.T, certDir string) (*allClient, clientv3.KV
t
.
Fatal
(
err
)
}
mapper
:=
util
.
NewFactory
(
clientcmd
.
NewDefaultClientConfig
(
*
clientcmdapi
.
NewConfig
(),
&
clientcmd
.
ConfigOverrides
{}))
.
RESTMapper
()
mapper
,
err
:=
util
.
NewFactory
(
clientcmd
.
NewDefaultClientConfig
(
*
clientcmdapi
.
NewConfig
(),
&
clientcmd
.
ConfigOverrides
{}))
.
RESTMapper
()
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
return
client
,
kvClient
,
mapper
}
...
...
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