Skip to content

Commit 3eafd8c

Browse files
author
Simon Emms
committed
[installer]: refactor render function into a callable function
1 parent 2c8b59b commit 3eafd8c

File tree

1 file changed

+92
-79
lines changed

1 file changed

+92
-79
lines changed

installer/cmd/render.go

Lines changed: 92 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -42,111 +42,124 @@ A config file is required which can be generated with the init command.`,
4242
return err
4343
}
4444

45-
versionMF, err := getVersionManifest()
45+
yaml, err := renderKubernetesObjects(cfgVersion, cfg)
4646
if err != nil {
4747
return err
4848
}
4949

50-
if !renderOpts.ValidateConfigDisabled {
51-
apiVersion, err := config.LoadConfigVersion(cfgVersion)
52-
if err != nil {
53-
return err
54-
}
55-
res, err := config.Validate(apiVersion, cfg)
56-
if err != nil {
57-
return err
58-
}
59-
60-
if !res.Valid {
61-
res.Marshal(os.Stderr)
62-
fmt.Fprintln(os.Stderr, "configuration is invalid")
63-
os.Exit(1)
64-
}
50+
for _, item := range yaml {
51+
fmt.Println(item)
6552
}
6653

67-
ctx, err := common.NewRenderContext(*cfg, *versionMF, renderOpts.Namespace)
68-
if err != nil {
69-
return err
70-
}
71-
72-
var renderable common.RenderFunc
73-
var helmCharts common.HelmFunc
74-
switch cfg.Kind {
75-
case configv1.InstallationFull:
76-
renderable = components.FullObjects
77-
helmCharts = components.FullHelmDependencies
78-
case configv1.InstallationMeta:
79-
renderable = components.MetaObjects
80-
helmCharts = components.MetaHelmDependencies
81-
case configv1.InstallationWorkspace:
82-
renderable = components.WorkspaceObjects
83-
helmCharts = components.WorkspaceHelmDependencies
84-
default:
85-
return fmt.Errorf("unsupported installation kind: %s", cfg.Kind)
86-
}
54+
return nil
55+
},
56+
}
8757

88-
objs, err := common.CompositeRenderFunc(components.CommonObjects, renderable)(ctx)
89-
if err != nil {
90-
return err
91-
}
58+
func loadConfig(cfgFN string) (rawCfg interface{}, cfgVersion string, cfg *configv1.Config, err error) {
59+
rawCfg, cfgVersion, err = config.Load(cfgFN)
60+
if err != nil {
61+
err = fmt.Errorf("error loading config: %w", err)
62+
return
63+
}
64+
if cfgVersion != config.CurrentVersion {
65+
err = fmt.Errorf("config version is mismatch: expected %s, got %s", config.CurrentVersion, cfgVersion)
66+
return
67+
}
68+
cfg = rawCfg.(*configv1.Config)
9269

93-
k8s := make([]string, 0)
94-
for _, o := range objs {
95-
fc, err := yaml.Marshal(o)
96-
if err != nil {
97-
return err
98-
}
70+
return rawCfg, cfgVersion, cfg, err
71+
}
9972

100-
k8s = append(k8s, fmt.Sprintf("---\n%s\n", string(fc)))
101-
}
73+
func renderKubernetesObjects(cfgVersion string, cfg *configv1.Config) ([]string, error) {
74+
versionMF, err := getVersionManifest()
75+
if err != nil {
76+
return nil, err
77+
}
10278

103-
charts, err := common.CompositeHelmFunc(components.CommonHelmDependencies, helmCharts)(ctx)
79+
if !renderOpts.ValidateConfigDisabled {
80+
apiVersion, err := config.LoadConfigVersion(cfgVersion)
10481
if err != nil {
105-
return err
82+
return nil, err
10683
}
107-
k8s = append(k8s, charts...)
108-
109-
// convert everything to individual objects
110-
runtimeObjs, err := common.YamlToRuntimeObject(k8s)
84+
res, err := config.Validate(apiVersion, cfg)
11185
if err != nil {
112-
return err
86+
return nil, err
11387
}
11488

115-
// generate a config map with every component installed
116-
runtimeObjsAndConfig, err := common.GenerateInstallationConfigMap(ctx, runtimeObjs)
117-
if err != nil {
118-
return err
89+
if !res.Valid {
90+
res.Marshal(os.Stderr)
91+
fmt.Fprintln(os.Stderr, "configuration is invalid")
92+
os.Exit(1)
11993
}
94+
}
12095

121-
// sort the objects and return the plain YAML
122-
sortedObjs, err := common.DependencySortingRenderFunc(runtimeObjsAndConfig)
96+
ctx, err := common.NewRenderContext(*cfg, *versionMF, renderOpts.Namespace)
97+
if err != nil {
98+
return nil, err
99+
}
100+
101+
var renderable common.RenderFunc
102+
var helmCharts common.HelmFunc
103+
switch cfg.Kind {
104+
case configv1.InstallationFull:
105+
renderable = components.FullObjects
106+
helmCharts = components.FullHelmDependencies
107+
case configv1.InstallationMeta:
108+
renderable = components.MetaObjects
109+
helmCharts = components.MetaHelmDependencies
110+
case configv1.InstallationWorkspace:
111+
renderable = components.WorkspaceObjects
112+
helmCharts = components.WorkspaceHelmDependencies
113+
default:
114+
return nil, fmt.Errorf("unsupported installation kind: %s", cfg.Kind)
115+
}
116+
117+
objs, err := common.CompositeRenderFunc(components.CommonObjects, renderable)(ctx)
118+
if err != nil {
119+
return nil, err
120+
}
121+
122+
k8s := make([]string, 0)
123+
for _, o := range objs {
124+
fc, err := yaml.Marshal(o)
123125
if err != nil {
124-
return err
126+
return nil, err
125127
}
126128

127-
// output the YAML to stdout
128-
for _, c := range sortedObjs {
129-
fmt.Printf("---\n# %s/%s %s\n", c.TypeMeta.APIVersion, c.TypeMeta.Kind, c.Metadata.Name)
130-
fmt.Println(c.Content)
131-
}
129+
k8s = append(k8s, fmt.Sprintf("---\n%s\n", string(fc)))
130+
}
132131

133-
return nil
134-
},
135-
}
132+
charts, err := common.CompositeHelmFunc(components.CommonHelmDependencies, helmCharts)(ctx)
133+
if err != nil {
134+
return nil, err
135+
}
136+
k8s = append(k8s, charts...)
136137

137-
func loadConfig(cfgFN string) (rawCfg interface{}, cfgVersion string, cfg *configv1.Config, err error) {
138-
rawCfg, cfgVersion, err = config.Load(cfgFN)
138+
// convert everything to individual objects
139+
runtimeObjs, err := common.YamlToRuntimeObject(k8s)
139140
if err != nil {
140-
err = fmt.Errorf("error loading config: %w", err)
141-
return
141+
return nil, err
142142
}
143-
if cfgVersion != config.CurrentVersion {
144-
err = fmt.Errorf("config version is mismatch: expected %s, got %s", config.CurrentVersion, cfgVersion)
145-
return
143+
144+
// generate a config map with every component installed
145+
runtimeObjsAndConfig, err := common.GenerateInstallationConfigMap(ctx, runtimeObjs)
146+
if err != nil {
147+
return nil, err
146148
}
147-
cfg = rawCfg.(*configv1.Config)
148149

149-
return rawCfg, cfgVersion, cfg, err
150+
// sort the objects and return the plain YAML
151+
sortedObjs, err := common.DependencySortingRenderFunc(runtimeObjsAndConfig)
152+
if err != nil {
153+
return nil, err
154+
}
155+
156+
// output the YAML to stdout
157+
output := make([]string, 0)
158+
for _, c := range sortedObjs {
159+
output = append(output, fmt.Sprintf("---\n# %s/%s %s\n%s", c.TypeMeta.APIVersion, c.TypeMeta.Kind, c.Metadata.Name, c.Content))
160+
}
161+
162+
return output, nil
150163
}
151164

152165
func init() {

0 commit comments

Comments
 (0)