Skip to content

Commit

Permalink
fea(cmd) take multiple files as input and analyze them together
Browse files Browse the repository at this point in the history
  • Loading branch information
zegl committed Sep 23, 2018
1 parent 175a376 commit 70c9363
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 66 deletions.
58 changes: 34 additions & 24 deletions cmd/kube-score/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ func main() {
os.Exit(1)
}

for _, file := range filesToRead {
var allFilePointers []io.Reader

for _, file := range filesToRead {
var fp io.Reader

if file == "-" {
Expand All @@ -30,39 +31,48 @@ func main() {
}
}

scoreCard, err := score.Score(fp)
if err != nil {
panic(err)
}
allFilePointers = append(allFilePointers, fp)
}

sumGrade := 0
scoreCard, err := score.Score(allFilePointers)
if err != nil {
panic(err)
}

for _, resourceScores := range scoreCard.Scores {
sumGrade := 0

firstCard := resourceScores[0]
for _, resourceScores := range scoreCard.Scores {
firstCard := resourceScores[0]

color.New(color.FgMagenta).Printf("%s %s in %s\n", firstCard.ResourceRef.Kind, firstCard.ResourceRef.Name, firstCard.ResourceRef.Namespace)
p := color.New(color.FgMagenta)

for _, card := range resourceScores {
col := color.FgGreen
status := "OK"
p.Printf("%s %s", firstCard.ResourceRef.Kind, firstCard.ResourceRef.Name)

if card.Grade == 0 {
col = color.FgRed
status = "CRITICAL"
} else if card.Grade < 10 {
col = color.FgYellow
status = "WARNING"
}
if firstCard.ResourceRef.Namespace != "" {
p.Printf("in %s\n", firstCard.ResourceRef.Namespace )
} else {
p.Println()
}

for _, card := range resourceScores {
col := color.FgGreen
status := "OK"

color.New(col).Printf(" [%s] %s\n", status, card.Name)
if card.Grade == 0 {
col = color.FgRed
status = "CRITICAL"
} else if card.Grade < 10 {
col = color.FgYellow
status = "WARNING"
}

for _, comment := range card.Comments {
fmt.Printf(" * %s\n", comment)
}
color.New(col).Printf(" [%s] %s\n", status, card.Name)

sumGrade += card.Grade
for _, comment := range card.Comments {
fmt.Printf(" * %s\n", comment)
}

sumGrade += card.Grade
}
}
}
4 changes: 3 additions & 1 deletion score/container.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package score

import (
"strings"

"github.com/zegl/kube-score/scorecard"

corev1 "k8s.io/api/core/v1"
"strings"
)

func scoreContainerLimits(podTemplate corev1.PodTemplateSpec) (score scorecard.TestScore) {
Expand Down
1 change: 1 addition & 0 deletions score/networkpolicy.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package score

import (
"github.com/zegl/kube-score/scorecard"

corev1 "k8s.io/api/core/v1"
networkingv1 "k8s.io/api/networking/v1"
)
Expand Down
84 changes: 44 additions & 40 deletions score/score.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,19 @@ package score

import (
"bytes"
"github.com/zegl/kube-score/scorecard"
"gopkg.in/yaml.v2"
"io"
"log"
"io/ioutil"

"github.com/zegl/kube-score/scorecard"

"gopkg.in/yaml.v2"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
extensionsbetav1 "k8s.io/api/extensions/v1beta1"
networkingv1 "k8s.io/api/networking/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer"
"log"
)

var scheme = runtime.NewScheme()
Expand All @@ -29,12 +31,7 @@ func addToScheme(scheme *runtime.Scheme) {
extensionsbetav1.AddToScheme(scheme)
}

func Score(file io.Reader) (*scorecard.Scorecard, error) {
allFiles, err := ioutil.ReadAll(file)
if err != nil {
return nil, err
}

func Score(files []io.Reader) (*scorecard.Scorecard, error) {
type detectKind struct {
Kind string `yaml:"kind"`
}
Expand All @@ -44,43 +41,50 @@ func Score(file io.Reader) (*scorecard.Scorecard, error) {
var statefulsets []appsv1.StatefulSet
var networkPolies []networkingv1.NetworkPolicy

for _, fileContents := range bytes.Split(allFiles, []byte("---\n")) {
var detect detectKind
err = yaml.Unmarshal(fileContents, &detect)
for _, file := range files {
fullFile, err := ioutil.ReadAll(file)
if err != nil {
return nil, err
}

decode := func(data []byte, object runtime.Object) {
deserializer := codecs.UniversalDeserializer()
if _, _, err := deserializer.Decode(data, nil, object); err != nil {
panic(err)
for _, fileContents := range bytes.Split(fullFile, []byte("---\n")) {
var detect detectKind
err = yaml.Unmarshal(fileContents, &detect)
if err != nil {
return nil, err
}
}

switch detect.Kind {
case "Pod":
var pod corev1.Pod
decode(fileContents, &pod)
pods = append(pods, pod)

case "Deployment":
var deployment appsv1.Deployment
decode(fileContents, &deployment)
deployments = append(deployments, deployment)

case "StatefulSet":
var statefulSet appsv1.StatefulSet
decode(fileContents, &statefulSet)
statefulsets = append(statefulsets, statefulSet)

case "NetworkPolicy":
var netpol networkingv1.NetworkPolicy
decode(fileContents, &netpol)
networkPolies = append(networkPolies, netpol)

default:
log.Printf("Unknown datatype: %s", detect.Kind)
decode := func(data []byte, object runtime.Object) {
deserializer := codecs.UniversalDeserializer()
if _, _, err := deserializer.Decode(data, nil, object); err != nil {
panic(err)
}
}

switch detect.Kind {
case "Pod":
var pod corev1.Pod
decode(fileContents, &pod)
pods = append(pods, pod)

case "Deployment":
var deployment appsv1.Deployment
decode(fileContents, &deployment)
deployments = append(deployments, deployment)

case "StatefulSet":
var statefulSet appsv1.StatefulSet
decode(fileContents, &statefulSet)
statefulsets = append(statefulsets, statefulSet)

case "NetworkPolicy":
var netpol networkingv1.NetworkPolicy
decode(fileContents, &netpol)
networkPolies = append(networkPolies, netpol)

default:
log.Printf("Unknown datatype: %s", detect.Kind)
}
}
}

Expand Down
3 changes: 2 additions & 1 deletion score/score_test.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package score

import (
"github.com/stretchr/testify/assert"
"os"
"testing"

"github.com/stretchr/testify/assert"
)

func testFile(name string) *os.File {
Expand Down

0 comments on commit 70c9363

Please sign in to comment.