Skip to content

Commit

Permalink
Merge pull request #7851 from pedjak/filter-charts-4.6
Browse files Browse the repository at this point in the history
Bug 1916860: Filter out helm charts based on kubernetes version
  • Loading branch information
openshift-merge-robot committed Feb 17, 2021
2 parents 6ef026d + 29f25f2 commit fc7642a
Show file tree
Hide file tree
Showing 17 changed files with 1,231 additions and 33 deletions.
4 changes: 4 additions & 0 deletions docs/helm/endpoints_api.md
Expand Up @@ -335,6 +335,10 @@ _Returns repository index file containing all entries from all configured reposi

`GET`

* **Supported URL Query Parameter:**
* `onlyCompatible` - `true`/`false` Setting true would return helm charts which are supported in the provided cluster.
Default value is set to true if not provided.

* **Success Response:**

* **Code:** 200 <br />
Expand Down
29 changes: 24 additions & 5 deletions pkg/helm/chartproxy/proxy.go
@@ -1,22 +1,26 @@
package chartproxy

import (
"helm.sh/helm/v3/pkg/chartutil"
"helm.sh/helm/v3/pkg/repo"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/kubernetes"
v1 "k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/client-go/rest"

"github.com/openshift/console/pkg/version"
)

type proxy struct {
config *rest.Config
dynamicClient dynamic.Interface
coreV1Client v1.CoreV1Interface
helmRepoGetter HelmRepoGetter
kubeVersion string
}

type Proxy interface {
IndexFile() (*repo.IndexFile, error)
IndexFile(onlyCompatible bool) (*repo.IndexFile, error)
}

type RestConfigProvider func() (*rest.Config, error)
Expand All @@ -43,13 +47,16 @@ func coreClientProvider(p *proxy) error {

var defaultOptions = []ProxyOption{dynamicKubeClientProvider, coreClientProvider}

func New(k8sConfig RestConfigProvider, opts ...ProxyOption) (Proxy, error) {
func New(k8sConfig RestConfigProvider, kubeVersionGetter version.KubeVersionGetter, opts ...ProxyOption) (Proxy, error) {
config, err := k8sConfig()

if err != nil {
return nil, err
}

p := &proxy{
config: config,
config: config,
kubeVersion: kubeVersionGetter.GetKubeVersion(),
}

if len(opts) == 0 {
Expand All @@ -63,7 +70,7 @@ func New(k8sConfig RestConfigProvider, opts ...ProxyOption) (Proxy, error) {
return p, nil
}

func (p *proxy) IndexFile() (*repo.IndexFile, error) {
func (p *proxy) IndexFile(onlyCompatible bool) (*repo.IndexFile, error) {
helmRepos, err := p.helmRepoGetter.List()
if err != nil {
return nil, err
Expand All @@ -76,8 +83,20 @@ func (p *proxy) IndexFile() (*repo.IndexFile, error) {
plog.Errorf("Error retrieving index file for %v: %v", helmRepo, err)
continue
}

for key, entry := range idxFile.Entries {
indexFile.Entries[key+"--"+helmRepo.Name] = entry
if onlyCompatible {
for i := len(entry) - 1; i >= 0; i-- {
if entry[i].Metadata.KubeVersion != "" && p.kubeVersion != "" {
if !chartutil.IsCompatibleRange(entry[i].Metadata.KubeVersion, p.kubeVersion) {
entry = append(entry[:i], entry[i+1:]...)
}
}
}
}
if len(entry) > 0 {
indexFile.Entries[key+"--"+helmRepo.Name] = entry
}
}
}
return indexFile, nil
Expand Down
80 changes: 70 additions & 10 deletions pkg/helm/chartproxy/proxy_test.go
@@ -1,31 +1,90 @@
package chartproxy

import (
"golang.org/x/net/context"
"helm.sh/helm/v3/pkg/repo"
"io/ioutil"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"reflect"
"testing"

"golang.org/x/net/context"
"helm.sh/helm/v3/pkg/repo"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/client-go/rest"

"github.com/openshift/console/pkg/helm/actions/fake"
)

type MockKubeVersion struct {
fakeVersion string
}

func (v MockKubeVersion) GetKubeVersion() string {
return v.fakeVersion
}

func TestProxy_IndexFile(t *testing.T) {
tests := []struct {
name string
indexFiles []string
mergedFile string
helmCRS []*unstructured.Unstructured
name string
indexFiles []string
mergedFile string
kubeVersion string
helmCRS []*unstructured.Unstructured
onlyCompatible bool
}{
{
name: "returned index file for configured helm repo",
indexFiles: []string{"testdata/sampleRepoIndex.yaml"},
mergedFile: "testdata/mergedSampleRepoIndex2.yaml",
},
{
name: "returned index file for configured helm repo contains only charts compatible for given cluster v1.16.0",
indexFiles: []string{"testdata/sampleRepoIndex3.yaml"},
mergedFile: "testdata/sampleRepoIndex3FilteredKube1-16-0.yaml",
kubeVersion: "v1.16.0",
onlyCompatible: true,
},
{
name: "returned index file for configured helm repo contains only charts compatible for given cluster v1.15.0",
indexFiles: []string{"testdata/sampleRepoIndex3.yaml"},
mergedFile: "testdata/sampleRepoIndexFilteredKube1-15-0.yaml",
kubeVersion: "v1.15.0",
onlyCompatible: true,
},
{
name: "returned index file for configured helm repo contains only charts compatible for given cluster v1.14.0",
indexFiles: []string{"testdata/sampleRepoIndex3.yaml"},
mergedFile: "testdata/sampleRepoIndexFilteredKube1-14-0.yaml",
kubeVersion: "v1.14.0",
onlyCompatible: true,
},
{
name: "return empty index file if not charts are compatible with given cluster",
indexFiles: []string{"testdata/incompatibleRepoIndex.yaml"},
mergedFile: "",
kubeVersion: "v1.15.0",
onlyCompatible: true,
},
{
name: "returned index file for configured helm repo contains only charts compatible for given pre-release cluster v1.20.0-beta2",
indexFiles: []string{"testdata/RepoIndexPreRelease.yaml"},
mergedFile: "testdata/mergedRepoIndexPreReleaseV1-20-0-beta2.yaml",
kubeVersion: "v1.20.0-beta.2",
onlyCompatible: true,
},
{
name: "returned index file for configured helm repo contains only charts compatible for given pre-release cluster v1.20.0-alpha2",
indexFiles: []string{"testdata/RepoIndexPreRelease.yaml"},
mergedFile: "testdata/mergedRepoIndexPreReleaseV1-20-0-alpha2.yaml",
kubeVersion: "v1.20.0-alpha.2",
onlyCompatible: true,
},
{
name: "returned index file for configured helm repo contains only charts compatible for given pre-release cluster v1.20.0-beta.2",
indexFiles: []string{"testdata/sampleRepoIndex3.yaml"},
mergedFile: "testdata/mergedRepoIndexPreReleaseV1-20-0-0.yaml",
kubeVersion: "v1.20.0-beta.2",
onlyCompatible: true,
},
{
name: "returned merged index file for configured helm repos",
indexFiles: []string{"testdata/azureRepoIndex.yaml", "testdata/sampleRepoIndex.yaml"},
Expand Down Expand Up @@ -82,18 +141,19 @@ func TestProxy_IndexFile(t *testing.T) {
t.Error(err)
}
}

fakeProxyOption := func(p *proxy) error {
p.dynamicClient = dynamicClient
return nil
}
p, err := New(func() (r *rest.Config, err error) {
return &rest.Config{}, nil
}, fakeProxyOption)
}, MockKubeVersion{fakeVersion: tt.kubeVersion}, fakeProxyOption)
if err != nil {
t.Error(err)
}

indexFile, err := p.IndexFile()
indexFile, err := p.IndexFile(tt.onlyCompatible)
if err != nil {
t.Error(err)
}
Expand Down
78 changes: 78 additions & 0 deletions pkg/helm/chartproxy/testdata/RepoIndexPreRelease.yaml
@@ -0,0 +1,78 @@
apiVersion: v1
entries:
ibm-cpq-prod:
- apiVersion: v2
appVersion: 10.0.0.6
created: "2020-07-15T16:32:34.607411698+05:30"
description: |-
IBM Sterling Configure, Price, Quote (CPQ) solution enables you to quickly configure, price, quote and order the right products and services.\n
To sell competitively in today’s multichannel environment, organizations need a way to easily manage product and service configuration and pricing rules that allow prospects, customers, sales staff, call center representatives and Business Partners to quickly find, configure and order the right products and services.\n
IBM® Sterling Configure, Price, Quote solution automates every step of the configure, price and quote process to help organizations easily create Web storefronts, offer dynamic catalog and pricing information, and direct customers and partners to find, configure and order the right products and services.\n
This enables you to transform how you sell complex products and services by removing the internal complexity of multi-tiered selling within your organization and with your partners.\n
Documentation\n
Additional information about installation can be found at https://ibm.biz/BdqqUS.
License\n
Sterling Configure Price Quote Software is licensed under https://ibm.biz/Bdqqgd which must be accepted during the install of the Product.
digest: 2d93c570ff47b27858901dacafc22fe64d868e9a8ecb4742867396f2912eded8
icon: https://raw.githubusercontent.com/IBM/charts/master/logo/ibm-oms-logo.png
keywords:
- cpq
- ifs
- sterling
- yantra
- order
- fulfillment
- om
- amd64
- framework
- Commercial
- RHOCP
- All items
- Languages
- Databases
- Middleware
- CI/CD
- Other
kubeVersion: '>=1.20.0-alpha.2'
maintainers:
- name: IBM
name: ibm-cpq-prod
response:
- https://redhat-developer.github.com/redhat-helm-charts/charts/ibm-cpq-prod-2.0.0.tgz
version: 2.0.0
ibm-operator-catalog-enablement:
- apiVersion: v2
appVersion: 1.0.0
created: "2020-07-15T16:32:34.697730479+05:30"
description: |
IBM Operator Catalog enablement deploys custom CatalogSources for operators
available to deploy and maintain IBM products. The operators are publically
available, but products they install may require purchase and entitlement keys.
Documentation
For additional details regarding installation see https://ibm.biz/operator-catalog-readme
License
By installing this catalog you accept the license terms https://www.apache.org/licenses/LICENSE-2.0
digest: 5a765d2f3f36f1b35c403a546df3590e3d6014cbf86bd36775f8febb54baa58c
home: http://ibm.biz/oprcatalog
icon: data:image/jpeg;base64,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
keywords:
- amd64
- deploy
- Catalog
- Commercial
- Limited
- Other
- RHOCP
kubeVersion: '>=1.20.0-beta.2'
maintainers:
- name: IBM
name: ibm-operator-catalog-enablement
type: application
response:
- https://redhat-developer.github.com/redhat-helm-charts/charts/ibm-operator-catalog-enablement-1.0.0.tgz
version: 1.0.0
generated: "2020-03-30T16:27:13.4275217-05:00"

0 comments on commit fc7642a

Please sign in to comment.