Skip to content

Commit 87f29e5

Browse files
authored
Merge pull request #230 from pjbgf/improvements2
Embed templates into final binary
2 parents cc49a91 + 219a73c commit 87f29e5

File tree

9 files changed

+72
-63
lines changed

9 files changed

+72
-63
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/crds/crd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package crds
33
import (
44
"encoding/json"
55
"fmt"
6-
"io/ioutil"
6+
"os"
77
"strings"
88

99
cisoperator "github.com/rancher/cis-operator/pkg/apis/cis.cattle.io/v1"
@@ -37,7 +37,7 @@ func WriteCRD() error {
3737
}
3838

3939
filename := fmt.Sprintf("./crds/%s.yaml", strings.ToLower(crd.Spec.Names.Kind))
40-
err = ioutil.WriteFile(filename, yamlBytes, 0644)
40+
err = os.WriteFile(filename, yamlBytes, 0o644)
4141
if err != nil {
4242
return err
4343
}

pkg/securityscan/alert/prometheusrule.go

Lines changed: 11 additions & 8 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,23 +31,23 @@ 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 {
43-
return nil, fmt.Errorf("Error parsing the template %v", err)
46+
return nil, fmt.Errorf("Error parsing the template %w", err)
4447
}
4548

4649
if err := obj.Decode(&scanAlertRule); err != nil {
47-
return nil, fmt.Errorf("Error decoding to template %v", err)
50+
return nil, fmt.Errorf("Error decoding to template %w", err)
4851
}
4952

5053
ownerRef := meta1.OwnerReference{
@@ -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/controller.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,32 +116,32 @@ func NewController(ctx context.Context, cfg *rest.Config, namespace, name string
116116
}
117117
ctl.cisFactory, err = cisoperatorctl.NewFactoryFromConfig(cfg)
118118
if err != nil {
119-
return nil, fmt.Errorf("Error building securityscan NewFactoryFromConfig: %s", err.Error())
119+
return nil, fmt.Errorf("Error building securityscan NewFactoryFromConfig: %w", err)
120120
}
121121

122122
ctl.batchFactory, err = batchctl.NewFactoryFromConfig(cfg)
123123
if err != nil {
124-
return nil, fmt.Errorf("Error building batch NewFactoryFromConfig: %s", err.Error())
124+
return nil, fmt.Errorf("Error building batch NewFactoryFromConfig: %w", err)
125125
}
126126

127127
ctl.coreFactory, err = corectl.NewFactoryFromConfig(cfg)
128128
if err != nil {
129-
return nil, fmt.Errorf("Error building core NewFactoryFromConfig: %s", err.Error())
129+
return nil, fmt.Errorf("Error building core NewFactoryFromConfig: %w", err)
130130
}
131131

132132
ctl.appsFactory, err = appsctl.NewFactoryFromConfig(cfg)
133133
if err != nil {
134-
return nil, fmt.Errorf("Error building apps NewFactoryFromConfig: %s", err.Error())
134+
return nil, fmt.Errorf("Error building apps NewFactoryFromConfig: %w", err)
135135
}
136136

137137
ctl.monitoringClient, err = v1monitoringclient.NewForConfig(cfg)
138138
if err != nil {
139-
return nil, fmt.Errorf("Error building v1 monitoring client from config: %s", err.Error())
139+
return nil, fmt.Errorf("Error building v1 monitoring client from config: %w", err)
140140
}
141141

142142
err = initializeMetrics(ctl)
143143
if err != nil {
144-
return nil, fmt.Errorf("Error registering CIS Metrics: %s", err.Error())
144+
return nil, fmt.Errorf("Error registering CIS Metrics: %w", err)
145145
}
146146

147147
ctl.scans = ctl.cisFactory.Cis().V1().ClusterScan()

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
}

pkg/securityscan/jobHandler.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (c *Controller) handleJobs(ctx context.Context) error {
7474
}
7575
err := c.deleteJob(jobs, obj, metav1.DeletePropagationBackground)
7676
if err != nil {
77-
return obj, fmt.Errorf("error deleting job: %v", err)
77+
return obj, fmt.Errorf("error deleting job: %w", err)
7878
}
7979
err = c.ensureCleanup(scan)
8080
if err != nil {
@@ -173,14 +173,14 @@ func (c *Controller) createClusterScanReport(ctx context.Context, outputBytes []
173173
}
174174
profile, err := c.getClusterScanProfile(ctx, scan)
175175
if err != nil {
176-
return nil, fmt.Errorf("Error %v loading v1.ClusterScanProfile for name %v", scan.Spec.ScanProfileName, err)
176+
return nil, fmt.Errorf("Error %v loading v1.ClusterScanProfile for name %w", scan.Spec.ScanProfileName, err)
177177
}
178178
scanReport.Spec.BenchmarkVersion = profile.Spec.BenchmarkVersion
179179
scanReport.Spec.LastRunTimestamp = time.Now().String()
180180

181181
data, err := reportLibrary.GetJSONBytes(outputBytes)
182182
if err != nil {
183-
return nil, fmt.Errorf("Error %v loading scan report json bytes", err)
183+
return nil, fmt.Errorf("Error %w loading scan report json bytes", err)
184184
}
185185
scanReport.Spec.ReportJSON = string(data[:])
186186

@@ -201,7 +201,7 @@ func (c *Controller) ensureCleanup(scan *v1.ClusterScan) error {
201201
dsPrefix := "sonobuoy-rancher-kube-bench-daemon-set"
202202
dsList, err := c.daemonsetCache.List(v1.ClusterScanNS, labels.Set(sonobuoyWorkerLabel).AsSelector())
203203
if err != nil {
204-
return fmt.Errorf("cis: ensureCleanup: error listing daemonsets: %v", err)
204+
return fmt.Errorf("cis: ensureCleanup: error listing daemonsets: %w", err)
205205
}
206206
for _, ds := range dsList {
207207
if !strings.HasPrefix(ds.Name, dsPrefix) {
@@ -216,29 +216,29 @@ func (c *Controller) ensureCleanup(scan *v1.ClusterScan) error {
216216
podPrefix := name.SafeConcatName("security-scan-runner", scan.Name)
217217
podList, err := c.podCache.List(v1.ClusterScanNS, labels.Set(SonobuoyMasterLabel).AsSelector())
218218
if err != nil {
219-
return fmt.Errorf("cis: ensureCleanup: error listing pods: %v", err)
219+
return fmt.Errorf("cis: ensureCleanup: error listing pods: %w", err)
220220
}
221221
for _, pod := range podList {
222222
if !strings.HasPrefix(pod.Name, podPrefix) {
223223
continue
224224
}
225225
if e := c.pods.Delete(v1.ClusterScanNS, pod.Name, &metav1.DeleteOptions{}); e != nil && !errors.IsNotFound(e) {
226-
return fmt.Errorf("cis: ensureCleanup: error deleting pod %v: %v", pod.Name, e)
226+
return fmt.Errorf("cis: ensureCleanup: error deleting pod %v: %w", pod.Name, e)
227227
}
228228
}
229229

230230
// Delete cms
231231
cms, err := c.configMapCache.List(v1.ClusterScanNS, labels.NewSelector())
232232
if err != nil {
233-
return fmt.Errorf("cis: ensureCleanup: error listing cm: %v", err)
233+
return fmt.Errorf("cis: ensureCleanup: error listing cm: %w", err)
234234
}
235235
for _, cm := range cms {
236236
if !strings.Contains(cm.Name, scan.Name) {
237237
continue
238238
}
239239

240240
if e := c.configmaps.Delete(v1.ClusterScanNS, cm.Name, &metav1.DeleteOptions{}); e != nil && !errors.IsNotFound(e) {
241-
return fmt.Errorf("cis: ensureCleanup: error deleting cm %v: %v", cm.Name, e)
241+
return fmt.Errorf("cis: ensureCleanup: error deleting cm %v: %w", cm.Name, e)
242242
}
243243
}
244244

0 commit comments

Comments
 (0)