Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 90 additions & 4 deletions pkg/image/dockerv1client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,13 @@ var (

// convertImageToDockerImage converts an object of type *godockerclient.Image to *docker10.DockerImage
func convertImageToDockerImage(in *godockerclient.Image, out *docker10.DockerImage, s conversion.Scope) error {
if err := s.Convert(&in.Config, &out.Config, conversion.AllowDifferentFieldTypeNames); err != nil {
if out.Config == nil {
out.Config = new(docker10.DockerConfig)
}
if err := convertConfigToDockerConfig(in.Config, out.Config); err != nil {
return err
}
if err := s.Convert(&in.ContainerConfig, &out.ContainerConfig, conversion.AllowDifferentFieldTypeNames); err != nil {
if err := convertConfigToDockerConfig(&in.ContainerConfig, &out.ContainerConfig); err != nil {
return err
}
out.ID = in.ID
Expand All @@ -53,12 +56,55 @@ func convertImageToDockerImage(in *godockerclient.Image, out *docker10.DockerIma
return nil
}

// convertConfigToDockerConfig converts an object of type *godockerclient.Config to *docker10.DockerConfig
func convertConfigToDockerConfig(in *godockerclient.Config, out *docker10.DockerConfig) error {
if in == nil {
return nil
}
out.Hostname = in.Hostname
out.Domainname = in.Domainname
out.User = in.User
out.Memory = in.Memory
out.MemorySwap = in.MemorySwap
out.CPUShares = in.CPUShares
out.CPUSet = in.CPUSet
out.AttachStdin = in.AttachStdin
out.AttachStdout = in.AttachStdout
out.AttachStderr = in.AttachStderr
out.PortSpecs = in.PortSpecs
if out.ExposedPorts == nil {
out.ExposedPorts = make(map[string]struct{})
}
for k, v := range in.ExposedPorts {
out.ExposedPorts[string(k)] = v
}
out.Tty = in.Tty
out.OpenStdin = in.OpenStdin
out.StdinOnce = in.StdinOnce
out.Env = in.Env
out.Cmd = in.Cmd
out.DNS = in.DNS
out.Image = in.Image
out.Volumes = in.Volumes
out.VolumesFrom = in.VolumesFrom
out.WorkingDir = in.WorkingDir
out.Entrypoint = in.Entrypoint
out.NetworkDisabled = in.NetworkDisabled
out.SecurityOpts = in.SecurityOpts
out.OnBuild = in.OnBuild
out.Labels = in.Labels
return nil
}

// convertDockerImageToImage converts an object of type *docker10.DockerImage to *godockerclient.Image
func convertDockerImageToImage(in *docker10.DockerImage, out *godockerclient.Image, s conversion.Scope) error {
if err := s.Convert(&in.Config, &out.Config, conversion.AllowDifferentFieldTypeNames); err != nil {
if out.Config == nil {
out.Config = new(godockerclient.Config)
}
if err := convertDockerConfigToConfig(in.Config, out.Config); err != nil {
return err
}
if err := s.Convert(&in.ContainerConfig, &out.ContainerConfig, conversion.AllowDifferentFieldTypeNames); err != nil {
if err := convertDockerConfigToConfig(&in.ContainerConfig, &out.ContainerConfig); err != nil {
return err
}
out.ID = in.ID
Expand All @@ -73,6 +119,46 @@ func convertDockerImageToImage(in *docker10.DockerImage, out *godockerclient.Ima
return nil
}

// convertDockerConfigToConfig converts an object of type *docker10.DockerConfig to *godockerclient.Config
func convertDockerConfigToConfig(in *docker10.DockerConfig, out *godockerclient.Config) error {
if in == nil {
return nil
}
out.Hostname = in.Hostname
out.Domainname = in.Domainname
out.User = in.User
out.Memory = in.Memory
out.MemorySwap = in.MemorySwap
out.CPUShares = in.CPUShares
out.CPUSet = in.CPUSet
out.AttachStdin = in.AttachStdin
out.AttachStdout = in.AttachStdout
out.AttachStderr = in.AttachStderr
out.PortSpecs = in.PortSpecs
if out.ExposedPorts == nil {
out.ExposedPorts = make(map[godockerclient.Port]struct{})
}
for k, v := range in.ExposedPorts {
out.ExposedPorts[godockerclient.Port(k)] = v
}
out.Tty = in.Tty
out.OpenStdin = in.OpenStdin
out.StdinOnce = in.StdinOnce
out.Env = in.Env
out.Cmd = in.Cmd
out.DNS = in.DNS
out.Image = in.Image
out.Volumes = in.Volumes
out.VolumesFrom = in.VolumesFrom
out.WorkingDir = in.WorkingDir
out.Entrypoint = in.Entrypoint
out.NetworkDisabled = in.NetworkDisabled
out.SecurityOpts = in.SecurityOpts
out.OnBuild = in.OnBuild
out.Labels = in.Labels
return nil
}

func init() {
ImageScheme.AddConversionFunc((*godockerclient.Image)(nil), (*docker10.DockerImage)(nil), func(a, b interface{}, scope conversion.Scope) error {
return convertImageToDockerImage(a.(*godockerclient.Image), b.(*docker10.DockerImage), scope)
Expand Down
12 changes: 12 additions & 0 deletions pkg/image/dockerv1client/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,22 @@ import (
"strings"
"testing"
"time"

"github.com/fsouza/go-dockerclient"
dockerv10 "github.com/openshift/api/image/docker10"
)

// tests of running registries are done in the integration client test

func TestImageConversion(t *testing.T) {
if err := ImageScheme.Convert(&docker.Image{}, &dockerv10.DockerImage{}, nil); err != nil {
t.Errorf("Unexpected error when converting Image to DockerImage: %v", err)
}
if err := ImageScheme.Convert(&dockerv10.DockerImage{}, &docker.Image{}, nil); err != nil {
t.Errorf("Unexpected error when converting DockerImage to Image: %v", err)
}
}

func TestHTTPFallback(t *testing.T) {
called := make(chan struct{}, 2)
var uri *url.URL
Expand Down