github.com/mattermosttest/mattermost-server/v5@v5.0.0-20200917143240-9dfa12e121f9/build/docker-compose-generator/main.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package main 5 6 import ( 7 "fmt" 8 "os" 9 "strings" 10 11 "gopkg.in/yaml.v2" 12 ) 13 14 type DockerCompose struct { 15 Version string `yaml:"version"` 16 Services map[string]*Container `yaml:"services"` 17 } 18 19 type Container struct { 20 Command string `yaml:"command,omitempty"` 21 Image string `yaml:"image,omitempty"` 22 Network []string `yaml:"networks,omitempty"` 23 DependsOn []string `yaml:"depends_on,omitempty"` 24 } 25 26 func main() { 27 validServices := map[string]int{ 28 "mysql": 3306, 29 "postgres": 5432, 30 "minio": 9000, 31 "inbucket": 10080, 32 "openldap": 389, 33 "elasticsearch": 9200, 34 "dejavu": 1358, 35 "keycloak": 8080, 36 } 37 command := []string{} 38 for _, arg := range os.Args[1:] { 39 port, ok := validServices[arg] 40 if !ok { 41 panic(fmt.Sprintf("Unknown service %s", arg)) 42 } 43 command = append(command, fmt.Sprintf("%s:%d", arg, port)) 44 } 45 46 var dockerCompose DockerCompose 47 dockerCompose.Version = "2.4" 48 dockerCompose.Services = map[string]*Container{} 49 dockerCompose.Services["start_dependencies"] = &Container{ 50 Image: "mattermost/mattermost-wait-for-dep:latest", 51 Network: []string{"mm-test"}, 52 DependsOn: os.Args[1:], 53 Command: strings.Join(command, " "), 54 } 55 resultData, err := yaml.Marshal(dockerCompose) 56 if err != nil { 57 panic(fmt.Sprintf("Unable to serialize the docker-compose file: %s.", err.Error())) 58 } 59 fmt.Println(string(resultData)) 60 }