github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/docker/docker_compose.go (about) 1 package docker 2 3 func NewDockerCompose() *DockerCompose { 4 return &DockerCompose{ 5 Version: "2", 6 } 7 } 8 9 type DockerCompose struct { 10 Version string `yaml:"version"` 11 Services Services `yaml:"services,omitempty"` 12 } 13 14 type Services map[string]*Service 15 16 func (v *Services) UnmarshalYAML(unmarshal func(interface{}) error) error { 17 set := map[string]*Service{} 18 err := unmarshal(&set) 19 if err != nil { 20 return err 21 } 22 23 ss := *v 24 if ss == nil { 25 *v = set 26 } else { 27 for k, s := range set { 28 if service, ok := ss[k]; ok { 29 ss[k] = service.Merge(s) 30 } else { 31 ss[k] = service 32 } 33 } 34 *v = ss 35 } 36 37 return nil 38 } 39 40 func (dc DockerCompose) AddService(name string, s *Service) *DockerCompose { 41 if dc.Services == nil { 42 dc.Services = map[string]*Service{} 43 } 44 dc.Services[name] = s 45 return &dc 46 }