Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
Signed-off-by: Simon Ferquel <simon.ferquel@docker.com>
  • Loading branch information
simonferquel committed Jan 28, 2019
1 parent 7a43a3a commit 2b49e95
Show file tree
Hide file tree
Showing 43 changed files with 79 additions and 3,746 deletions.
52 changes: 39 additions & 13 deletions cli/command/stack/kubernetes/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import (
const (
// PullSecretExtraField is an extra field on ServiceConfigs usable to reference a pull secret
PullSecretExtraField = "x-pull-secret"
// PullSecretExtraField is an extra field on ServiceConfigs usable to specify a pull policy
PullPolicyExtraField = "x-pull-policy"
)

// NewStackConverter returns a converter from types.Config (compose) to the specified
Expand Down Expand Up @@ -242,22 +244,32 @@ func fromComposeConfigs(s map[string]composeTypes.ConfigObjConfig) map[string]la
}

func fromComposeServiceConfig(s composeTypes.ServiceConfig, caps composeCapabilities) (latest.ServiceConfig, error) {
var userID *int64
var (
userID *int64
pullSecret string
pullPolicy string
err error
)
if s.User != "" {
numerical, err := strconv.Atoi(s.User)
if err == nil {
unixUserID := int64(numerical)
userID = &unixUserID
}
}
var pullSecret string
if psInterface, ok := s.Extras[PullSecretExtraField]; ok {
if !caps.hasPullSecrets {
return latest.ServiceConfig{}, errors.Errorf("stack API version %s does not support pull secrets, please use version v1alpha3", caps.apiVersion)
}
if pullSecret, ok = psInterface.(string); !ok {
return latest.ServiceConfig{}, errors.Errorf("pull secret %v type is %T, should be a string", psInterface, psInterface)
}
pullSecret, err = resolveServiceExtra(s, PullSecretExtraField)
if err != nil {
return latest.ServiceConfig{}, err
}
pullPolicy, err = resolveServiceExtra(s, PullPolicyExtraField)
if err != nil {
return latest.ServiceConfig{}, err
}
if pullSecret != "" && !caps.hasPullSecrets {
return latest.ServiceConfig{}, errors.Errorf("stack API version %s does not support pull secrets, please use version v1alpha3", caps.apiVersion)
}
if pullPolicy != "" && !caps.hasPullPolicies {
return latest.ServiceConfig{}, errors.Errorf("stack API version %s does not support pull policies, please use version v1alpha3", caps.apiVersion)
}
return latest.ServiceConfig{
Name: s.Name,
Expand Down Expand Up @@ -295,9 +307,21 @@ func fromComposeServiceConfig(s composeTypes.ServiceConfig, caps composeCapabili
Volumes: fromComposeServiceVolumeConfig(s.Volumes),
WorkingDir: s.WorkingDir,
PullSecret: pullSecret,
PullPolicy: pullPolicy,
}, nil
}

func resolveServiceExtra(s composeTypes.ServiceConfig, field string) (string, error) {
if iface, ok := s.Extras[field]; ok {
value, ok := iface.(string)
if !ok {
return "", errors.Errorf("value %v type is %T, should be a string", iface, iface)
}
return value, nil
}
return "", nil
}

func fromComposePorts(ports []composeTypes.ServicePortConfig) []latest.ServicePortConfig {
if ports == nil {
return nil
Expand Down Expand Up @@ -465,12 +489,14 @@ var (
apiVersion: "v1beta2",
}
v1alpha3Capabilities = composeCapabilities{
apiVersion: "v1alpha3",
hasPullSecrets: true,
apiVersion: "v1alpha3",
hasPullSecrets: true,
hasPullPolicies: true,
}
)

type composeCapabilities struct {
apiVersion string
hasPullSecrets bool
apiVersion string
hasPullSecrets bool
hasPullPolicies bool
}
37 changes: 33 additions & 4 deletions cli/command/stack/kubernetes/convert_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kubernetes

import (
"fmt"
"io/ioutil"
"path/filepath"
"testing"
Expand Down Expand Up @@ -165,23 +166,24 @@ func TestConvertFromToV1alpha3(t *testing.T) {
assert.DeepEqual(t, stackv1alpha3, gotBack)
}

func loadTestStackWithPullSecret(t *testing.T) *composetypes.Config {
func loadTestStackWith(t *testing.T, with string) *composetypes.Config {
t.Helper()
data, err := ioutil.ReadFile("testdata/compose-with-pull-secret.yml")
filePath := fmt.Sprintf("testdata/compose-with-%s.yml", with)
data, err := ioutil.ReadFile(filePath)
assert.NilError(t, err)
yamlData, err := loader.ParseYAML(data)
assert.NilError(t, err)
cfg, err := loader.Load(composetypes.ConfigDetails{
ConfigFiles: []composetypes.ConfigFile{
{Config: yamlData, Filename: "testdata/compose-with-pull-secret.yml"},
{Config: yamlData, Filename: filePath},
},
})
assert.NilError(t, err)
return cfg
}

func TestHandlePullSecret(t *testing.T) {
testData := loadTestStackWithPullSecret(t)
testData := loadTestStackWith(t, "pull-secret")
cases := []struct {
version string
err string
Expand All @@ -206,3 +208,30 @@ func TestHandlePullSecret(t *testing.T) {
})
}
}

func TestHandlePullPolicy(t *testing.T) {
testData := loadTestStackWith(t, "pull-policy")
cases := []struct {
version string
err string
}{
{version: "v1beta1", err: "stack API version v1beta1 does not support pull policies, please use version v1alpha3"},
{version: "v1beta2", err: "stack API version v1beta2 does not support pull policies, please use version v1alpha3"},
{version: "v1alpha3"},
}

for _, c := range cases {
t.Run(c.version, func(t *testing.T) {
conv, err := NewStackConverter(c.version)
assert.NilError(t, err)
s, err := conv.FromCompose(ioutil.Discard, "test", testData)
if c.err != "" {
assert.Error(t, err, c.err)

} else {
assert.NilError(t, err)
assert.Equal(t, s.Spec.Services[0].PullPolicy, "Never")
}
})
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
version: "3.7"
services:
test:
image: "some-image"
x-pull-policy: "Never"
2 changes: 1 addition & 1 deletion vendor.conf
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ github.com/davecgh/go-spew 346938d642f2ec3594ed81d874461961cd0faa76 # v1.1.0
github.com/dgrijalva/jwt-go a2c85815a77d0f951e33ba4db5ae93629a1530af
github.com/docker/distribution 83389a148052d74ac602f5f1d62f86ff2f3c4aa5
github.com/docker/docker f76d6a078d881f410c00e8d900dcdfc2e026c841
github.com/docker/compose-on-kubernetes 565edc4d5054d22e3e49ca79aefd947b7d3f60e5 # master w/ v1alpha3+pullsecrets
github.com/docker/compose-on-kubernetes 356b2919c496f7e988f6e0dfe7e67d919602e14e # master w/ v1alpha3+pullsecrets+pull-policy
github.com/docker/docker-credential-helpers 5241b46610f2491efdf9d1c85f1ddf5b02f6d962
# the docker/go package contains a customized version of canonical/json
# and is used by Notary. The package is periodically rebased on current Go versions.
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions vendor/github.com/docker/docker/contrib/README.md

This file was deleted.

10 changes: 0 additions & 10 deletions vendor/github.com/docker/docker/contrib/nnp-test/nnp-test.c

This file was deleted.

16 changes: 0 additions & 16 deletions vendor/github.com/docker/docker/contrib/syscall-test/acct.c

This file was deleted.

7 changes: 0 additions & 7 deletions vendor/github.com/docker/docker/contrib/syscall-test/exit32.s

This file was deleted.

63 changes: 0 additions & 63 deletions vendor/github.com/docker/docker/contrib/syscall-test/ns.c

This file was deleted.

14 changes: 0 additions & 14 deletions vendor/github.com/docker/docker/contrib/syscall-test/raw.c

This file was deleted.

11 changes: 0 additions & 11 deletions vendor/github.com/docker/docker/contrib/syscall-test/setgid.c

This file was deleted.

11 changes: 0 additions & 11 deletions vendor/github.com/docker/docker/contrib/syscall-test/setuid.c

This file was deleted.

30 changes: 0 additions & 30 deletions vendor/github.com/docker/docker/contrib/syscall-test/socket.c

This file was deleted.

Loading

0 comments on commit 2b49e95

Please sign in to comment.