Skip to content

Commit 219a73c

Browse files
committed
Embed templates into cis-operator
Previously, templates were copied into the final image, together with all source code within the pkg dir. The new approach avoids copying unnecessary files over to the final image, but instead embeds the templates into the target binary. Signed-off-by: Paulo Gomes <[email protected]>
1 parent 66d5eb3 commit 219a73c

File tree

4 files changed

+30
-21
lines changed

4 files changed

+30
-21
lines changed

package/Dockerfile

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
FROM registry.suse.com/bci/bci-busybox:15.5
22

3-
COPY pkg/ pkg/
4-
5-
# Ensure 65535 can access the templates in
6-
# pkg/securityscan/core/templates
7-
RUN chmod -R +xr pkg/
8-
93
COPY bin/cis-operator /usr/bin/
104

115
USER 65535:65535

pkg/securityscan/alert/prometheusrule.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package alert
22

33
import (
44
"bytes"
5+
_ "embed" // nolint
56
"fmt"
67
"text/template"
78

@@ -14,8 +15,10 @@ import (
1415
"github.com/rancher/wrangler/pkg/name"
1516
)
1617

18+
//go:embed templates/prometheusrule.template
19+
var prometheusRuleTemplate string
20+
1721
const templateName = "prometheusrule.template"
18-
const templatePath = "./pkg/securityscan/alert/templates/prometheusrule.template"
1922

2023
func NewPrometheusRule(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanprofile *cisoperatorapiv1.ClusterScanProfile, imageConfig *cisoperatorapiv1.ScanImageConfig) (*monitoringv1.PrometheusRule, error) {
2124
configdata := map[string]interface{}{
@@ -28,17 +31,17 @@ func NewPrometheusRule(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanpro
2831
"alertOnComplete": clusterscan.Spec.ScheduledScanConfig.ScanAlertRule.AlertOnComplete,
2932
"failOnWarn": clusterscan.Spec.ScoreWarning == cisoperatorapiv1.ClusterScanFailOnWarning,
3033
}
31-
scanAlertRule, err := generatePrometheusRule(clusterscan, templateName, templatePath, configdata)
34+
scanAlertRule, err := generatePrometheusRule(clusterscan, configdata)
3235
if err != nil {
3336
return scanAlertRule, err
3437
}
3538

3639
return scanAlertRule, nil
3740
}
3841

39-
func generatePrometheusRule(clusterscan *cisoperatorapiv1.ClusterScan, templateName string, templateFile string, data map[string]interface{}) (*monitoringv1.PrometheusRule, error) {
42+
func generatePrometheusRule(clusterscan *cisoperatorapiv1.ClusterScan, data map[string]interface{}) (*monitoringv1.PrometheusRule, error) {
4043
scanAlertRule := &monitoringv1.PrometheusRule{}
41-
obj, err := parseTemplate(clusterscan, templateName, templateFile, data)
44+
obj, err := parseTemplate(clusterscan, data)
4245
if err != nil {
4346
return nil, fmt.Errorf("Error parsing the template %w", err)
4447
}
@@ -58,8 +61,8 @@ func generatePrometheusRule(clusterscan *cisoperatorapiv1.ClusterScan, templateN
5861
return scanAlertRule, nil
5962
}
6063

61-
func parseTemplate(clusterscan *cisoperatorapiv1.ClusterScan, templateName string, templateFile string, data map[string]interface{}) (*k8Yaml.YAMLOrJSONDecoder, error) {
62-
cmTemplate, err := template.New(templateName).ParseFiles(templateFile)
64+
func parseTemplate(clusterscan *cisoperatorapiv1.ClusterScan, data map[string]interface{}) (*k8Yaml.YAMLOrJSONDecoder, error) {
65+
cmTemplate, err := template.New(templateName).Parse(prometheusRuleTemplate)
6366
if err != nil {
6467
return nil, err
6568
}

pkg/securityscan/core/configmap.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package core
22

33
import (
44
"bytes"
5+
_ "embed" // nolint
56
"encoding/json"
67
"text/template"
78

@@ -15,6 +16,12 @@ import (
1516
cisoperatorapiv1 "github.com/rancher/cis-operator/pkg/apis/cis.cattle.io/v1"
1617
)
1718

19+
//go:embed templates/pluginConfig.template
20+
var pluginConfigTemplate string
21+
22+
//go:embed templates/cisscanConfig.template
23+
var cisscanConfigTemplate string
24+
1825
type OverrideSkipInfoData struct {
1926
Skip map[string][]string `json:"skip"`
2027
}
@@ -36,7 +43,7 @@ func NewConfigMaps(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanprofile
3643
"sonobuoyImage": imageConfig.SonobuoyImage + ":" + imageConfig.SonobuoyImageTag,
3744
"sonobuoyVersion": imageConfig.SonobuoyImageTag,
3845
}
39-
configcm, err := generateConfigMap(clusterscan, "cisscanConfig.template", "./pkg/securityscan/core/templates/cisscanConfig.template", configdata)
46+
configcm, err := generateConfigMap(clusterscan, "cisscanConfig.template", cisscanConfigTemplate, configdata)
4047
if err != nil {
4148
return cmMap, err
4249
}
@@ -68,7 +75,7 @@ func NewConfigMaps(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanprofile
6875
"customBenchmarkConfigMapName": customBenchmarkConfigMapName,
6976
"customBenchmarkConfigMapData": customBenchmarkConfigMapData,
7077
}
71-
plugincm, err := generateConfigMap(clusterscan, "pluginConfig.template", "./pkg/securityscan/core/templates/pluginConfig.template", plugindata)
78+
plugincm, err := generateConfigMap(clusterscan, "pluginConfig.template", pluginConfigTemplate, plugindata)
7279
if err != nil {
7380
return cmMap, err
7481
}
@@ -89,10 +96,10 @@ func NewConfigMaps(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanprofile
8996
return cmMap, nil
9097
}
9198

92-
func generateConfigMap(clusterscan *cisoperatorapiv1.ClusterScan, templateName string, templateFile string, data map[string]interface{}) (*corev1.ConfigMap, error) {
99+
func generateConfigMap(clusterscan *cisoperatorapiv1.ClusterScan, name string, text string, data map[string]interface{}) (*corev1.ConfigMap, error) {
93100
configcm := &corev1.ConfigMap{}
94101

95-
obj, err := parseTemplate(clusterscan, templateName, templateFile, data)
102+
obj, err := parseTemplate(clusterscan, name, text, data)
96103
if err != nil {
97104
return nil, err
98105
}
@@ -103,8 +110,8 @@ func generateConfigMap(clusterscan *cisoperatorapiv1.ClusterScan, templateName s
103110
return configcm, nil
104111
}
105112

106-
func parseTemplate(clusterscan *cisoperatorapiv1.ClusterScan, templateName string, templateFile string, data map[string]interface{}) (*k8Yaml.YAMLOrJSONDecoder, error) {
107-
cmTemplate, err := template.New(templateName).ParseFiles(templateFile)
113+
func parseTemplate(clusterscan *cisoperatorapiv1.ClusterScan, name string, text string, data map[string]interface{}) (*k8Yaml.YAMLOrJSONDecoder, error) {
114+
cmTemplate, err := template.New(name).Parse(text)
108115
if err != nil {
109116
return nil, err
110117
}

pkg/securityscan/core/service.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package core
22

33
import (
4+
_ "embed" // nolint
5+
46
"github.com/rancher/wrangler/pkg/name"
57
corev1 "k8s.io/api/core/v1"
68

79
cisoperatorapiv1 "github.com/rancher/cis-operator/pkg/apis/cis.cattle.io/v1"
810
)
911

12+
//go:embed templates/service.template
13+
var serviceTemplate string
14+
1015
func NewService(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanprofile *cisoperatorapiv1.ClusterScanProfile, controllerName string) (service *corev1.Service, err error) {
1116

1217
servicedata := map[string]interface{}{
@@ -15,17 +20,17 @@ func NewService(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanprofile *c
1520
"runName": name.SafeConcatName("security-scan-runner", clusterscan.Name),
1621
"appName": "rancher-cis-benchmark",
1722
}
18-
service, err = generateService(clusterscan, "service.template", "./pkg/securityscan/core/templates/service.template", servicedata)
23+
service, err = generateService(clusterscan, "service.template", serviceTemplate, servicedata)
1924
if err != nil {
2025
return nil, err
2126
}
2227
return service, nil
2328
}
2429

25-
func generateService(clusterscan *cisoperatorapiv1.ClusterScan, templateName string, templateFile string, data map[string]interface{}) (*corev1.Service, error) {
30+
func generateService(clusterscan *cisoperatorapiv1.ClusterScan, templateName string, templContent string, data map[string]interface{}) (*corev1.Service, error) {
2631
service := &corev1.Service{}
2732

28-
obj, err := parseTemplate(clusterscan, templateName, templateFile, data)
33+
obj, err := parseTemplate(clusterscan, templateName, templContent, data)
2934
if err != nil {
3035
return nil, err
3136
}

0 commit comments

Comments
 (0)