Skip to content
This repository has been archived by the owner on Sep 15, 2022. It is now read-only.

Commit

Permalink
Add DocsEnabled flag (#4)
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrmiskiewicz authored Aug 8, 2019
1 parent 230e4e9 commit db792c3
Show file tree
Hide file tree
Showing 16 changed files with 249 additions and 217 deletions.
1 change: 1 addition & 0 deletions internal/config/controller_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ type ControllerConfig struct {
Storage []storage.Config `valid:"required"`
DevelopMode bool
UploadServiceURL string `default:"http://assetstore-asset-upload-service.kyma-system.svc.cluster.local:3000"`
DocumentationEnabled bool
}

// LoadControllerConfig method has following strategy:
Expand Down
83 changes: 83 additions & 0 deletions internal/controller/clusteraddonsconfiguration_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,19 @@ import (
"github.com/Masterminds/semver"
"github.com/kubernetes-incubator/service-catalog/pkg/apis/servicecatalog/v1beta1"
"github.com/kyma-project/helm-broker/internal"
"github.com/kyma-project/helm-broker/internal/addon"
"github.com/kyma-project/helm-broker/internal/controller/automock"
"github.com/kyma-project/helm-broker/pkg/apis"
"github.com/kyma-project/helm-broker/pkg/apis/addons/v1alpha1"
"github.com/kyma-project/helm-broker/platform/logger/spy"
cms "github.com/kyma-project/kyma/components/cms-controller-manager/pkg/apis/cms/v1alpha1"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/types"
"k8s.io/helm/pkg/proto/hapi/chart"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/reconcile"
Expand Down Expand Up @@ -449,3 +452,83 @@ func fixDeletedClusterAddonsConfiguration() *v1alpha1.ClusterAddonsConfiguration
},
}
}

func fixAddonWithDocsURL(id, name, url, docsURL string) addon.CompleteAddon {
chartName := fmt.Sprintf("chart-%s", name)
chartVersion := semver.MustParse("1.0.0")
return addon.CompleteAddon{
Addon: &internal.Addon{
ID: internal.AddonID(id),
Name: internal.AddonName(name),
Description: "simple description",
Version: *semver.MustParse("0.0.1"),
RepositoryURL: url,
Plans: map[internal.AddonPlanID]internal.AddonPlan{
internal.AddonPlanID(fmt.Sprintf("plan-%s", name)): {
ChartRef: internal.ChartRef{
Name: internal.ChartName(chartName),
Version: *chartVersion,
},
},
},
Docs: []internal.AddonDocs{
{
Template: cms.CommonDocsTopicSpec{
Sources: []cms.Source{
{
URL: docsURL,
},
},
},
},
},
},
Charts: []*chart.Chart{
{
Metadata: &chart.Metadata{
Name: chartName,
Version: chartVersion.String(),
},
},
},
}
}

func fixAddonWithEmptyDocs(id, name, url string) addon.CompleteAddon {
chartName := fmt.Sprintf("chart-%s", name)
chartVersion := semver.MustParse("1.0.0")
return addon.CompleteAddon{
Addon: &internal.Addon{
ID: internal.AddonID(id),
Name: internal.AddonName(name),
Description: "simple description",
Version: *semver.MustParse("0.0.1"),
RepositoryURL: url,
Plans: map[internal.AddonPlanID]internal.AddonPlan{
internal.AddonPlanID(fmt.Sprintf("plan-%s", name)): {
ChartRef: internal.ChartRef{
Name: internal.ChartName(chartName),
Version: *chartVersion,
},
},
},
Docs: []internal.AddonDocs{
{
Template: cms.CommonDocsTopicSpec{
Sources: []cms.Source{
{},
},
},
},
},
},
Charts: []*chart.Chart{
{
Metadata: &chart.Metadata{
Name: chartName,
Version: chartVersion.String(),
},
},
},
}
}
27 changes: 27 additions & 0 deletions internal/controller/docs/dummy_provider.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package docs

import "github.com/kyma-project/helm-broker/internal"

// DummyProvider is an implementation which does not perform any work but have the same interface as the Provider
type DummyProvider struct {
}

// EnsureDocsTopic fulfills the docsFacade interface
func (s *DummyProvider) EnsureDocsTopic(addon *internal.Addon, namespace string) error {
return nil
}

// EnsureDocsTopicRemoved fulfills the docsFacade interface
func (*DummyProvider) EnsureDocsTopicRemoved(id string, namespace string) error {
return nil
}

// EnsureClusterDocsTopic fulfills the docsFacade interface
func (*DummyProvider) EnsureClusterDocsTopic(addon *internal.Addon) error {
return nil
}

// EnsureClusterDocsTopicRemoved fulfills the docsFacade interface
func (*DummyProvider) EnsureClusterDocsTopicRemoved(id string) error {
return nil
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package controller
package docs

import (
"context"
Expand All @@ -14,14 +14,14 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)

// DocsProvider allows to maintain the addons documentation
type DocsProvider struct {
// Provider allows to maintain the addons documentation
type Provider struct {
dynamicClient client.Client
}

// NewDocsProvider creates a new DocsProvider
func NewDocsProvider(dynamicClient client.Client) *DocsProvider {
return &DocsProvider{
// NewProvider creates a new Provider
func NewProvider(dynamicClient client.Client) *Provider {
return &Provider{
dynamicClient: dynamicClient,
}
}
Expand All @@ -32,7 +32,7 @@ const (
)

// EnsureClusterDocsTopic creates ClusterDocsTopic for a given addon or updates it in case it already exists
func (d *DocsProvider) EnsureClusterDocsTopic(addon *internal.Addon) error {
func (d *Provider) EnsureClusterDocsTopic(addon *internal.Addon) error {
addon.Docs[0].Template.Sources = d.defaultDocsSourcesURLs(addon)
cdt := &v1alpha1.ClusterDocsTopic{
ObjectMeta: v1.ObjectMeta{
Expand Down Expand Up @@ -60,7 +60,7 @@ func (d *DocsProvider) EnsureClusterDocsTopic(addon *internal.Addon) error {
}

// EnsureClusterDocsTopicRemoved removes ClusterDocsTopic for a given addon
func (d *DocsProvider) EnsureClusterDocsTopicRemoved(id string) error {
func (d *Provider) EnsureClusterDocsTopicRemoved(id string) error {
cdt := &v1alpha1.ClusterDocsTopic{
ObjectMeta: v1.ObjectMeta{
Name: id,
Expand All @@ -74,7 +74,7 @@ func (d *DocsProvider) EnsureClusterDocsTopicRemoved(id string) error {
}

// EnsureDocsTopic creates ClusterDocsTopic for a given addon or updates it in case it already exists
func (d *DocsProvider) EnsureDocsTopic(addon *internal.Addon, namespace string) error {
func (d *Provider) EnsureDocsTopic(addon *internal.Addon, namespace string) error {
addon.Docs[0].Template.Sources = d.defaultDocsSourcesURLs(addon)
dt := &v1alpha1.DocsTopic{
ObjectMeta: v1.ObjectMeta{
Expand Down Expand Up @@ -103,7 +103,7 @@ func (d *DocsProvider) EnsureDocsTopic(addon *internal.Addon, namespace string)
}

// EnsureDocsTopicRemoved removes ClusterDocsTopic for a given addon
func (d *DocsProvider) EnsureDocsTopicRemoved(id string, namespace string) error {
func (d *Provider) EnsureDocsTopicRemoved(id string, namespace string) error {
dt := &v1alpha1.DocsTopic{
ObjectMeta: v1.ObjectMeta{
Name: id,
Expand All @@ -117,7 +117,7 @@ func (d *DocsProvider) EnsureDocsTopicRemoved(id string, namespace string) error
return nil
}

func (d *DocsProvider) defaultDocsSourcesURLs(addon *internal.Addon) []v1alpha1.Source {
func (d *Provider) defaultDocsSourcesURLs(addon *internal.Addon) []v1alpha1.Source {
// we use repositoryURL as the default sourceURL if its not provided
var sources []v1alpha1.Source
for _, source := range addon.Docs[0].Template.Sources {
Expand All @@ -129,7 +129,7 @@ func (d *DocsProvider) defaultDocsSourcesURLs(addon *internal.Addon) []v1alpha1.
return sources
}

func (d *DocsProvider) updateClusterDocsTopic(addon *internal.Addon) error {
func (d *Provider) updateClusterDocsTopic(addon *internal.Addon) error {
cdt := &v1alpha1.ClusterDocsTopic{}
if err := d.dynamicClient.Get(context.Background(), types.NamespacedName{Name: string(addon.ID)}, cdt); err != nil {
return errors.Wrapf(err, "while getting ClusterDocsTopic %s", addon.ID)
Expand All @@ -146,7 +146,7 @@ func (d *DocsProvider) updateClusterDocsTopic(addon *internal.Addon) error {
return nil
}

func (d *DocsProvider) updateDocsTopic(addon *internal.Addon, namespace string) error {
func (d *Provider) updateDocsTopic(addon *internal.Addon, namespace string) error {
dt := &v1alpha1.DocsTopic{}
if err := d.dynamicClient.Get(context.Background(), types.NamespacedName{Name: string(addon.ID), Namespace: namespace}, dt); err != nil {
return errors.Wrapf(err, "while getting DocsTopic %s", addon.ID)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package controller
package docs

import (
"context"
Expand All @@ -20,7 +20,7 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client/fake"
)

func TestDocsProvider_EnsureClusterDocsTopic(t *testing.T) {
func TestProvider_EnsureClusterDocsTopic(t *testing.T) {
// given
err := v1alpha1.AddToScheme(scheme.Scheme)
require.NoError(t, err)
Expand All @@ -35,7 +35,7 @@ func TestDocsProvider_EnsureClusterDocsTopic(t *testing.T) {
t.Run(tn, func(t *testing.T) {
c := fake.NewFakeClient()
cdt := fixClusterDocsTopic(id)
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureClusterDocsTopic(tc.givenAddon.Addon)
Expand All @@ -49,7 +49,7 @@ func TestDocsProvider_EnsureClusterDocsTopic(t *testing.T) {
}
}

func TestDocsProvider_EnsureClusterDocsTopic_UpdateIfExist(t *testing.T) {
func TestProvider_EnsureClusterDocsTopic_UpdateIfExist(t *testing.T) {
// given
err := v1alpha1.AddToScheme(scheme.Scheme)
require.NoError(t, err)
Expand All @@ -60,7 +60,7 @@ func TestDocsProvider_EnsureClusterDocsTopic_UpdateIfExist(t *testing.T) {
addonWithEmptyDocsURL.Addon.Docs[0].Template.Description = "new description"

c := fake.NewFakeClient(cdt)
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureClusterDocsTopic(addonWithEmptyDocsURL.Addon)
Expand All @@ -80,7 +80,7 @@ func TestDocsProvider_EnsureClusterDocsTopicRemoved(t *testing.T) {
const id = "123"
cdt := fixClusterDocsTopic(id)
c := fake.NewFakeClient(cdt)
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureClusterDocsTopicRemoved(id)
Expand All @@ -99,7 +99,7 @@ func TestDocsProvider_EnsureClusterDocsTopicRemoved_NotExists(t *testing.T) {
const id = "123"
cdt := fixClusterDocsTopic(id)
c := fake.NewFakeClient()
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureClusterDocsTopicRemoved(id)
Expand All @@ -124,7 +124,7 @@ func TestDocsProvider_EnsureDocsTopic(t *testing.T) {
} {
t.Run(tn, func(t *testing.T) {
c := fake.NewFakeClient(dt)
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureDocsTopic(tc.givenAddon.Addon, dt.Namespace)
Expand All @@ -150,7 +150,7 @@ func TestDocsProvider_EnsureDocsTopic_UpdateIfExist(t *testing.T) {
addonWithEmptyDocsURL.Addon.Docs[0].Template.Description = "new description"

c := fake.NewFakeClient(dt)
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureDocsTopic(addonWithEmptyDocsURL.Addon, dt.Namespace)
Expand All @@ -170,7 +170,7 @@ func TestDocsProvider_EnsureDocsTopicRemoved(t *testing.T) {

dt := fixDocsTopic()
c := fake.NewFakeClient(dt)
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureDocsTopicRemoved(dt.Name, dt.Namespace)
Expand All @@ -189,7 +189,7 @@ func TestDocsProvider_EnsureDocsTopicRemoved_NotExists(t *testing.T) {

dt := fixDocsTopic()
c := fake.NewFakeClient()
docsProvider := NewDocsProvider(c)
docsProvider := NewProvider(c)

// when
err = docsProvider.EnsureDocsTopicRemoved(dt.Name, dt.Namespace)
Expand Down
5 changes: 5 additions & 0 deletions internal/controller/ext.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,8 @@ type clusterDocsProvider interface {
type clusterBrokerSyncer interface {
Sync() error
}

type docsFacade interface {
clusterDocsProvider
docsProvider
}
9 changes: 8 additions & 1 deletion internal/controller/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/kyma-project/helm-broker/internal/assetstore"
"github.com/kyma-project/helm-broker/internal/config"
"github.com/kyma-project/helm-broker/internal/controller/broker"
"github.com/kyma-project/helm-broker/internal/controller/docs"
"github.com/kyma-project/helm-broker/internal/storage"
"github.com/kyma-project/helm-broker/pkg/apis"
"github.com/kyma-project/kyma/components/cms-controller-manager/pkg/apis/cms/v1alpha1"
Expand Down Expand Up @@ -41,7 +42,13 @@ func SetupAndStartController(cfg *rest.Config, ctrCfg *config.ControllerConfig,
fatalOnError(v1alpha1.AddToScheme(mgr.GetScheme()), "while adding CMS scheme")

// Setup dependencies
docsProvider := NewDocsProvider(mgr.GetClient())

var docsProvider docsFacade
docsProvider = docs.NewProvider(mgr.GetClient())
if !ctrCfg.DocumentationEnabled {
docsProvider = &docs.DummyProvider{}
}

brokerSyncer := broker.NewServiceBrokerSyncer(mgr.GetClient(), ctrCfg.ClusterServiceBrokerName, lg)
sbFacade := broker.NewBrokersFacade(mgr.GetClient(), brokerSyncer, ctrCfg.Namespace, ctrCfg.ServiceName, lg)
csbFacade := broker.NewClusterBrokersFacade(mgr.GetClient(), brokerSyncer, ctrCfg.Namespace, ctrCfg.ServiceName, ctrCfg.ClusterServiceBrokerName, lg)
Expand Down
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit db792c3

Please sign in to comment.