package config import ( "encoding/json" "fmt" "io/ioutil" ) type Config struct { ProjectName string `json:"project"` Docker DockerConfig `json:"docker"` Services ServicesConfig `json:"services"` } // DockerConfig contains the configuration for // docker specific components. type DockerConfig struct { Network DockerNetworkConfig `json:"network"` } // DockerNetworkStackArgs contains arguments for // creating the DockerNetworkStack type DockerNetworkConfig struct { Name string `json:"name"` Subnet string `json:"subnet"` Driver string `json:"driver"` } // Services contains a list of // services and their configuration type ServicesConfig struct { Traefik TraefikConfig `json:"traefik"` } // TraefikConfig contains configuration for the Traefik container. type TraefikConfig struct { CheckNewVersion bool `json:"checkNewVersion"` SendAnonymousUsage bool `json:"sendAnonymousUsage"` Version string `json:"version"` ContainerIp string `json:"containerIp"` LogLevel string `json:"logLevel"` } // NewConfig creates a new Config value from a given // JSON file. func NewConfig(file string) (Config, error) { var c Config var err error data, err := ioutil.ReadFile(file) if err != nil { return c, fmt.Errorf("unable to read data from %s...\n%v", file, err) } if err = json.Unmarshal(data, &c); err != nil { return c, fmt.Errorf("unable to decode the JSON configuration from %s...\n%v", file, err) } return c, nil }