diff --git a/localconfig/localconfig.go b/localconfig/localconfig.go new file mode 100644 index 0000000..1a97ed9 --- /dev/null +++ b/localconfig/localconfig.go @@ -0,0 +1,60 @@ +package localconfig + +import "strings" + +type LocalConfig struct { + Clusters []*Cluster + Hosts []*Host +} + +type Cluster struct { + Name string + Addons []byte +} + +type Host struct { + Name string + MACs []string + IPs []string + + Kernel string + Initrd string + Layers map[string]string + + Config []byte +} + +func (c *LocalConfig) ClusterByName(name string) *Cluster { + for _, cluster := range c.Clusters { + if cluster.Name == name { + return cluster + } + } + return nil +} + +func (c *LocalConfig) HostByIP(ip string) *Host { + for _, host := range c.Hosts { + for _, hostIP := range host.IPs { + if hostIP == ip { + return host + } + } + } + return nil +} + +func (c *LocalConfig) HostByMAC(mac string) *Host { + // a bit of normalization + mac = strings.Replace(strings.ToLower(mac), "-", ":", -1) + + for _, host := range c.Hosts { + for _, hostMAC := range host.MACs { + if strings.ToLower(hostMAC) == mac { + return host + } + } + } + + return nil +}