Merge pull request #891 from vdemeester/k8s-loader-make-sure-version

Make sure we marshall version too…
This commit is contained in:
Daniel Nephin 2018-02-21 11:45:14 -05:00 committed by GitHub
commit 939938b976
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 17 deletions

View File

@ -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

View File

@ -37,6 +37,7 @@ services:
image: bar
foo:
image: foo
version: "3.1"
volumes: {}
`),
},

View File

@ -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
@ -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"`