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
5578dc99
Commit
5578dc99
authored
May 07, 2015
by
Wojciech Tyczynski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improvements for conversions generator
parent
63182318
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
71 additions
and
19 deletions
+71
-19
conversion.go
cmd/kube-conversion/conversion.go
+2
-2
conversion.go
pkg/api/v1beta3/conversion.go
+20
-4
conversion_generated.go
pkg/api/v1beta3/conversion_generated.go
+2
-2
conversion_generation_test.go
pkg/runtime/conversion_generation_test.go
+3
-3
conversion_generator.go
pkg/runtime/conversion_generator.go
+44
-8
No files found.
cmd/kube-conversion/conversion.go
View file @
5578dc99
...
@@ -25,7 +25,7 @@ import (
...
@@ -25,7 +25,7 @@ import (
_
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta1"
_
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta1"
_
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta2"
_
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta2"
_
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta3"
_
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta3"
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion
"
pkg_runtime
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime
"
"github.com/golang/glog"
"github.com/golang/glog"
flag
"github.com/spf13/pflag"
flag
"github.com/spf13/pflag"
...
@@ -64,7 +64,7 @@ func main() {
...
@@ -64,7 +64,7 @@ func main() {
nameOut
=
file
nameOut
=
file
}
}
generator
:=
conversion
.
NewGenerator
(
api
.
Scheme
.
Raw
())
generator
:=
pkg_runtime
.
NewGenerator
(
api
.
Scheme
.
Raw
())
// TODO(wojtek-t): Change the overwrites to a flag.
// TODO(wojtek-t): Change the overwrites to a flag.
generator
.
OverwritePackage
(
*
version
,
""
)
generator
.
OverwritePackage
(
*
version
,
""
)
generator
.
OverwritePackage
(
"api"
,
"newer"
)
generator
.
OverwritePackage
(
"api"
,
"newer"
)
...
...
pkg/api/v1beta3/conversion.go
View file @
5578dc99
...
@@ -131,6 +131,9 @@ func init() {
...
@@ -131,6 +131,9 @@ func init() {
}
}
func
convert_v1beta3_Container_To_api_Container
(
in
*
Container
,
out
*
newer
.
Container
,
s
conversion
.
Scope
)
error
{
func
convert_v1beta3_Container_To_api_Container
(
in
*
Container
,
out
*
newer
.
Container
,
s
conversion
.
Scope
)
error
{
if
defaulting
,
found
:=
s
.
DefaultingInterface
(
reflect
.
TypeOf
(
*
in
));
found
{
defaulting
.
(
func
(
*
Container
))(
in
)
}
out
.
Name
=
in
.
Name
out
.
Name
=
in
.
Name
out
.
Image
=
in
.
Image
out
.
Image
=
in
.
Image
if
in
.
Command
!=
nil
{
if
in
.
Command
!=
nil
{
...
@@ -212,13 +215,21 @@ func convert_v1beta3_Container_To_api_Container(in *Container, out *newer.Contai
...
@@ -212,13 +215,21 @@ func convert_v1beta3_Container_To_api_Container(in *Container, out *newer.Contai
}
}
}
}
}
}
if
err
:=
s
.
Convert
(
&
in
.
SecurityContext
,
&
out
.
SecurityContext
,
0
);
err
!=
nil
{
if
in
.
SecurityContext
!=
nil
{
return
err
out
.
SecurityContext
=
new
(
newer
.
SecurityContext
)
if
err
:=
convert_v1beta3_SecurityContext_To_api_SecurityContext
(
in
.
SecurityContext
,
out
.
SecurityContext
,
s
);
err
!=
nil
{
return
err
}
}
else
{
out
.
SecurityContext
=
nil
}
}
return
nil
return
nil
}
}
func
convert_api_Container_To_v1beta3_Container
(
in
*
newer
.
Container
,
out
*
Container
,
s
conversion
.
Scope
)
error
{
func
convert_api_Container_To_v1beta3_Container
(
in
*
newer
.
Container
,
out
*
Container
,
s
conversion
.
Scope
)
error
{
if
defaulting
,
found
:=
s
.
DefaultingInterface
(
reflect
.
TypeOf
(
*
in
));
found
{
defaulting
.
(
func
(
*
newer
.
Container
))(
in
)
}
out
.
Name
=
in
.
Name
out
.
Name
=
in
.
Name
out
.
Image
=
in
.
Image
out
.
Image
=
in
.
Image
if
in
.
Command
!=
nil
{
if
in
.
Command
!=
nil
{
...
@@ -287,8 +298,13 @@ func convert_api_Container_To_v1beta3_Container(in *newer.Container, out *Contai
...
@@ -287,8 +298,13 @@ func convert_api_Container_To_v1beta3_Container(in *newer.Container, out *Contai
}
}
out
.
TerminationMessagePath
=
in
.
TerminationMessagePath
out
.
TerminationMessagePath
=
in
.
TerminationMessagePath
out
.
ImagePullPolicy
=
PullPolicy
(
in
.
ImagePullPolicy
)
out
.
ImagePullPolicy
=
PullPolicy
(
in
.
ImagePullPolicy
)
if
err
:=
s
.
Convert
(
&
in
.
SecurityContext
,
&
out
.
SecurityContext
,
0
);
err
!=
nil
{
if
in
.
SecurityContext
!=
nil
{
return
err
out
.
SecurityContext
=
new
(
SecurityContext
)
if
err
:=
convert_api_SecurityContext_To_v1beta3_SecurityContext
(
in
.
SecurityContext
,
out
.
SecurityContext
,
s
);
err
!=
nil
{
return
err
}
}
else
{
out
.
SecurityContext
=
nil
}
}
// now that we've converted set the container field from security context
// now that we've converted set the container field from security context
if
out
.
SecurityContext
!=
nil
&&
out
.
SecurityContext
.
Privileged
!=
nil
{
if
out
.
SecurityContext
!=
nil
&&
out
.
SecurityContext
.
Privileged
!=
nil
{
...
...
pkg/api/v1beta3/conversion_generated.go
View file @
5578dc99
...
@@ -2614,7 +2614,7 @@ func convert_v1beta3_PodSpec_To_api_PodSpec(in *PodSpec, out *newer.PodSpec, s c
...
@@ -2614,7 +2614,7 @@ func convert_v1beta3_PodSpec_To_api_PodSpec(in *PodSpec, out *newer.PodSpec, s c
if
in
.
Containers
!=
nil
{
if
in
.
Containers
!=
nil
{
out
.
Containers
=
make
([]
newer
.
Container
,
len
(
in
.
Containers
))
out
.
Containers
=
make
([]
newer
.
Container
,
len
(
in
.
Containers
))
for
i
:=
range
in
.
Containers
{
for
i
:=
range
in
.
Containers
{
if
err
:=
s
.
Convert
(
&
in
.
Containers
[
i
],
&
out
.
Containers
[
i
],
0
);
err
!=
nil
{
if
err
:=
convert_v1beta3_Container_To_api_Container
(
&
in
.
Containers
[
i
],
&
out
.
Containers
[
i
],
s
);
err
!=
nil
{
return
err
return
err
}
}
}
}
...
@@ -2659,7 +2659,7 @@ func convert_api_PodSpec_To_v1beta3_PodSpec(in *newer.PodSpec, out *PodSpec, s c
...
@@ -2659,7 +2659,7 @@ func convert_api_PodSpec_To_v1beta3_PodSpec(in *newer.PodSpec, out *PodSpec, s c
if
in
.
Containers
!=
nil
{
if
in
.
Containers
!=
nil
{
out
.
Containers
=
make
([]
Container
,
len
(
in
.
Containers
))
out
.
Containers
=
make
([]
Container
,
len
(
in
.
Containers
))
for
i
:=
range
in
.
Containers
{
for
i
:=
range
in
.
Containers
{
if
err
:=
s
.
Convert
(
&
in
.
Containers
[
i
],
&
out
.
Containers
[
i
],
0
);
err
!=
nil
{
if
err
:=
convert_api_Container_To_v1beta3_Container
(
&
in
.
Containers
[
i
],
&
out
.
Containers
[
i
],
s
);
err
!=
nil
{
return
err
return
err
}
}
}
}
...
...
pkg/
conversion/code
_generation_test.go
→
pkg/
runtime/conversion
_generation_test.go
View file @
5578dc99
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.
*/
*/
package
conversion
_test
package
runtime
_test
import
(
import
(
"bufio"
"bufio"
...
@@ -26,13 +26,13 @@ import (
...
@@ -26,13 +26,13 @@ import (
"testing"
"testing"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/api"
"github.com/GoogleCloudPlatform/kubernetes/pkg/
conversion
"
"github.com/GoogleCloudPlatform/kubernetes/pkg/
runtime
"
"github.com/golang/glog"
"github.com/golang/glog"
)
)
func
generateConversions
(
t
*
testing
.
T
,
version
string
)
(
bytes
.
Buffer
,
bytes
.
Buffer
)
{
func
generateConversions
(
t
*
testing
.
T
,
version
string
)
(
bytes
.
Buffer
,
bytes
.
Buffer
)
{
g
:=
conversion
.
NewGenerator
(
api
.
Scheme
.
Raw
())
g
:=
runtime
.
NewGenerator
(
api
.
Scheme
.
Raw
())
g
.
OverwritePackage
(
version
,
""
)
g
.
OverwritePackage
(
version
,
""
)
g
.
OverwritePackage
(
"api"
,
"newer"
)
g
.
OverwritePackage
(
"api"
,
"newer"
)
for
_
,
knownType
:=
range
api
.
Scheme
.
KnownTypes
(
version
)
{
for
_
,
knownType
:=
range
api
.
Scheme
.
KnownTypes
(
version
)
{
...
...
pkg/
conversion/
generator.go
→
pkg/
runtime/conversion_
generator.go
View file @
5578dc99
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
...
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
limitations under the License.
*/
*/
package
conversion
package
runtime
import
(
import
(
"fmt"
"fmt"
...
@@ -22,6 +22,8 @@ import (
...
@@ -22,6 +22,8 @@ import (
"reflect"
"reflect"
"sort"
"sort"
"strings"
"strings"
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion"
)
)
type
Generator
interface
{
type
Generator
interface
{
...
@@ -31,7 +33,7 @@ type Generator interface {
...
@@ -31,7 +33,7 @@ type Generator interface {
OverwritePackage
(
pkg
,
overwrite
string
)
OverwritePackage
(
pkg
,
overwrite
string
)
}
}
func
NewGenerator
(
scheme
*
Scheme
)
Generator
{
func
NewGenerator
(
scheme
*
conversion
.
Scheme
)
Generator
{
return
&
generator
{
return
&
generator
{
scheme
:
scheme
,
scheme
:
scheme
,
convertibles
:
make
(
map
[
reflect
.
Type
]
reflect
.
Type
),
convertibles
:
make
(
map
[
reflect
.
Type
]
reflect
.
Type
),
...
@@ -42,7 +44,7 @@ func NewGenerator(scheme *Scheme) Generator {
...
@@ -42,7 +44,7 @@ func NewGenerator(scheme *Scheme) Generator {
var
complexTypes
[]
reflect
.
Kind
=
[]
reflect
.
Kind
{
reflect
.
Map
,
reflect
.
Ptr
,
reflect
.
Slice
,
reflect
.
Interface
,
reflect
.
Struct
}
var
complexTypes
[]
reflect
.
Kind
=
[]
reflect
.
Kind
{
reflect
.
Map
,
reflect
.
Ptr
,
reflect
.
Slice
,
reflect
.
Interface
,
reflect
.
Struct
}
type
generator
struct
{
type
generator
struct
{
scheme
*
Scheme
scheme
*
conversion
.
Scheme
convertibles
map
[
reflect
.
Type
]
reflect
.
Type
convertibles
map
[
reflect
.
Type
]
reflect
.
Type
// If pkgOverwrites is set for a given package name, that package name
// If pkgOverwrites is set for a given package name, that package name
// will be replaced while writing conversion function. If empty, package
// will be replaced while writing conversion function. If empty, package
...
@@ -449,7 +451,7 @@ func (g *generator) writeConversionForSlice(w io.Writer, inField, outField refle
...
@@ -449,7 +451,7 @@ func (g *generator) writeConversionForSlice(w io.Writer, inField, outField refle
}
}
if
!
assigned
{
if
!
assigned
{
assignStmt
:=
""
assignStmt
:=
""
if
g
.
exists
Convert
ionFunction
(
inField
.
Type
.
Elem
(),
outField
.
Type
.
Elem
())
{
if
g
.
exists
DedicatedConvers
ionFunction
(
inField
.
Type
.
Elem
(),
outField
.
Type
.
Elem
())
{
assignFormat
:=
"if err := %s(&in.%s[i], &out.%s[i], s); err != nil {
\n
"
assignFormat
:=
"if err := %s(&in.%s[i], &out.%s[i], s); err != nil {
\n
"
funcName
:=
conversionFunctionName
(
inField
.
Type
.
Elem
(),
outField
.
Type
.
Elem
())
funcName
:=
conversionFunctionName
(
inField
.
Type
.
Elem
(),
outField
.
Type
.
Elem
())
assignStmt
=
fmt
.
Sprintf
(
assignFormat
,
funcName
,
inField
.
Name
,
outField
.
Name
)
assignStmt
=
fmt
.
Sprintf
(
assignFormat
,
funcName
,
inField
.
Name
,
outField
.
Name
)
...
@@ -539,7 +541,7 @@ func (g *generator) writeConversionForPtr(w io.Writer, inField, outField reflect
...
@@ -539,7 +541,7 @@ func (g *generator) writeConversionForPtr(w io.Writer, inField, outField reflect
return
err
return
err
}
}
assignStmt
:=
""
assignStmt
:=
""
if
g
.
exists
Convert
ionFunction
(
inField
.
Type
.
Elem
(),
outField
.
Type
.
Elem
())
{
if
g
.
exists
DedicatedConvers
ionFunction
(
inField
.
Type
.
Elem
(),
outField
.
Type
.
Elem
())
{
newFormat
:=
"out.%s = new(%s)
\n
"
newFormat
:=
"out.%s = new(%s)
\n
"
newStmt
:=
fmt
.
Sprintf
(
newFormat
,
outField
.
Name
,
g
.
typeName
(
outField
.
Type
.
Elem
()))
newStmt
:=
fmt
.
Sprintf
(
newFormat
,
outField
.
Name
,
g
.
typeName
(
outField
.
Type
.
Elem
()))
if
err
:=
writeLine
(
w
,
indent
+
1
,
newStmt
);
err
!=
nil
{
if
err
:=
writeLine
(
w
,
indent
+
1
,
newStmt
);
err
!=
nil
{
...
@@ -580,7 +582,8 @@ func (g *generator) writeConversionForStruct(w io.Writer, inType, outType reflec
...
@@ -580,7 +582,8 @@ func (g *generator) writeConversionForStruct(w io.Writer, inType, outType reflec
inField
:=
inType
.
Field
(
i
)
inField
:=
inType
.
Field
(
i
)
outField
,
_
:=
outType
.
FieldByName
(
inField
.
Name
)
outField
,
_
:=
outType
.
FieldByName
(
inField
.
Name
)
if
g
.
scheme
.
Converter
()
.
HasConversionFunc
(
inField
.
Type
,
outField
.
Type
)
{
existsConversion
:=
g
.
scheme
.
Converter
()
.
HasConversionFunc
(
inField
.
Type
,
outField
.
Type
)
if
existsConversion
&&
!
g
.
existsDedicatedConversionFunction
(
inField
.
Type
,
outField
.
Type
)
{
// Use the conversion method that is already defined.
// Use the conversion method that is already defined.
assignFormat
:=
"if err := s.Convert(&in.%s, &out.%s, 0); err != nil {
\n
"
assignFormat
:=
"if err := s.Convert(&in.%s, &out.%s, 0); err != nil {
\n
"
assignStmt
:=
fmt
.
Sprintf
(
assignFormat
,
inField
.
Name
,
outField
.
Name
)
assignStmt
:=
fmt
.
Sprintf
(
assignFormat
,
inField
.
Name
,
outField
.
Name
)
...
@@ -644,7 +647,7 @@ func (g *generator) writeConversionForStruct(w io.Writer, inType, outType reflec
...
@@ -644,7 +647,7 @@ func (g *generator) writeConversionForStruct(w io.Writer, inType, outType reflec
}
}
assignStmt
:=
""
assignStmt
:=
""
if
g
.
exists
Convert
ionFunction
(
inField
.
Type
,
outField
.
Type
)
{
if
g
.
exists
DedicatedConvers
ionFunction
(
inField
.
Type
,
outField
.
Type
)
{
assignFormat
:=
"if err := %s(&in.%s, &out.%s, s); err != nil {
\n
"
assignFormat
:=
"if err := %s(&in.%s, &out.%s, s); err != nil {
\n
"
funcName
:=
conversionFunctionName
(
inField
.
Type
,
outField
.
Type
)
funcName
:=
conversionFunctionName
(
inField
.
Type
,
outField
.
Type
)
assignStmt
=
fmt
.
Sprintf
(
assignFormat
,
funcName
,
inField
.
Name
,
outField
.
Name
)
assignStmt
=
fmt
.
Sprintf
(
assignFormat
,
funcName
,
inField
.
Name
,
outField
.
Name
)
...
@@ -690,7 +693,7 @@ func (g *generator) writeConversionForType(w io.Writer, inType, outType reflect.
...
@@ -690,7 +693,7 @@ func (g *generator) writeConversionForType(w io.Writer, inType, outType reflect.
return
nil
return
nil
}
}
func
(
g
*
generator
)
existsConver
t
ionFunction
(
inType
,
outType
reflect
.
Type
)
bool
{
func
(
g
*
generator
)
existsConver
s
ionFunction
(
inType
,
outType
reflect
.
Type
)
bool
{
if
val
,
found
:=
g
.
convertibles
[
inType
];
found
&&
val
==
outType
{
if
val
,
found
:=
g
.
convertibles
[
inType
];
found
&&
val
==
outType
{
return
true
return
true
}
}
...
@@ -700,6 +703,39 @@ func (g *generator) existsConvertionFunction(inType, outType reflect.Type) bool
...
@@ -700,6 +703,39 @@ func (g *generator) existsConvertionFunction(inType, outType reflect.Type) bool
return
false
return
false
}
}
// TODO(wojtek-t): We should somehow change the conversion methods registered under:
// pkg/runtime/scheme.go to implement the naming convention for conversion functions
// and get rid of this hack.
type
typePair
struct
{
inType
reflect
.
Type
outType
reflect
.
Type
}
var
defaultConversions
[]
typePair
=
[]
typePair
{
{
reflect
.
TypeOf
([]
RawExtension
{}),
reflect
.
TypeOf
([]
Object
{})},
{
reflect
.
TypeOf
([]
Object
{}),
reflect
.
TypeOf
([]
RawExtension
{})},
{
reflect
.
TypeOf
(
RawExtension
{}),
reflect
.
TypeOf
(
EmbeddedObject
{})},
{
reflect
.
TypeOf
(
EmbeddedObject
{}),
reflect
.
TypeOf
(
RawExtension
{})},
}
func
(
g
*
generator
)
existsDedicatedConversionFunction
(
inType
,
outType
reflect
.
Type
)
bool
{
if
inType
==
outType
{
// Assume that conversion are not defined for "deep copies".
return
false
}
if
g
.
existsConversionFunction
(
inType
,
outType
)
{
return
true
}
for
_
,
conv
:=
range
defaultConversions
{
if
conv
.
inType
==
inType
&&
conv
.
outType
==
outType
{
return
false
}
}
return
g
.
scheme
.
Converter
()
.
HasConversionFunc
(
inType
,
outType
)
}
func
(
g
*
generator
)
OverwritePackage
(
pkg
,
overwrite
string
)
{
func
(
g
*
generator
)
OverwritePackage
(
pkg
,
overwrite
string
)
{
g
.
pkgOverwrites
[
pkg
]
=
overwrite
g
.
pkgOverwrites
[
pkg
]
=
overwrite
}
}
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