From bf4bfeb3fc1474bc13d1e2949c6c3b35528c7a50 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Tue, 5 Sep 2023 11:45:02 +0000 Subject: [PATCH] zones: introduce GenCephConfig() Signed-off-by: Alejandro Mery --- pkg/zones/ceph.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/pkg/zones/ceph.go b/pkg/zones/ceph.go index ececc95..63a030c 100644 --- a/pkg/zones/ceph.go +++ b/pkg/zones/ceph.go @@ -2,6 +2,7 @@ package zones import ( "bytes" + "net/netip" "sort" "darvaza.org/core" @@ -30,6 +31,36 @@ func (m *Zones) GetCephConfig() (*ceph.Config, error) { return ceph.NewConfigFromReader(r) } +// GenCephConfig prepares a ceph.Config using the cluster information +func (m *Zones) GenCephConfig() (*ceph.Config, error) { + fsid, err := m.GetCephFSID() + if err != nil { + return nil, err + } + + cfg := &ceph.Config{ + Global: ceph.GlobalConfig{ + FSID: fsid, + ClusterNetwork: netip.PrefixFrom( + netip.AddrFrom4([4]byte{10, 0, 0, 0}), + 8, + ), + }, + } + + m.ForEachZone(func(z *Zone) bool { + for _, p := range z.GetCephMonitors() { + addr, _ := RingOneAddress(z.ID, p.ID) + + cfg.Global.Monitors = append(cfg.Global.Monitors, p.Name) + cfg.Global.MonitorsAddr = append(cfg.Global.MonitorsAddr, addr) + } + return false + }) + + return cfg, nil +} + // GetCephMonitors returns the set of Ceph monitors on // the zone func (z *Zone) GetCephMonitors() Machines {