Skip to content

Commit

Permalink
Consolidating logic for creating in-progress properties. (#1511)
Browse files Browse the repository at this point in the history
* Refactor cloned code producing in progress properties.

* Adding a comment on ConditionType.

* Moving prepareInProgressPropertyParameters to parameters.go

* update comments to make it more clear what is going on.

* Hold off on multiplexer for now.
  • Loading branch information
n3wscott authored and arschles committed Nov 13, 2017
1 parent fd3a6d7 commit c6e446e
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 126 deletions.
79 changes: 16 additions & 63 deletions pkg/controller/controller_binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (

"github.com/golang/glog"
osb "github.com/pmorie/go-open-service-broker-client/v2"
"k8s.io/apimachinery/pkg/runtime"
utilfeature "k8s.io/apiserver/pkg/util/feature"

"github.com/kubernetes-incubator/service-catalog/pkg/api"
Expand Down Expand Up @@ -338,71 +337,25 @@ func (c *controller) reconcileServiceBinding(binding *v1beta1.ServiceBinding) er
return nil
}

var (
parameters map[string]interface{}
parametersChecksum string
rawParametersWithRedaction *runtime.RawExtension
parameters, parametersChecksum, rawParametersWithRedaction, err := prepareInProgressPropertyParameters(
c.kubeClient,
binding.Namespace,
binding.Spec.Parameters,
binding.Spec.ParametersFrom,
)
if binding.Spec.Parameters != nil || binding.Spec.ParametersFrom != nil {
var parametersWithSecretsRedacted map[string]interface{}
parameters, parametersWithSecretsRedacted, err = buildParameters(c.kubeClient, binding.Namespace, binding.Spec.ParametersFrom, binding.Spec.Parameters)
if err != nil {
s := fmt.Sprintf(
`Failed to prepare parameters\n%s\n %s`,
binding.Spec.Parameters, err,
)
glog.Warning(pcb.Message(s))
c.recorder.Event(binding, corev1.EventTypeWarning, errorWithParameters, s)
setServiceBindingCondition(
toUpdate,
v1beta1.ServiceBindingConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
s,
)
if _, err := c.updateServiceBindingStatus(toUpdate); err != nil {
return err
}
return err
}

parametersChecksum, err = generateChecksumOfParameters(parameters)
if err != nil {
s := fmt.Sprintf(`Failed to generate the parameters checksum to store in Status: %s`, err)
glog.Info(pcb.Message(s))
c.recorder.Eventf(binding, corev1.EventTypeWarning, errorWithParameters, s)
setServiceBindingCondition(
toUpdate,
v1beta1.ServiceBindingConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
s)
if _, err := c.updateServiceBindingStatus(toUpdate); err != nil {
return err
}
return err
}

marshalledParametersWithRedaction, err := MarshalRawParameters(parametersWithSecretsRedacted)
if err != nil {
s := fmt.Sprintf(`Failed to marshal the parameters to store in Status: %s`, err)
glog.Info(pcb.Message(s))
c.recorder.Eventf(binding, corev1.EventTypeWarning, errorWithParameters, s)
setServiceBindingCondition(
toUpdate,
v1beta1.ServiceBindingConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
s)
if _, err := c.updateServiceBindingStatus(toUpdate); err != nil {
return err
}
if err != nil {
glog.Warning(pcb.Message(err.Error()))
c.recorder.Event(toUpdate, corev1.EventTypeWarning, errorWithParameters, err.Error())
setServiceBindingCondition(
toUpdate,
v1beta1.ServiceBindingConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
err.Error(),
)
if _, err := c.updateServiceBindingStatus(toUpdate); err != nil {
return err
}

rawParametersWithRedaction = &runtime.RawExtension{
Raw: marshalledParametersWithRedaction,
}
}

toUpdate.Status.InProgressProperties = &v1beta1.ServiceBindingPropertiesState{
Expand Down
79 changes: 17 additions & 62 deletions pkg/controller/controller_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (

"github.com/golang/glog"
osb "github.com/pmorie/go-open-service-broker-client/v2"
"k8s.io/apimachinery/pkg/runtime"
utilfeature "k8s.io/apiserver/pkg/util/feature"

"github.com/kubernetes-incubator/service-catalog/pkg/api"
Expand Down Expand Up @@ -652,70 +651,26 @@ func (c *controller) reconcileServiceInstance(instance *v1beta1.ServiceInstance)
return err
}

var (
parameters map[string]interface{}
parametersChecksum string
rawParametersWithRedaction *runtime.RawExtension
parameters, parametersChecksum, rawParametersWithRedaction, err := prepareInProgressPropertyParameters(
c.kubeClient,
instance.Namespace,
instance.Spec.Parameters,
instance.Spec.ParametersFrom,
)
if instance.Spec.Parameters != nil || instance.Spec.ParametersFrom != nil {
var parametersWithSecretsRedacted map[string]interface{}
parameters, parametersWithSecretsRedacted, err = buildParameters(c.kubeClient, instance.Namespace, instance.Spec.ParametersFrom, instance.Spec.Parameters)
if err != nil {
s := fmt.Sprintf(`Failed to prepare ServiceInstance parameters %s: %s`, instance.Spec.Parameters, err)
glog.Warning(pcb.Message(s))
c.recorder.Event(instance, corev1.EventTypeWarning, errorWithParameters, s)

setServiceInstanceCondition(
toUpdate,
v1beta1.ServiceInstanceConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
s,
)
if _, err := c.updateServiceInstanceStatus(toUpdate); err != nil {
return err
}

return err
}

parametersChecksum, err = generateChecksumOfParameters(parameters)
if err != nil {
s := fmt.Sprintf("Failed to generate the parameters checksum to store in Status: %s", err)
glog.Info(pcb.Message(s))
c.recorder.Eventf(instance, corev1.EventTypeWarning, errorWithParameters, s)
setServiceInstanceCondition(
toUpdate,
v1beta1.ServiceInstanceConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
s)
if _, err := c.updateServiceInstanceStatus(toUpdate); err != nil {
return err
}
return err
}

marshalledParametersWithRedaction, err := MarshalRawParameters(parametersWithSecretsRedacted)
if err != nil {
s := fmt.Sprintf("Failed to marshal the parameters to store in the Status: %s", err)
glog.Info(pcb.Message(s))
c.recorder.Eventf(instance, corev1.EventTypeWarning, errorWithParameters, s)
setServiceInstanceCondition(
toUpdate,
v1beta1.ServiceInstanceConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
s)
if _, err := c.updateServiceInstanceStatus(toUpdate); err != nil {
return err
}
if err != nil {
glog.Warning(pcb.Message(err.Error()))
c.recorder.Event(toUpdate, corev1.EventTypeWarning, errorWithParameters, err.Error())
setServiceInstanceCondition(
toUpdate,
v1beta1.ServiceInstanceConditionReady,
v1beta1.ConditionFalse,
errorWithParameters,
err.Error(),
)
if _, err := c.updateServiceInstanceStatus(toUpdate); err != nil {
return err
}

rawParametersWithRedaction = &runtime.RawExtension{
Raw: marshalledParametersWithRedaction,
}
return err
}

toUpdate.Status.InProgressProperties = &v1beta1.ServiceInstancePropertiesState{
Expand Down
2 changes: 1 addition & 1 deletion pkg/controller/controller_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ func TestReconcileServiceInstanceWithInvalidParameters(t *testing.T) {

events := getRecordedEvents(testController)

expectedEvent := warningEventBuilder(errorWithParameters).msg("Failed to prepare ServiceInstance parameters")
expectedEvent := warningEventBuilder(errorWithParameters).msg("failed to prepare parameters")
if err := checkEventContains(events[0], expectedEvent.String()); err != nil {
t.Fatal(err)
}
Expand Down
44 changes: 44 additions & 0 deletions pkg/controller/parameters.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,3 +132,47 @@ func generateChecksumOfParameters(params map[string]interface{}) (string, error)
hash := sha256.Sum256(paramsAsJSON)
return fmt.Sprintf("%x", hash), nil
}

// prepareInProgressPropertyParameters generates the required parameters for setting
// the in-progress status of a Type.
// Returns (parameters, parametersChecksum, rawParametersWithRedaction, err) where
// 1 - a map of parameters to send to the Broker, including secret values.
// 2 - a checksum for the map of parameters. This checksum is used to determine if parameters have changed.
// 3 - the map of parameters marshaled into JSON as a RawExtension
// 4 - any error that caused the function to fail.
func prepareInProgressPropertyParameters(kubeClient kubernetes.Interface, namespace string, specParameters *runtime.RawExtension, specParametersFrom []v1beta1.ParametersFromSource) (map[string]interface{}, string, *runtime.RawExtension, error) {
var (
parameters map[string]interface{}
parametersChecksum string
rawParametersWithRedaction *runtime.RawExtension
err error
)
if specParameters != nil || specParametersFrom != nil {
var parametersWithSecretsRedacted map[string]interface{}
parameters, parametersWithSecretsRedacted, err = buildParameters(kubeClient, namespace, specParametersFrom, specParameters)
if err != nil {
return nil, "", nil, fmt.Errorf(
"failed to prepare parameters %s: %s",
specParameters, err,
)
}

parametersChecksum, err = generateChecksumOfParameters(parameters)
if err != nil {
return nil, "", nil, fmt.Errorf("failed to generate the parameters checksum to store in Status: %s", err)
}

marshalledParametersWithRedaction, err := MarshalRawParameters(parametersWithSecretsRedacted)
if err != nil {
return nil, "", nil, fmt.Errorf(
"failed to marshal the parameters to store in the Status: %s",
err,
)
}

rawParametersWithRedaction = &runtime.RawExtension{
Raw: marshalledParametersWithRedaction,
}
}
return parameters, parametersChecksum, rawParametersWithRedaction, err
}

0 comments on commit c6e446e

Please sign in to comment.