@@ -41,8 +41,16 @@ func (c *Controller) handleClusterScans(ctx context.Context) error {
4141 return objects , status , nil
4242 }
4343 logrus .Infof ("ClusterScan GENERATING HANDLER: scan=%s/%s@%s, %v, status=%+v" , obj .Namespace , obj .Name , obj .Spec .ScanProfileName , obj .ResourceVersion , status .LastRunTimestamp )
44-
4544 if obj .Status .LastRunTimestamp == "" && ! v1 .ClusterScanConditionCreated .IsTrue (obj ) {
45+
46+ if ! v1 .ClusterScanConditionPending .IsTrue (obj ) {
47+ v1 .ClusterScanConditionPending .True (obj )
48+ v1 .ClusterScanConditionPending .Message (obj , "ClusterScan run pending" )
49+ c .setClusterScanStatusDisplay (obj )
50+ scans .Enqueue (obj .Name )
51+ return objects , obj .Status , nil
52+ }
53+
4654 if err := c .isRunnerPodPresent (); err != nil {
4755 return objects , obj .Status , fmt .Errorf ("Retrying ClusterScan %v since got error: %v " , obj .Name , err )
4856 }
@@ -53,7 +61,9 @@ func (c *Controller) handleClusterScans(ctx context.Context) error {
5361 profile , err := c .getClusterScanProfile (obj )
5462 if err != nil {
5563 v1 .ClusterScanConditionFailed .True (obj )
56- logrus .Errorf ("Error validating ClusterScanProfile %v, error: %v" , obj .Spec .ScanProfileName , err )
64+ message := fmt .Sprintf ("Error validating ClusterScanProfile %v, error: %v" , obj .Spec .ScanProfileName , err )
65+ v1 .ClusterScanConditionFailed .Message (obj , message )
66+ logrus .Errorf (message )
5767 c .setClusterScanStatusDisplay (obj )
5868 return objects , obj .Status , nil
5969 }
@@ -79,6 +89,8 @@ func (c *Controller) handleClusterScans(ctx context.Context) error {
7989 obj .Status .LastRunScanProfileName = profile .Name
8090 v1 .ClusterScanConditionCreated .True (obj )
8191 v1 .ClusterScanConditionRunCompleted .Unknown (obj )
92+ v1 .ClusterScanConditionRunCompleted .Message (obj , "Creating Job to run the CIS scan" )
93+ c .setClusterScanStatusDisplay (obj )
8294
8395 return objects , obj .Status , nil
8496 }
@@ -140,7 +152,7 @@ func (c Controller) validateClusterScanProfile(profile *v1.ClusterScanProfile) e
140152 // validate benchmark's provider matches the cluster
141153 if benchmark .Spec .ClusterProvider != "" {
142154 if ! strings .EqualFold (benchmark .Spec .ClusterProvider , c .ClusterProvider ) {
143- return fmt .Errorf ("ClusterProvider mismatch, ClusterScanProfile %v is not valid for this cluster's provider %v" , profile .Name , c .ClusterProvider )
155+ return fmt .Errorf ("ClusterScanProfile %v is not valid for this cluster's provider type %v" , profile .Name , c .ClusterProvider )
144156 }
145157 }
146158
@@ -202,42 +214,72 @@ func (c Controller) setClusterScanStatusDisplay(scan *v1.ClusterScan) {
202214 errorState := "error"
203215 failedState := "fail"
204216 passedState := "pass"
217+ message := ""
205218
206219 failed := false
207220 completed := false
208221 runCompleted := false
222+ pending := false
223+ running := false
209224
210- if v1 .ClusterScanConditionComplete .IsTrue (scan ) {
211- completed = true
225+ if v1 .ClusterScanConditionPending .IsTrue (scan ) {
226+ pending = true
212227 }
213- if v1 .ClusterScanConditionFailed . IsTrue (scan ) {
214- failed = true
228+ if v1 .ClusterScanConditionRunCompleted . IsUnknown (scan ) {
229+ running = true
215230 }
216231 if v1 .ClusterScanConditionRunCompleted .IsTrue (scan ) {
217232 runCompleted = true
218233 }
234+ if v1 .ClusterScanConditionFailed .IsTrue (scan ) {
235+ message = v1 .ClusterScanConditionFailed .GetMessage (scan )
236+ failed = true
237+ }
238+ if v1 .ClusterScanConditionComplete .IsTrue (scan ) {
239+ completed = true
240+ }
219241
220242 display := & v1.ClusterScanStatusDisplay {}
221243 scan .Status .Display = display
222-
244+ if pending {
245+ display .State = "pending"
246+ display .Message = "Scan is Pending, Waiting for another scan to finish"
247+ display .Transitioning = true
248+ display .Error = false
249+ }
250+ if running {
251+ display .State = "running"
252+ display .Message = "Scan is now running"
253+ display .Transitioning = true
254+ display .Error = false
255+ }
223256 if runCompleted {
224257 display .State = "reporting"
258+ display .Message = "ClusterScan scan finished, reporting the results"
225259 display .Transitioning = true
260+ display .Error = false
226261 }
227262 if failed {
228263 display .State = errorState
264+ display .Message = message
265+ display .Error = true
229266 return
230267 }
231268 if completed {
232269 summary := scan .Status .Summary
233270 if summary == nil {
234271 display .State = errorState
272+ display .Error = true
273+ display .Message = "ClusterScan complete, failed to generate report"
235274 return
236275 }
237276 if summary .Fail > 0 {
238277 display .State = failedState
278+ display .Message = "ClusterScan complete, there are some test failures, please check the ClusterScanReport"
279+ display .Error = true
239280 } else {
240281 display .State = passedState
282+ display .Error = false
241283 }
242284 display .Transitioning = false
243285 }
0 commit comments