Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions internal/component/reportexporter/outputs/configmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,16 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/gardener/diki-operator/internal/constants"
dikiv1alpha1 "github.com/gardener/diki-operator/pkg/apis/diki/v1alpha1"
"github.com/gardener/diki-operator/pkg/apis/reportexporter/v1alpha1"
)

// ConfigMapExporter is responsible for exporting the Diki report to a ConfigMap.
type ConfigMapExporter struct {
Client client.Client
Config dikiv1alpha1.OutputConfigMap
Client client.Client
Config dikiv1alpha1.OutputConfigMap
ComplianceScan *dikiv1alpha1.ComplianceScan
}

var _ Output = &ConfigMapExporter{}
Expand All @@ -38,10 +40,11 @@ type ConfigMapRef struct {
}

// NewConfigMapExporter creates a new instance of ConfigMapExporter.
func NewConfigMapExporter(client client.Client, config dikiv1alpha1.OutputConfigMap) *ConfigMapExporter {
func NewConfigMapExporter(client client.Client, config dikiv1alpha1.OutputConfigMap, complianceScan *dikiv1alpha1.ComplianceScan) *ConfigMapExporter {
return &ConfigMapExporter{
Client: client,
Config: config,
Client: client,
Config: config,
ComplianceScan: complianceScan,
}
}

Expand All @@ -63,6 +66,7 @@ func (c *ConfigMapExporter) Export(ctx context.Context, report dikireport.Report
ObjectMeta: metav1.ObjectMeta{
GenerateName: c.Config.NamePrefix,
Namespace: c.Config.Namespace,
Labels: c.getLabels(),
},
Data: map[string]string{
reportKey: string(reportJSON),
Expand All @@ -80,3 +84,11 @@ func (c *ConfigMapExporter) Export(ctx context.Context, report dikireport.Report
},
}, nil
}

func (c *ConfigMapExporter) getLabels() map[string]string {
return map[string]string{
constants.LabelAppName: constants.LabelValueDiki,
constants.LabelAppManagedBy: constants.LabelValueDikiOperator,
constants.ComplianceScanLabel: string(c.ComplianceScan.UID),
}
}
13 changes: 13 additions & 0 deletions internal/component/reportexporter/outputs/configmap_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ import (
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
logf "sigs.k8s.io/controller-runtime/pkg/log"
Expand Down Expand Up @@ -61,6 +63,11 @@ var _ = Describe("Controller", func() {
Namespace: "default",
NamePrefix: "diki-report-",
},
ComplianceScan: &dikiv1alpha1.ComplianceScan{
ObjectMeta: metav1.ObjectMeta{
UID: types.UID("111"),
},
},
}
})

Expand All @@ -81,6 +88,12 @@ var _ = Describe("Controller", func() {
}, configMap)
Expect(err).ToNot(HaveOccurred())

Expect(configMap.Labels).To(Equal(map[string]string{
"app.kubernetes.io/name": "diki",
"app.kubernetes.io/managed-by": "diki-operator",
"diki.gardener.cloud/compliancescan": "111",
}))

reportData := configMap.Data["report.json"]
Expect(reportData).ToNot(BeEmpty())

Expand Down
6 changes: 3 additions & 3 deletions internal/component/reportexporter/report_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func (d *ReportExporter) Export(ctx context.Context) error {
return fmt.Errorf("error reading diki report: %w", err)
}

outputs, err := d.createOutputs()
outputs, err := d.createOutputs(complianceScan)
if err != nil {
return fmt.Errorf("error creating outputs: %w", err)
}
Expand Down Expand Up @@ -113,7 +113,7 @@ func (d *ReportExporter) Export(ctx context.Context) error {
return nil
}

func (d *ReportExporter) createOutputs() (map[string]dikioutputs.Output, error) {
func (d *ReportExporter) createOutputs(complianceScan *dikiv1alpha1.ComplianceScan) (map[string]dikioutputs.Output, error) {
outputs := make(map[string]dikioutputs.Output)

for _, output := range d.Config.Outputs {
Expand All @@ -124,7 +124,7 @@ func (d *ReportExporter) createOutputs() (map[string]dikioutputs.Output, error)
return nil, fmt.Errorf("failed to unmarshal ConfigMapOutput: %w", err)
}

outputs[output.Name] = dikioutputs.NewConfigMapExporter(d.Client, configMapOutput)
outputs[output.Name] = dikioutputs.NewConfigMapExporter(d.Client, configMapOutput, complianceScan)
default:
return nil, fmt.Errorf("unsupported output type: %s", output.Type)
}
Expand Down
20 changes: 20 additions & 0 deletions internal/constants/constants.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// SPDX-FileCopyrightText: SAP SE or an SAP affiliate company and Gardener contributors
//
// SPDX-License-Identifier: Apache-2.0

package constants

const (
// ComplianceScanLabel is the label used to identify resources connected to a ComplianceScan.
ComplianceScanLabel = "diki.gardener.cloud/compliancescan"

// LabelAppName is the standard Kubernetes label key for application name.
LabelAppName = "app.kubernetes.io/name"
// LabelAppManagedBy is the standard Kubernetes label key for the managing tool or operator.
LabelAppManagedBy = "app.kubernetes.io/managed-by"

// LabelValueDiki is the application name value used for diki-related resources.
LabelValueDiki = "diki"
// LabelValueDikiOperator is the managing operator value used for diki-operator managed resources.
LabelValueDikiOperator = "diki-operator"
)
13 changes: 0 additions & 13 deletions internal/reconciler/compliancescan/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,6 @@
package reconciler

const (
// ComplianceScanLabel is the label used to identify resources connected to a ComplianceScan.
ComplianceScanLabel = "diki.gardener.cloud/compliancescan"

// LabelAppName is the standard Kubernetes label key for application name.
LabelAppName = "app.kubernetes.io/name"
// LabelAppManagedBy is the standard Kubernetes label key for the managing tool or operator.
LabelAppManagedBy = "app.kubernetes.io/managed-by"

// LabelValueDiki is the application name value used for diki-related resources.
LabelValueDiki = "diki"
// LabelValueDikiOperator is the managing operator value used for diki-operator managed resources.
LabelValueDikiOperator = "diki-operator"

// ConfigMapGenerateNamePrefix is the prefix for diki config ConfigMap names.
ConfigMapGenerateNamePrefix = "diki-config-"
// DikiConfigKey is the key used to store the YAML configuration in the ConfigMap data.
Expand Down
7 changes: 4 additions & 3 deletions internal/reconciler/compliancescan/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/go-logr/logr"
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/gardener/diki-operator/internal/constants"
"github.com/gardener/diki-operator/pkg/apis/diki/v1alpha1"
v1alpha1helper "github.com/gardener/diki-operator/pkg/apis/diki/v1alpha1/helper"
)
Expand Down Expand Up @@ -44,12 +45,12 @@ func (r *Reconciler) handleFailedScan(ctx context.Context, complianceScan *v1alp

func (r *Reconciler) getLabels(complianceScan *v1alpha1.ComplianceScan) map[string]string {
labels := map[string]string{
LabelAppName: LabelValueDiki,
LabelAppManagedBy: LabelValueDikiOperator,
constants.LabelAppName: constants.LabelValueDiki,
constants.LabelAppManagedBy: constants.LabelValueDikiOperator,
}

maps.Copy(labels, r.Config.DikiRunner.Labels)
labels[ComplianceScanLabel] = string(complianceScan.UID)
labels[constants.ComplianceScanLabel] = string(complianceScan.UID)

return labels
}
Expand Down
1 change: 1 addition & 0 deletions skaffold.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ build:
paths:
- cmd/diki-operator
- cmd/diki-operator/app
- internal/constants
- internal/reconciler/compliancescan
- internal/webhook/compliancescan
- pkg/apis/config/v1alpha1
Expand Down
Loading