pkg/localconfig/localconfig.go
2024-04-15 13:47:50 +02:00

97 lines
1.6 KiB
Go

package localconfig
import (
"io"
"os"
"strings"
yaml "gopkg.in/yaml.v2"
)
type Config struct {
Clusters []*Cluster
Hosts []*Host
HostTemplates []*Host
SSLConfig string
}
type Cluster struct {
Name string
Addons string
BootstrapPods string
}
func FromBytes(data []byte) (*Config, error) {
config := &Config{}
if err := yaml.Unmarshal(data, config); err != nil {
return nil, err
}
return config, nil
}
func FromFile(path string) (*Config, error) {
ba, err := os.ReadFile(path)
if err != nil {
return nil, err
}
return FromBytes(ba)
}
func (c *Config) WriteTo(w io.Writer) error {
return yaml.NewEncoder(w).Encode(c)
}
func (c *Config) Cluster(name string) *Cluster {
for _, cluster := range c.Clusters {
if cluster.Name == name {
return cluster
}
}
return nil
}
func (c *Config) ClusterByName(name string) *Cluster {
for _, cluster := range c.Clusters {
if cluster.Name == name {
return cluster
}
}
return nil
}
func (c *Config) Host(name string) *Host {
for _, host := range c.Hosts {
if host.Name == name {
return host
}
}
return nil
}
func (c *Config) HostByIP(ip string) *Host {
for _, host := range c.Hosts {
for _, hostIP := range host.IPs {
if hostIP == ip {
return host
}
}
}
return nil
}
func (c *Config) 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
}