// NewDockerDriverConfig returns a docker driver config by parsing the HCL // config func NewDockerDriverConfig(task *structs.Task, env *env.TaskEnvironment) (*DockerDriverConfig, error) { var dconf DockerDriverConfig // Default to SSL dconf.SSL = true if err := mapstructure.WeakDecode(task.Config, &dconf); err != nil { return nil, err } // Interpolate everthing that is a string dconf.ImageName = env.ReplaceEnv(dconf.ImageName) dconf.Command = env.ReplaceEnv(dconf.Command) dconf.IpcMode = env.ReplaceEnv(dconf.IpcMode) dconf.NetworkMode = env.ReplaceEnv(dconf.NetworkMode) dconf.PidMode = env.ReplaceEnv(dconf.PidMode) dconf.UTSMode = env.ReplaceEnv(dconf.UTSMode) dconf.Hostname = env.ReplaceEnv(dconf.Hostname) dconf.WorkDir = env.ReplaceEnv(dconf.WorkDir) dconf.Volumes = env.ParseAndReplace(dconf.Volumes) dconf.DNSServers = env.ParseAndReplace(dconf.DNSServers) dconf.DNSSearchDomains = env.ParseAndReplace(dconf.DNSSearchDomains) dconf.LoadImages = env.ParseAndReplace(dconf.LoadImages) for _, m := range dconf.LabelsRaw { for k, v := range m { delete(m, k) m[env.ReplaceEnv(k)] = env.ReplaceEnv(v) } } for _, a := range dconf.Auth { a.Username = env.ReplaceEnv(a.Username) a.Password = env.ReplaceEnv(a.Password) a.Email = env.ReplaceEnv(a.Email) a.ServerAddress = env.ReplaceEnv(a.ServerAddress) } for _, l := range dconf.Logging { l.Type = env.ReplaceEnv(l.Type) for _, c := range l.ConfigRaw { for k, v := range c { delete(c, k) c[env.ReplaceEnv(k)] = env.ReplaceEnv(v) } } } for _, m := range dconf.PortMapRaw { for k, v := range m { delete(m, k) m[env.ReplaceEnv(k)] = v } } // Remove any http if strings.Contains(dconf.ImageName, "https://") { dconf.ImageName = strings.Replace(dconf.ImageName, "https://", "", 1) } if err := dconf.Validate(); err != nil { return nil, err } return &dconf, nil }