diff --git a/internal/pkg/config/config.go b/internal/pkg/config/config.go index 6743347b..8586e396 100644 --- a/internal/pkg/config/config.go +++ b/internal/pkg/config/config.go @@ -4,99 +4,42 @@ import ( "fmt" "github.com/hpcng/warewulf/internal/pkg/util" "github.com/hpcng/warewulf/internal/pkg/wwlog" - "github.com/kelseyhightower/envconfig" - "gopkg.in/yaml.v2" - "io/ioutil" - "os" "path" ) +const ( + LocalStateDir = "/var/warewulf" +) -type Config struct { - Port int `yaml:"warewulfd port", envconfig:"WAREWULFD_PORT"` - Ipaddr string `yaml:"warewulfd ipaddr", envconfig:"WAREWULFD_IPADDR"` - InsecureRuntime bool `yaml:"insecure runtime"` - Debug bool `yaml:"debug"` - SysConfDir string `yaml:"system config dir"` - LocalStateDir string `yaml:"local state dir"` - Editor string `yaml:"default editor", envconfig:"EDITOR"` +func NodeConfig() string { + return fmt.Sprintf("%s/nodes.conf", LocalStateDir) } -var c Config - -func init() { - fd, err := ioutil.ReadFile("/etc/warewulf/warewulf.conf") - if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not read config file: %s\n", err) - os.Exit(255) - } - - err = yaml.Unmarshal(fd, &c) - if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not unmarshal config file: %s\n", err) - os.Exit(255) - } - - err = envconfig.Process("", &c) - if err != nil { - wwlog.Printf(wwlog.ERROR, "Could not obtain environment configuration: %s\n", err) - os.Exit(255) - } - - if c.Ipaddr == "" { - fmt.Printf("ERROR: 'warewulf ipaddr' has not been set in /etc/warewulf/warewulf.conf\n") - } - - if c.SysConfDir == "" { - c.SysConfDir = "/etc/warewulf" - } - if c.LocalStateDir == "" { - c.LocalStateDir = "/var/warewulf" - } - if c.Editor == "" { - c.Editor = "vi" - } - - util.ValidateOrDie("warewulfd ipaddr", c.Ipaddr, "^[0-9]+.[0-9]+.[0-9]+.[0-9]+$") - util.ValidateOrDie("system config dir", c.SysConfDir, "^[a-zA-Z0-9-._:/]+$") - util.ValidateOrDie("local state dir", c.LocalStateDir, "^[a-zA-Z0-9-._:/]+$") - util.ValidateOrDie("default editor", c.LocalStateDir, "^[a-zA-Z0-9-._:/]+$") - +func OverlayDir() string { + return fmt.Sprintf("%s/overlays/", LocalStateDir) } -func New() (Config) { - return c +func SystemOverlayDir() string { + return path.Join(OverlayDir(), "/system") } -func (self *Config) NodeConfig() string { - return fmt.Sprintf("%s/nodes.conf", self.LocalStateDir) +func RuntimeOverlayDir() string { + return path.Join(OverlayDir(), "/runtime") } -func (self *Config) OverlayDir() string { - return fmt.Sprintf("%s/overlays/", self.LocalStateDir) +func VnfsImageParentDir() string { + return fmt.Sprintf("%s/provision/vnfs/", LocalStateDir) } -func (self *Config) SystemOverlayDir() string { - return path.Join(self.OverlayDir(), "/system") +func VnfsChrootParentDir() string { + return fmt.Sprintf("%s/chroot/", LocalStateDir) } -func (self *Config) RuntimeOverlayDir() string { - return path.Join(self.OverlayDir(), "/runtime") +func KernelParentDir() string { + return fmt.Sprintf("%s/provision/kernel/", LocalStateDir) } -func (self *Config) VnfsImageParentDir() string { - return fmt.Sprintf("%s/provision/vnfs/", self.LocalStateDir) -} - -func (self *Config) VnfsChrootParentDir() string { - return fmt.Sprintf("%s/chroot/", self.LocalStateDir) -} - -func (self *Config) KernelParentDir() string { - return fmt.Sprintf("%s/provision/kernel/", self.LocalStateDir) -} - -func (self *Config) SystemOverlaySource(overlayName string) string { +func SystemOverlaySource(overlayName string) string { if overlayName == "" { wwlog.Printf(wwlog.ERROR, "System overlay name is not defined\n") return "" @@ -107,11 +50,10 @@ func (self *Config) SystemOverlaySource(overlayName string) string { return "" } - return path.Join(self.SystemOverlayDir(), overlayName) + return path.Join(SystemOverlayDir(), overlayName) } - -func (self *Config) RuntimeOverlaySource(overlayName string) string { +func RuntimeOverlaySource(overlayName string) string { if overlayName == "" { wwlog.Printf(wwlog.ERROR, "Runtime overlay name is not defined\n") return "" @@ -122,10 +64,10 @@ func (self *Config) RuntimeOverlaySource(overlayName string) string { return "" } - return path.Join(self.RuntimeOverlayDir(), overlayName) + return path.Join(RuntimeOverlayDir(), overlayName) } -func (self *Config) KernelImage(kernelVersion string) string { +func KernelImage(kernelVersion string) string { if kernelVersion == "" { wwlog.Printf(wwlog.ERROR, "Kernel Version is not defined\n") return "" @@ -136,10 +78,10 @@ func (self *Config) KernelImage(kernelVersion string) string { return "" } - return path.Join(self.KernelParentDir(), kernelVersion, "vmlinuz") + return path.Join(KernelParentDir(), kernelVersion, "vmlinuz") } -func (self *Config) KmodsImage(kernelVersion string) string { +func KmodsImage(kernelVersion string) string { if kernelVersion == "" { wwlog.Printf(wwlog.ERROR, "Kernel Version is not defined\n") return "" @@ -150,10 +92,10 @@ func (self *Config) KmodsImage(kernelVersion string) string { return "" } - return path.Join(self.KernelParentDir(), kernelVersion, "kmods.img") + return path.Join(KernelParentDir(), kernelVersion, "kmods.img") } -func (self *Config) SystemOverlayImage(nodeName string) string { +func SystemOverlayImage(nodeName string) string { if nodeName == "" { wwlog.Printf(wwlog.ERROR, "Node name is not defined\n") return "" @@ -164,10 +106,10 @@ func (self *Config) SystemOverlayImage(nodeName string) string { return "" } - return fmt.Sprintf("%s/provision/overlays/system/%s.img", self.LocalStateDir, nodeName) + return fmt.Sprintf("%s/provision/overlays/system/%s.img", LocalStateDir, nodeName) } -func (self *Config) RuntimeOverlayImage(nodeName string) string { +func RuntimeOverlayImage(nodeName string) string { if nodeName == "" { wwlog.Printf(wwlog.ERROR, "Node name is not defined\n") return "" @@ -178,10 +120,10 @@ func (self *Config) RuntimeOverlayImage(nodeName string) string { return "" } - return fmt.Sprintf("%s/provision/overlays/runtime/%s.img", self.LocalStateDir, nodeName) + return fmt.Sprintf("%s/provision/overlays/runtime/%s.img", LocalStateDir, nodeName) } -func (self *Config) VnfsImageDir(uri string) string { +func VnfsImageDir(uri string) string { if uri == "" { wwlog.Printf(wwlog.ERROR, "VNFS URI is not defined\n") return "" @@ -192,14 +134,14 @@ func (self *Config) VnfsImageDir(uri string) string { return "" } - return path.Join(self.VnfsImageParentDir(), uri) + return path.Join(VnfsImageParentDir(), uri) } -func (self *Config) VnfsImage(uri string) string { - return path.Join(self.VnfsImageDir(uri), "image") +func VnfsImage(uri string) string { + return path.Join(VnfsImageDir(uri), "image") } -func (self *Config) VnfsChroot(uri string) string { +func VnfsChroot(uri string) string { if uri == "" { wwlog.Printf(wwlog.ERROR, "VNFS name is not defined\n") return "" @@ -210,5 +152,5 @@ func (self *Config) VnfsChroot(uri string) string { return "" } - return path.Join(self.VnfsChrootParentDir(), uri) + return path.Join(VnfsChrootParentDir(), uri) }