diff --git a/config/config.go b/config/config.go index b929f7f6cd255758799c5002f00edccca1d3922c..9d92b4ccac306fdc831029649dee72bc0f8bee17 100644 --- a/config/config.go +++ b/config/config.go @@ -21,17 +21,24 @@ package config import ( "fmt" + "os" + "path" + + viper "github.com/spf13/viper" consensus "github.com/eris-ltd/eris-db/consensus" definitions "github.com/eris-ltd/eris-db/definitions" + util "github.com/eris-ltd/eris-db/util" version "github.com/eris-ltd/eris-db/version" ) type ModuleConfig struct { Module string + Name string Version string WorkDir string DataDir string + Config *viper.Viper } // LoadConsensusModuleConfig wraps specifically for the consensus module @@ -50,8 +57,29 @@ func loadModuleConfig(do *definitions.Do, module string) (ModuleConfig, error) { return ModuleConfig{}, fmt.Errorf("%s module %s (%s) is not supported by %s", module, moduleName, minorVersionString, version.GetVersionString()) } - // TODO: continue - return ModuleConfig{}, nil + // set up the directory structure for the module inside the data directory + workDir := path.Join(do.DataDir, do.Config.GetString("chain." + module + + ".relative_root")) + if err := util.EnsureDir(workDir, os.ModePerm); err != nil { + return ModuleConfig{}, + fmt.Errorf("Failed to create module root directory %s.", workDir) + } + dataDir := path.Join(workDir, "data") + if err := util.EnsureDir(dataDir, os.ModePerm); err != nil { + return ModuleConfig{}, + fmt.Errorf("Failed to create module data directory %s.", dataDir) + } + // load configuration subtree for module + config := do.Config.Sub(moduleName) + + return ModuleConfig { + Module : module, + Name : moduleName, + Version : minorVersionString, + WorkDir : workDir, + DataDir : dataDir, + Config : config, + }, nil } //------------------------------------------------------------------------------