Skip to content

Commit 11f0314

Browse files
authored
Merge pull request #315 from mmulholla/ImageCertifyKubeVersionError
fix image certify error for kubeVersion >=1.21
2 parents be2cebd + d09f068 commit 11f0314

File tree

12 files changed

+55
-9
lines changed

12 files changed

+55
-9
lines changed
-156 Bytes
Binary file not shown.
-93 Bytes
Binary file not shown.

internal/chartverifier/checks/checks.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,17 @@ func downloadFile(fileURL *url.URL, directory string) (string, error) {
514514

515515
func certifyImages(r Result, opts *CheckOptions, registry string) Result {
516516

517-
images, err := getImageReferences(opts.URI, opts.Values)
517+
kubeVersion := ""
518+
kubeConfig := tool.GetClientConfig(opts.HelmEnvSettings)
519+
kubectl, kubeErr := tool.NewKubectl(kubeConfig)
520+
if kubeErr == nil {
521+
serverVersion, versionErr := kubectl.GetServerVersion()
522+
if versionErr == nil {
523+
kubeVersion = fmt.Sprintf("%s.%s", serverVersion.Major, serverVersion.Minor)
524+
}
525+
}
526+
527+
images, err := getImageReferences(opts.URI, opts.Values, kubeVersion)
518528

519529
if err != nil {
520530
r.SetResult(false, fmt.Sprintf("%s : Failed to get images, error running helm template : %v", ImageCertifyFailed, err))

internal/chartverifier/checks/helm.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"helm.sh/helm/v3/pkg/storage/driver"
4343

4444
"github.com/redhat-certification/chart-verifier/internal/helm/actions"
45+
"github.com/redhat-certification/chart-verifier/internal/tool"
4546
)
4647

4748
// loadChartFromRemote attempts to retrieve a Helm chart from the given remote url. Returns an error if the given url
@@ -193,12 +194,24 @@ func IsChartNotFound(err error) bool {
193194
return ok
194195
}
195196

196-
func getImageReferences(chartUri string, vals map[string]interface{}) ([]string, error) {
197+
func getImageReferences(chartUri string, vals map[string]interface{}, kubeVersionString string) ([]string, error) {
198+
199+
capabilities := chartutil.DefaultCapabilities
200+
201+
if kubeVersionString == "" {
202+
kubeVersionString = tool.GetLatestKubeVersion()
203+
}
204+
kubeVersion, err := chartutil.ParseKubeVersion(kubeVersionString)
205+
if err != nil {
206+
return nil, err
207+
}
208+
209+
capabilities.KubeVersion = *kubeVersion
197210

198211
actionConfig := &action.Configuration{
199212
Releases: nil,
200213
KubeClient: &kubefake.PrintingKubeClient{Out: ioutil.Discard},
201-
Capabilities: chartutil.DefaultCapabilities,
214+
Capabilities: capabilities,
202215
Log: func(format string, v ...interface{}) {},
203216
}
204217
mem := driver.NewMemory()

internal/chartverifier/checks/helm_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ func TestTemplate(t *testing.T) {
165165

166166
for _, tc := range TestCases {
167167
t.Run(tc.description, func(t *testing.T) {
168-
images, err := getImageReferences(tc.uri, map[string]interface{}{})
168+
images, err := getImageReferences(tc.uri, map[string]interface{}{}, "")
169169
require.NoError(t, err)
170170
require.Equal(t, len(images), len(tc.images))
171171
for i := 0; i < len(tc.images); i++ {

internal/tool/kubectl.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"fmt"
88
"time"
99

10+
"github.com/Masterminds/semver"
1011
"gopkg.in/yaml.v3"
1112
"helm.sh/helm/v3/pkg/cli"
1213
v1 "k8s.io/api/apps/v1"
@@ -28,6 +29,7 @@ var content embed.FS
2829
var (
2930
kubeOpenShiftVersionMap map[string]string
3031
listDeployments = getDeploymentsList
32+
latestKubeVersion *semver.Version
3133
)
3234

3335
type versionMap struct {
@@ -61,7 +63,12 @@ func init() {
6163
return
6264
}
6365

66+
latestKubeVersion, _ = semver.NewVersion("0.0")
6467
for _, versionMap := range versions.Versions {
68+
currentVersion, _ := semver.NewVersion(versionMap.KubeVersion)
69+
if currentVersion.GreaterThan(latestKubeVersion) {
70+
latestKubeVersion = currentVersion
71+
}
6572
kubeOpenShiftVersionMap[versionMap.KubeVersion] = versionMap.OcpVersion
6673
}
6774

@@ -176,3 +183,7 @@ func getDeploymentsList(k Kubectl, context context.Context, namespace string, se
176183
}
177184
return list.Items, err
178185
}
186+
187+
func GetLatestKubeVersion() string {
188+
return latestKubeVersion.String()
189+
}

internal/tool/kubectl_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ var output125 = version.Info{
5050
Major: "1",
5151
Minor: "25",
5252
}
53+
54+
var latestVersion = output125
55+
5356
var testsData []testData
5457

5558
func TestOCVersions(t *testing.T) {
@@ -81,6 +84,12 @@ func TestOCVersions(t *testing.T) {
8184
t.Error(fmt.Sprintf("version mismatch, expected: %s, got: %s", testdata.OCVersion, ocVersion))
8285
}
8386
}
87+
88+
latestKV := GetLatestKubeVersion()
89+
expectedLatestKV := fmt.Sprintf("%s.%s.0", latestVersion.Major, latestVersion.Minor)
90+
if latestKV != expectedLatestKV {
91+
t.Error(fmt.Sprintf("latest kubversion mismatch, expected: %s, got: %s", expectedLatestKV, latestKV))
92+
}
8493
}
8594

8695
var testDeployments = []v1.Deployment{

scripts/src/buildandtest/buildandtest.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ def build_image(image_id):
3838
try:
3939
image = client.images.build(path="./",tag=image_id)
4040
print("images:",image)
41-
except docker.errors.BuildError:
41+
except docker.errors.BuildError as buildError:
4242
print("docker build error")
43+
for line in buildError.build_log:
44+
if 'stream' in line:
45+
logger.error(line['stream'].strip())
4346
return False
4447
except docker.errors.APIError:
4548
print ("docker API error")
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"annotations":[{"name":"charts.openshift.io/digest","value":"sha256:142db7d18c17f055b5759382bf4768bbefd4a5a1e689bfc075ca54cf6b4796b5"},{"name":"charts.openshift.io/lastCertifiedTimestamp","value":"2023-01-13T15:42:36.229684-05:00"},{"name":"charts.openshift.io/testedOpenShiftVersion","value":"4.11"},{"name":"charts.openshift.io/supportedOpenShiftVersions","value":"\u003e=4.7"}],"digests":{"chart":"sha256:142db7d18c17f055b5759382bf4768bbefd4a5a1e689bfc075ca54cf6b4796b5","package":""},"metadata":{"vendorType":"community","profileVersion":"v1.2","webCatalogOnly":false,"chart-uri":"src","chart":{"name":"psql-service","version":"0.1.8","description":"A Helm chart for a RedHat Certified PSQL","apiVersion":"v2","appVersion":"10.0.0","annotations":{"charts.openshift.io/archs":"x86_64","charts.openshift.io/name":"PSQL RedHat Demo Chart","charts.openshift.io/provider":"RedHat","charts.openshift.io/supportURL":"https://github.com/dperaza4dustbit/helm-chart"},"kubeVersion":"\u003e=1.20.0","type":"application"}},"results":{"passed":"1","failed":"0","message":null}}
1+
{"annotations":[{"name":"charts.openshift.io/digest","value":"sha256:614f8984d28167f234cd95392c8635e1e8db152a94d619b7e88f92c8e7045cac"},{"name":"charts.openshift.io/lastCertifiedTimestamp","value":"2023-03-01T16:46:41.753747+00:00"},{"name":"charts.openshift.io/testedOpenShiftVersion","value":"4.12"},{"name":"charts.openshift.io/supportedOpenShiftVersions","value":"\u003e=4.8"}],"digests":{"chart":"sha256:614f8984d28167f234cd95392c8635e1e8db152a94d619b7e88f92c8e7045cac","package":""},"metadata":{"vendorType":"community","profileVersion":"v1.2","webCatalogOnly":false,"chart-uri":"/charts/src","chart":{"name":"psql-service","version":"0.1.8","description":"A Helm chart for a RedHat Certified PSQL","apiVersion":"v2","appVersion":"10.0.0","annotations":{"charts.openshift.io/archs":"x86_64","charts.openshift.io/name":"PSQL RedHat Demo Chart","charts.openshift.io/provider":"RedHat","charts.openshift.io/supportURL":"https://github.com/dperaza4dustbit/helm-chart"},"kubeVersion":"\u003e=1.21","type":"application"}},"results":{"passed":"1","failed":"0","message":null}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"annotations":[{"name":"charts.openshift.io/digest","value":"sha256:142db7d18c17f055b5759382bf4768bbefd4a5a1e689bfc075ca54cf6b4796b5"},{"name":"charts.openshift.io/lastCertifiedTimestamp","value":"2023-01-13T15:38:58.061775-05:00"},{"name":"charts.openshift.io/testedOpenShiftVersion","value":"4.11"},{"name":"charts.openshift.io/supportedOpenShiftVersions","value":"\u003e=4.7"}],"digests":{"chart":"sha256:142db7d18c17f055b5759382bf4768bbefd4a5a1e689bfc075ca54cf6b4796b5","package":""},"metadata":{"vendorType":"partner","profileVersion":"v1.2","webCatalogOnly":false,"chart-uri":"src","chart":{"name":"psql-service","version":"0.1.8","description":"A Helm chart for a RedHat Certified PSQL","apiVersion":"v2","appVersion":"10.0.0","annotations":{"charts.openshift.io/archs":"x86_64","charts.openshift.io/name":"PSQL RedHat Demo Chart","charts.openshift.io/provider":"RedHat","charts.openshift.io/supportURL":"https://github.com/dperaza4dustbit/helm-chart"},"kubeVersion":"\u003e=1.20.0","type":"application"}},"results":{"passed":"13","failed":"0","message":null}}
1+
{"annotations":[{"name":"charts.openshift.io/digest","value":"sha256:614f8984d28167f234cd95392c8635e1e8db152a94d619b7e88f92c8e7045cac"},{"name":"charts.openshift.io/lastCertifiedTimestamp","value":"2023-03-01T16:48:53.163562+00:00"},{"name":"charts.openshift.io/testedOpenShiftVersion","value":"4.12"},{"name":"charts.openshift.io/supportedOpenShiftVersions","value":"\u003e=4.8"}],"digests":{"chart":"sha256:614f8984d28167f234cd95392c8635e1e8db152a94d619b7e88f92c8e7045cac","package":""},"metadata":{"vendorType":"partner","profileVersion":"v1.2","webCatalogOnly":false,"chart-uri":"/charts/src","chart":{"name":"psql-service","version":"0.1.8","description":"A Helm chart for a RedHat Certified PSQL","apiVersion":"v2","appVersion":"10.0.0","annotations":{"charts.openshift.io/archs":"x86_64","charts.openshift.io/name":"PSQL RedHat Demo Chart","charts.openshift.io/provider":"RedHat","charts.openshift.io/supportURL":"https://github.com/dperaza4dustbit/helm-chart"},"kubeVersion":"\u003e=1.21","type":"application"}},"results":{"passed":"13","failed":"0","message":null}}

0 commit comments

Comments
 (0)