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