...
1
2
3
4
5 package fluxcd
6
7 import (
8 "embed"
9 "fmt"
10
11 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
12 "sigs.k8s.io/kustomize/api/krusty"
13 ktypes "sigs.k8s.io/kustomize/api/types"
14
15 "edge-infra.dev/pkg/k8s/decoder"
16 "edge-infra.dev/pkg/k8s/kustomize"
17 )
18
19
20
21
22
23 var fluxcdManifests embed.FS
24
25
26
27 type options struct {
28
29 kustomizeBuildTarget string
30 }
31
32
33 type Option func(*options)
34
35
36
37 func OnlyKustomizeController() func(*options) {
38 return func(o *options) {
39 o.kustomizeBuildTarget = "kustomize-controller"
40 }
41 }
42
43
44
45
46
47
48
49
50
51 func LoadManifests(opts ...Option) ([]*unstructured.Unstructured, error) {
52 o := &options{kustomizeBuildTarget: "kustomize-helm-controllers"}
53 for _, opt := range opts {
54 opt(o)
55 }
56
57 ops := krusty.MakeDefaultOptions()
58 ops.LoadRestrictions = ktypes.LoadRestrictionsNone
59 k := krusty.MakeKustomizer(
60 ops,
61 )
62
63 m, err := k.Run(&kustomize.FS{FS: fluxcdManifests}, o.kustomizeBuildTarget)
64 if err != nil {
65 return nil, fmt.Errorf("failed to execute kustomize build: %w", err)
66 }
67
68 yaml, err := m.AsYaml()
69 if err != nil {
70 return nil, fmt.Errorf("failed to convert kustomize build result into bytes: %w", err)
71 }
72
73 return decoder.DecodeYAML(yaml)
74 }
75
View as plain text