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  }