From e41079741325680c55a9573a3576f03232390b46 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Sat, 2 Mar 2024 21:53:33 +0000 Subject: [PATCH 1/4] env: use foo= instead of foo="" for empty variables to improve readability Signed-off-by: Alejandro Mery --- pkg/cluster/env.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/cluster/env.go b/pkg/cluster/env.go index cf5b171..a6c4b89 100644 --- a/pkg/cluster/env.go +++ b/pkg/cluster/env.go @@ -117,7 +117,11 @@ func (m *Env) writeEnvVar(w io.Writer, value string, name string, args ...any) { if name != "" { value = strings.TrimSpace(value) - _, _ = fmt.Fprintf(w, "%s%s=%q\n", prefix, name, value) + if value == "" { + _, _ = fmt.Fprintf(w, "%s%s=\n", prefix, name) + } else { + _, _ = fmt.Fprintf(w, "%s%s=%q\n", prefix, name, value) + } } } -- 2.17.1 From 3ba721bf7f97f83072401fddd074dde05c1189ee Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Sat, 2 Mar 2024 21:27:28 +0000 Subject: [PATCH 2/4] env: add []string writer Signed-off-by: Alejandro Mery --- pkg/cluster/env.go | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/pkg/cluster/env.go b/pkg/cluster/env.go index a6c4b89..757fa3d 100644 --- a/pkg/cluster/env.go +++ b/pkg/cluster/env.go @@ -85,22 +85,29 @@ func (m *Env) writeEnvZone(w io.Writer, z *Zone) { } func (m *Env) writeEnvVarInts(w io.Writer, value []int, name string, args ...any) { - var s string - - if n := len(value); n > 0 { - var buf bytes.Buffer + var buf bytes.Buffer - for i, v := range value { - if i != 0 { - _, _ = fmt.Fprint(&buf, " ") - } - _, _ = fmt.Fprintf(&buf, "%v", v) + for _, v := range value { + if buf.Len() > 0 { + _, _ = fmt.Fprint(&buf, " ") } + _, _ = fmt.Fprintf(&buf, "%v", v) + } + + m.writeEnvVar(w, buf.String(), name, args...) +} + +func (m *Env) writeEnvVarStrings(w io.Writer, value []string, name string, args ...any) { + var buf bytes.Buffer - s = buf.String() + for _, v := range value { + if buf.Len() > 0 { + _, _ = fmt.Fprint(&buf, " ") + } + _, _ = fmt.Fprintf(&buf, "%s", v) } - m.writeEnvVar(w, s, name, args...) + m.writeEnvVar(w, buf.String(), name, args...) } func (m *Env) writeEnvVar(w io.Writer, value string, name string, args ...any) { -- 2.17.1 From 7986e0fd3b3f4fc0808032fd26ef79a4af07f489 Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Sat, 2 Mar 2024 21:36:50 +0000 Subject: [PATCH 3/4] env: add REGIONS list to output Signed-off-by: Alejandro Mery --- pkg/cluster/env.go | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/pkg/cluster/env.go b/pkg/cluster/env.go index 757fa3d..b31f695 100644 --- a/pkg/cluster/env.go +++ b/pkg/cluster/env.go @@ -4,12 +4,14 @@ import ( "bytes" "fmt" "io" + "sort" "strings" ) // Env is a shell environment factory for this cluster type Env struct { ZoneIterator + RegionIterator cephFSID string export bool @@ -23,9 +25,10 @@ func (m *Cluster) Env(export bool) (*Env, error) { } env := &Env{ - ZoneIterator: m, - cephFSID: fsid.String(), - export: export, + ZoneIterator: m, + RegionIterator: m, + cephFSID: fsid.String(), + export: export, } return env, nil @@ -43,6 +46,22 @@ func (m *Env) Zones() []int { return zones } +// Regions returns the list of primary regions +func (m *Env) Regions() []string { + var regions []string + + m.ForEachRegion(func(r *Region) bool { + if r.Cluster != nil { + regions = append(regions, r.Name) + } + + return false + }) + + sort.Strings(regions) + return regions +} + // WriteTo generates environment variables for shell scripts func (m *Env) WriteTo(w io.Writer) (int64, error) { var buf bytes.Buffer @@ -51,6 +70,7 @@ func (m *Env) WriteTo(w io.Writer) (int64, error) { m.writeEnvVar(&buf, m.cephFSID, "FSID") } + m.writeEnvVarStrings(&buf, m.Regions(), "REGIONS") m.writeEnvVarInts(&buf, m.Zones(), "ZONES") m.ForEachZone(func(z *Zone) bool { -- 2.17.1 From fefbfa16a2654fbe9864b953a892e17f4fd44b6d Mon Sep 17 00:00:00 2001 From: Alejandro Mery Date: Sat, 2 Mar 2024 22:27:13 +0000 Subject: [PATCH 4/4] env: export ZONE{zoneID}_REGION Signed-off-by: Alejandro Mery --- pkg/cluster/env.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pkg/cluster/env.go b/pkg/cluster/env.go index b31f695..f3ee1c6 100644 --- a/pkg/cluster/env.go +++ b/pkg/cluster/env.go @@ -94,6 +94,9 @@ func (m *Env) writeEnvZone(w io.Writer, z *Zone) { gateways, _ := z.GatewayIDs() m.writeEnvVarInts(w, gateways, "ZONE%v_%s", zoneID, "GW") + // ZONE{zoneID}_REGION + m.writeEnvVar(w, genEnvZoneRegion(z), "ZONE%v_%s", zoneID, "REGION") + // Ceph monitors := z.GetCephMonitors() // MON{zoneID}_NAME @@ -166,6 +169,21 @@ func genEnvZoneNodes(z *Zone) string { return "" } +func genEnvZoneRegion(z *Zone) string { + var region string + + z.ForEachRegion(func(r *Region) bool { + if r.Cluster != nil { + region = r.Name + return true + } + + return false + }) + + return region +} + func genEnvZoneCephMonNames(m Machines) string { var buf strings.Builder m.ForEachMachine(func(p *Machine) bool { -- 2.17.1