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

Commit

Permalink
Actually parse and validate the Broker defaults YAML
Browse files Browse the repository at this point in the history
  • Loading branch information
aliok committed Apr 11, 2020
1 parent d3a8098 commit dec9ba9
Show file tree
Hide file tree
Showing 29 changed files with 1,815 additions and 23 deletions.
23 changes: 23 additions & 0 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ required = [
name = "knative.dev/pkg"
branch = "master"

[[override]]
name = "knative.dev/eventing"
branch = "master"

[[override]]
name = "k8s.io/apimachinery"
version = "kubernetes-1.16.4"
Expand Down
4 changes: 4 additions & 0 deletions config/300-eventing-v1alpha1-knativeeventing-crd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ spec:
name:
description: The name of the secret.
type: string
defaultBrokerClass:
description: The default broker type to use for the brokers Knative creates.
If no value is provided, ChannelBasedBroker will be used.
type: string
type: object
status:
properties:
Expand Down
56 changes: 33 additions & 23 deletions pkg/reconciler/knativeeventing/common/defaultbroker.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,65 +17,75 @@ limitations under the License.
package common

import (
"encoding/json"
"github.com/ghodss/yaml"
mf "github.com/manifestival/manifestival"
"go.uber.org/zap"
"gopkg.in/yaml.v2"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/client-go/kubernetes/scheme"
eventingconfig "knative.dev/eventing/pkg/apis/config"
"knative.dev/eventing/pkg/apis/eventing"

eventingv1alpha1 "knative.dev/eventing-operator/pkg/apis/eventing/v1alpha1"
)

const (
channelBasedBrokerClass = "ChannelBasedBroker"
)

var defaultBrokerConfigMapData = map[string]map[string]string{
"clusterDefault": {
"brokerClass": channelBasedBrokerClass,
"apiVersion": "v1",
"kind": "ConfigMap",
"name": "config-br-default-channel",
"namespace": "knative-eventing",
},
}

// DefaultBrokerConfigMapTransform updates the default broker configMap with the value defined in the spec
func DefaultBrokerConfigMapTransform(instance *eventingv1alpha1.KnativeEventing, log *zap.SugaredLogger) mf.Transformer {
return func(u *unstructured.Unstructured) error {
if u.GetKind() == "ConfigMap" && u.GetName() == "config-br-defaults" {
if u.GetKind() == "ConfigMap" && u.GetName() == eventingconfig.DefaultsConfigName {
var configMap = &corev1.ConfigMap{}
err := scheme.Scheme.Convert(u, configMap, nil)
if err != nil {
log.Error(err, "Error converting Unstructured to ConfigMap", "unstructured", u, "configMap", configMap)
return err
}

defaults, err := eventingconfig.NewDefaultsConfigFromConfigMap(configMap)
if err != nil {
log.Error(err, "Error parsing default broker ConfigMap", "unstructured", u, "configMap", configMap)
return err
}

defaultBrokerClass := instance.Spec.DefaultBrokerClass
if defaultBrokerClass == "" {
defaultBrokerClass = channelBasedBrokerClass
defaultBrokerClass = eventing.ChannelBrokerClassValue
}
defaults.ClusterDefault.BrokerClass = defaultBrokerClass

defaultBrokerConfigMapData["clusterDefault"]["brokerClass"] = defaultBrokerClass
out, err := yaml.Marshal(&defaultBrokerConfigMapData)

err = writeDefaultsToConfigMap(defaults, configMap, log)
if err != nil {
log.Error(err, "Error converting Broker defaults to default broker ConfigMap", "defaults", defaults, "configMap", configMap)
return err
}

configMap.Data["default-br-config"] = string(out)

err = scheme.Scheme.Convert(configMap, u, nil)
if err != nil {
return err
}
// The zero-value timestamp defaulted by the conversion causes
// superfluous updates
u.SetCreationTimestamp(metav1.Time{})
log.Debugw("Finished updating config-br-defaults configMap", "name", u.GetName(), "unstructured", u.Object)
log.Debugw("Finished updating Broker defaults configMap", "name", u.GetName(), "unstructured", u.Object)
}
return nil
}
}

func writeDefaultsToConfigMap(defaults *eventingconfig.Defaults, configMap *corev1.ConfigMap, logger *zap.SugaredLogger) error {
jsonBytes, err := json.Marshal(defaults)
if err != nil {
log.Error("Defaults could not be converted to JSON", "defaults", defaults)
return err
}

yamlBytes, err := yaml.JSONToYAML(jsonBytes)
if err != nil {
log.Error("Defaults could not be converted to YAML", "defaults", defaults)
return err
}

configMap.Data[eventingconfig.BrokerDefaultsKey] = string(yamlBytes)
return nil
}
Loading

0 comments on commit dec9ba9

Please sign in to comment.