Skip to content

Commit 42dd696

Browse files
authored
Merge pull request #26 from prachidamle/bug_fixes
Adding error message, transitioning messages, pending state
2 parents dd2fc07 + 3e8e7fb commit 42dd696

File tree

9 files changed

+56
-17
lines changed

9 files changed

+56
-17
lines changed

crds/clusterscan.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@ metadata:
44
name: clusterscans.cis.cattle.io
55
spec:
66
additionalPrinterColumns:
7-
- JSONPath: .status.display.state
8-
name: Status
9-
type: string
107
- JSONPath: .status.lastRunScanProfileName
118
name: ClusterScanProfile
129
type: string

examples/benchmark-cis-1.5.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ metadata:
55
name: cis-1.5
66
spec:
77
clusterProvider: ""
8-
minKubernetesVersion: "1.15"
8+
minKubernetesVersion: "1.15.0"

examples/benchmark-eks-1.0.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ metadata:
55
name: eks-1.0
66
spec:
77
clusterProvider: eks
8-
minKubernetesVersion: "1.15"
8+
minKubernetesVersion: "1.15.0"

examples/benchmark-gke-1.0.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ metadata:
55
name: gke-1.0
66
spec:
77
clusterProvider: gke
8-
minKubernetesVersion: "1.15"
8+
minKubernetesVersion: "1.15.0"

examples/benchmark-rke-cis-1.5.yaml renamed to examples/benchmark-rke-cis-1.5-hardened.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
apiVersion: cis.cattle.io/v1
33
kind: ClusterScanBenchmark
44
metadata:
5-
name: rke-cis-1.5
5+
name: rke-cis-1.5-hardened
66
spec:
77
clusterProvider: rke
88
minKubernetesVersion: "1.15.0"

examples/scanprofile-rke-hardened.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ metadata:
66
annotations:
77
clusterscanprofile.cis.cattle.io/builtin: "true"
88
spec:
9-
benchmarkVersion: rke-cis-1.5
9+
benchmarkVersion: rke-cis-1.5-hardened

pkg/apis/cis.cattle.io/v1/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ const (
2424
DefaultScanOutputFileName = "output.json"
2525

2626
ClusterScanConditionCreated = condition.Cond("Created")
27+
ClusterScanConditionPending = condition.Cond("Pending")
2728
ClusterScanConditionRunCompleted = condition.Cond("RunCompleted")
2829
ClusterScanConditionComplete = condition.Cond("Complete")
2930
ClusterScanConditionFailed = condition.Cond("Failed")

pkg/crds/crd.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ func List() []crd.CRD {
3636
return []crd.CRD{
3737
newCRD(&cisoperator.ClusterScan{}, func(c crd.CRD) crd.CRD {
3838
return c.
39-
WithColumn("Status", ".status.display.state").
4039
WithColumn("ClusterScanProfile", ".status.lastRunScanProfileName").
4140
WithColumn("Total", ".status.summary.total").
4241
WithColumn("Pass", ".status.summary.pass").

pkg/securityscan/scanHandler.go

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)