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
8a1eae45
Commit
8a1eae45
authored
Aug 03, 2018
by
David Eads
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
stop adding internal types to external schemes
parent
8b20ee1d
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
149 additions
and
277 deletions
+149
-277
BUILD
pkg/kubectl/cmd/BUILD
+0
-1
apply_test.go
pkg/kubectl/cmd/apply_test.go
+13
-14
attach.go
pkg/kubectl/cmd/attach.go
+10
-10
cmd_printing_test.go
pkg/kubectl/cmd/cmd_printing_test.go
+3
-3
cmd_test.go
pkg/kubectl/cmd/cmd_test.go
+19
-113
delete_test.go
pkg/kubectl/cmd/delete_test.go
+6
-6
exec_test.go
pkg/kubectl/cmd/exec_test.go
+10
-10
expose_test.go
pkg/kubectl/cmd/expose_test.go
+0
-7
BUILD
pkg/kubectl/cmd/get/BUILD
+0
-2
get_test.go
pkg/kubectl/cmd/get/get_test.go
+0
-9
portforward_test.go
pkg/kubectl/cmd/portforward_test.go
+49
-51
replace_test.go
pkg/kubectl/cmd/replace_test.go
+5
-5
run_test.go
pkg/kubectl/cmd/run_test.go
+0
-6
taint.go
pkg/kubectl/cmd/taint.go
+2
-7
taint_test.go
pkg/kubectl/cmd/taint_test.go
+31
-28
fake.go
staging/src/k8s.io/client-go/rest/fake/fake.go
+1
-5
No files found.
pkg/kubectl/cmd/BUILD
View file @
8a1eae45
...
@@ -220,7 +220,6 @@ go_test(
...
@@ -220,7 +220,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/intstr:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch/testing:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch/testing:go_default_library",
...
...
pkg/kubectl/cmd/apply_test.go
View file @
8a1eae45
...
@@ -43,7 +43,6 @@ import (
...
@@ -43,7 +43,6 @@ import (
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
clienttesting
"k8s.io/client-go/testing"
clienttesting
"k8s.io/client-go/testing"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/apis/extensions"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
...
@@ -146,9 +145,9 @@ func readReplicationController(t *testing.T, filenameRC string) (string, []byte)
...
@@ -146,9 +145,9 @@ func readReplicationController(t *testing.T, filenameRC string) (string, []byte)
return
metaAccessor
.
GetName
(),
rcBytes
return
metaAccessor
.
GetName
(),
rcBytes
}
}
func
readReplicationControllerFromFile
(
t
*
testing
.
T
,
filename
string
)
*
api
.
ReplicationController
{
func
readReplicationControllerFromFile
(
t
*
testing
.
T
,
filename
string
)
*
corev1
.
ReplicationController
{
data
:=
readBytesFromFile
(
t
,
filename
)
data
:=
readBytesFromFile
(
t
,
filename
)
rc
:=
api
.
ReplicationController
{}
rc
:=
corev1
.
ReplicationController
{}
if
err
:=
runtime
.
DecodeInto
(
testapi
.
Default
.
Codec
(),
data
,
&
rc
);
err
!=
nil
{
if
err
:=
runtime
.
DecodeInto
(
testapi
.
Default
.
Codec
(),
data
,
&
rc
);
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -165,9 +164,9 @@ func readUnstructuredFromFile(t *testing.T, filename string) *unstructured.Unstr
...
@@ -165,9 +164,9 @@ func readUnstructuredFromFile(t *testing.T, filename string) *unstructured.Unstr
return
&
unst
return
&
unst
}
}
func
readServiceFromFile
(
t
*
testing
.
T
,
filename
string
)
*
api
.
Service
{
func
readServiceFromFile
(
t
*
testing
.
T
,
filename
string
)
*
corev1
.
Service
{
data
:=
readBytesFromFile
(
t
,
filename
)
data
:=
readBytesFromFile
(
t
,
filename
)
svc
:=
api
.
Service
{}
svc
:=
corev1
.
Service
{}
if
err
:=
runtime
.
DecodeInto
(
testapi
.
Default
.
Codec
(),
data
,
&
svc
);
err
!=
nil
{
if
err
:=
runtime
.
DecodeInto
(
testapi
.
Default
.
Codec
(),
data
,
&
svc
);
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
...
@@ -204,7 +203,7 @@ func annotateRuntimeObject(t *testing.T, originalObj, currentObj runtime.Object,
...
@@ -204,7 +203,7 @@ func annotateRuntimeObject(t *testing.T, originalObj, currentObj runtime.Object,
if
currentAnnotations
==
nil
{
if
currentAnnotations
==
nil
{
currentAnnotations
=
make
(
map
[
string
]
string
)
currentAnnotations
=
make
(
map
[
string
]
string
)
}
}
currentAnnotations
[
api
.
LastAppliedConfigAnnotation
]
=
string
(
original
)
currentAnnotations
[
corev1
.
LastAppliedConfigAnnotation
]
=
string
(
original
)
currentAccessor
.
SetAnnotations
(
currentAnnotations
)
currentAccessor
.
SetAnnotations
(
currentAnnotations
)
current
,
err
:=
runtime
.
Encode
(
unstructured
.
JSONFallbackEncoder
{
Encoder
:
testapi
.
Default
.
Codec
()},
currentObj
)
current
,
err
:=
runtime
.
Encode
(
unstructured
.
JSONFallbackEncoder
{
Encoder
:
testapi
.
Default
.
Codec
()},
currentObj
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -244,7 +243,7 @@ func validatePatchApplication(t *testing.T, req *http.Request) {
...
@@ -244,7 +243,7 @@ func validatePatchApplication(t *testing.T, req *http.Request) {
}
}
annotationsMap
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"metadata"
,
"annotations"
})
annotationsMap
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"metadata"
,
"annotations"
})
if
_
,
ok
:=
annotationsMap
[
api
.
LastAppliedConfigAnnotation
];
!
ok
{
if
_
,
ok
:=
annotationsMap
[
corev1
.
LastAppliedConfigAnnotation
];
!
ok
{
t
.
Fatalf
(
"patch does not contain annotation:
\n
%s
\n
"
,
patch
)
t
.
Fatalf
(
"patch does not contain annotation:
\n
%s
\n
"
,
patch
)
}
}
...
@@ -408,9 +407,9 @@ func TestRunApplyViewLastApplied(t *testing.T) {
...
@@ -408,9 +407,9 @@ func TestRunApplyViewLastApplied(t *testing.T) {
bodyRC
:=
ioutil
.
NopCloser
(
bytes
.
NewReader
(
test
.
respBytes
))
bodyRC
:=
ioutil
.
NopCloser
(
bytes
.
NewReader
(
test
.
respBytes
))
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
bodyRC
},
nil
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
bodyRC
},
nil
case
p
==
"/namespaces/test/replicationcontrollers/no-match"
&&
m
==
"GET"
:
case
p
==
"/namespaces/test/replicationcontrollers/no-match"
&&
m
==
"GET"
:
return
&
http
.
Response
{
StatusCode
:
404
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Pod
{})},
nil
return
&
http
.
Response
{
StatusCode
:
404
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Pod
{})},
nil
case
p
==
"/api/v1/namespaces/test"
&&
m
==
"GET"
:
case
p
==
"/api/v1/namespaces/test"
&&
m
==
"GET"
:
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Namespace
{})},
nil
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Namespace
{})},
nil
default
:
default
:
t
.
Fatalf
(
"unexpected request: %#v
\n
%#v"
,
req
.
URL
,
req
)
t
.
Fatalf
(
"unexpected request: %#v
\n
%#v"
,
req
.
URL
,
req
)
return
nil
,
nil
return
nil
,
nil
...
@@ -895,7 +894,7 @@ func TestApplyNULLPreservation(t *testing.T) {
...
@@ -895,7 +894,7 @@ func TestApplyNULLPreservation(t *testing.T) {
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
annotationMap
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"metadata"
,
"annotations"
})
annotationMap
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"metadata"
,
"annotations"
})
if
_
,
ok
:=
annotationMap
[
api
.
LastAppliedConfigAnnotation
];
!
ok
{
if
_
,
ok
:=
annotationMap
[
corev1
.
LastAppliedConfigAnnotation
];
!
ok
{
t
.
Fatalf
(
"patch does not contain annotation:
\n
%s
\n
"
,
patch
)
t
.
Fatalf
(
"patch does not contain annotation:
\n
%s
\n
"
,
patch
)
}
}
strategy
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"spec"
,
"strategy"
})
strategy
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"spec"
,
"strategy"
})
...
@@ -1135,13 +1134,13 @@ func TestRunApplySetLastApplied(t *testing.T) {
...
@@ -1135,13 +1134,13 @@ func TestRunApplySetLastApplied(t *testing.T) {
bodyRC
:=
ioutil
.
NopCloser
(
bytes
.
NewReader
(
noAnnotationRC
))
bodyRC
:=
ioutil
.
NopCloser
(
bytes
.
NewReader
(
noAnnotationRC
))
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
bodyRC
},
nil
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
bodyRC
},
nil
case
p
==
noExistPath
&&
m
==
"GET"
:
case
p
==
noExistPath
&&
m
==
"GET"
:
return
&
http
.
Response
{
StatusCode
:
404
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Pod
{})},
nil
return
&
http
.
Response
{
StatusCode
:
404
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Pod
{})},
nil
case
p
==
pathRC
&&
m
==
"PATCH"
:
case
p
==
pathRC
&&
m
==
"PATCH"
:
checkPatchString
(
t
,
req
)
checkPatchString
(
t
,
req
)
bodyRC
:=
ioutil
.
NopCloser
(
bytes
.
NewReader
(
currentRC
))
bodyRC
:=
ioutil
.
NopCloser
(
bytes
.
NewReader
(
currentRC
))
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
bodyRC
},
nil
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
bodyRC
},
nil
case
p
==
"/api/v1/namespaces/test"
&&
m
==
"GET"
:
case
p
==
"/api/v1/namespaces/test"
&&
m
==
"GET"
:
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Namespace
{})},
nil
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Namespace
{})},
nil
default
:
default
:
t
.
Fatalf
(
"unexpected request: %#v
\n
%#v"
,
req
.
URL
,
req
)
t
.
Fatalf
(
"unexpected request: %#v
\n
%#v"
,
req
.
URL
,
req
)
return
nil
,
nil
return
nil
,
nil
...
@@ -1183,7 +1182,7 @@ func checkPatchString(t *testing.T, req *http.Request) {
...
@@ -1183,7 +1182,7 @@ func checkPatchString(t *testing.T, req *http.Request) {
}
}
annotationsMap
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"metadata"
,
"annotations"
})
annotationsMap
:=
walkMapPath
(
t
,
patchMap
,
[]
string
{
"metadata"
,
"annotations"
})
if
_
,
ok
:=
annotationsMap
[
api
.
LastAppliedConfigAnnotation
];
!
ok
{
if
_
,
ok
:=
annotationsMap
[
corev1
.
LastAppliedConfigAnnotation
];
!
ok
{
t
.
Fatalf
(
"patch does not contain annotation:
\n
%s
\n
"
,
patch
)
t
.
Fatalf
(
"patch does not contain annotation:
\n
%s
\n
"
,
patch
)
}
}
...
@@ -1230,7 +1229,7 @@ func TestForceApply(t *testing.T) {
...
@@ -1230,7 +1229,7 @@ func TestForceApply(t *testing.T) {
var
bodyRC
io
.
ReadCloser
var
bodyRC
io
.
ReadCloser
if
isScaledDownToZero
{
if
isScaledDownToZero
{
rcObj
:=
readReplicationControllerFromFile
(
t
,
filenameRC
)
rcObj
:=
readReplicationControllerFromFile
(
t
,
filenameRC
)
rcObj
.
Spec
.
Replicas
=
0
rcObj
.
Spec
.
Replicas
=
int32ptr
(
0
)
rcBytes
,
err
:=
runtime
.
Encode
(
testapi
.
Default
.
Codec
(),
rcObj
)
rcBytes
,
err
:=
runtime
.
Encode
(
testapi
.
Default
.
Codec
(),
rcObj
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
...
...
pkg/kubectl/cmd/attach.go
View file @
8a1eae45
...
@@ -25,7 +25,7 @@ import (
...
@@ -25,7 +25,7 @@ import (
"github.com/golang/glog"
"github.com/golang/glog"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
api
v1
"k8s.io/api/core/v1"
core
v1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/remotecommand"
"k8s.io/client-go/tools/remotecommand"
...
@@ -71,9 +71,9 @@ type AttachOptions struct {
...
@@ -71,9 +71,9 @@ type AttachOptions struct {
CommandName
string
CommandName
string
SuggestedCmdUsage
string
SuggestedCmdUsage
string
Pod
*
api
v1
.
Pod
Pod
*
core
v1
.
Pod
AttachFunc
func
(
*
AttachOptions
,
*
api
v1
.
Container
,
bool
,
remotecommand
.
TerminalSizeQueue
)
func
()
error
AttachFunc
func
(
*
AttachOptions
,
*
core
v1
.
Container
,
bool
,
remotecommand
.
TerminalSizeQueue
)
func
()
error
Resources
[]
string
Resources
[]
string
Builder
func
()
*
resource
.
Builder
Builder
func
()
*
resource
.
Builder
AttachablePodFn
polymorphichelpers
.
AttachableLogsForObjectFunc
AttachablePodFn
polymorphichelpers
.
AttachableLogsForObjectFunc
...
@@ -119,7 +119,7 @@ type RemoteAttach interface {
...
@@ -119,7 +119,7 @@ type RemoteAttach interface {
Attach
(
method
string
,
url
*
url
.
URL
,
config
*
restclient
.
Config
,
stdin
io
.
Reader
,
stdout
,
stderr
io
.
Writer
,
tty
bool
,
terminalSizeQueue
remotecommand
.
TerminalSizeQueue
)
error
Attach
(
method
string
,
url
*
url
.
URL
,
config
*
restclient
.
Config
,
stdin
io
.
Reader
,
stdout
,
stderr
io
.
Writer
,
tty
bool
,
terminalSizeQueue
remotecommand
.
TerminalSizeQueue
)
error
}
}
func
defaultAttachFunc
(
o
*
AttachOptions
,
containerToAttach
*
api
v1
.
Container
,
raw
bool
,
sizeQueue
remotecommand
.
TerminalSizeQueue
)
func
()
error
{
func
defaultAttachFunc
(
o
*
AttachOptions
,
containerToAttach
*
core
v1
.
Container
,
raw
bool
,
sizeQueue
remotecommand
.
TerminalSizeQueue
)
func
()
error
{
return
func
()
error
{
return
func
()
error
{
restClient
,
err
:=
restclient
.
RESTClientFor
(
o
.
Config
)
restClient
,
err
:=
restclient
.
RESTClientFor
(
o
.
Config
)
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -130,7 +130,7 @@ func defaultAttachFunc(o *AttachOptions, containerToAttach *apiv1.Container, raw
...
@@ -130,7 +130,7 @@ func defaultAttachFunc(o *AttachOptions, containerToAttach *apiv1.Container, raw
Name
(
o
.
Pod
.
Name
)
.
Name
(
o
.
Pod
.
Name
)
.
Namespace
(
o
.
Pod
.
Namespace
)
.
Namespace
(
o
.
Pod
.
Namespace
)
.
SubResource
(
"attach"
)
SubResource
(
"attach"
)
req
.
VersionedParams
(
&
api
v1
.
PodAttachOptions
{
req
.
VersionedParams
(
&
core
v1
.
PodAttachOptions
{
Container
:
containerToAttach
.
Name
,
Container
:
containerToAttach
.
Name
,
Stdin
:
o
.
Stdin
,
Stdin
:
o
.
Stdin
,
Stdout
:
o
.
Out
!=
nil
,
Stdout
:
o
.
Out
!=
nil
,
...
@@ -241,7 +241,7 @@ func (o *AttachOptions) Run() error {
...
@@ -241,7 +241,7 @@ func (o *AttachOptions) Run() error {
return
err
return
err
}
}
if
o
.
Pod
.
Status
.
Phase
==
apiv1
.
PodSucceeded
||
o
.
Pod
.
Status
.
Phase
==
api
v1
.
PodFailed
{
if
o
.
Pod
.
Status
.
Phase
==
corev1
.
PodSucceeded
||
o
.
Pod
.
Status
.
Phase
==
core
v1
.
PodFailed
{
return
fmt
.
Errorf
(
"cannot attach a container in a completed pod; current phase is %s"
,
o
.
Pod
.
Status
.
Phase
)
return
fmt
.
Errorf
(
"cannot attach a container in a completed pod; current phase is %s"
,
o
.
Pod
.
Status
.
Phase
)
}
}
// TODO: convert this to a clean "wait" behavior
// TODO: convert this to a clean "wait" behavior
...
@@ -289,13 +289,13 @@ func (o *AttachOptions) Run() error {
...
@@ -289,13 +289,13 @@ func (o *AttachOptions) Run() error {
return
err
return
err
}
}
if
o
.
Stdin
&&
t
.
Raw
&&
o
.
Pod
.
Spec
.
RestartPolicy
==
api
v1
.
RestartPolicyAlways
{
if
o
.
Stdin
&&
t
.
Raw
&&
o
.
Pod
.
Spec
.
RestartPolicy
==
core
v1
.
RestartPolicyAlways
{
fmt
.
Fprintf
(
o
.
Out
,
"Session ended, resume using '%s %s -c %s -i -t' command when the pod is running
\n
"
,
o
.
CommandName
,
o
.
Pod
.
Name
,
containerToAttach
.
Name
)
fmt
.
Fprintf
(
o
.
Out
,
"Session ended, resume using '%s %s -c %s -i -t' command when the pod is running
\n
"
,
o
.
CommandName
,
o
.
Pod
.
Name
,
containerToAttach
.
Name
)
}
}
return
nil
return
nil
}
}
func
(
o
*
AttachOptions
)
findAttachablePod
(
obj
runtime
.
Object
)
(
*
api
v1
.
Pod
,
error
)
{
func
(
o
*
AttachOptions
)
findAttachablePod
(
obj
runtime
.
Object
)
(
*
core
v1
.
Pod
,
error
)
{
attachablePod
,
err
:=
o
.
AttachablePodFn
(
o
.
restClientGetter
,
obj
,
o
.
GetPodTimeout
)
attachablePod
,
err
:=
o
.
AttachablePodFn
(
o
.
restClientGetter
,
obj
,
o
.
GetPodTimeout
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
@@ -307,7 +307,7 @@ func (o *AttachOptions) findAttachablePod(obj runtime.Object) (*apiv1.Pod, error
...
@@ -307,7 +307,7 @@ func (o *AttachOptions) findAttachablePod(obj runtime.Object) (*apiv1.Pod, error
// containerToAttach returns a reference to the container to attach to, given
// containerToAttach returns a reference to the container to attach to, given
// by name or the first container if name is empty.
// by name or the first container if name is empty.
func
(
o
*
AttachOptions
)
containerToAttachTo
(
pod
*
apiv1
.
Pod
)
(
*
api
v1
.
Container
,
error
)
{
func
(
o
*
AttachOptions
)
containerToAttachTo
(
pod
*
corev1
.
Pod
)
(
*
core
v1
.
Container
,
error
)
{
if
len
(
o
.
ContainerName
)
>
0
{
if
len
(
o
.
ContainerName
)
>
0
{
for
i
:=
range
pod
.
Spec
.
Containers
{
for
i
:=
range
pod
.
Spec
.
Containers
{
if
pod
.
Spec
.
Containers
[
i
]
.
Name
==
o
.
ContainerName
{
if
pod
.
Spec
.
Containers
[
i
]
.
Name
==
o
.
ContainerName
{
...
@@ -332,7 +332,7 @@ func (o *AttachOptions) containerToAttachTo(pod *apiv1.Pod) (*apiv1.Container, e
...
@@ -332,7 +332,7 @@ func (o *AttachOptions) containerToAttachTo(pod *apiv1.Pod) (*apiv1.Container, e
}
}
// GetContainerName returns the name of the container to attach to, with a fallback.
// GetContainerName returns the name of the container to attach to, with a fallback.
func
(
o
*
AttachOptions
)
GetContainerName
(
pod
*
api
v1
.
Pod
)
(
string
,
error
)
{
func
(
o
*
AttachOptions
)
GetContainerName
(
pod
*
core
v1
.
Pod
)
(
string
,
error
)
{
c
,
err
:=
o
.
containerToAttachTo
(
pod
)
c
,
err
:=
o
.
containerToAttachTo
(
pod
)
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
...
...
pkg/kubectl/cmd/cmd_printing_test.go
View file @
8a1eae45
...
@@ -23,10 +23,10 @@ import (
...
@@ -23,10 +23,10 @@ import (
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/kubernetes/pkg/api/legacyscheme"
api
"k8s.io/kubernetes/pkg/apis/core"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
genericprinters
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
genericprinters
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/printers"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/printers"
"k8s.io/kubernetes/pkg/printers"
)
)
...
@@ -84,7 +84,7 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) {
...
@@ -84,7 +84,7 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) {
for
_
,
tc
:=
range
testCases
{
for
_
,
tc
:=
range
testCases
{
t
.
Run
(
tc
.
name
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
tc
.
name
,
func
(
t
*
testing
.
T
)
{
printFlags
:=
genericclioptions
.
NewPrintFlags
(
"succeeded"
)
.
WithTypeSetter
(
scheme
.
Scheme
)
printFlags
:=
genericclioptions
.
NewPrintFlags
(
"succeeded"
)
.
WithTypeSetter
(
legacy
scheme
.
Scheme
)
printFlags
.
OutputFormat
=
&
tc
.
output
printFlags
.
OutputFormat
=
&
tc
.
output
printer
,
err
:=
printFlags
.
ToPrinter
()
printer
,
err
:=
printFlags
.
ToPrinter
()
...
@@ -132,7 +132,7 @@ func TestIllegalPackageSourceCheckerDirectlyThroughPrinters(t *testing.T) {
...
@@ -132,7 +132,7 @@ func TestIllegalPackageSourceCheckerDirectlyThroughPrinters(t *testing.T) {
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
}
}
customColumns
,
err
:=
printers
.
NewCustomColumnsPrinterFromSpec
(
"NAME:.metadata.name"
,
scheme
.
Codecs
.
UniversalDecoder
(),
true
)
customColumns
,
err
:=
printers
.
NewCustomColumnsPrinterFromSpec
(
"NAME:.metadata.name"
,
legacy
scheme
.
Codecs
.
UniversalDecoder
(),
true
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
t
.
Fatalf
(
"unexpected error: %v"
,
err
)
}
}
...
...
pkg/kubectl/cmd/cmd_test.go
View file @
8a1eae45
...
@@ -26,27 +26,20 @@ import (
...
@@ -26,27 +26,20 @@ import (
"reflect"
"reflect"
stdstrings
"strings"
stdstrings
"strings"
"testing"
"testing"
"time"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
corev1
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/api/testapi"
apitesting
"k8s.io/kubernetes/pkg/api/testing"
apitesting
"k8s.io/kubernetes/pkg/api/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
)
)
// This init should be removed after switching this command and its tests to user external types.
func
init
()
{
utilruntime
.
Must
(
api
.
AddToScheme
(
scheme
.
Scheme
))
}
func
initTestErrorHandler
(
t
*
testing
.
T
)
{
func
initTestErrorHandler
(
t
*
testing
.
T
)
{
cmdutil
.
BehaviorOnFatal
(
func
(
str
string
,
code
int
)
{
cmdutil
.
BehaviorOnFatal
(
func
(
str
string
,
code
int
)
{
t
.
Errorf
(
"Error running command (exit code %d): %s"
,
code
,
str
)
t
.
Errorf
(
"Error running command (exit code %d): %s"
,
code
,
str
)
...
@@ -70,45 +63,45 @@ func defaultClientConfig() *restclient.Config {
...
@@ -70,45 +63,45 @@ func defaultClientConfig() *restclient.Config {
}
}
}
}
func
testData
()
(
*
api
.
PodList
,
*
api
.
ServiceList
,
*
api
.
ReplicationControllerList
)
{
func
testData
()
(
*
corev1
.
PodList
,
*
corev1
.
ServiceList
,
*
corev1
.
ReplicationControllerList
)
{
pods
:=
&
api
.
PodList
{
pods
:=
&
corev1
.
PodList
{
ListMeta
:
metav1
.
ListMeta
{
ListMeta
:
metav1
.
ListMeta
{
ResourceVersion
:
"15"
,
ResourceVersion
:
"15"
,
},
},
Items
:
[]
api
.
Pod
{
Items
:
[]
corev1
.
Pod
{
{
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Namespace
:
"test"
,
ResourceVersion
:
"10"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Namespace
:
"test"
,
ResourceVersion
:
"10"
},
Spec
:
apitesting
.
DeepEqualSafePodSpec
(),
Spec
:
apitesting
.
V1
DeepEqualSafePodSpec
(),
},
},
{
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"bar"
,
Namespace
:
"test"
,
ResourceVersion
:
"11"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"bar"
,
Namespace
:
"test"
,
ResourceVersion
:
"11"
},
Spec
:
apitesting
.
DeepEqualSafePodSpec
(),
Spec
:
apitesting
.
V1
DeepEqualSafePodSpec
(),
},
},
},
},
}
}
svc
:=
&
api
.
ServiceList
{
svc
:=
&
corev1
.
ServiceList
{
ListMeta
:
metav1
.
ListMeta
{
ListMeta
:
metav1
.
ListMeta
{
ResourceVersion
:
"16"
,
ResourceVersion
:
"16"
,
},
},
Items
:
[]
api
.
Service
{
Items
:
[]
corev1
.
Service
{
{
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"baz"
,
Namespace
:
"test"
,
ResourceVersion
:
"12"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"baz"
,
Namespace
:
"test"
,
ResourceVersion
:
"12"
},
Spec
:
api
.
ServiceSpec
{
Spec
:
corev1
.
ServiceSpec
{
SessionAffinity
:
"None"
,
SessionAffinity
:
"None"
,
Type
:
api
.
ServiceTypeClusterIP
,
Type
:
corev1
.
ServiceTypeClusterIP
,
},
},
},
},
},
},
}
}
rc
:=
&
api
.
ReplicationControllerList
{
rc
:=
&
corev1
.
ReplicationControllerList
{
ListMeta
:
metav1
.
ListMeta
{
ListMeta
:
metav1
.
ListMeta
{
ResourceVersion
:
"17"
,
ResourceVersion
:
"17"
,
},
},
Items
:
[]
api
.
ReplicationController
{
Items
:
[]
corev1
.
ReplicationController
{
{
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"rc1"
,
Namespace
:
"test"
,
ResourceVersion
:
"18"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"rc1"
,
Namespace
:
"test"
,
ResourceVersion
:
"18"
},
Spec
:
api
.
ReplicationControllerSpec
{
Spec
:
corev1
.
ReplicationControllerSpec
{
Replicas
:
1
,
Replicas
:
int32ptr
(
1
)
,
},
},
},
},
},
},
...
@@ -116,6 +109,11 @@ func testData() (*api.PodList, *api.ServiceList, *api.ReplicationControllerList)
...
@@ -116,6 +109,11 @@ func testData() (*api.PodList, *api.ServiceList, *api.ReplicationControllerList)
return
pods
,
svc
,
rc
return
pods
,
svc
,
rc
}
}
func
int32ptr
(
val
int
)
*
int32
{
t
:=
int32
(
val
)
return
&
t
}
func
objBody
(
codec
runtime
.
Codec
,
obj
runtime
.
Object
)
io
.
ReadCloser
{
func
objBody
(
codec
runtime
.
Codec
,
obj
runtime
.
Object
)
io
.
ReadCloser
{
return
ioutil
.
NopCloser
(
bytes
.
NewReader
([]
byte
(
runtime
.
EncodeOrDie
(
codec
,
obj
))))
return
ioutil
.
NopCloser
(
bytes
.
NewReader
([]
byte
(
runtime
.
EncodeOrDie
(
codec
,
obj
))))
}
}
...
@@ -132,98 +130,6 @@ func stringBody(body string) io.ReadCloser {
...
@@ -132,98 +130,6 @@ func stringBody(body string) io.ReadCloser {
return
ioutil
.
NopCloser
(
bytes
.
NewReader
([]
byte
(
body
)))
return
ioutil
.
NopCloser
(
bytes
.
NewReader
([]
byte
(
body
)))
}
}
func
newAllPhasePodList
()
*
api
.
PodList
{
nodeName
:=
"kubernetes-node-abcd"
return
&
api
.
PodList
{
Items
:
[]
api
.
Pod
{
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"test1"
,
CreationTimestamp
:
metav1
.
Time
{
Time
:
time
.
Now
()
.
AddDate
(
-
10
,
0
,
0
)},
},
Spec
:
api
.
PodSpec
{
Containers
:
make
([]
api
.
Container
,
2
),
NodeName
:
nodeName
,
},
Status
:
api
.
PodStatus
{
Phase
:
api
.
PodPending
,
ContainerStatuses
:
[]
api
.
ContainerStatus
{
{
Ready
:
true
,
RestartCount
:
3
,
State
:
api
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{}}},
{
RestartCount
:
3
},
},
},
},
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"test2"
,
CreationTimestamp
:
metav1
.
Time
{
Time
:
time
.
Now
()
.
AddDate
(
-
10
,
0
,
0
)},
},
Spec
:
api
.
PodSpec
{
Containers
:
make
([]
api
.
Container
,
2
),
NodeName
:
nodeName
,
},
Status
:
api
.
PodStatus
{
Phase
:
api
.
PodRunning
,
ContainerStatuses
:
[]
api
.
ContainerStatus
{
{
Ready
:
true
,
RestartCount
:
3
,
State
:
api
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{}}},
{
RestartCount
:
3
},
},
},
},
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"test3"
,
CreationTimestamp
:
metav1
.
Time
{
Time
:
time
.
Now
()
.
AddDate
(
-
10
,
0
,
0
)},
},
Spec
:
api
.
PodSpec
{
Containers
:
make
([]
api
.
Container
,
2
),
NodeName
:
nodeName
,
},
Status
:
api
.
PodStatus
{
Phase
:
api
.
PodSucceeded
,
ContainerStatuses
:
[]
api
.
ContainerStatus
{
{
Ready
:
true
,
RestartCount
:
3
,
State
:
api
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{}}},
{
RestartCount
:
3
},
},
},
},
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"test4"
,
CreationTimestamp
:
metav1
.
Time
{
Time
:
time
.
Now
()
.
AddDate
(
-
10
,
0
,
0
)},
},
Spec
:
api
.
PodSpec
{
Containers
:
make
([]
api
.
Container
,
2
),
NodeName
:
nodeName
,
},
Status
:
api
.
PodStatus
{
Phase
:
api
.
PodFailed
,
ContainerStatuses
:
[]
api
.
ContainerStatus
{
{
Ready
:
true
,
RestartCount
:
3
,
State
:
api
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{}}},
{
RestartCount
:
3
},
},
},
},
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"test5"
,
CreationTimestamp
:
metav1
.
Time
{
Time
:
time
.
Now
()
.
AddDate
(
-
10
,
0
,
0
)},
},
Spec
:
api
.
PodSpec
{
Containers
:
make
([]
api
.
Container
,
2
),
NodeName
:
nodeName
,
},
Status
:
api
.
PodStatus
{
Phase
:
api
.
PodUnknown
,
ContainerStatuses
:
[]
api
.
ContainerStatus
{
{
Ready
:
true
,
RestartCount
:
3
,
State
:
api
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{}}},
{
RestartCount
:
3
},
},
},
}},
}
}
func
TestNormalizationFuncGlobalExistence
(
t
*
testing
.
T
)
{
func
TestNormalizationFuncGlobalExistence
(
t
*
testing
.
T
)
{
// This test can be safely deleted when we will not support multiple flag formats
// This test can be safely deleted when we will not support multiple flag formats
root
:=
NewKubectlCommand
(
os
.
Stdin
,
os
.
Stdout
,
os
.
Stderr
)
root
:=
NewKubectlCommand
(
os
.
Stdin
,
os
.
Stdout
,
os
.
Stderr
)
...
...
pkg/kubectl/cmd/delete_test.go
View file @
8a1eae45
...
@@ -26,10 +26,10 @@ import (
...
@@ -26,10 +26,10 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
corev1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/errors"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
api
"k8s.io/kubernetes/pkg/apis/core"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
...
@@ -274,7 +274,7 @@ func TestDeleteObjectGraceZero(t *testing.T) {
...
@@ -274,7 +274,7 @@ func TestDeleteObjectGraceZero(t *testing.T) {
return
&
http
.
Response
{
StatusCode
:
404
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
metav1
.
Status
{})},
nil
return
&
http
.
Response
{
StatusCode
:
404
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
metav1
.
Status
{})},
nil
}
}
case
p
==
"/api/v1/namespaces/test"
&&
m
==
"GET"
:
case
p
==
"/api/v1/namespaces/test"
&&
m
==
"GET"
:
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Namespace
{})},
nil
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Namespace
{})},
nil
case
p
==
"/namespaces/test/pods/nginx"
&&
m
==
"DELETE"
:
case
p
==
"/namespaces/test/pods/nginx"
&&
m
==
"DELETE"
:
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
pods
.
Items
[
0
])},
nil
return
&
http
.
Response
{
StatusCode
:
200
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
pods
.
Items
[
0
])},
nil
default
:
default
:
...
@@ -371,8 +371,8 @@ func TestDeleteAllNotFound(t *testing.T) {
...
@@ -371,8 +371,8 @@ func TestDeleteAllNotFound(t *testing.T) {
initTestErrorHandler
(
t
)
initTestErrorHandler
(
t
)
_
,
svc
,
_
:=
testData
()
_
,
svc
,
_
:=
testData
()
// Add an item to the list which will result in a 404 on delete
// Add an item to the list which will result in a 404 on delete
svc
.
Items
=
append
(
svc
.
Items
,
api
.
Service
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
}})
svc
.
Items
=
append
(
svc
.
Items
,
corev1
.
Service
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
}})
notFoundError
:=
&
errors
.
NewNotFound
(
api
.
Resource
(
"services"
),
"foo"
)
.
ErrStatus
notFoundError
:=
&
errors
.
NewNotFound
(
corev1
.
Resource
(
"services"
),
"foo"
)
.
ErrStatus
tf
:=
cmdtesting
.
NewTestFactory
()
.
WithNamespace
(
"test"
)
tf
:=
cmdtesting
.
NewTestFactory
()
.
WithNamespace
(
"test"
)
defer
tf
.
Cleanup
()
defer
tf
.
Cleanup
()
...
@@ -426,8 +426,8 @@ func TestDeleteAllIgnoreNotFound(t *testing.T) {
...
@@ -426,8 +426,8 @@ func TestDeleteAllIgnoreNotFound(t *testing.T) {
codec
:=
scheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
codec
:=
scheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
// Add an item to the list which will result in a 404 on delete
// Add an item to the list which will result in a 404 on delete
svc
.
Items
=
append
(
svc
.
Items
,
api
.
Service
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
}})
svc
.
Items
=
append
(
svc
.
Items
,
corev1
.
Service
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
}})
notFoundError
:=
&
errors
.
NewNotFound
(
api
.
Resource
(
"services"
),
"foo"
)
.
ErrStatus
notFoundError
:=
&
errors
.
NewNotFound
(
corev1
.
Resource
(
"services"
),
"foo"
)
.
ErrStatus
tf
.
UnstructuredClient
=
&
fake
.
RESTClient
{
tf
.
UnstructuredClient
=
&
fake
.
RESTClient
{
NegotiatedSerializer
:
unstructuredSerializer
,
NegotiatedSerializer
:
unstructuredSerializer
,
...
...
pkg/kubectl/cmd/exec_test.go
View file @
8a1eae45
...
@@ -29,11 +29,11 @@ import (
...
@@ -29,11 +29,11 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
corev1
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/tools/remotecommand"
"k8s.io/client-go/tools/remotecommand"
api
"k8s.io/kubernetes/pkg/apis/core"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
...
@@ -172,7 +172,7 @@ func TestExec(t *testing.T) {
...
@@ -172,7 +172,7 @@ func TestExec(t *testing.T) {
version
:=
"v1"
version
:=
"v1"
tests
:=
[]
struct
{
tests
:=
[]
struct
{
name
,
podPath
,
execPath
string
name
,
podPath
,
execPath
string
pod
*
api
.
Pod
pod
*
corev1
.
Pod
execErr
bool
execErr
bool
}{
}{
{
{
...
@@ -251,20 +251,20 @@ func TestExec(t *testing.T) {
...
@@ -251,20 +251,20 @@ func TestExec(t *testing.T) {
}
}
}
}
func
execPod
()
*
api
.
Pod
{
func
execPod
()
*
corev1
.
Pod
{
return
&
api
.
Pod
{
return
&
corev1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Namespace
:
"test"
,
ResourceVersion
:
"10"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Namespace
:
"test"
,
ResourceVersion
:
"10"
},
Spec
:
api
.
PodSpec
{
Spec
:
corev1
.
PodSpec
{
RestartPolicy
:
api
.
RestartPolicyAlways
,
RestartPolicy
:
corev1
.
RestartPolicyAlways
,
DNSPolicy
:
api
.
DNSClusterFirst
,
DNSPolicy
:
corev1
.
DNSClusterFirst
,
Containers
:
[]
api
.
Container
{
Containers
:
[]
corev1
.
Container
{
{
{
Name
:
"bar"
,
Name
:
"bar"
,
},
},
},
},
},
},
Status
:
api
.
PodStatus
{
Status
:
corev1
.
PodStatus
{
Phase
:
api
.
PodRunning
,
Phase
:
corev1
.
PodRunning
,
},
},
}
}
}
}
...
...
pkg/kubectl/cmd/expose_test.go
View file @
8a1eae45
...
@@ -27,19 +27,12 @@ import (
...
@@ -27,19 +27,12 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/intstr"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
api
"k8s.io/kubernetes/pkg/apis/core"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
)
)
// This init should be removed after switching this command and its tests to user external types.
func
init
()
{
utilruntime
.
Must
(
api
.
AddToScheme
(
scheme
.
Scheme
))
}
func
TestRunExposeService
(
t
*
testing
.
T
)
{
func
TestRunExposeService
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
tests
:=
[]
struct
{
name
string
name
string
...
...
pkg/kubectl/cmd/get/BUILD
View file @
8a1eae45
...
@@ -68,7 +68,6 @@ go_test(
...
@@ -68,7 +68,6 @@ go_test(
deps = [
deps = [
"//pkg/api/testing:go_default_library",
"//pkg/api/testing:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/apis/core:go_default_library",
"//pkg/apis/core/v1:go_default_library",
"//pkg/kubectl/cmd/testing:go_default_library",
"//pkg/kubectl/cmd/testing:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/cmd/util:go_default_library",
"//pkg/kubectl/cmd/util/openapi:go_default_library",
"//pkg/kubectl/cmd/util/openapi:go_default_library",
...
@@ -88,7 +87,6 @@ go_test(
...
@@ -88,7 +87,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/streaming:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/streaming:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/client-go/rest/fake:go_default_library",
"//staging/src/k8s.io/client-go/rest/fake:go_default_library",
...
...
pkg/kubectl/cmd/get/get_test.go
View file @
8a1eae45
...
@@ -39,14 +39,12 @@ import (
...
@@ -39,14 +39,12 @@ import (
"k8s.io/apimachinery/pkg/runtime/serializer/json"
"k8s.io/apimachinery/pkg/runtime/serializer/json"
"k8s.io/apimachinery/pkg/runtime/serializer/streaming"
"k8s.io/apimachinery/pkg/runtime/serializer/streaming"
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/diff"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/watch"
"k8s.io/apimachinery/pkg/watch"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
restclientwatch
"k8s.io/client-go/rest/watch"
restclientwatch
"k8s.io/client-go/rest/watch"
"k8s.io/kube-openapi/pkg/util/proto"
"k8s.io/kube-openapi/pkg/util/proto"
apitesting
"k8s.io/kubernetes/pkg/api/testing"
apitesting
"k8s.io/kubernetes/pkg/api/testing"
"k8s.io/kubernetes/pkg/apis/core/v1"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
...
@@ -58,13 +56,6 @@ import (
...
@@ -58,13 +56,6 @@ import (
var
openapiSchemaPath
=
filepath
.
Join
(
".."
,
".."
,
".."
,
".."
,
"api"
,
"openapi-spec"
,
"swagger.json"
)
var
openapiSchemaPath
=
filepath
.
Join
(
".."
,
".."
,
".."
,
".."
,
"api"
,
"openapi-spec"
,
"swagger.json"
)
// This init should be removed after switching this command and its tests to user external types.
func
init
()
{
utilruntime
.
Must
(
api
.
AddToScheme
(
scheme
.
Scheme
))
utilruntime
.
Must
(
scheme
.
Scheme
.
AddConversionFuncs
(
v1
.
Convert_core_PodSpec_To_v1_PodSpec
))
utilruntime
.
Must
(
scheme
.
Scheme
.
AddConversionFuncs
(
v1
.
Convert_v1_PodSecurityContext_To_core_PodSecurityContext
))
}
var
unstructuredSerializer
=
resource
.
UnstructuredPlusDefaultContentConfig
()
.
NegotiatedSerializer
var
unstructuredSerializer
=
resource
.
UnstructuredPlusDefaultContentConfig
()
.
NegotiatedSerializer
func
defaultHeader
()
http
.
Header
{
func
defaultHeader
()
http
.
Header
{
...
...
pkg/kubectl/cmd/portforward_test.go
View file @
8a1eae45
...
@@ -25,12 +25,10 @@ import (
...
@@ -25,12 +25,10 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"k8s.io/api/core/v1"
corev1
"k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
"k8s.io/kubernetes/pkg/api/legacyscheme"
api
"k8s.io/kubernetes/pkg/apis/core"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
...
@@ -54,7 +52,7 @@ func testPortForward(t *testing.T, flags map[string]string, args []string) {
...
@@ -54,7 +52,7 @@ func testPortForward(t *testing.T, flags map[string]string, args []string) {
tests
:=
[]
struct
{
tests
:=
[]
struct
{
name
string
name
string
podPath
,
pfPath
string
podPath
,
pfPath
string
pod
*
api
.
Pod
pod
*
corev1
.
Pod
pfErr
bool
pfErr
bool
}{
}{
{
{
...
@@ -77,12 +75,12 @@ func testPortForward(t *testing.T, flags map[string]string, args []string) {
...
@@ -77,12 +75,12 @@ func testPortForward(t *testing.T, flags map[string]string, args []string) {
tf
:=
cmdtesting
.
NewTestFactory
()
.
WithNamespace
(
"test"
)
tf
:=
cmdtesting
.
NewTestFactory
()
.
WithNamespace
(
"test"
)
defer
tf
.
Cleanup
()
defer
tf
.
Cleanup
()
codec
:=
legacy
scheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
codec
:=
scheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
ns
:=
legacy
scheme
.
Codecs
ns
:=
scheme
.
Codecs
tf
.
Client
=
&
fake
.
RESTClient
{
tf
.
Client
=
&
fake
.
RESTClient
{
VersionedAPIPath
:
"/api/v1"
,
VersionedAPIPath
:
"/api/v1"
,
GroupVersion
:
schema
.
GroupVersion
{
Group
:
""
},
GroupVersion
:
schema
.
GroupVersion
{
Group
:
""
,
Version
:
"v1"
},
NegotiatedSerializer
:
ns
,
NegotiatedSerializer
:
ns
,
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
...
@@ -146,17 +144,17 @@ func TestPortForward(t *testing.T) {
...
@@ -146,17 +144,17 @@ func TestPortForward(t *testing.T) {
func
TestTranslateServicePortToTargetPort
(
t
*
testing
.
T
)
{
func
TestTranslateServicePortToTargetPort
(
t
*
testing
.
T
)
{
cases
:=
[]
struct
{
cases
:=
[]
struct
{
name
string
name
string
svc
v1
.
Service
svc
core
v1
.
Service
pod
v1
.
Pod
pod
core
v1
.
Pod
ports
[]
string
ports
[]
string
translated
[]
string
translated
[]
string
err
bool
err
bool
}{
}{
{
{
name
:
"test success 1 (int port)"
,
name
:
"test success 1 (int port)"
,
svc
:
v1
.
Service
{
svc
:
core
v1
.
Service
{
Spec
:
v1
.
ServiceSpec
{
Spec
:
core
v1
.
ServiceSpec
{
Ports
:
[]
v1
.
ServicePort
{
Ports
:
[]
core
v1
.
ServicePort
{
{
{
Port
:
80
,
Port
:
80
,
TargetPort
:
intstr
.
FromInt
(
8080
),
TargetPort
:
intstr
.
FromInt
(
8080
),
...
@@ -164,11 +162,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -164,11 +162,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
},
},
},
},
pod
:
v1
.
Pod
{
pod
:
core
v1
.
Pod
{
Spec
:
v1
.
PodSpec
{
Spec
:
core
v1
.
PodSpec
{
Containers
:
[]
v1
.
Container
{
Containers
:
[]
core
v1
.
Container
{
{
{
Ports
:
[]
v1
.
ContainerPort
{
Ports
:
[]
core
v1
.
ContainerPort
{
{
{
Name
:
"http"
,
Name
:
"http"
,
ContainerPort
:
int32
(
8080
)},
ContainerPort
:
int32
(
8080
)},
...
@@ -183,10 +181,10 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -183,10 +181,10 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
{
{
name
:
"test success 2 (clusterIP: None)"
,
name
:
"test success 2 (clusterIP: None)"
,
svc
:
v1
.
Service
{
svc
:
core
v1
.
Service
{
Spec
:
v1
.
ServiceSpec
{
Spec
:
core
v1
.
ServiceSpec
{
ClusterIP
:
"None"
,
ClusterIP
:
"None"
,
Ports
:
[]
v1
.
ServicePort
{
Ports
:
[]
core
v1
.
ServicePort
{
{
{
Port
:
80
,
Port
:
80
,
TargetPort
:
intstr
.
FromInt
(
8080
),
TargetPort
:
intstr
.
FromInt
(
8080
),
...
@@ -194,11 +192,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -194,11 +192,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
},
},
},
},
pod
:
v1
.
Pod
{
pod
:
core
v1
.
Pod
{
Spec
:
v1
.
PodSpec
{
Spec
:
core
v1
.
PodSpec
{
Containers
:
[]
v1
.
Container
{
Containers
:
[]
core
v1
.
Container
{
{
{
Ports
:
[]
v1
.
ContainerPort
{
Ports
:
[]
core
v1
.
ContainerPort
{
{
{
Name
:
"http"
,
Name
:
"http"
,
ContainerPort
:
int32
(
8080
)},
ContainerPort
:
int32
(
8080
)},
...
@@ -213,9 +211,9 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -213,9 +211,9 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
{
{
name
:
"test success 3 (named port)"
,
name
:
"test success 3 (named port)"
,
svc
:
v1
.
Service
{
svc
:
core
v1
.
Service
{
Spec
:
v1
.
ServiceSpec
{
Spec
:
core
v1
.
ServiceSpec
{
Ports
:
[]
v1
.
ServicePort
{
Ports
:
[]
core
v1
.
ServicePort
{
{
{
Port
:
80
,
Port
:
80
,
TargetPort
:
intstr
.
FromString
(
"http"
),
TargetPort
:
intstr
.
FromString
(
"http"
),
...
@@ -227,11 +225,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -227,11 +225,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
},
},
},
},
pod
:
v1
.
Pod
{
pod
:
core
v1
.
Pod
{
Spec
:
v1
.
PodSpec
{
Spec
:
core
v1
.
PodSpec
{
Containers
:
[]
v1
.
Container
{
Containers
:
[]
core
v1
.
Container
{
{
{
Ports
:
[]
v1
.
ContainerPort
{
Ports
:
[]
core
v1
.
ContainerPort
{
{
{
Name
:
"http"
,
Name
:
"http"
,
ContainerPort
:
int32
(
8080
)},
ContainerPort
:
int32
(
8080
)},
...
@@ -249,20 +247,20 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -249,20 +247,20 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
{
{
name
:
"test success (targetPort omitted)"
,
name
:
"test success (targetPort omitted)"
,
svc
:
v1
.
Service
{
svc
:
core
v1
.
Service
{
Spec
:
v1
.
ServiceSpec
{
Spec
:
core
v1
.
ServiceSpec
{
Ports
:
[]
v1
.
ServicePort
{
Ports
:
[]
core
v1
.
ServicePort
{
{
{
Port
:
80
,
Port
:
80
,
},
},
},
},
},
},
},
},
pod
:
v1
.
Pod
{
pod
:
core
v1
.
Pod
{
Spec
:
v1
.
PodSpec
{
Spec
:
core
v1
.
PodSpec
{
Containers
:
[]
v1
.
Container
{
Containers
:
[]
core
v1
.
Container
{
{
{
Ports
:
[]
v1
.
ContainerPort
{
Ports
:
[]
core
v1
.
ContainerPort
{
{
{
Name
:
"http"
,
Name
:
"http"
,
ContainerPort
:
int32
(
80
)},
ContainerPort
:
int32
(
80
)},
...
@@ -277,9 +275,9 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -277,9 +275,9 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
{
{
name
:
"test failure 1 (named port lookup failure)"
,
name
:
"test failure 1 (named port lookup failure)"
,
svc
:
v1
.
Service
{
svc
:
core
v1
.
Service
{
Spec
:
v1
.
ServiceSpec
{
Spec
:
core
v1
.
ServiceSpec
{
Ports
:
[]
v1
.
ServicePort
{
Ports
:
[]
core
v1
.
ServicePort
{
{
{
Port
:
80
,
Port
:
80
,
TargetPort
:
intstr
.
FromString
(
"http"
),
TargetPort
:
intstr
.
FromString
(
"http"
),
...
@@ -287,11 +285,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -287,11 +285,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
},
},
},
},
pod
:
v1
.
Pod
{
pod
:
core
v1
.
Pod
{
Spec
:
v1
.
PodSpec
{
Spec
:
core
v1
.
PodSpec
{
Containers
:
[]
v1
.
Container
{
Containers
:
[]
core
v1
.
Container
{
{
{
Ports
:
[]
v1
.
ContainerPort
{
Ports
:
[]
core
v1
.
ContainerPort
{
{
{
Name
:
"https"
,
Name
:
"https"
,
ContainerPort
:
int32
(
443
)},
ContainerPort
:
int32
(
443
)},
...
@@ -306,9 +304,9 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -306,9 +304,9 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
{
{
name
:
"test failure 2 (service port not declared)"
,
name
:
"test failure 2 (service port not declared)"
,
svc
:
v1
.
Service
{
svc
:
core
v1
.
Service
{
Spec
:
v1
.
ServiceSpec
{
Spec
:
core
v1
.
ServiceSpec
{
Ports
:
[]
v1
.
ServicePort
{
Ports
:
[]
core
v1
.
ServicePort
{
{
{
Port
:
80
,
Port
:
80
,
TargetPort
:
intstr
.
FromString
(
"http"
),
TargetPort
:
intstr
.
FromString
(
"http"
),
...
@@ -316,11 +314,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
...
@@ -316,11 +314,11 @@ func TestTranslateServicePortToTargetPort(t *testing.T) {
},
},
},
},
},
},
pod
:
v1
.
Pod
{
pod
:
core
v1
.
Pod
{
Spec
:
v1
.
PodSpec
{
Spec
:
core
v1
.
PodSpec
{
Containers
:
[]
v1
.
Container
{
Containers
:
[]
core
v1
.
Container
{
{
{
Ports
:
[]
v1
.
ContainerPort
{
Ports
:
[]
core
v1
.
ContainerPort
{
{
{
Name
:
"https"
,
Name
:
"https"
,
ContainerPort
:
int32
(
443
)},
ContainerPort
:
int32
(
443
)},
...
...
pkg/kubectl/cmd/replace_test.go
View file @
8a1eae45
...
@@ -21,8 +21,8 @@ import (
...
@@ -21,8 +21,8 @@ import (
"strings"
"strings"
"testing"
"testing"
corev1
"k8s.io/api/core/v1"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
api
"k8s.io/kubernetes/pkg/apis/core"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
...
@@ -41,7 +41,7 @@ func TestReplaceObject(t *testing.T) {
...
@@ -41,7 +41,7 @@ func TestReplaceObject(t *testing.T) {
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Namespace
{})},
nil
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Namespace
{})},
nil
case
p
==
"/namespaces/test/replicationcontrollers/redis-master"
&&
m
==
http
.
MethodDelete
:
case
p
==
"/namespaces/test/replicationcontrollers/redis-master"
&&
m
==
http
.
MethodDelete
:
deleted
=
true
deleted
=
true
fallthrough
fallthrough
...
@@ -98,7 +98,7 @@ func TestReplaceMultipleObject(t *testing.T) {
...
@@ -98,7 +98,7 @@ func TestReplaceMultipleObject(t *testing.T) {
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Namespace
{})},
nil
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Namespace
{})},
nil
case
p
==
"/namespaces/test/replicationcontrollers/redis-master"
&&
m
==
http
.
MethodDelete
:
case
p
==
"/namespaces/test/replicationcontrollers/redis-master"
&&
m
==
http
.
MethodDelete
:
redisMasterDeleted
=
true
redisMasterDeleted
=
true
fallthrough
fallthrough
...
@@ -167,7 +167,7 @@ func TestReplaceDirectory(t *testing.T) {
...
@@ -167,7 +167,7 @@ func TestReplaceDirectory(t *testing.T) {
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Namespace
{})},
nil
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Namespace
{})},
nil
case
strings
.
HasPrefix
(
p
,
"/namespaces/test/replicationcontrollers/"
)
&&
m
==
http
.
MethodPut
:
case
strings
.
HasPrefix
(
p
,
"/namespaces/test/replicationcontrollers/"
)
&&
m
==
http
.
MethodPut
:
created
[
p
]
=
true
created
[
p
]
=
true
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
rc
.
Items
[
0
])},
nil
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
rc
.
Items
[
0
])},
nil
...
@@ -223,7 +223,7 @@ func TestForceReplaceObjectNotFound(t *testing.T) {
...
@@ -223,7 +223,7 @@ func TestForceReplaceObjectNotFound(t *testing.T) {
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
switch
p
,
m
:=
req
.
URL
.
Path
,
req
.
Method
;
{
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
case
p
==
"/api/v1/namespaces/test"
&&
m
==
http
.
MethodGet
:
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
api
.
Namespace
{})},
nil
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
Header
:
defaultHeader
(),
Body
:
objBody
(
codec
,
&
corev1
.
Namespace
{})},
nil
case
p
==
"/namespaces/test/replicationcontrollers/redis-master"
&&
(
m
==
http
.
MethodGet
||
m
==
http
.
MethodDelete
)
:
case
p
==
"/namespaces/test/replicationcontrollers/redis-master"
&&
(
m
==
http
.
MethodGet
||
m
==
http
.
MethodDelete
)
:
return
&
http
.
Response
{
StatusCode
:
http
.
StatusNotFound
,
Header
:
defaultHeader
(),
Body
:
stringBody
(
""
)},
nil
return
&
http
.
Response
{
StatusCode
:
http
.
StatusNotFound
,
Header
:
defaultHeader
(),
Body
:
stringBody
(
""
)},
nil
case
p
==
"/namespaces/test/replicationcontrollers"
&&
m
==
http
.
MethodPost
:
case
p
==
"/namespaces/test/replicationcontrollers"
&&
m
==
http
.
MethodPost
:
...
...
pkg/kubectl/cmd/run_test.go
View file @
8a1eae45
...
@@ -34,7 +34,6 @@ import (
...
@@ -34,7 +34,6 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/apimachinery/pkg/util/intstr"
utilruntime
"k8s.io/apimachinery/pkg/util/runtime"
restclient
"k8s.io/client-go/rest"
restclient
"k8s.io/client-go/rest"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/api/legacyscheme"
...
@@ -46,11 +45,6 @@ import (
...
@@ -46,11 +45,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
)
)
// This init should be removed after switching this command and its tests to user external types.
func
init
()
{
utilruntime
.
Must
(
api
.
AddToScheme
(
scheme
.
Scheme
))
}
func
TestGetRestartPolicy
(
t
*
testing
.
T
)
{
func
TestGetRestartPolicy
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
tests
:=
[]
struct
{
input
string
input
string
...
...
pkg/kubectl/cmd/taint.go
View file @
8a1eae45
...
@@ -30,7 +30,6 @@ import (
...
@@ -30,7 +30,6 @@ import (
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
...
@@ -164,7 +163,7 @@ func (o *TaintOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st
...
@@ -164,7 +163,7 @@ func (o *TaintOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args []st
return
cmdutil
.
UsageErrorf
(
cmd
,
err
.
Error
())
return
cmdutil
.
UsageErrorf
(
cmd
,
err
.
Error
())
}
}
o
.
builder
=
f
.
NewBuilder
()
.
o
.
builder
=
f
.
NewBuilder
()
.
WithScheme
(
legacyscheme
.
Scheme
)
.
WithScheme
(
scheme
.
Scheme
,
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
.
ContinueOnError
()
.
ContinueOnError
()
.
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
NamespaceParam
(
namespace
)
.
DefaultNamespace
()
if
o
.
selector
!=
""
{
if
o
.
selector
!=
""
{
...
@@ -246,11 +245,7 @@ func (o TaintOptions) RunTaint() error {
...
@@ -246,11 +245,7 @@ func (o TaintOptions) RunTaint() error {
return
err
return
err
}
}
obj
,
err
:=
legacyscheme
.
Scheme
.
ConvertToVersion
(
info
.
Object
,
v1
.
SchemeGroupVersion
)
obj
:=
info
.
Object
if
err
!=
nil
{
glog
.
V
(
1
)
.
Info
(
err
)
return
fmt
.
Errorf
(
"object was not a node.v1.: %T"
,
info
.
Object
)
}
name
,
namespace
:=
info
.
Name
,
info
.
Namespace
name
,
namespace
:=
info
.
Name
,
info
.
Namespace
oldData
,
err
:=
json
.
Marshal
(
obj
)
oldData
,
err
:=
json
.
Marshal
(
obj
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/kubectl/cmd/taint_test.go
View file @
8a1eae45
...
@@ -23,31 +23,30 @@ import (
...
@@ -23,31 +23,30 @@ import (
"testing"
"testing"
"time"
"time"
"k8s.io/api/core/v1"
corev1
"k8s.io/api/core/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/client-go/rest/fake"
"k8s.io/client-go/rest/fake"
"k8s.io/kubernetes/pkg/api/legacyscheme"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
)
)
func
generateNodeAndTaintedNode
(
oldTaints
[]
v1
.
Taint
,
newTaints
[]
v1
.
Taint
)
(
*
v1
.
Node
,
*
v1
.
Node
)
{
func
generateNodeAndTaintedNode
(
oldTaints
[]
corev1
.
Taint
,
newTaints
[]
corev1
.
Taint
)
(
*
corev1
.
Node
,
*
core
v1
.
Node
)
{
var
taintedNode
*
v1
.
Node
var
taintedNode
*
core
v1
.
Node
// Create a node.
// Create a node.
node
:=
&
v1
.
Node
{
node
:=
&
core
v1
.
Node
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"node-name"
,
Name
:
"node-name"
,
CreationTimestamp
:
metav1
.
Time
{
Time
:
time
.
Now
()},
CreationTimestamp
:
metav1
.
Time
{
Time
:
time
.
Now
()},
},
},
Spec
:
v1
.
NodeSpec
{
Spec
:
core
v1
.
NodeSpec
{
Taints
:
oldTaints
,
Taints
:
oldTaints
,
},
},
Status
:
v1
.
NodeStatus
{},
Status
:
core
v1
.
NodeStatus
{},
}
}
// A copy of the same node, but tainted.
// A copy of the same node, but tainted.
...
@@ -57,7 +56,7 @@ func generateNodeAndTaintedNode(oldTaints []v1.Taint, newTaints []v1.Taint) (*v1
...
@@ -57,7 +56,7 @@ func generateNodeAndTaintedNode(oldTaints []v1.Taint, newTaints []v1.Taint) (*v1
return
node
,
taintedNode
return
node
,
taintedNode
}
}
func
equalTaints
(
taintsA
,
taintsB
[]
v1
.
Taint
)
bool
{
func
equalTaints
(
taintsA
,
taintsB
[]
core
v1
.
Taint
)
bool
{
if
len
(
taintsA
)
!=
len
(
taintsB
)
{
if
len
(
taintsA
)
!=
len
(
taintsB
)
{
return
false
return
false
}
}
...
@@ -80,8 +79,8 @@ func equalTaints(taintsA, taintsB []v1.Taint) bool {
...
@@ -80,8 +79,8 @@ func equalTaints(taintsA, taintsB []v1.Taint) bool {
func
TestTaint
(
t
*
testing
.
T
)
{
func
TestTaint
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
tests
:=
[]
struct
{
description
string
description
string
oldTaints
[]
v1
.
Taint
oldTaints
[]
core
v1
.
Taint
newTaints
[]
v1
.
Taint
newTaints
[]
core
v1
.
Taint
args
[]
string
args
[]
string
expectFatal
bool
expectFatal
bool
expectTaint
bool
expectTaint
bool
...
@@ -89,7 +88,7 @@ func TestTaint(t *testing.T) {
...
@@ -89,7 +88,7 @@ func TestTaint(t *testing.T) {
// success cases
// success cases
{
{
description
:
"taints a node with effect NoSchedule"
,
description
:
"taints a node with effect NoSchedule"
,
newTaints
:
[]
v1
.
Taint
{{
newTaints
:
[]
core
v1
.
Taint
{{
Key
:
"foo"
,
Key
:
"foo"
,
Value
:
"bar"
,
Value
:
"bar"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
...
@@ -100,7 +99,7 @@ func TestTaint(t *testing.T) {
...
@@ -100,7 +99,7 @@ func TestTaint(t *testing.T) {
},
},
{
{
description
:
"taints a node with effect PreferNoSchedule"
,
description
:
"taints a node with effect PreferNoSchedule"
,
newTaints
:
[]
v1
.
Taint
{{
newTaints
:
[]
core
v1
.
Taint
{{
Key
:
"foo"
,
Key
:
"foo"
,
Value
:
"bar"
,
Value
:
"bar"
,
Effect
:
"PreferNoSchedule"
,
Effect
:
"PreferNoSchedule"
,
...
@@ -111,12 +110,12 @@ func TestTaint(t *testing.T) {
...
@@ -111,12 +110,12 @@ func TestTaint(t *testing.T) {
},
},
{
{
description
:
"update an existing taint on the node, change the value from bar to barz"
,
description
:
"update an existing taint on the node, change the value from bar to barz"
,
oldTaints
:
[]
v1
.
Taint
{{
oldTaints
:
[]
core
v1
.
Taint
{{
Key
:
"foo"
,
Key
:
"foo"
,
Value
:
"bar"
,
Value
:
"bar"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
}},
}},
newTaints
:
[]
v1
.
Taint
{{
newTaints
:
[]
core
v1
.
Taint
{{
Key
:
"foo"
,
Key
:
"foo"
,
Value
:
"barz"
,
Value
:
"barz"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
...
@@ -127,7 +126,7 @@ func TestTaint(t *testing.T) {
...
@@ -127,7 +126,7 @@ func TestTaint(t *testing.T) {
},
},
{
{
description
:
"taints a node with two taints"
,
description
:
"taints a node with two taints"
,
newTaints
:
[]
v1
.
Taint
{{
newTaints
:
[]
core
v1
.
Taint
{{
Key
:
"dedicated"
,
Key
:
"dedicated"
,
Value
:
"namespaceA"
,
Value
:
"namespaceA"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
...
@@ -142,7 +141,7 @@ func TestTaint(t *testing.T) {
...
@@ -142,7 +141,7 @@ func TestTaint(t *testing.T) {
},
},
{
{
description
:
"node has two taints with the same key but different effect, remove one of them by indicating exact key and effect"
,
description
:
"node has two taints with the same key but different effect, remove one of them by indicating exact key and effect"
,
oldTaints
:
[]
v1
.
Taint
{{
oldTaints
:
[]
core
v1
.
Taint
{{
Key
:
"dedicated"
,
Key
:
"dedicated"
,
Value
:
"namespaceA"
,
Value
:
"namespaceA"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
...
@@ -151,7 +150,7 @@ func TestTaint(t *testing.T) {
...
@@ -151,7 +150,7 @@ func TestTaint(t *testing.T) {
Value
:
"namespaceA"
,
Value
:
"namespaceA"
,
Effect
:
"PreferNoSchedule"
,
Effect
:
"PreferNoSchedule"
,
}},
}},
newTaints
:
[]
v1
.
Taint
{{
newTaints
:
[]
core
v1
.
Taint
{{
Key
:
"dedicated"
,
Key
:
"dedicated"
,
Value
:
"namespaceA"
,
Value
:
"namespaceA"
,
Effect
:
"PreferNoSchedule"
,
Effect
:
"PreferNoSchedule"
,
...
@@ -162,7 +161,7 @@ func TestTaint(t *testing.T) {
...
@@ -162,7 +161,7 @@ func TestTaint(t *testing.T) {
},
},
{
{
description
:
"node has two taints with the same key but different effect, remove all of them with wildcard"
,
description
:
"node has two taints with the same key but different effect, remove all of them with wildcard"
,
oldTaints
:
[]
v1
.
Taint
{{
oldTaints
:
[]
core
v1
.
Taint
{{
Key
:
"dedicated"
,
Key
:
"dedicated"
,
Value
:
"namespaceA"
,
Value
:
"namespaceA"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
...
@@ -171,14 +170,14 @@ func TestTaint(t *testing.T) {
...
@@ -171,14 +170,14 @@ func TestTaint(t *testing.T) {
Value
:
"namespaceA"
,
Value
:
"namespaceA"
,
Effect
:
"PreferNoSchedule"
,
Effect
:
"PreferNoSchedule"
,
}},
}},
newTaints
:
[]
v1
.
Taint
{},
newTaints
:
[]
core
v1
.
Taint
{},
args
:
[]
string
{
"node"
,
"node-name"
,
"dedicated-"
},
args
:
[]
string
{
"node"
,
"node-name"
,
"dedicated-"
},
expectFatal
:
false
,
expectFatal
:
false
,
expectTaint
:
true
,
expectTaint
:
true
,
},
},
{
{
description
:
"node has two taints, update one of them and remove the other"
,
description
:
"node has two taints, update one of them and remove the other"
,
oldTaints
:
[]
v1
.
Taint
{{
oldTaints
:
[]
core
v1
.
Taint
{{
Key
:
"dedicated"
,
Key
:
"dedicated"
,
Value
:
"namespaceA"
,
Value
:
"namespaceA"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
...
@@ -187,7 +186,7 @@ func TestTaint(t *testing.T) {
...
@@ -187,7 +186,7 @@ func TestTaint(t *testing.T) {
Value
:
"bar"
,
Value
:
"bar"
,
Effect
:
"PreferNoSchedule"
,
Effect
:
"PreferNoSchedule"
,
}},
}},
newTaints
:
[]
v1
.
Taint
{{
newTaints
:
[]
core
v1
.
Taint
{{
Key
:
"foo"
,
Key
:
"foo"
,
Value
:
"barz"
,
Value
:
"barz"
,
Effect
:
"PreferNoSchedule"
,
Effect
:
"PreferNoSchedule"
,
...
@@ -218,12 +217,12 @@ func TestTaint(t *testing.T) {
...
@@ -218,12 +217,12 @@ func TestTaint(t *testing.T) {
},
},
{
{
description
:
"can't update existing taint on the node, since 'overwrite' flag is not set"
,
description
:
"can't update existing taint on the node, since 'overwrite' flag is not set"
,
oldTaints
:
[]
v1
.
Taint
{{
oldTaints
:
[]
core
v1
.
Taint
{{
Key
:
"foo"
,
Key
:
"foo"
,
Value
:
"bar"
,
Value
:
"bar"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
}},
}},
newTaints
:
[]
v1
.
Taint
{{
newTaints
:
[]
core
v1
.
Taint
{{
Key
:
"foo"
,
Key
:
"foo"
,
Value
:
"bar"
,
Value
:
"bar"
,
Effect
:
"NoSchedule"
,
Effect
:
"NoSchedule"
,
...
@@ -237,16 +236,17 @@ func TestTaint(t *testing.T) {
...
@@ -237,16 +236,17 @@ func TestTaint(t *testing.T) {
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
t
.
Run
(
test
.
description
,
func
(
t
*
testing
.
T
)
{
t
.
Run
(
test
.
description
,
func
(
t
*
testing
.
T
)
{
oldNode
,
expectNewNode
:=
generateNodeAndTaintedNode
(
test
.
oldTaints
,
test
.
newTaints
)
oldNode
,
expectNewNode
:=
generateNodeAndTaintedNode
(
test
.
oldTaints
,
test
.
newTaints
)
new_node
:=
&
v1
.
Node
{}
new_node
:=
&
core
v1
.
Node
{}
tainted
:=
false
tainted
:=
false
tf
:=
cmdtesting
.
NewTestFactory
()
tf
:=
cmdtesting
.
NewTestFactory
()
defer
tf
.
Cleanup
()
defer
tf
.
Cleanup
()
codec
:=
legacy
scheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
codec
:=
scheme
.
Codecs
.
LegacyCodec
(
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
ns
:=
legacy
scheme
.
Codecs
ns
:=
scheme
.
Codecs
tf
.
Client
=
&
fake
.
RESTClient
{
tf
.
Client
=
&
fake
.
RESTClient
{
NegotiatedSerializer
:
ns
,
NegotiatedSerializer
:
ns
,
GroupVersion
:
corev1
.
SchemeGroupVersion
,
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
m
:=
&
MyReq
{
req
}
m
:=
&
MyReq
{
req
}
switch
{
switch
{
...
@@ -267,7 +267,7 @@ func TestTaint(t *testing.T) {
...
@@ -267,7 +267,7 @@ func TestTaint(t *testing.T) {
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"%s: unexpected error: %v"
,
test
.
description
,
err
)
t
.
Fatalf
(
"%s: unexpected error: %v"
,
test
.
description
,
err
)
}
}
appliedPatch
,
err
:=
strategicpatch
.
StrategicMergePatch
(
oldJSON
,
data
,
&
v1
.
Node
{})
appliedPatch
,
err
:=
strategicpatch
.
StrategicMergePatch
(
oldJSON
,
data
,
&
core
v1
.
Node
{})
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"%s: unexpected error: %v"
,
test
.
description
,
err
)
t
.
Fatalf
(
"%s: unexpected error: %v"
,
test
.
description
,
err
)
}
}
...
@@ -308,7 +308,10 @@ func TestTaint(t *testing.T) {
...
@@ -308,7 +308,10 @@ func TestTaint(t *testing.T) {
func
()
{
func
()
{
defer
func
()
{
defer
func
()
{
// Recover from the panic below.
// Recover from the panic below.
_
=
recover
()
if
r
:=
recover
();
r
!=
nil
{
t
.
Logf
(
"Recovered: %v"
,
r
)
}
// Restore cmdutil behavior
// Restore cmdutil behavior
cmdutil
.
DefaultBehaviorOnFatal
()
cmdutil
.
DefaultBehaviorOnFatal
()
}()
}()
...
...
staging/src/k8s.io/client-go/rest/fake/fake.go
View file @
8a1eae45
...
@@ -94,14 +94,10 @@ func (c *RESTClient) request(verb string) *restclient.Request {
...
@@ -94,14 +94,10 @@ func (c *RESTClient) request(verb string) *restclient.Request {
ns
:=
c
.
NegotiatedSerializer
ns
:=
c
.
NegotiatedSerializer
info
,
_
:=
runtime
.
SerializerInfoForMediaType
(
ns
.
SupportedMediaTypes
(),
runtime
.
ContentTypeJSON
)
info
,
_
:=
runtime
.
SerializerInfoForMediaType
(
ns
.
SupportedMediaTypes
(),
runtime
.
ContentTypeJSON
)
internalVersion
:=
schema
.
GroupVersion
{
Group
:
c
.
GroupVersion
.
Group
,
Version
:
runtime
.
APIVersionInternal
,
}
serializers
:=
restclient
.
Serializers
{
serializers
:=
restclient
.
Serializers
{
// TODO this was hardcoded before, but it doesn't look right
// TODO this was hardcoded before, but it doesn't look right
Encoder
:
ns
.
EncoderForVersion
(
info
.
Serializer
,
c
.
GroupVersion
),
Encoder
:
ns
.
EncoderForVersion
(
info
.
Serializer
,
c
.
GroupVersion
),
Decoder
:
ns
.
DecoderToVersion
(
info
.
Serializer
,
internal
Version
),
Decoder
:
ns
.
DecoderToVersion
(
info
.
Serializer
,
c
.
Group
Version
),
}
}
if
info
.
StreamSerializer
!=
nil
{
if
info
.
StreamSerializer
!=
nil
{
serializers
.
StreamingSerializer
=
info
.
StreamSerializer
.
Serializer
serializers
.
StreamingSerializer
=
info
.
StreamSerializer
.
Serializer
...
...
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