Skip to content

Commit

Permalink
Make sure we marshall version too…
Browse files Browse the repository at this point in the history
… otherwise the k8s controller might fail to parse the file as it will
think it's version 1.

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
  • Loading branch information
vdemeester committed Feb 21, 2018
1 parent bbe7f84 commit 9f9f1c8
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 17 deletions.
24 changes: 19 additions & 5 deletions cli/command/stack/kubernetes/loader.go
Expand Up @@ -8,16 +8,30 @@ import (
)

type versionedConfig struct {
*composetypes.Config `yaml:",inline"`
Version string
composetypes.Config
version string
}

func (c versionedConfig) MarshalYAML() (interface{}, error) {
services := map[string]composetypes.ServiceConfig{}
for _, service := range c.Services {
services[service.Name] = service
}
return map[string]interface{}{
"services": services,
"networks": c.Networks,
"volumes": c.Volumes,
"secrets": c.Secrets,
"configs": c.Configs,
"version": c.version,
}, nil
}

// LoadStack loads a stack from a Compose config, with a given name.
func LoadStack(name, version string, cfg composetypes.Config) (*apiv1beta1.Stack, error) {
cfg.Filename = ""
res, err := yaml.Marshal(versionedConfig{
Version: version,
Config: &cfg,
version: version,
Config: cfg,
})
if err != nil {
return nil, err
Expand Down
1 change: 1 addition & 0 deletions cli/command/stack/kubernetes/loader_test.go
Expand Up @@ -37,6 +37,7 @@ services:
image: bar
foo:
image: foo
version: "3.1"
volumes: {}
`),
},
Expand Down
22 changes: 10 additions & 12 deletions cli/compose/types/types.go
Expand Up @@ -70,7 +70,7 @@ func (cd ConfigDetails) LookupEnv(key string) (string, bool) {

// Config is a full compose file configuration
type Config struct {
Filename string
Filename string `yaml:"-"`
Services []ServiceConfig
Networks map[string]NetworkConfig
Volumes map[string]VolumeConfig
Expand All @@ -80,24 +80,22 @@ type Config struct {

// MarshalYAML makes Config implement yaml.Marshaller
func (c *Config) MarshalYAML() (interface{}, error) {
m := map[string]interface{}{}
services := map[string]ServiceConfig{}
for _, service := range c.Services {
s := service
s.Name = ""
services[service.Name] = s
services[service.Name] = service
}
m["services"] = services
m["networks"] = c.Networks
m["volumes"] = c.Volumes
m["secrets"] = c.Secrets
m["configs"] = c.Configs
return m, nil
return map[string]interface{}{
"services": services,
"networks": c.Networks,
"volumes": c.Volumes,
"secrets": c.Secrets,
"configs": c.Configs,
}, nil
}

// ServiceConfig is the configuration of one service
type ServiceConfig struct {
Name string `yaml:",omitempty"`
Name string `yaml:"-"`

Build BuildConfig `yaml:",omitempty"`
CapAdd []string `mapstructure:"cap_add" yaml:"cap_add,omitempty"`
Expand Down

0 comments on commit 9f9f1c8

Please sign in to comment.