// Receives a list of Container INI configuration files and load them into // "Container" section of primary Config instance. func (cfg *Config) loadIniConfigs(cfgPaths []string) error { var err error var iniCfg *ini.File var section *ini.Section var sectionName string var cfgPath string var serviceCfg *ServiceConfig var containerCfg *ContainerConfig var name string var match bool for _, cfgPath = range cfgPaths { log.Printf("[Config] Loading: '%s'", cfgPath) // avoiding dummy files if match, _ = path.Match("\\.\\#*\\.ini", path.Base(cfgPath)); match { log.Printf("[Config] Ignoring config file: '%s'", cfgPath) continue } if iniCfg, err = ini.Load(cfgPath); err != nil { log.Println("[Config] Config load error:", err) return err } // the section names will determine witch kind of configuratio this is for _, sectionName = range iniCfg.SectionStrings() { section = iniCfg.Section(sectionName) switch sectionName { case "Service": serviceCfg = new(ServiceConfig) if err = section.MapTo(serviceCfg); err != nil { log.Println("[Config] Error on mapTo ServiceConfig:", err) return err } if name, err = sanitizeName(serviceCfg.Name); err != nil { log.Println("[Config] Error on sanitize name:", err) return err } log.Printf("[Config] Adding service: '%s'", name) serviceCfg.Name = name cfg.Service[name] = serviceCfg log.Printf("[Config] DEBUG serviceCfg: '%+v'", serviceCfg) case "Container": containerCfg = new(ContainerConfig) if err = section.MapTo(containerCfg); err != nil { log.Println("[Config] Error on mapTo Container:", err) return err } if name, err = sanitizeName(containerCfg.Name); err != nil { log.Println("[Config] Error on sanitize name:", err) return err } log.Printf("[Config] Adding container: '%s'", name) containerCfg.Name = name cfg.Container[name] = containerCfg log.Printf("[Config] DEBUG containerCfg: '%+v'", containerCfg) case "DEFAULT": continue default: log.Printf("[Config] Ignored section: '%s'", sectionName) } } } return nil }