Skip to content

Commit

Permalink
refactored the code
Browse files Browse the repository at this point in the history
  • Loading branch information
pghildiyal committed Aug 26, 2021
1 parent 89a7248 commit 22443fb
Show file tree
Hide file tree
Showing 10 changed files with 250 additions and 348 deletions.
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

## Motivation

https://github.com/kubernetes/kubernetes/issues/58131#issuecomment-403829566

Currently there is no easy way to upgrade kubernetes objects in case of kubernetes upgrade. There are some tools
which are available for this purpose, but we found then inadequate for migration requirements.

Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module github.com/devtron-labs/deprecation-checker
module github.com/devtron-labs/silver-surfer

go 1.15

Expand Down
85 changes: 30 additions & 55 deletions kubedd/kubedd.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,9 @@ package kubedd
import (
"bytes"
"fmt"
"github.com/devtron-labs/deprecation-checker/pkg"
kLog "github.com/devtron-labs/deprecation-checker/pkg/log"
"github.com/getkin/kin-openapi/openapi3"
"github.com/devtron-labs/silver-surfer/pkg"
kLog "github.com/devtron-labs/silver-surfer/pkg/log"
"os"
"strings"
)

var yamlSeparator = []byte("\n---\n")
Expand Down Expand Up @@ -79,7 +77,7 @@ func Validate(input []byte, conf *pkg.Config) ([]pkg.ValidationResult, error) {
latestAPIVersion = result.APIVersion
}
if _, ok := apiVersionKindCache[fmt.Sprintf("%s/%s", latestAPIVersion, result.Kind)]; !ok {
isSupported := kubeC.IsVersionSupported(conf.TargetKubernetesVersion, latestAPIVersion, result.Kind)
isSupported := kubeC.IsApiVersionSupported(conf.TargetKubernetesVersion, latestAPIVersion, result.Kind)
apiVersionKindCache[fmt.Sprintf("%s/%s", latestAPIVersion, result.Kind)] = isSupported

}
Expand All @@ -92,32 +90,15 @@ func Validate(input []byte, conf *pkg.Config) ([]pkg.ValidationResult, error) {
result.Deleted = true
}
if _, ok := apiVersionKindCache[fmt.Sprintf("%s/%s", result.APIVersion, result.Kind)]; !ok {
isSupported := kubeC.IsVersionSupported(conf.TargetKubernetesVersion, result.APIVersion, result.Kind)
isSupported := kubeC.IsApiVersionSupported(conf.TargetKubernetesVersion, result.APIVersion, result.Kind)
apiVersionKindCache[fmt.Sprintf("%s/%s", result.APIVersion, result.Kind)] = isSupported
}
isSupported = apiVersionKindCache[fmt.Sprintf("%s/%s", result.APIVersion, result.Kind)]
result.Deleted = !isSupported
validationResults[i] = result
}

for i, result := range validationResults {
var errorsForLatest []*openapi3.SchemaError
var errorsForOriginal []*openapi3.SchemaError
for _, schemaError := range result.ErrorsForLatest {
if !conf.IgnoreNullErrors || strings.TrimSpace(schemaError.Reason) != "Value is not nullable" {
errorsForLatest = append(errorsForLatest, schemaError)
}
}
result.ErrorsForLatest = errorsForLatest
for _, schemaError := range result.ErrorsForOriginal {
if !conf.IgnoreNullErrors || strings.TrimSpace(schemaError.Reason) != "Value is not nullable" {
errorsForOriginal = append(errorsForOriginal, schemaError)
}
}
result.ErrorsForOriginal = errorsForOriginal
validationResults[i] = result
}
return validationResults, nil
return pkg.FilterValidationResults(validationResults, conf), nil
}

func ValidateCluster(cluster *pkg.Cluster, conf *pkg.Config) ([]pkg.ValidationResult, error) {
Expand Down Expand Up @@ -153,9 +134,9 @@ func ValidateCluster(cluster *pkg.Cluster, conf *pkg.Config) ([]pkg.ValidationRe
objects := cluster.FetchK8sObjects(resources, conf)
var validationResults []pkg.ValidationResult
for _, obj := range objects {
annon := obj.GetAnnotations()
annotations := obj.GetAnnotations()
k8sObj := ""
if val, ok := annon["kubectl.kubernetes.io/last-applied-configuration"]; ok {
if val, ok := annotations["kubectl.kubernetes.io/last-applied-configuration"]; ok {
k8sObj = val
} else {
bt, err := obj.MarshalJSON()
Expand All @@ -171,50 +152,44 @@ func ValidateCluster(cluster *pkg.Cluster, conf *pkg.Config) ([]pkg.ValidationRe
}
validationResults = append(validationResults, validationResult)
}
validationResults = IsVersionSupported(validationResults, kubeC, conf)

return pkg.FilterValidationResults(validationResults, conf), nil
}

func IsVersionSupported(validationResults []pkg.ValidationResult, kubeC pkg.KubeChecker, conf *pkg.Config) []pkg.ValidationResult {
apiVersionKindCache := make(map[string]bool, 0)
for i, result := range validationResults {
var vr []pkg.ValidationResult
for _, result := range validationResults {
latestAPIVersion := result.LatestAPIVersion
if len(result.LatestAPIVersion) == 0 {
latestAPIVersion = result.APIVersion
}
if _, ok := apiVersionKindCache[fmt.Sprintf("%s/%s", latestAPIVersion, result.Kind)]; !ok {
isSupported := kubeC.IsVersionSupported(conf.TargetKubernetesVersion, latestAPIVersion, result.Kind)
apiVersionKindCache[fmt.Sprintf("%s/%s", latestAPIVersion, result.Kind)] = isSupported
latestAPIVersionKind := fmt.Sprintf("%s/%s", latestAPIVersion, result.Kind)
apiVersionKind := fmt.Sprintf("%s/%s", result.APIVersion, result.Kind)

if _, ok := apiVersionKindCache[latestAPIVersionKind]; !ok {
isSupported := kubeC.IsApiVersionSupported(conf.TargetKubernetesVersion, latestAPIVersion, result.Kind)
apiVersionKindCache[latestAPIVersionKind] = isSupported

}
isSupported := apiVersionKindCache[fmt.Sprintf("%s/%s", latestAPIVersion, result.Kind)]
isSupported := apiVersionKindCache[latestAPIVersionKind]

if isSupported {
result.IsVersionSupported = 1
} else {
result.IsVersionSupported = 2
result.Deleted = true
}
if _, ok := apiVersionKindCache[fmt.Sprintf("%s/%s", result.APIVersion, result.Kind)]; !ok {
isSupported := kubeC.IsVersionSupported(conf.TargetKubernetesVersion, result.APIVersion, result.Kind)
apiVersionKindCache[fmt.Sprintf("%s/%s", result.APIVersion, result.Kind)] = isSupported
}
isSupported = apiVersionKindCache[fmt.Sprintf("%s/%s", result.APIVersion, result.Kind)]
result.Deleted = !isSupported
validationResults[i] = result
}

for i, result := range validationResults {
var errorsForLatest []*openapi3.SchemaError
var errorsForOriginal []*openapi3.SchemaError
for _, schemaError := range result.ErrorsForLatest {
if !conf.IgnoreNullErrors || strings.TrimSpace(schemaError.Reason) != "Value is not nullable" {
errorsForLatest = append(errorsForLatest, schemaError)
}
}
result.ErrorsForLatest = errorsForLatest
for _, schemaError := range result.ErrorsForOriginal {
if !conf.IgnoreNullErrors || strings.TrimSpace(schemaError.Reason) != "Value is not nullable" {
errorsForOriginal = append(errorsForOriginal, schemaError)
}
if _, ok := apiVersionKindCache[apiVersionKind]; !ok {
isSupported := kubeC.IsApiVersionSupported(conf.TargetKubernetesVersion, result.APIVersion, result.Kind)
apiVersionKindCache[apiVersionKind] = isSupported
}
result.ErrorsForOriginal = errorsForOriginal
validationResults[i] = result
isSupported = apiVersionKindCache[apiVersionKind]
result.Deleted = !isSupported
vr = append(vr, result)
}
return validationResults, nil
return vr
}

2 changes: 1 addition & 1 deletion kubedd/kubedd_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kubedd

import (
"github.com/devtron-labs/deprecation-checker/pkg"
"github.com/devtron-labs/silver-surfer/pkg"
"reflect"
"testing"
)
Expand Down
100 changes: 0 additions & 100 deletions kubedd/utils.go

This file was deleted.

63 changes: 4 additions & 59 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@ package main
import (
"crypto/tls"
"fmt"
"github.com/devtron-labs/deprecation-checker/kubedd"
"github.com/devtron-labs/deprecation-checker/pkg"
log2 "github.com/devtron-labs/deprecation-checker/pkg/log"
"github.com/getkin/kin-openapi/openapi3"
"github.com/devtron-labs/silver-surfer/kubedd"
"github.com/devtron-labs/silver-surfer/pkg"
log2 "github.com/devtron-labs/silver-surfer/pkg/log"
"github.com/prometheus/common/log"
"io/ioutil"
"net/http"
Expand All @@ -48,12 +47,6 @@ var (
ignoredPathPatterns = make([]string, 0)
kubeconfig = ""
kubecontext = ""
ignoreKeysFromDeprecation = make([]string, 0)
ignoreKeysFromValidation = make([]string, 0)
selectNamespaces = make([]string, 0)
ignoreNamespaces = make([]string, 0)
selectKinds = make([]string, 0)
ignoreKinds = make([]string, 0)
// forceColor tells kubedd to use colored output even if
// stdout is not a TTY
forceColor bool
Expand Down Expand Up @@ -151,7 +144,6 @@ func processFiles(args []string) bool {
fmt.Println("")
fmt.Printf("Results for file %s\n", fileName)
fmt.Println("-------------------------------------------")
results = removeIgnoredKeys(results)
outputManager.PutBulk(results)

aggResults = append(aggResults, results...)
Expand Down Expand Up @@ -185,7 +177,6 @@ func processCluster() bool {
fmt.Println("")
fmt.Printf("Results for cluster at version %s to %s\n", serverVersion, config.TargetKubernetesVersion)
fmt.Println("-------------------------------------------")
results = removeIgnoredKeys(results)
outputManager.PutBulk(results)

//aggResults = append(aggResults, results...)
Expand All @@ -198,53 +189,7 @@ func processCluster() bool {
return success
}

func removeIgnoredKeys(results []pkg.ValidationResult) []pkg.ValidationResult {
var out []pkg.ValidationResult
for _, result := range results {
if len(result.DeprecationForOriginal) > 0 {
var depErr []*pkg.SchemaError
for _, schemaError := range result.DeprecationForOriginal {
key := strings.Join(schemaError.JSONPointer(), "/")
if !pkg.Contains(key, ignoreKeysFromDeprecation) {
depErr = append(depErr, schemaError)
}
}
result.DeprecationForOriginal = depErr
}
if len(result.DeprecationForLatest) > 0 {
var depErr []*pkg.SchemaError
for _, schemaError := range result.DeprecationForLatest {
key := strings.Join(schemaError.JSONPointer(), "/")
if !pkg.Contains(key, ignoreKeysFromDeprecation) {
depErr = append(depErr, schemaError)
}
}
result.DeprecationForLatest = depErr
}
if len(result.ErrorsForOriginal) > 0 {
var valErr []*openapi3.SchemaError
for _, schemaError := range result.ErrorsForOriginal {
key := strings.Join(schemaError.JSONPointer(), "/")
if !pkg.Contains(key, ignoreKeysFromValidation) {
valErr = append(valErr, schemaError)
}
}
result.ErrorsForOriginal = valErr
}
if len(result.ErrorsForLatest) > 0 {
var valErr []*openapi3.SchemaError
for _, schemaError := range result.ErrorsForLatest {
key := strings.Join(schemaError.JSONPointer(), "/")
if !pkg.Contains(key, ignoreKeysFromValidation) {
valErr = append(valErr, schemaError)
}
}
result.ErrorsForLatest = valErr
}
out = append(out, result)
}
return out
}


// hasErrors returns truthy if any of the provided results
// contain errors.
Expand Down
Loading

0 comments on commit 22443fb

Please sign in to comment.