Skip to content

Commit 3ea41f6

Browse files
committed
feat(hhfab): allow injecting extra o11y on build/vlabup
Fixes #1072 Signed-off-by: Sergei Lukianov <[email protected]>
1 parent 16dc4c9 commit 3ea41f6

File tree

3 files changed

+69
-26
lines changed

3 files changed

+69
-26
lines changed

cmd/hhfab/main.go

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ const (
6363
FlagNameBuildMode = "build-mode"
6464
FlagNameBuildControls = "build-controls"
6565
FlagNameBuildGateways = "build-gateways"
66+
FlagNameObservabilityTargets = "o11y-targets"
6667
FlagNameAutoUpgrade = "auto-upgrade"
6768
FlagNameFailFast = "fail-fast"
6869
FlagNameReady = "ready"
@@ -395,14 +396,19 @@ func Run(ctx context.Context) error {
395396
},
396397
}
397398

398-
buildModeFlags := []cli.Flag{
399+
builFlags := []cli.Flag{
399400
&cli.StringFlag{
400401
Name: FlagNameBuildMode,
401402
Aliases: []string{"mode", "m"},
402403
Usage: "build mode: one of " + strings.Join(buildModes, ", "),
403404
EnvVars: []string{"HHFAB_BUILD_MODE"},
404405
Value: string(recipe.BuildModeISO),
405406
},
407+
&cli.StringFlag{
408+
Name: FlagNameObservabilityTargets,
409+
Usage: "inject extra observability targets",
410+
EnvVars: []string{"HHFAB_O11Y_TARGETS"},
411+
},
406412
}
407413

408414
var joinToken string
@@ -708,7 +714,7 @@ func Run(ctx context.Context) error {
708714
{
709715
Name: "build",
710716
Usage: "build installers",
711-
Flags: flatten(defaultFlags, hModeFlags, buildModeFlags, joinTokenFlags, []cli.Flag{
717+
Flags: flatten(defaultFlags, hModeFlags, builFlags, joinTokenFlags, []cli.Flag{
712718
&cli.BoolFlag{
713719
Name: FlagNameBuildControls,
714720
Aliases: []string{"controls"},
@@ -725,11 +731,12 @@ func Run(ctx context.Context) error {
725731
Before: before(false),
726732
Action: func(c *cli.Context) error {
727733
if err := hhfab.Build(ctx, workDir, cacheDir, hhfab.BuildOpts{
728-
HydrateMode: hhfab.HydrateMode(hydrateMode),
729-
BuildMode: recipe.BuildMode(c.String(FlagNameBuildMode)),
730-
BuildControls: c.Bool(FlagNameBuildControls),
731-
BuildGateways: c.Bool(FlagNameBuildGateways),
732-
SetJoinToken: joinToken,
734+
HydrateMode: hhfab.HydrateMode(hydrateMode),
735+
BuildMode: recipe.BuildMode(c.String(FlagNameBuildMode)),
736+
BuildControls: c.Bool(FlagNameBuildControls),
737+
BuildGateways: c.Bool(FlagNameBuildGateways),
738+
SetJoinToken: joinToken,
739+
ObservabilityTargets: c.String(FlagNameObservabilityTargets),
733740
}); err != nil {
734741
return fmt.Errorf("building: %w", err)
735742
}
@@ -780,7 +787,7 @@ func Run(ctx context.Context) error {
780787
{
781788
Name: "up",
782789
Usage: "run VLAB",
783-
Flags: flatten(defaultFlags, hModeFlags, buildModeFlags, joinTokenFlags, []cli.Flag{
790+
Flags: flatten(defaultFlags, hModeFlags, builFlags, joinTokenFlags, []cli.Flag{
784791
&cli.BoolFlag{
785792
Name: FlagNameReCreate,
786793
Aliases: []string{"f"},
@@ -845,10 +852,11 @@ func Run(ctx context.Context) error {
845852
}
846853

847854
if err := hhfab.VLABUp(ctx, workDir, cacheDir, hhfab.VLABUpOpts{
848-
HydrateMode: hhfab.HydrateMode(hydrateMode),
849-
ReCreate: c.Bool(FlagNameReCreate),
850-
BuildMode: recipe.BuildMode(c.String(FlagNameBuildMode)),
851-
SetJoinToken: joinToken,
855+
HydrateMode: hhfab.HydrateMode(hydrateMode),
856+
ReCreate: c.Bool(FlagNameReCreate),
857+
BuildMode: recipe.BuildMode(c.String(FlagNameBuildMode)),
858+
SetJoinToken: joinToken,
859+
ObservabilityTargets: c.String(FlagNameObservabilityTargets),
852860
VLABRunOpts: hhfab.VLABRunOpts{
853861
KillStale: c.Bool(FlagNameKillStale),
854862
ControlsRestricted: c.Bool(FlagNameControlsRestricted),

pkg/hhfab/cmdbuild.go

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,17 @@ import (
1313
fabapi "go.githedgehog.com/fabricator/api/fabricator/v1beta1"
1414
"go.githedgehog.com/fabricator/pkg/artificer"
1515
"go.githedgehog.com/fabricator/pkg/fab/recipe"
16+
"go.githedgehog.com/libmeta/pkg/alloy"
17+
kyaml "sigs.k8s.io/yaml"
1618
)
1719

1820
type BuildOpts struct {
19-
HydrateMode HydrateMode
20-
BuildMode recipe.BuildMode
21-
BuildControls bool
22-
BuildGateways bool
23-
SetJoinToken string
21+
HydrateMode HydrateMode
22+
BuildMode recipe.BuildMode
23+
BuildControls bool
24+
BuildGateways bool
25+
SetJoinToken string
26+
ObservabilityTargets string
2427
}
2528

2629
func Build(ctx context.Context, workDir, cacheDir string, opts BuildOpts) error {
@@ -43,6 +46,36 @@ func (c *Config) build(ctx context.Context, opts BuildOpts) error {
4346
}
4447
}
4548

49+
targets := alloy.Targets{}
50+
if err := kyaml.Unmarshal([]byte(opts.ObservabilityTargets), &targets); err != nil {
51+
return fmt.Errorf("unmarshaling extra observability targets: %w", err)
52+
}
53+
54+
if c.Fab.Spec.Config.Observability.Targets.Prometheus == nil {
55+
c.Fab.Spec.Config.Observability.Targets.Prometheus = map[string]alloy.PrometheusTarget{}
56+
}
57+
for name, target := range targets.Prometheus {
58+
if _, ok := c.Fab.Spec.Config.Observability.Targets.Prometheus[name]; ok {
59+
slog.Warn("Skipping extra Prometheus target that is already defined in Fabricator", "name", name)
60+
61+
continue
62+
}
63+
slog.Debug("Adding extra Prometheus target", "name", name)
64+
c.Fab.Spec.Config.Observability.Targets.Prometheus[name] = target
65+
}
66+
if c.Fab.Spec.Config.Observability.Targets.Loki == nil {
67+
c.Fab.Spec.Config.Observability.Targets.Loki = map[string]alloy.LokiTarget{}
68+
}
69+
for name, target := range targets.Loki {
70+
if _, ok := c.Fab.Spec.Config.Observability.Targets.Loki[name]; ok {
71+
slog.Warn("Skipping extra Loki target that is already defined in Fabricator", "name", name)
72+
73+
continue
74+
}
75+
slog.Debug("Adding extra Loki target", "name", name)
76+
c.Fab.Spec.Config.Observability.Targets.Loki[name] = target
77+
}
78+
4679
d, err := artificer.NewDownloaderWithDockerCreds(c.CacheDir, c.Repo, c.Prefix)
4780
if err != nil {
4881
return fmt.Errorf("creating downloader: %w", err)

pkg/hhfab/cmdvlab.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@ func VLABGenerate(ctx context.Context, workDir, cacheDir string, builder VLABBui
6161
}
6262

6363
type VLABUpOpts struct {
64-
HydrateMode HydrateMode
65-
NoCreate bool
66-
ReCreate bool
67-
BuildMode recipe.BuildMode
68-
SetJoinToken string
64+
HydrateMode HydrateMode
65+
NoCreate bool
66+
ReCreate bool
67+
BuildMode recipe.BuildMode
68+
SetJoinToken string
69+
ObservabilityTargets string
6970
VLABRunOpts
7071
}
7172

@@ -101,10 +102,11 @@ func VLABUp(ctx context.Context, workDir, cacheDir string, opts VLABUpOpts) erro
101102
}
102103

103104
if err := c.build(ctx, BuildOpts{
104-
HydrateMode: opts.HydrateMode,
105-
BuildMode: opts.BuildMode,
106-
BuildControls: true,
107-
BuildGateways: buildGateways,
105+
HydrateMode: opts.HydrateMode,
106+
BuildMode: opts.BuildMode,
107+
BuildControls: true,
108+
BuildGateways: buildGateways,
109+
ObservabilityTargets: opts.ObservabilityTargets,
108110
}); err != nil {
109111
return fmt.Errorf("building: %w", err)
110112
}

0 commit comments

Comments
 (0)