package zones import ( "bytes" "sort" "darvaza.org/core" "github.com/gofrs/uuid/v5" "git.jpi.io/amery/jpictl/pkg/ceph" ) // GetCephFSID returns our Ceph's FSID func (m *Zones) GetCephFSID() (uuid.UUID, error) { if core.IsZero(m.CephFSID) { // TODO: generate one return uuid.Nil, nil } return m.CephFSID, nil } // GetCephConfig reads the ceph.conf file func (m *Zones) GetCephConfig() (*ceph.Config, error) { data, err := m.ReadFile("ceph.conf") if err != nil { return nil, err } r := bytes.NewReader(data) return ceph.NewConfigFromReader(r) } // GetCephMonitors returns the set of Ceph monitors on // the zone func (z *Zone) GetCephMonitors() Machines { var mons Machines var first, second *Machine z.ForEachMachine(func(p *Machine) bool { switch { case p.CephMonitor: // it is a monitor mons = append(mons, p) case len(mons) > 0: // zone has a monitor case first == nil && !p.IsGateway(): // first option for monitor first = p case second == nil: // second option for monitor second = p } return false }) switch { case len(mons) > 0: // ready case first != nil: // make first option our monitor first.CephMonitor = true mons = append(mons, first) case second != nil: // make second option our monitor second.CephMonitor = true mons = append(mons, second) default: // zone without machines?? panic("unreachable") } sort.Sort(mons) return mons }