cluster: make domain, basedir and cluster name public fields
Signed-off-by: Alejandro Mery <amery@jpi.io>
This commit is contained in:
@@ -9,13 +9,13 @@ type Config struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var cfg = &Config{
|
var cfg = &Config{
|
||||||
Base: "./m",
|
Base: "m",
|
||||||
Domain: "m.jpi.cloud",
|
Domain: "jpi.cloud",
|
||||||
}
|
}
|
||||||
|
|
||||||
// LoadZones loads all zones and machines in the config directory
|
// LoadZones loads all zones and machines in the config directory
|
||||||
func (cfg *Config) LoadZones(resolve bool) (*cluster.Cluster, error) {
|
func (cfg *Config) LoadZones(resolve bool) (*cluster.Cluster, error) {
|
||||||
return cluster.New(cfg.Base, cfg.Domain,
|
return cluster.NewFromDirectory(cfg.Base, cfg.Domain,
|
||||||
cluster.ResolvePublicAddresses(resolve),
|
cluster.ResolvePublicAddresses(resolve),
|
||||||
cluster.WithLogger(log),
|
cluster.WithLogger(log),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -21,10 +21,13 @@ type Cluster struct {
|
|||||||
dir fs.FS
|
dir fs.FS
|
||||||
log slog.Logger
|
log slog.Logger
|
||||||
resolver resolver.Resolver
|
resolver resolver.Resolver
|
||||||
domain string
|
|
||||||
|
BaseDir string `json:"dir,omitempty" yaml:"dir,omitempty"`
|
||||||
|
Name string `json:"name,omitempty" yaml:"name,omitempty"`
|
||||||
|
Domain string `json:"domain,omitempty" yaml:"domain,omitempty"`
|
||||||
|
|
||||||
CephFSID uuid.UUID `json:"ceph_fsid,omitempty" yaml:"ceph_fsid,omitempty"`
|
CephFSID uuid.UUID `json:"ceph_fsid,omitempty" yaml:"ceph_fsid,omitempty"`
|
||||||
Zones []*Zone
|
Zones []*Zone `json:"zones,omitempty" yaml:"zones,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// revive:enable:line-length-limit
|
// revive:enable:line-length-limit
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ func WithLogger(log slog.Logger) ScanOption {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Cluster) setDefaults(opt *ScanOptions) error {
|
func (m *Cluster) setScanDefaults(opt *ScanOptions) error {
|
||||||
if m.resolver == nil {
|
if m.resolver == nil {
|
||||||
h := DefaultLookuper()
|
h := DefaultLookuper()
|
||||||
|
|
||||||
@@ -91,43 +91,41 @@ func (m *Cluster) setDefaults(opt *ScanOptions) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFS builds a [Cluster] tree using the given directory
|
// NewFromDirectory builds a [Cluster] tree using the given directory
|
||||||
func NewFS(dir fs.FS, domain string, opts ...ScanOption) (*Cluster, error) {
|
func NewFromDirectory(dir, domain string, opts ...ScanOption) (*Cluster, error) {
|
||||||
var scanOptions ScanOptions
|
var scanOptions ScanOptions
|
||||||
|
|
||||||
z := &Cluster{
|
dir = filepath.Clean(dir)
|
||||||
dir: dir,
|
fullPath, err := filepath.Abs(dir)
|
||||||
domain: domain,
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sub, err := os.NewFS().Sub(fullPath[1:])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
m := &Cluster{
|
||||||
|
dir: sub,
|
||||||
|
BaseDir: dir,
|
||||||
|
Name: filepath.Base(fullPath),
|
||||||
|
Domain: domain,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, opt := range opts {
|
for _, opt := range opts {
|
||||||
if err := opt(z, &scanOptions); err != nil {
|
if err := opt(m, &scanOptions); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := z.setDefaults(&scanOptions); err != nil {
|
if err := m.setScanDefaults(&scanOptions); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := z.scan(&scanOptions); err != nil {
|
if err := m.scan(&scanOptions); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return z, nil
|
return m, nil
|
||||||
}
|
|
||||||
|
|
||||||
// New builds a [Cluster] tree using the given directory
|
|
||||||
func New(dir, domain string, opts ...ScanOption) (*Cluster, error) {
|
|
||||||
dir, err := filepath.Abs(dir)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
base, err := os.NewFS().Sub(dir[1:])
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return NewFS(base, domain, opts...)
|
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-7
@@ -28,16 +28,19 @@ func (m *Machine) String() string {
|
|||||||
|
|
||||||
// FullName returns the Name of the machine including domain name
|
// FullName returns the Name of the machine including domain name
|
||||||
func (m *Machine) FullName() string {
|
func (m *Machine) FullName() string {
|
||||||
if domain := m.zone.zones.domain; domain != "" {
|
var name []string
|
||||||
var s = []string{
|
|
||||||
m.Name,
|
|
||||||
domain,
|
|
||||||
}
|
|
||||||
|
|
||||||
return strings.Join(s, ".")
|
for _, s := range []string{
|
||||||
|
m.Name,
|
||||||
|
m.zone.zones.Name,
|
||||||
|
m.zone.zones.Domain,
|
||||||
|
} {
|
||||||
|
if s != "" {
|
||||||
|
name = append(name, s)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return m.Name
|
return strings.Join(name, ".")
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsGateway tells if the Machine is a ring0 gateway
|
// IsGateway tells if the Machine is a ring0 gateway
|
||||||
|
|||||||
Reference in New Issue
Block a user