99 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1010 k8Yaml "k8s.io/apimachinery/pkg/util/yaml"
1111
12+ wcorev1 "github.com/rancher/wrangler/pkg/generated/controllers/core/v1"
1213 "github.com/rancher/wrangler/pkg/name"
1314
1415 cisoperatorapiv1 "github.com/rancher/cis-operator/pkg/apis/cis.cattle.io/v1"
@@ -18,12 +19,14 @@ type OverrideSkipInfoData struct {
1819 Skip map [string ][]string `json:"skip"`
1920}
2021
21- var (
22- CurrentBenchmarkKey = "current"
23- ConfigFileName = "config.json"
22+ const (
23+ CurrentBenchmarkKey = "current"
24+ ConfigFileName = "config.json"
25+ customBenchmarkBaseDir = "/etc/kbs/custombenchmark/cfg"
2426)
2527
26- func NewConfigMaps (clusterscan * cisoperatorapiv1.ClusterScan , clusterscanprofile * cisoperatorapiv1.ClusterScanProfile , controllerName string , imageConfig * cisoperatorapiv1.ScanImageConfig ) (configmaps []* corev1.ConfigMap , err error ) {
28+ func NewConfigMaps (clusterscan * cisoperatorapiv1.ClusterScan , clusterscanprofile * cisoperatorapiv1.ClusterScanProfile , clusterscanbenchmark * cisoperatorapiv1.ClusterScanBenchmark , controllerName string , imageConfig * cisoperatorapiv1.ScanImageConfig , configmapsClient wcorev1.ConfigMapController ) (cmMap map [string ]* corev1.ConfigMap , err error ) {
29+ cmMap = make (map [string ]* corev1.ConfigMap )
2730
2831 configdata := map [string ]interface {}{
2932 "namespace" : cisoperatorapiv1 .ClusterScanNS ,
@@ -36,35 +39,53 @@ func NewConfigMaps(clusterscan *cisoperatorapiv1.ClusterScan, clusterscanprofile
3639 }
3740 configcm , err := generateConfigMap (clusterscan , "cisscanConfig.template" , "./pkg/securityscan/core/templates/cisscanConfig.template" , configdata )
3841 if err != nil {
39- return configmaps , err
42+ return cmMap , err
4043 }
44+ cmMap ["configcm" ] = configcm
45+
46+ var isCustomBenchmark bool
47+ customBenchmarkConfigMapData := make (map [string ]string )
48+ if clusterscanbenchmark .Spec .CustomBenchmarkConfigMapName != "" {
49+ isCustomBenchmark = true
50+ customcm , err := getCustomBenchmarkConfigMap (clusterscanbenchmark , configmapsClient )
51+ if err != nil {
52+ return cmMap , err
53+ }
54+ customBenchmarkConfigMapData = customcm .Data
55+ }
56+
4157 plugindata := map [string ]interface {}{
42- "namespace" : cisoperatorapiv1 .ClusterScanNS ,
43- "name" : name .SafeConcatName (cisoperatorapiv1 .ClusterScanPluginsConfigMap , clusterscan .Name ),
44- "runName" : name .SafeConcatName ("security-scan-runner" , clusterscan .Name ),
45- "appName" : "rancher-cis-benchmark" ,
46- "serviceaccount" : cisoperatorapiv1 .ClusterScanSA ,
47- "securityScanImage" : imageConfig .SecurityScanImage + ":" + imageConfig .SecurityScanImageTag ,
48- "benchmarkVersion" : clusterscanprofile .Spec .BenchmarkVersion ,
58+ "namespace" : cisoperatorapiv1 .ClusterScanNS ,
59+ "name" : name .SafeConcatName (cisoperatorapiv1 .ClusterScanPluginsConfigMap , clusterscan .Name ),
60+ "runName" : name .SafeConcatName ("security-scan-runner" , clusterscan .Name ),
61+ "appName" : "rancher-cis-benchmark" ,
62+ "serviceaccount" : cisoperatorapiv1 .ClusterScanSA ,
63+ "securityScanImage" : imageConfig .SecurityScanImage + ":" + imageConfig .SecurityScanImageTag ,
64+ "benchmarkVersion" : clusterscanprofile .Spec .BenchmarkVersion ,
65+ "isCustomBenchmark" : isCustomBenchmark ,
66+ "configDir" : customBenchmarkBaseDir ,
67+ "customBenchmarkConfigMapName" : clusterscanbenchmark .Spec .CustomBenchmarkConfigMapName ,
68+ "customBenchmarkConfigMapData" : customBenchmarkConfigMapData ,
4969 }
5070 plugincm , err := generateConfigMap (clusterscan , "pluginConfig.template" , "./pkg/securityscan/core/templates/pluginConfig.template" , plugindata )
5171 if err != nil {
52- return configmaps , err
72+ return cmMap , err
5373 }
74+ cmMap ["plugincm" ] = plugincm
5475
5576 var skipConfigcm * corev1.ConfigMap
5677 if clusterscanprofile .Spec .SkipTests != nil && len (clusterscanprofile .Spec .SkipTests ) > 0 {
5778 //create user skip config map as well
5879 // create the cm
5980 skipDataBytes , err := getOverrideSkipInfoData (clusterscanprofile .Spec .SkipTests )
6081 if err != nil {
61- return configmaps , err
82+ return cmMap , err
6283 }
6384 skipConfigcm = getConfigMapObject (getOverrideConfigMapName (clusterscan ), string (skipDataBytes ))
85+ cmMap ["skipConfigcm" ] = skipConfigcm
6486 }
6587
66- configmaps = append (configmaps , configcm , plugincm , skipConfigcm )
67- return configmaps , nil
88+ return cmMap , nil
6889}
6990
7091func generateConfigMap (clusterscan * cisoperatorapiv1.ClusterScan , templateName string , templateFile string , data map [string ]interface {}) (* corev1.ConfigMap , error ) {
@@ -120,3 +141,10 @@ func getConfigMapObject(cmName, data string) *corev1.ConfigMap {
120141 },
121142 }
122143}
144+
145+ func getCustomBenchmarkConfigMap (benchmark * cisoperatorapiv1.ClusterScanBenchmark , configmapsClient wcorev1.ConfigMapController ) (* corev1.ConfigMap , error ) {
146+ if benchmark .Spec .CustomBenchmarkConfigMapName == "" {
147+ return nil , nil
148+ }
149+ return configmapsClient .Get (benchmark .Spec .CustomBenchmarkConfigMapNameSpace , benchmark .Spec .CustomBenchmarkConfigMapName , metav1.GetOptions {})
150+ }
0 commit comments