@@ -37,21 +37,41 @@ func (r *ScanReconciler) startParser(scan *executionv1.Scan) error {
3737
3838 parseType := scan .Status .RawResultType
3939
40- // get the scan template for the scan
41- var parseDefinition executionv1.ParseDefinition
42- if err := r .Get (ctx , types.NamespacedName {Name : parseType , Namespace : scan .Namespace }, & parseDefinition ); err != nil {
43- log .V (7 ).Info ("Unable to fetch ParseDefinition" )
40+ // get the parse definition matching the parseType of the scan result
41+ var parseDefinitionSpec executionv1.ParseDefinitionSpec
42+ if scan .Spec .ResourceMode == executionv1 .NamespaceLocal {
43+ var parseDefinition executionv1.ParseDefinition
44+ if err := r .Get (ctx , types.NamespacedName {Name : parseType , Namespace : scan .Namespace }, & parseDefinition ); err != nil {
45+ log .V (7 ).Info ("Unable to fetch ParseDefinition" )
4446
45- scan .Status .State = "Errored"
46- scan .Status .ErrorDescription = fmt .Sprintf ("No ParseDefinition for ResultType '%s' found in Scans Namespace." , parseType )
47- if err := r .Status ().Update (ctx , scan ); err != nil {
48- r .Log .Error (err , "unable to update Scan status" )
49- return err
47+ scan .Status .State = "Errored"
48+ scan .Status .ErrorDescription = fmt .Sprintf ("No ParseDefinition for ResultType '%s' found in Scans Namespace." , parseType )
49+ if err := r .Status ().Update (ctx , scan ); err != nil {
50+ r .Log .Error (err , "unable to update Scan status" )
51+ return err
52+ }
53+
54+ return fmt .Errorf ("No ParseDefinition of type '%s' found" , parseType )
5055 }
56+ log .Info ("Matching ParseDefinition Found" , "ParseDefinition" , parseType )
57+ parseDefinitionSpec = parseDefinition .Spec
58+ } else if scan .Spec .ResourceMode == executionv1 .ClusterWide {
59+ var clusterParseDefinition executionv1.ClusterParseDefinition
60+ if err := r .Get (ctx , types.NamespacedName {Name : parseType }, & clusterParseDefinition ); err != nil {
61+ log .V (7 ).Info ("Unable to fetch ClusterParseDefinition" )
62+
63+ scan .Status .State = "Errored"
64+ scan .Status .ErrorDescription = fmt .Sprintf ("No ClusterParseDefinition for ResultType '%s' found." , parseType )
65+ if err := r .Status ().Update (ctx , scan ); err != nil {
66+ r .Log .Error (err , "unable to update Scan status" )
67+ return err
68+ }
5169
52- return fmt .Errorf ("No ParseDefinition of type '%s' found" , parseType )
70+ return fmt .Errorf ("No ClusterParseDefinition of type '%s' found" , parseType )
71+ }
72+ log .Info ("Matching ClusterParseDefinition Found" , "ClusterParseDefinition" , parseType )
73+ parseDefinitionSpec = clusterParseDefinition .Spec
5374 }
54- log .Info ("Matching ParseDefinition Found" , "ParseDefinition" , parseType )
5575
5676 urlExpirationDuration , err := util .GetUrlExpirationDuration (util .ParserController )
5777 if err != nil {
@@ -108,8 +128,8 @@ func (r *ScanReconciler) startParser(scan *executionv1.Scan) error {
108128 corev1 .ResourceMemory : resource .MustParse ("200Mi" ),
109129 },
110130 }
111- if len (parseDefinition . Spec . Resources .Requests ) != 0 || len (parseDefinition . Spec .Resources .Limits ) != 0 {
112- resources = parseDefinition . Spec .Resources
131+ if len (parseDefinitionSpec . Resources .Requests ) != 0 || len (parseDefinitionSpec .Resources .Limits ) != 0 {
132+ resources = parseDefinitionSpec .Resources
113133 }
114134
115135 job := & batch.Job {
@@ -120,7 +140,7 @@ func (r *ScanReconciler) startParser(scan *executionv1.Scan) error {
120140 Labels : labels ,
121141 },
122142 Spec : batch.JobSpec {
123- TTLSecondsAfterFinished : parseDefinition . Spec .TTLSecondsAfterFinished ,
143+ TTLSecondsAfterFinished : parseDefinitionSpec .TTLSecondsAfterFinished ,
124144 BackoffLimit : & backOffLimit ,
125145 Template : corev1.PodTemplateSpec {
126146 ObjectMeta : metav1.ObjectMeta {
@@ -135,11 +155,11 @@ func (r *ScanReconciler) startParser(scan *executionv1.Scan) error {
135155 Spec : corev1.PodSpec {
136156 RestartPolicy : corev1 .RestartPolicyNever ,
137157 ServiceAccountName : "parser" ,
138- ImagePullSecrets : parseDefinition . Spec .ImagePullSecrets ,
158+ ImagePullSecrets : parseDefinitionSpec .ImagePullSecrets ,
139159 Containers : []corev1.Container {
140160 {
141161 Name : "parser" ,
142- Image : parseDefinition . Spec .Image ,
162+ Image : parseDefinitionSpec .Image ,
143163 Env : []corev1.EnvVar {
144164 {
145165 Name : "NAMESPACE" ,
@@ -158,7 +178,7 @@ func (r *ScanReconciler) startParser(scan *executionv1.Scan) error {
158178 rawResultDownloadURL ,
159179 findingsUploadURL ,
160180 },
161- ImagePullPolicy : parseDefinition . Spec .ImagePullPolicy ,
181+ ImagePullPolicy : parseDefinitionSpec .ImagePullPolicy ,
162182 Resources : resources ,
163183 SecurityContext : & corev1.SecurityContext {
164184 RunAsNonRoot : & truePointer ,
@@ -180,31 +200,31 @@ func (r *ScanReconciler) startParser(scan *executionv1.Scan) error {
180200 // Merge Env from ParserTemplate
181201 job .Spec .Template .Spec .Containers [0 ].Env = append (
182202 job .Spec .Template .Spec .Containers [0 ].Env ,
183- parseDefinition . Spec .Env ... ,
203+ parseDefinitionSpec .Env ... ,
184204 )
185205 // Merge VolumeMounts from ParserTemplate
186206 job .Spec .Template .Spec .Containers [0 ].VolumeMounts = append (
187207 job .Spec .Template .Spec .Containers [0 ].VolumeMounts ,
188- parseDefinition . Spec .VolumeMounts ... ,
208+ parseDefinitionSpec .VolumeMounts ... ,
189209 )
190210 // Merge Volumes from ParserTemplate
191211 job .Spec .Template .Spec .Volumes = append (
192212 job .Spec .Template .Spec .Volumes ,
193- parseDefinition . Spec .Volumes ... ,
213+ parseDefinitionSpec .Volumes ... ,
194214 )
195215
196216 // Set affinity based on scan, if defined, or parseDefinition if not overridden by scan
197217 if scan .Spec .Affinity != nil {
198218 job .Spec .Template .Spec .Affinity = scan .Spec .Affinity
199219 } else {
200- job .Spec .Template .Spec .Affinity = parseDefinition . Spec .Affinity
220+ job .Spec .Template .Spec .Affinity = parseDefinitionSpec .Affinity
201221 }
202222
203223 // Set tolerations, either from parseDefinition or from scan
204224 if scan .Spec .Tolerations != nil {
205225 job .Spec .Template .Spec .Tolerations = scan .Spec .Tolerations
206226 } else {
207- job .Spec .Template .Spec .Tolerations = parseDefinition . Spec .Tolerations
227+ job .Spec .Template .Spec .Tolerations = parseDefinitionSpec .Tolerations
208228 }
209229
210230 r .Log .V (8 ).Info ("Configuring customCACerts for Parser" )
0 commit comments