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  }