Skip to content

Commit 18a1385

Browse files
feat: add verbose logging option for RBAC generation and Helm chart rendering
1 parent 7687eae commit 18a1385

4 files changed

Lines changed: 324 additions & 7 deletions

File tree

internal/composition/composition.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ func (h *handler) Observe(ctx context.Context, mg *unstructured.Unstructured) (c
178178
CompositionDefinitionName: pkg.CompositionDefinitionInfo.Name,
179179
CompositionDefinitionNamespace: pkg.CompositionDefinitionInfo.Namespace,
180180
CompositionDefintionGVR: pkg.CompositionDefinitionInfo.GVR,
181+
Verbose: meta.IsVerbose(mg),
181182
})
182183
if err != nil {
183184
log.Error(err, "Generating RBAC using chart-inspector")
@@ -316,6 +317,7 @@ func (h *handler) Create(ctx context.Context, mg *unstructured.Unstructured) err
316317
CompositionDefinitionName: pkg.CompositionDefinitionInfo.Name,
317318
CompositionDefinitionNamespace: pkg.CompositionDefinitionInfo.Namespace,
318319
CompositionDefintionGVR: pkg.CompositionDefinitionInfo.GVR,
320+
Verbose: meta.IsVerbose(mg),
319321
})
320322
if err != nil {
321323
log.Error(err, "Generating RBAC using chart-inspector")
@@ -362,7 +364,7 @@ func (h *handler) Create(ctx context.Context, mg *unstructured.Unstructured) err
362364
}
363365
log.Debug("Installing composition package", "package", pkg.URL)
364366

365-
all, err := helmchart.GetResourcesRefFromRelease(rel, mg.GetNamespace())
367+
all, err := helmchart.GetResourcesRefFromRelease(rel, mg.GetNamespace(), meta.IsVerbose(mg))
366368
if err != nil {
367369
log.Error(err, "Getting resources from release")
368370
return fmt.Errorf("getting resources from release: %w", err)
@@ -440,7 +442,7 @@ func (h *handler) Update(ctx context.Context, mg *unstructured.Unstructured) err
440442
return err
441443
}
442444

443-
all, err := helmchart.GetResourcesRefFromRelease(rel, mg.GetNamespace())
445+
all, err := helmchart.GetResourcesRefFromRelease(rel, mg.GetNamespace(), meta.IsVerbose(mg))
444446
if err != nil {
445447
log.Error(err, "Getting resources from release")
446448
return fmt.Errorf("getting resources from release: %w", err)
@@ -588,6 +590,7 @@ func (h *handler) Delete(ctx context.Context, mg *unstructured.Unstructured) err
588590
CompositionDefinitionName: pkg.CompositionDefinitionInfo.Name,
589591
CompositionDefinitionNamespace: pkg.CompositionDefinitionInfo.Namespace,
590592
CompositionDefintionGVR: pkg.CompositionDefinitionInfo.GVR,
593+
Verbose: meta.IsVerbose(mg),
591594
})
592595
rbInstaller := rbac.NewRBACInstaller(h.dynamicClient)
593596
err = rbInstaller.UninstallRBAC(generated)

internal/rbacgen/rbacgen.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ type Parameters struct {
2525
CompositionDefinitionName string // The name of the composition definition. Required.
2626
CompositionDefinitionNamespace string // The namespace of the composition definition.
2727
CompositionDefintionGVR schema.GroupVersionResource // The GVR of the composition definition.
28+
Verbose bool // Whether to enable verbose logging.
2829
}
2930

3031
type RBACGen struct {
@@ -72,6 +73,13 @@ func (r *RBACGen) Generate(params Parameters) (*rbac.RBAC, error) {
7273
Namespaces: []*corev1.Namespace{},
7374
}
7475

76+
if params.Verbose {
77+
fmt.Printf("Resources extracted for RBAC generation:\n")
78+
for _, res := range resources {
79+
fmt.Printf("- %s/%s (Group: %s, Version: %s, Resource: %s)\n", res.Namespace, res.Name, res.Group, res.Version, res.Resource)
80+
}
81+
}
82+
7583
for _, resource := range resources {
7684
if resource.Namespace == "" {
7785
if resource.Group == "" && resource.Resource == "namespaces" && resource.Version == "v1" {

internal/tools/helmchart/helmchart.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,15 +109,15 @@ func RenderTemplate(ctx context.Context, opts RenderTemplateOptions) (*release.R
109109
return nil, nil, err
110110
}
111111

112-
all, err := GetResourcesRefFromRelease(rel, opts.Resource.GetNamespace())
112+
all, err := GetResourcesRefFromRelease(rel, opts.Resource.GetNamespace(), false)
113113
if err != nil {
114114
return nil, nil, fmt.Errorf("failed to get resources from release: %w", err)
115115
}
116116

117117
return rel, all, nil
118118
}
119119

120-
func GetResourcesRefFromRelease(rel *release.Release, defaultNamespace string) ([]objectref.ObjectRef, error) {
120+
func GetResourcesRefFromRelease(rel *release.Release, defaultNamespace string, verbose bool) ([]objectref.ObjectRef, error) {
121121
out := new(bytes.Buffer)
122122

123123
// We ignore a potential error here because, when the --debug flag was specified,
@@ -135,6 +135,10 @@ func GetResourcesRefFromRelease(rel *release.Release, defaultNamespace string) (
135135
fmt.Fprintf(out, "%s", manifests.String())
136136
}
137137

138+
if verbose {
139+
fmt.Printf("Rendered Helm Chart YAML:\n%s\n", out.String())
140+
}
141+
138142
all := []objectref.ObjectRef{}
139143
tpl := out.Bytes()
140144

@@ -147,20 +151,29 @@ func GetResourcesRefFromRelease(rel *release.Release, defaultNamespace string) (
147151

148152
var rawObj runtime.RawExtension
149153
if err := decoder.Decode(&rawObj); err != nil {
150-
return all, err
154+
if verbose {
155+
fmt.Printf("Failed to decode rendered template spec:\n%s\nError: %v\n", spec, err)
156+
}
157+
return all, fmt.Errorf("failed to decode rendered template: %w", err)
151158
}
152159
if rawObj.Raw == nil {
153160
continue
154161
}
155162

156163
obj, gvk, err := yaml.NewDecodingSerializer(unstructured.UnstructuredJSONScheme).Decode(rawObj.Raw, nil, nil)
157164
if err != nil {
158-
return all, err
165+
if verbose {
166+
fmt.Printf("Failed to decode rendered template to object:\n%s\nError: %v\n", spec, err)
167+
}
168+
return all, fmt.Errorf("failed to decode rendered template to unstructured: %w", err)
159169
}
160170

161171
unstructuredMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
162172
if err != nil {
163-
return all, err
173+
if verbose {
174+
fmt.Printf("Failed to convert to unstructured map:\n%s\nError: %v\n", spec, err)
175+
}
176+
return all, fmt.Errorf("failed to convert to unstructured map: %w", err)
164177
}
165178

166179
unstructuredObj := &unstructured.Unstructured{Object: unstructuredMap}

0 commit comments

Comments
 (0)