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
0164605d
Commit
0164605d
authored
May 14, 2018
by
juanvallejo
Committed by
David Eads
May 17, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
remove versioned printer
parent
64bb688e
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
95 additions
and
201 deletions
+95
-201
cmd_printing_test.go
pkg/kubectl/cmd/cmd_printing_test.go
+15
-3
create.go
pkg/kubectl/cmd/create/create.go
+7
-5
create_clusterrole.go
pkg/kubectl/cmd/create/create_clusterrole.go
+5
-1
create_role.go
pkg/kubectl/cmd/create/create_role.go
+5
-1
get.go
pkg/kubectl/cmd/get/get.go
+7
-46
secret.go
pkg/kubectl/secret.go
+1
-0
secret_test.go
pkg/kubectl/secret_test.go
+28
-0
BUILD
pkg/printers/BUILD
+0
-3
customcolumn_flags.go
pkg/printers/customcolumn_flags.go
+1
-2
printers_test.go
pkg/printers/internalversion/printers_test.go
+25
-51
json_yaml_flags.go
pkg/printers/json_yaml_flags.go
+1
-4
versioned.go
pkg/printers/versioned.go
+0
-85
No files found.
pkg/kubectl/cmd/cmd_printing_test.go
View file @
0164605d
...
@@ -56,17 +56,29 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) {
...
@@ -56,17 +56,29 @@ func TestIllegalPackageSourceCheckerThroughPrintFlags(t *testing.T) {
obj
:
internalPod
(),
obj
:
internalPod
(),
},
},
{
{
name
:
"json printer:
json printer is wrapped in a versioned printer - internal obj should be converted with no error
"
,
name
:
"json printer:
object containing package path beginning with forbidden prefix is rejected
"
,
expectInternalObjErr
:
fals
e
,
expectInternalObjErr
:
tru
e
,
output
:
"json"
,
output
:
"json"
,
obj
:
internalPod
(),
obj
:
internalPod
(),
},
},
{
{
name
:
"
yaml printer: yaml printer is wrapped in a versioned printer - internal obj should be converted with
no error"
,
name
:
"
json printer: object containing package path with no forbidden prefix returns
no error"
,
expectInternalObjErr
:
false
,
expectInternalObjErr
:
false
,
obj
:
externalPod
(),
output
:
"json"
,
},
{
name
:
"yaml printer: object containing package path beginning with forbidden prefix is rejected"
,
expectInternalObjErr
:
true
,
output
:
"yaml"
,
output
:
"yaml"
,
obj
:
internalPod
(),
obj
:
internalPod
(),
},
},
{
name
:
"yaml printer: object containing package path with no forbidden prefix returns no error"
,
expectInternalObjErr
:
false
,
obj
:
externalPod
(),
output
:
"yaml"
,
},
}
}
for
_
,
tc
:=
range
testCases
{
for
_
,
tc
:=
range
testCases
{
...
...
pkg/kubectl/cmd/create/create.go
View file @
0164605d
...
@@ -24,9 +24,9 @@ import (
...
@@ -24,9 +24,9 @@ import (
"runtime"
"runtime"
"strings"
"strings"
"github.com/golang/glog"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"github.com/golang/glog"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
kruntime
"k8s.io/apimachinery/pkg/runtime"
kruntime
"k8s.io/apimachinery/pkg/runtime"
...
@@ -40,6 +40,7 @@ import (
...
@@ -40,6 +40,7 @@ import (
"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"
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/printers"
)
)
type
CreateOptions
struct
{
type
CreateOptions
struct
{
...
@@ -350,7 +351,7 @@ type CreateSubcommandOptions struct {
...
@@ -350,7 +351,7 @@ type CreateSubcommandOptions struct {
Mapper
meta
.
RESTMapper
Mapper
meta
.
RESTMapper
DynamicClient
dynamic
.
Interface
DynamicClient
dynamic
.
Interface
PrintObj
func
(
obj
kruntime
.
Object
)
error
PrintObj
printers
.
ResourcePrinterFunc
genericclioptions
.
IOStreams
genericclioptions
.
IOStreams
}
}
...
@@ -381,8 +382,8 @@ func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command
...
@@ -381,8 +382,8 @@ func (o *CreateSubcommandOptions) Complete(f cmdutil.Factory, cmd *cobra.Command
return
err
return
err
}
}
o
.
PrintObj
=
func
(
obj
kruntime
.
Object
)
error
{
o
.
PrintObj
=
func
(
obj
kruntime
.
Object
,
out
io
.
Writer
)
error
{
return
printer
.
PrintObj
(
obj
,
o
.
O
ut
)
return
printer
.
PrintObj
(
obj
,
out
)
}
}
o
.
Namespace
,
o
.
EnforceNamespace
,
err
=
f
.
DefaultNamespace
()
o
.
Namespace
,
o
.
EnforceNamespace
,
err
=
f
.
DefaultNamespace
()
...
@@ -426,6 +427,7 @@ func (o *CreateSubcommandOptions) Run() error {
...
@@ -426,6 +427,7 @@ func (o *CreateSubcommandOptions) Run() error {
}
}
asUnstructured
:=
&
unstructured
.
Unstructured
{}
asUnstructured
:=
&
unstructured
.
Unstructured
{}
if
err
:=
legacyscheme
.
Scheme
.
Convert
(
obj
,
asUnstructured
,
nil
);
err
!=
nil
{
if
err
:=
legacyscheme
.
Scheme
.
Convert
(
obj
,
asUnstructured
,
nil
);
err
!=
nil
{
return
err
return
err
}
}
...
@@ -445,5 +447,5 @@ func (o *CreateSubcommandOptions) Run() error {
...
@@ -445,5 +447,5 @@ func (o *CreateSubcommandOptions) Run() error {
}
}
}
}
return
o
.
PrintObj
(
obj
)
return
o
.
PrintObj
(
obj
,
o
.
Out
)
}
}
pkg/kubectl/cmd/create/create_clusterrole.go
View file @
0164605d
...
@@ -23,6 +23,7 @@ import (
...
@@ -23,6 +23,7 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
rbacv1
"k8s.io/api/rbac/v1"
rbacv1
"k8s.io/api/rbac/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"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"
...
@@ -156,7 +157,10 @@ func (c *CreateClusterRoleOptions) Validate() error {
...
@@ -156,7 +157,10 @@ func (c *CreateClusterRoleOptions) Validate() error {
}
}
func
(
c
*
CreateClusterRoleOptions
)
RunCreateRole
()
error
{
func
(
c
*
CreateClusterRoleOptions
)
RunCreateRole
()
error
{
clusterRole
:=
&
rbacv1
.
ClusterRole
{}
clusterRole
:=
&
rbacv1
.
ClusterRole
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
rbacv1
.
SchemeGroupVersion
.
String
(),
Kind
:
"ClusterRole"
},
}
clusterRole
.
Name
=
c
.
Name
clusterRole
.
Name
=
c
.
Name
rules
,
err
:=
generateResourcePolicyRules
(
c
.
Mapper
,
c
.
Verbs
,
c
.
Resources
,
c
.
ResourceNames
,
c
.
NonResourceURLs
)
rules
,
err
:=
generateResourcePolicyRules
(
c
.
Mapper
,
c
.
Verbs
,
c
.
Resources
,
c
.
ResourceNames
,
c
.
NonResourceURLs
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/kubectl/cmd/create/create_role.go
View file @
0164605d
...
@@ -24,6 +24,7 @@ import (
...
@@ -24,6 +24,7 @@ import (
rbacv1
"k8s.io/api/rbac/v1"
rbacv1
"k8s.io/api/rbac/v1"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/meta"
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"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
...
@@ -299,7 +300,10 @@ func (o *CreateRoleOptions) validateResource() error {
...
@@ -299,7 +300,10 @@ func (o *CreateRoleOptions) validateResource() error {
}
}
func
(
o
*
CreateRoleOptions
)
RunCreateRole
()
error
{
func
(
o
*
CreateRoleOptions
)
RunCreateRole
()
error
{
role
:=
&
rbacv1
.
Role
{}
role
:=
&
rbacv1
.
Role
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
rbacv1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Role"
},
}
role
.
Name
=
o
.
Name
role
.
Name
=
o
.
Name
rules
,
err
:=
generateResourcePolicyRules
(
o
.
Mapper
,
o
.
Verbs
,
o
.
Resources
,
o
.
ResourceNames
,
[]
string
{})
rules
,
err
:=
generateResourcePolicyRules
(
o
.
Mapper
,
o
.
Verbs
,
o
.
Resources
,
o
.
ResourceNames
,
[]
string
{})
if
err
!=
nil
{
if
err
!=
nil
{
...
...
pkg/kubectl/cmd/get/get.go
View file @
0164605d
...
@@ -21,7 +21,6 @@ import (
...
@@ -21,7 +21,6 @@ import (
"fmt"
"fmt"
"io"
"io"
"net/url"
"net/url"
"strings"
"github.com/golang/glog"
"github.com/golang/glog"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
...
@@ -42,7 +41,6 @@ import (
...
@@ -42,7 +41,6 @@ import (
"k8s.io/kubernetes/pkg/kubectl"
"k8s.io/kubernetes/pkg/kubectl"
"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/cmd/util/openapi"
"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"
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
...
@@ -420,6 +418,13 @@ func (o *GetOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
...
@@ -420,6 +418,13 @@ func (o *GetOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
lastMapping
=
mapping
lastMapping
=
mapping
}
}
// ensure a versioned object is passed to the custom-columns printer
// if we are using OpenAPI columns to print
if
o
.
PrintWithOpenAPICols
{
printer
.
PrintObj
(
info
.
Object
,
w
)
continue
}
internalObj
,
err
:=
legacyscheme
.
Scheme
.
ConvertToVersion
(
info
.
Object
,
info
.
Mapping
.
GroupVersionKind
.
GroupKind
()
.
WithVersion
(
runtime
.
APIVersionInternal
)
.
GroupVersion
())
internalObj
,
err
:=
legacyscheme
.
Scheme
.
ConvertToVersion
(
info
.
Object
,
info
.
Mapping
.
GroupVersionKind
.
GroupKind
()
.
WithVersion
(
runtime
.
APIVersionInternal
)
.
GroupVersion
())
if
err
!=
nil
{
if
err
!=
nil
{
// if there's an error, try to print what you have (mirrors old behavior).
// if there's an error, try to print what you have (mirrors old behavior).
...
@@ -733,47 +738,3 @@ func shouldGetNewPrinterForMapping(printer printers.ResourcePrinter, lastMapping
...
@@ -733,47 +738,3 @@ func shouldGetNewPrinterForMapping(printer printers.ResourcePrinter, lastMapping
func
cmdSpecifiesOutputFmt
(
cmd
*
cobra
.
Command
)
bool
{
func
cmdSpecifiesOutputFmt
(
cmd
*
cobra
.
Command
)
bool
{
return
cmdutil
.
GetFlagString
(
cmd
,
"output"
)
!=
""
return
cmdutil
.
GetFlagString
(
cmd
,
"output"
)
!=
""
}
}
// outputOptsForMappingFromOpenAPI looks for the output format metatadata in the
// openapi schema and modifies the passed print options for the mapping if found.
func
updatePrintOptionsForOpenAPI
(
f
cmdutil
.
Factory
,
mapping
*
meta
.
RESTMapping
,
printOpts
*
printers
.
PrintOptions
)
bool
{
// user has not specified any output format, check if OpenAPI has
// default specification to print this resource type
api
,
err
:=
f
.
OpenAPISchema
()
if
err
!=
nil
{
// Error getting schema
return
false
}
// Found openapi metadata for this resource
schema
:=
api
.
LookupResource
(
mapping
.
GroupVersionKind
)
if
schema
==
nil
{
// Schema not found, return empty columns
return
false
}
columns
,
found
:=
openapi
.
GetPrintColumns
(
schema
.
GetExtensions
())
if
!
found
{
// Extension not found, return empty columns
return
false
}
return
outputOptsFromStr
(
columns
,
printOpts
)
}
// outputOptsFromStr parses the print-column metadata and generates printer.OutputOptions object.
func
outputOptsFromStr
(
columnStr
string
,
printOpts
*
printers
.
PrintOptions
)
bool
{
if
columnStr
==
""
{
return
false
}
parts
:=
strings
.
SplitN
(
columnStr
,
"="
,
2
)
if
len
(
parts
)
<
2
{
return
false
}
printOpts
.
OutputFormatType
=
parts
[
0
]
printOpts
.
OutputFormatArgument
=
parts
[
1
]
printOpts
.
AllowMissingKeys
=
true
return
true
}
pkg/kubectl/secret.go
View file @
0164605d
...
@@ -130,6 +130,7 @@ func (s SecretGeneratorV1) StructuredGenerate() (runtime.Object, error) {
...
@@ -130,6 +130,7 @@ func (s SecretGeneratorV1) StructuredGenerate() (runtime.Object, error) {
return
nil
,
err
return
nil
,
err
}
}
secret
:=
&
v1
.
Secret
{}
secret
:=
&
v1
.
Secret
{}
secret
.
SetGroupVersionKind
(
v1
.
SchemeGroupVersion
.
WithKind
(
"Secret"
))
secret
.
Name
=
s
.
Name
secret
.
Name
=
s
.
Name
secret
.
Data
=
map
[
string
][]
byte
{}
secret
.
Data
=
map
[
string
][]
byte
{}
if
len
(
s
.
Type
)
>
0
{
if
len
(
s
.
Type
)
>
0
{
...
...
pkg/kubectl/secret_test.go
View file @
0164605d
...
@@ -37,6 +37,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -37,6 +37,8 @@ func TestSecretGenerate(t *testing.T) {
"name"
:
"foo"
,
"name"
:
"foo"
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Name
:
"foo"
,
},
},
...
@@ -50,6 +52,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -50,6 +52,8 @@ func TestSecretGenerate(t *testing.T) {
"append-hash"
:
true
,
"append-hash"
:
true
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo-949tdgdkgg"
,
Name
:
"foo-949tdgdkgg"
,
},
},
...
@@ -63,6 +67,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -63,6 +67,8 @@ func TestSecretGenerate(t *testing.T) {
"type"
:
"my-type"
,
"type"
:
"my-type"
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Name
:
"foo"
,
},
},
...
@@ -78,6 +84,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -78,6 +84,8 @@ func TestSecretGenerate(t *testing.T) {
"append-hash"
:
true
,
"append-hash"
:
true
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo-dg474f9t76"
,
Name
:
"foo-dg474f9t76"
,
},
},
...
@@ -92,6 +100,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -92,6 +100,8 @@ func TestSecretGenerate(t *testing.T) {
"from-literal"
:
[]
string
{
"key1=value1"
,
"key2=value2"
},
"from-literal"
:
[]
string
{
"key1=value1"
,
"key2=value2"
},
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Name
:
"foo"
,
},
},
...
@@ -109,6 +119,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -109,6 +119,8 @@ func TestSecretGenerate(t *testing.T) {
"append-hash"
:
true
,
"append-hash"
:
true
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo-tf72c228m4"
,
Name
:
"foo-tf72c228m4"
,
},
},
...
@@ -146,6 +158,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -146,6 +158,8 @@ func TestSecretGenerate(t *testing.T) {
"from-literal"
:
[]
string
{
"key1==value1"
},
"from-literal"
:
[]
string
{
"key1==value1"
},
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo"
,
Name
:
"foo"
,
},
},
...
@@ -162,6 +176,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -162,6 +176,8 @@ func TestSecretGenerate(t *testing.T) {
"append-hash"
:
true
,
"append-hash"
:
true
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"foo-fdcc8tkhh5"
,
Name
:
"foo-fdcc8tkhh5"
,
},
},
...
@@ -178,6 +194,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -178,6 +194,8 @@ func TestSecretGenerate(t *testing.T) {
"from-env-file"
:
"file.env"
,
"from-env-file"
:
"file.env"
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"valid_env"
,
Name
:
"valid_env"
,
},
},
...
@@ -196,6 +214,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -196,6 +214,8 @@ func TestSecretGenerate(t *testing.T) {
"append-hash"
:
true
,
"append-hash"
:
true
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"valid_env-bkb2m2965h"
,
Name
:
"valid_env-bkb2m2965h"
,
},
},
...
@@ -217,6 +237,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -217,6 +237,8 @@ func TestSecretGenerate(t *testing.T) {
"from-env-file"
:
"file.env"
,
"from-env-file"
:
"file.env"
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"getenv"
,
Name
:
"getenv"
,
},
},
...
@@ -239,6 +261,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -239,6 +261,8 @@ func TestSecretGenerate(t *testing.T) {
"append-hash"
:
true
,
"append-hash"
:
true
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"getenv-m7kg2khdb4"
,
Name
:
"getenv-m7kg2khdb4"
,
},
},
...
@@ -272,6 +296,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -272,6 +296,8 @@ func TestSecretGenerate(t *testing.T) {
"from-env-file"
:
"file.env"
,
"from-env-file"
:
"file.env"
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"with_spaces"
,
Name
:
"with_spaces"
,
},
},
...
@@ -289,6 +315,8 @@ func TestSecretGenerate(t *testing.T) {
...
@@ -289,6 +315,8 @@ func TestSecretGenerate(t *testing.T) {
"append-hash"
:
true
,
"append-hash"
:
true
,
},
},
expected
:
&
v1
.
Secret
{
expected
:
&
v1
.
Secret
{
// this is ok because we know exactly how we want to be serialized
TypeMeta
:
metav1
.
TypeMeta
{
APIVersion
:
v1
.
SchemeGroupVersion
.
String
(),
Kind
:
"Secret"
},
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"with_spaces-4488d5b57d"
,
Name
:
"with_spaces-4488d5b57d"
,
},
},
...
...
pkg/printers/BUILD
View file @
0164605d
...
@@ -24,14 +24,11 @@ go_library(
...
@@ -24,14 +24,11 @@ go_library(
"tabwriter.go",
"tabwriter.go",
"template.go",
"template.go",
"template_flags.go",
"template_flags.go",
"versioned.go",
],
],
importpath = "k8s.io/kubernetes/pkg/printers",
importpath = "k8s.io/kubernetes/pkg/printers",
deps = [
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/kubectl/scheme:go_default_library",
"//pkg/kubectl/scheme:go_default_library",
"//vendor/github.com/ghodss/yaml:go_default_library",
"//vendor/github.com/ghodss/yaml:go_default_library",
"//vendor/github.com/golang/glog:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/meta:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
...
...
pkg/printers/customcolumn_flags.go
View file @
0164605d
...
@@ -23,7 +23,6 @@ import (
...
@@ -23,7 +23,6 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
"k8s.io/kubernetes/pkg/kubectl/scheme"
)
)
...
@@ -84,7 +83,7 @@ func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrin
...
@@ -84,7 +83,7 @@ func (f *CustomColumnsPrintFlags) ToPrinter(templateFormat string) (ResourcePrin
}
}
p
,
err
:=
NewCustomColumnsPrinterFromSpec
(
templateValue
,
decoder
,
f
.
NoHeaders
)
p
,
err
:=
NewCustomColumnsPrinterFromSpec
(
templateValue
,
decoder
,
f
.
NoHeaders
)
return
NewVersionedPrinter
(
p
,
legacyscheme
.
Scheme
,
legacyscheme
.
Scheme
,
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
,
err
return
p
,
err
}
}
// AddFlags receives a *cobra.Command reference and binds
// AddFlags receives a *cobra.Command reference and binds
...
...
pkg/printers/internalversion/printers_test.go
View file @
0164605d
...
@@ -78,27 +78,6 @@ func (in *TestStruct) DeepCopyObject() runtime.Object {
...
@@ -78,27 +78,6 @@ func (in *TestStruct) DeepCopyObject() runtime.Object {
panic
(
"never called"
)
panic
(
"never called"
)
}
}
func
TestVersionedPrinter
(
t
*
testing
.
T
)
{
original
:=
&
TestPrintType
{
Data
:
"value"
}
p
:=
printers
.
NewVersionedPrinter
(
printers
.
ResourcePrinterFunc
(
func
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
if
obj
==
original
{
t
.
Fatalf
(
"object should not be identical: %#v"
,
obj
)
}
if
obj
.
(
*
TestPrintType
)
.
Data
!=
"value"
{
t
.
Fatalf
(
"object was not converted: %#v"
,
obj
)
}
return
nil
}),
legacyscheme
.
Scheme
,
legacyscheme
.
Scheme
,
schema
.
GroupVersion
{
Group
:
""
,
Version
:
"v1"
},
)
if
err
:=
p
.
PrintObj
(
original
,
nil
);
err
!=
nil
{
t
.
Errorf
(
"unexpected error: %v"
,
err
)
}
}
func
TestPrintUnstructuredObject
(
t
*
testing
.
T
)
{
func
TestPrintUnstructuredObject
(
t
*
testing
.
T
)
{
obj
:=
&
unstructured
.
Unstructured
{
obj
:=
&
unstructured
.
Unstructured
{
Object
:
map
[
string
]
interface
{}{
Object
:
map
[
string
]
interface
{}{
...
@@ -438,15 +417,15 @@ func TestNamePrinter(t *testing.T) {
...
@@ -438,15 +417,15 @@ func TestNamePrinter(t *testing.T) {
func
TestTemplateStrings
(
t
*
testing
.
T
)
{
func
TestTemplateStrings
(
t
*
testing
.
T
)
{
// This unit tests the "exists" function as well as the template from update.sh
// This unit tests the "exists" function as well as the template from update.sh
table
:=
map
[
string
]
struct
{
table
:=
map
[
string
]
struct
{
pod
api
.
Pod
pod
v1
.
Pod
expect
string
expect
string
}{
}{
"nilInfo"
:
{
api
.
Pod
{},
"false"
},
"nilInfo"
:
{
v1
.
Pod
{},
"false"
},
"emptyInfo"
:
{
api
.
Pod
{
Status
:
api
.
PodStatus
{
ContainerStatuses
:
[]
api
.
ContainerStatus
{}}},
"false"
},
"emptyInfo"
:
{
v1
.
Pod
{
Status
:
v1
.
PodStatus
{
ContainerStatuses
:
[]
v1
.
ContainerStatus
{}}},
"false"
},
"fooExists"
:
{
"fooExists"
:
{
api
.
Pod
{
v1
.
Pod
{
Status
:
api
.
PodStatus
{
Status
:
v1
.
PodStatus
{
ContainerStatuses
:
[]
api
.
ContainerStatus
{
ContainerStatuses
:
[]
v1
.
ContainerStatus
{
{
{
Name
:
"foo"
,
Name
:
"foo"
,
},
},
...
@@ -456,9 +435,9 @@ func TestTemplateStrings(t *testing.T) {
...
@@ -456,9 +435,9 @@ func TestTemplateStrings(t *testing.T) {
"false"
,
"false"
,
},
},
"barExists"
:
{
"barExists"
:
{
api
.
Pod
{
v1
.
Pod
{
Status
:
api
.
PodStatus
{
Status
:
v1
.
PodStatus
{
ContainerStatuses
:
[]
api
.
ContainerStatus
{
ContainerStatuses
:
[]
v1
.
ContainerStatus
{
{
{
Name
:
"bar"
,
Name
:
"bar"
,
},
},
...
@@ -468,9 +447,9 @@ func TestTemplateStrings(t *testing.T) {
...
@@ -468,9 +447,9 @@ func TestTemplateStrings(t *testing.T) {
"false"
,
"false"
,
},
},
"bothExist"
:
{
"bothExist"
:
{
api
.
Pod
{
v1
.
Pod
{
Status
:
api
.
PodStatus
{
Status
:
v1
.
PodStatus
{
ContainerStatuses
:
[]
api
.
ContainerStatus
{
ContainerStatuses
:
[]
v1
.
ContainerStatus
{
{
{
Name
:
"foo"
,
Name
:
"foo"
,
},
},
...
@@ -483,16 +462,16 @@ func TestTemplateStrings(t *testing.T) {
...
@@ -483,16 +462,16 @@ func TestTemplateStrings(t *testing.T) {
"false"
,
"false"
,
},
},
"barValid"
:
{
"barValid"
:
{
api
.
Pod
{
v1
.
Pod
{
Status
:
api
.
PodStatus
{
Status
:
v1
.
PodStatus
{
ContainerStatuses
:
[]
api
.
ContainerStatus
{
ContainerStatuses
:
[]
v1
.
ContainerStatus
{
{
{
Name
:
"foo"
,
Name
:
"foo"
,
},
},
{
{
Name
:
"bar"
,
Name
:
"bar"
,
State
:
api
.
ContainerState
{
State
:
v1
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{
Running
:
&
v1
.
ContainerStateRunning
{
StartedAt
:
metav1
.
Time
{},
StartedAt
:
metav1
.
Time
{},
},
},
},
},
...
@@ -503,21 +482,21 @@ func TestTemplateStrings(t *testing.T) {
...
@@ -503,21 +482,21 @@ func TestTemplateStrings(t *testing.T) {
"false"
,
"false"
,
},
},
"bothValid"
:
{
"bothValid"
:
{
api
.
Pod
{
v1
.
Pod
{
Status
:
api
.
PodStatus
{
Status
:
v1
.
PodStatus
{
ContainerStatuses
:
[]
api
.
ContainerStatus
{
ContainerStatuses
:
[]
v1
.
ContainerStatus
{
{
{
Name
:
"foo"
,
Name
:
"foo"
,
State
:
api
.
ContainerState
{
State
:
v1
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{
Running
:
&
v1
.
ContainerStateRunning
{
StartedAt
:
metav1
.
Time
{},
StartedAt
:
metav1
.
Time
{},
},
},
},
},
},
},
{
{
Name
:
"bar"
,
Name
:
"bar"
,
State
:
api
.
ContainerState
{
State
:
v1
.
ContainerState
{
Running
:
&
api
.
ContainerStateRunning
{
Running
:
&
v1
.
ContainerStateRunning
{
StartedAt
:
metav1
.
Time
{},
StartedAt
:
metav1
.
Time
{},
},
},
},
},
...
@@ -530,13 +509,11 @@ func TestTemplateStrings(t *testing.T) {
...
@@ -530,13 +509,11 @@ func TestTemplateStrings(t *testing.T) {
}
}
// The point of this test is to verify that the below template works.
// The point of this test is to verify that the below template works.
tmpl
:=
`{{if (exists . "status" "containerStatuses")}}{{range .status.containerStatuses}}{{if (and (eq .name "foo") (exists . "state" "running"))}}true{{end}}{{end}}{{end}}`
tmpl
:=
`{{if (exists . "status" "containerStatuses")}}{{range .status.containerStatuses}}{{if (and (eq .name "foo") (exists . "state" "running"))}}true{{end}}{{end}}{{end}}`
p
,
err
:=
printers
.
NewGoTemplatePrinter
([]
byte
(
tmpl
))
p
rinter
,
err
:=
printers
.
NewGoTemplatePrinter
([]
byte
(
tmpl
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatalf
(
"tmpl fail: %v"
,
err
)
t
.
Fatalf
(
"tmpl fail: %v"
,
err
)
}
}
printer
:=
printers
.
NewVersionedPrinter
(
p
,
legacyscheme
.
Scheme
,
legacyscheme
.
Scheme
,
schema
.
GroupVersion
{
Group
:
""
,
Version
:
"v1"
})
for
name
,
item
:=
range
table
{
for
name
,
item
:=
range
table
{
buffer
:=
&
bytes
.
Buffer
{}
buffer
:=
&
bytes
.
Buffer
{}
err
=
printer
.
PrintObj
(
&
item
.
pod
,
buffer
)
err
=
printer
.
PrintObj
(
&
item
.
pod
,
buffer
)
...
@@ -568,19 +545,16 @@ func TestPrinters(t *testing.T) {
...
@@ -568,19 +545,16 @@ func TestPrinters(t *testing.T) {
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
templatePrinter
=
printers
.
NewVersionedPrinter
(
templatePrinter
,
legacyscheme
.
Scheme
,
legacyscheme
.
Scheme
,
v1
.
SchemeGroupVersion
)
templatePrinter2
,
err
=
printers
.
NewGoTemplatePrinter
([]
byte
(
"{{len .items}}"
))
templatePrinter2
,
err
=
printers
.
NewGoTemplatePrinter
([]
byte
(
"{{len .items}}"
))
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
templatePrinter2
=
printers
.
NewVersionedPrinter
(
templatePrinter2
,
legacyscheme
.
Scheme
,
legacyscheme
.
Scheme
,
v1
.
SchemeGroupVersion
)
jsonpathPrinter
,
err
=
printers
.
NewJSONPathPrinter
(
"{.metadata.name}"
)
jsonpathPrinter
,
err
=
printers
.
NewJSONPathPrinter
(
"{.metadata.name}"
)
if
err
!=
nil
{
if
err
!=
nil
{
t
.
Fatal
(
err
)
t
.
Fatal
(
err
)
}
}
jsonpathPrinter
=
printers
.
NewVersionedPrinter
(
jsonpathPrinter
,
legacyscheme
.
Scheme
,
legacyscheme
.
Scheme
,
v1
.
SchemeGroupVersion
)
genericPrinters
:=
map
[
string
]
printers
.
ResourcePrinter
{
genericPrinters
:=
map
[
string
]
printers
.
ResourcePrinter
{
"json"
:
&
printers
.
JSONPrinter
{},
"json"
:
&
printers
.
JSONPrinter
{},
...
...
pkg/printers/json_yaml_flags.go
View file @
0164605d
...
@@ -22,7 +22,6 @@ import (
...
@@ -22,7 +22,6 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime"
kubectlscheme
"k8s.io/kubernetes/pkg/kubectl/scheme"
)
)
// JSONYamlPrintFlags provides default flags necessary for json/yaml printing.
// JSONYamlPrintFlags provides default flags necessary for json/yaml printing.
...
@@ -49,9 +48,7 @@ func (f *JSONYamlPrintFlags) ToPrinter(outputFormat string) (ResourcePrinter, er
...
@@ -49,9 +48,7 @@ func (f *JSONYamlPrintFlags) ToPrinter(outputFormat string) (ResourcePrinter, er
return
nil
,
NoCompatiblePrinterError
{
Options
:
f
,
OutputFormat
:
&
outputFormat
}
return
nil
,
NoCompatiblePrinterError
{
Options
:
f
,
OutputFormat
:
&
outputFormat
}
}
}
// wrap the printer in a versioning printer that understands when to convert and when not to convert
return
printer
,
nil
return
NewVersionedPrinter
(
printer
,
f
.
Scheme
,
f
.
Scheme
.
(
runtime
.
ObjectTyper
),
kubectlscheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
),
nil
}
}
// AddFlags receives a *cobra.Command reference and binds
// AddFlags receives a *cobra.Command reference and binds
...
...
pkg/printers/versioned.go
deleted
100644 → 0
View file @
64bb688e
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
printers
import
(
"fmt"
"io"
"github.com/golang/glog"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
)
// VersionedPrinter takes runtime objects and ensures they are converted to a given API version
// prior to being passed to a nested printer.
type
VersionedPrinter
struct
{
printer
ResourcePrinter
converter
runtime
.
ObjectConvertor
typer
runtime
.
ObjectTyper
versions
[]
schema
.
GroupVersion
}
// NewVersionedPrinter wraps a printer to convert objects to a known API version prior to printing.
func
NewVersionedPrinter
(
printer
ResourcePrinter
,
converter
runtime
.
ObjectConvertor
,
typer
runtime
.
ObjectTyper
,
versions
...
schema
.
GroupVersion
)
ResourcePrinter
{
return
&
VersionedPrinter
{
printer
:
printer
,
converter
:
converter
,
typer
:
typer
,
versions
:
versions
,
}
}
// PrintObj implements ResourcePrinter
func
(
p
*
VersionedPrinter
)
PrintObj
(
obj
runtime
.
Object
,
w
io
.
Writer
)
error
{
// if we're unstructured, no conversion necessary
if
_
,
ok
:=
obj
.
(
*
unstructured
.
Unstructured
);
ok
{
return
p
.
printer
.
PrintObj
(
obj
,
w
)
}
// if we're already external, no conversion necessary
gvks
,
_
,
err
:=
p
.
typer
.
ObjectKinds
(
obj
)
if
err
!=
nil
{
glog
.
V
(
1
)
.
Infof
(
"error determining type for %T, using passed object: %v"
,
obj
,
err
)
return
p
.
printer
.
PrintObj
(
obj
,
w
)
}
needsConversion
:=
false
for
_
,
gvk
:=
range
gvks
{
if
len
(
gvk
.
Version
)
==
0
||
gvk
.
Version
==
runtime
.
APIVersionInternal
{
needsConversion
=
true
}
}
if
!
needsConversion
{
// We might be an external type, but have empty kind/apiVersion fields. Ensure they are populated before printing.
if
obj
.
GetObjectKind
()
.
GroupVersionKind
()
.
Empty
()
{
obj
=
obj
.
DeepCopyObject
()
obj
.
GetObjectKind
()
.
SetGroupVersionKind
(
gvks
[
0
])
}
return
p
.
printer
.
PrintObj
(
obj
,
w
)
}
if
len
(
p
.
versions
)
==
0
{
return
fmt
.
Errorf
(
"no version specified, object cannot be converted"
)
}
converted
,
err
:=
p
.
converter
.
ConvertToVersion
(
obj
,
schema
.
GroupVersions
(
p
.
versions
))
if
err
!=
nil
{
return
err
}
return
p
.
printer
.
PrintObj
(
converted
,
w
)
}
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