Repository: redhat-developer/service-binding-operator
Pull request #136 (2019-08-21 09:27:38)

Add shortNames to Servicebindingrequest in CRD
Fixes https://github.com/redhat-developer/service-binding-operator/issues/135

**What this PR does**
To get created servicebindingrequest resources, we can use
`oc get sbr` 
or 
`oc get sbrs`

openshift-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **akashshinde**
You can assign the PR to them by writing `/assign @akashshinde` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=redhat-developer%2Fservice-binding-operator).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/redhat-developer/service-binding-operator/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["akashshinde"]} -->
openshift-ci-robot: @akashshinde: The following test **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
ci/prow/lint | 71cfe6cd220c8a19bcde4aa45217d788b7aa1620 | [link](https://prow.svc.ci.openshift.org/view/gcs/origin-ci-test/pr-logs/pull/redhat-developer_service-binding-operator/136/pull-ci-redhat-developer-service-binding-operator-master-lint/395) | `/test lint`

[Full PR test history](https://prow.svc.ci.openshift.org/pr-history?org=redhat-developer&repo=service-binding-operator&pr=136). [Your PR dashboard](https://prow.svc.ci.openshift.org/pr?query=is:pr+state:open+author:akashshinde). Please help us cut down on flakes by [linking to](https://github.com/kubernetes/community/blob/master/contributors/devel/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/redhat-developer/service-binding-operator/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->

Patch:
diff --git a/Makefile b/Makefile
index 28fc169a..f1837a5d 100644
--- a/Makefile
+++ b/Makefile
@@ -100,7 +100,7 @@ GOCOV ?= "-covermode=atomic -coverprofile REPLACE_FILE"
 
 GIT_COMMIT_ID = $(shell git rev-parse --short HEAD)
 
-OPERATOR_VERSION ?= 0.0.17
+OPERATOR_VERSION ?= 0.0.18
 OPERATOR_GROUP ?= ${GO_PACKAGE_ORG_NAME}
 OPERATOR_IMAGE ?= quay.io/${OPERATOR_GROUP}/${GO_PACKAGE_REPO_NAME}
 OPERATOR_TAG_SHORT ?= $(OPERATOR_VERSION)
diff --git a/README.md b/README.md
index b5257358..82afc158 100644
--- a/README.md
+++ b/README.md
@@ -51,13 +51,13 @@ statusDescriptors:
     path: dbCredentials
     x-descriptors:
       - urn:alm:descriptor:io.kubernetes:Secret
-      - urn:alm:descriptor:servicebindingrequest:env:object:secret:user
-      - urn:alm:descriptor:servicebindingrequest:env:object:secret:password
+      - binding:env:object:secret:user
+      - binding:env:object:secret:password
   description: Database connection IP address
     displayName: DB IP address
     path: dbConnectionIP
     x-descriptors:
-      - urn:alm:descriptor:servicebindingrequest:env:attribute
+      - binding:env:attribute
 ```
 
 ## Quick Start
diff --git a/deploy/crds/apps_v1alpha1_servicebindingrequest_crd.yaml b/deploy/crds/apps_v1alpha1_servicebindingrequest_crd.yaml
index fee2fee6..68ca9237 100644
--- a/deploy/crds/apps_v1alpha1_servicebindingrequest_crd.yaml
+++ b/deploy/crds/apps_v1alpha1_servicebindingrequest_crd.yaml
@@ -8,6 +8,9 @@ spec:
     kind: ServiceBindingRequest
     listKind: ServiceBindingRequestList
     plural: servicebindingrequests
+    shortNames:
+    - sbr
+    - sbrs
     singular: servicebindingrequest
   scope: Namespaced
   subresources:
@@ -72,6 +75,10 @@ spec:
             mountPathPrefix:
               description: MountPathPrefix is the prefix for volume mount
               type: string
+            triggerRebinding:
+              description: TriggerRebinding forcefully triggers a binding operation
+                if the event for the same was missed for some reason
+              type: boolean
           required:
           - backingServiceSelector
           - applicationSelector
diff --git a/examples/bind_imported_app_to_incluster_operator_managed_PostgreSQL_db/README.md b/examples/bind_imported_app_to_incluster_operator_managed_PostgreSQL_db/README.md
index 3b216106..f7283cda 100644
--- a/examples/bind_imported_app_to_incluster_operator_managed_PostgreSQL_db/README.md
+++ b/examples/bind_imported_app_to_incluster_operator_managed_PostgreSQL_db/README.md
@@ -21,7 +21,7 @@ The cluster admin needs to install 2 operators into the cluster:
 A Backing Service Operator that is "bind-able," in other
 words a Backing Service Operator that exposes binding information in secrets, config maps, status, and/or spec
 attributes. The Backing Service Operator may represent a database or other services required by
-applications. We'll use [postgresql-operator](https://github.com/baijum/postgresql-operator) to
+applications. We'll use [postgresql-operator](https://github.com/operator-backing-service-samples/postgresql-operator) to
 demonstrate a sample use case.
 
 ### Install the Service Binding Operator using an `OperatorSource`
diff --git a/examples/bind_imported_app_to_offcluster_operator_managed_AWS_RDS_db/Makefile b/examples/bind_imported_app_to_offcluster_operator_managed_AWS_RDS_db/Makefile
index decb7b2e..fa222203 100644
--- a/examples/bind_imported_app_to_offcluster_operator_managed_AWS_RDS_db/Makefile
+++ b/examples/bind_imported_app_to_offcluster_operator_managed_AWS_RDS_db/Makefile
@@ -1,49 +1,136 @@
-## Cluster Admin
+# It's necessary to set this because some environments don't link sh -> bash.
+SHELL := /bin/bash
+
+#-----------------------------------------------------------------------------
+# VERBOSE target
+#-----------------------------------------------------------------------------
+
+# When you run make VERBOSE=1 (the default), executed commands will be printed
+# before executed. If you run make VERBOSE=2 verbose flags are turned on and
+# quiet flags are turned off for various commands. Use V_FLAG in places where
+# you can toggle on/off verbosity using -v. Use Q_FLAG in places where you can
+# toggle on/off quiet mode using -q. Use S_FLAG where you want to toggle on/off
+# silence mode using -s...
+VERBOSE ?= 1
+Q = @
+Q_FLAG = -q
+QUIET_FLAG = --quiet
+V_FLAG =
+VERBOSE_FLAG = 
+S_FLAG = -s
+X_FLAG =
+ifeq ($(VERBOSE),1)
+	Q =
+endif
+ifeq ($(VERBOSE),2)
+	Q =
+	Q_FLAG =
+	QUIET_FLAG =
+	S_FLAG =
+	V_FLAG = -v
+	VERBOSE_FLAG = --verbose
+	X_FLAG = -x
+endif
+
+
+.DEFAULT_GOAL := help
+
+## -- Utility targets --
+
+## Print help message for all Makefile targets
+## Run `make` or `make help` to see the help
+.PHONY: help
+help: ## Credit: https://gist.github.com/prwhite/8168133#gistcomment-2749866
+
+	@printf "Usage:\n  make <target>";
+
+	@awk '{ \
+			if ($$0 ~ /^.PHONY: [a-zA-Z\-\_0-9]+$$/) { \
+				helpCommand = substr($$0, index($$0, ":") + 2); \
+				if (helpMessage) { \
+					printf "\033[36m%-20s\033[0m %s\n", \
+						helpCommand, helpMessage; \
+					helpMessage = ""; \
+				} \
+			} else if ($$0 ~ /^[a-zA-Z\-\_0-9.]+:/) { \
+				helpCommand = substr($$0, 0, index($$0, ":")); \
+				if (helpMessage) { \
+					printf "\033[36m%-20s\033[0m %s\n", \
+						helpCommand, helpMessage; \
+					helpMessage = ""; \
+				} \
+			} else if ($$0 ~ /^##/) { \
+				if (helpMessage) { \
+					helpMessage = helpMessage"\n                     "substr($$0, 3); \
+				} else { \
+					helpMessage = substr($$0, 3); \
+				} \
+			} else { \
+				if (helpMessage) { \
+					print "\n                     "helpMessage"\n" \
+				} \
+				helpMessage = ""; \
+			} \
+		}' \
+		$(MAKEFILE_LIST)
+
+## -- Cluster Admin targets --
 
 .PHONY: install-service-binding-operator-source
+## Install the Service Binding Operator
 install-service-binding-operator-source:
 	@oc apply -f operator-source.service-binding-operator.yaml
 
 .PHONY: install-aws-rds-operator-source
+## Install the AWS RDS operator
 install-aws-rds-operator-source:
 	@oc apply -f operator-source.aws-rds-operator.yaml
 
 .PHONY: install-operator-secrets
+## Install the AWS RDS operator secrets
 install-operator-secrets: install-aws-rds-operator-secrets
 
 .PHONY: install-aws-rds-operator-secrets
+## Install the AWS RDS operator secrets
 install-aws-rds-operator-secrets:
 	$(eval AWS_ACCESS_KEY_ID := $(shell cat ~/.aws/credentials | grep aws_access_key_id | cut -d " " -f3))
 	$(eval AWS_SECRET_ACCESS_KEY := $(shell cat ~/.aws/credentials | grep aws_secret_access_key | cut -d " " -f3))
 	@sed -e 's,REPLACE_AWS_ACCESS_KEY_ID,$(shell echo -n "$(AWS_ACCESS_KEY_ID)" | base64),g' secret.aws-rds-operator.yaml | \
 	 sed -e 's,REPLACE_AWS_SECRET_ACCESS_KEY,$(shell echo -n "$(AWS_SECRET_ACCESS_KEY)" | base64),g' | oc apply -f -
 
-## Application Developer
+## -- Application Developer targets --
 
 .PHONY: create-project
+## Create the OpenShift project/namespace
 create-project:
 	@oc new-project service-binding-demo
 
 .PHONY: deploy-shell-app
+## Deploy the shell application
 deploy-shell-app:
 	@cat image-stream.shell-app.yaml build-config.shell-app.yaml deployment-config.shell-app.yaml | oc apply -f -
 
 .PHONY: deploy-mydb
+## Deploy the database that supports the applications
 deploy-mydb:
 	@cat secret.mydb.yaml rds.mydb.yaml | oc apply -f -
 
 .PHONY: create-service-binding-request-shell-app
+## Create the Service Binding Request for the shell app
 create-service-binding-request-shell-app:
 	@oc apply -f service-binding-request.shell-app.yaml
 
 .PHONY: set-labels-on-nodejs-app
+## Set the binding labels for the NodeJS app
 set-labels-on-nodejs-app:
 	@oc patch dc nodejs-app -p '{"metadata": {"labels": {"connects-to": "postgres", "environment": "nodejs"}}}'
 
 .PHONY: create-service-binding-request-nodejs-app
+## Create the Service Binding Request for the NodeJS app
 create-service-binding-request-nodejs-app:
 	@oc apply -f service-binding-request.nodejs-app.yaml
 
 .PHONY: delete-project
+## Delete the OpenShift project/namespace
 delete-project:
 	@-oc delete project service-binding-demo
diff --git a/go.mod b/go.mod
index 1aa92741..f04b92fb 100644
--- a/go.mod
+++ b/go.mod
@@ -1,7 +1,6 @@
 module github.com/redhat-developer/service-binding-operator
 
 require (
-	github.com/baijum/postgresql-operator v0.0.0-20190701114131-f72b43994f54
 	github.com/coreos/go-semver v0.3.0 // indirect
 	github.com/emicklei/go-restful v2.9.6+incompatible // indirect
 	github.com/evanphx/json-patch v4.5.0+incompatible // indirect
@@ -14,6 +13,7 @@ require (
 	github.com/onsi/ginkgo v1.8.0 // indirect
 	github.com/onsi/gomega v1.5.0 // indirect
 	github.com/openshift/api v3.9.0+incompatible
+	github.com/operator-backing-service-samples/postgresql-operator v0.0.0-20190821075443-840d192264ec
 	github.com/operator-framework/operator-lifecycle-manager v3.11.0+incompatible
 	github.com/operator-framework/operator-sdk v0.10.0
 	github.com/prometheus/client_golang v1.0.0 // indirect
diff --git a/go.sum b/go.sum
index 969e61d6..4068deb7 100644
--- a/go.sum
+++ b/go.sum
@@ -41,8 +41,6 @@ github.com/appscode/jsonpatch v0.0.0-20190108182946-7c0e3b262f30 h1:Kn3rqvbUFqSe
 github.com/appscode/jsonpatch v0.0.0-20190108182946-7c0e3b262f30/go.mod h1:4AJxUpXUhv4N+ziTvIcWWXgeorXpxPZOfk9HdEVr96M=
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
 github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-github.com/baijum/postgresql-operator v0.0.0-20190701114131-f72b43994f54 h1:uy8YL0ktzO+vlh+MADX90NzUBGWioQjehcRRA4czZ9s=
-github.com/baijum/postgresql-operator v0.0.0-20190701114131-f72b43994f54/go.mod h1:lxAyEZLeOyGTn2hDaXfK0lNK7F8QLl2l8ojWbaHRSj0=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
 github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
@@ -305,6 +303,8 @@ github.com/openshift/origin v0.0.0-20160503220234-8f127d736703/go.mod h1:0Rox5r9
 github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
 github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
 github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
+github.com/operator-backing-service-samples/postgresql-operator v0.0.0-20190821075443-840d192264ec h1:6JB0Y4/7pXUObJ/XKUSpyYTG7HjBndUaQiwoNalp2Ho=
+github.com/operator-backing-service-samples/postgresql-operator v0.0.0-20190821075443-840d192264ec/go.mod h1:ZiQVVOlOL7XB3sUN7M7cHUEP2Pv5hKxIzbv2S9guUjc=
 github.com/operator-framework/operator-lifecycle-manager v0.0.0-20181023032605-e838f7fb2186/go.mod h1:Ma5ZXd4S1vmMyewWlF7aO8CZiokR7Sd8dhSfkGkNU4U=
 github.com/operator-framework/operator-lifecycle-manager v0.0.0-20190105193533-81104ffdc4fb/go.mod h1:XMyE4n2opUK4N6L45YGQkXXi8F9fD7XDYFv/CsS6V5I=
 github.com/operator-framework/operator-lifecycle-manager v0.0.0-20190128024246-5eb7ae5bdb7a/go.mod h1:vq6TTFvg6ti1Bn6ACsZneZTmjTsURgDD6tQtVDbEgsU=
diff --git a/manifests/service-binding-operator.package.yaml b/manifests/service-binding-operator.package.yaml
index b16ce4ab..9f78bd5c 100644
--- a/manifests/service-binding-operator.package.yaml
+++ b/manifests/service-binding-operator.package.yaml
@@ -1,7 +1,7 @@
 packageName: service-binding-operator
 channels:
 - name: dev
-  currentCSV: service-binding-operator.v0.0.17
+  currentCSV: service-binding-operator.v0.0.18
 - name: stable
-  currentCSV: service-binding-operator.v0.0.17
+  currentCSV: service-binding-operator.v0.0.18
 defaultChannel: dev
diff --git a/manifests/service-binding-operator.servicebindingrequests.crd.yaml b/manifests/service-binding-operator.servicebindingrequests.crd.yaml
index 20adca43..9ce9c6a7 100644
--- a/manifests/service-binding-operator.servicebindingrequests.crd.yaml
+++ b/manifests/service-binding-operator.servicebindingrequests.crd.yaml
@@ -9,6 +9,9 @@ spec:
     listKind: ServiceBindingRequestList
     plural: servicebindingrequests
     singular: servicebindingrequest
+    shortNames:
+    - sbr
+    - sbrs
   scope: Namespaced
   subresources:
     status: {}
diff --git a/manifests/service-binding-operator.v0.0.17.clusterserviceversion.yaml b/manifests/service-binding-operator.v0.0.18.clusterserviceversion.yaml
similarity index 97%
rename from manifests/service-binding-operator.v0.0.17.clusterserviceversion.yaml
rename to manifests/service-binding-operator.v0.0.18.clusterserviceversion.yaml
index 357bb42c..a436391f 100644
--- a/manifests/service-binding-operator.v0.0.17.clusterserviceversion.yaml
+++ b/manifests/service-binding-operator.v0.0.18.clusterserviceversion.yaml
@@ -4,10 +4,10 @@ metadata:
   annotations:
     alm-examples: '[{"apiVersion":"apps.openshift.io/v1alpha1","kind":"ServiceBindingRequest","metadata":{"name":"example-servicebindingrequest"},"spec":{"applicationSelector":{"matchLabels":{"connects-to":"postgres","environment":"production"},"resourceKind":"Deployment"},"backingServiceSelector":{"resourceName":"database.example.org","resourceVersion":"v1alpha1"}}}]'  # yamllint disable-line rule:line-length
     capabilities: Basic Install
-    containerImage: quay.io/redhat-developer/app-binding-operator:v0.0.17
+    containerImage: quay.io/redhat-developer/app-binding-operator:v0.0.18
     description: An operator to support binding capabilities between imported
       apps and operator backed services
-  name: service-binding-operator.v0.0.17
+  name: service-binding-operator.v0.0.18
   namespace: placeholder
 spec:
   links:
@@ -54,7 +54,7 @@ spec:
                       fieldPath: metadata.name
                 - name: OPERATOR_NAME
                   value: service-binding-operator
-                image: quay.io/redhat-developer/app-binding-operator:v0.0.17
+                image: quay.io/redhat-developer/app-binding-operator:v0.0.18
                 imagePullPolicy: Always
                 name: service-binding-operator
                 resources: {}
@@ -124,4 +124,4 @@ spec:
   maturity: alpha
   provider:
     name: Red Hat, Inc.
-  version: 0.0.17
+  version: 0.0.18
diff --git a/openshift-ci/Dockerfile.registry.build b/openshift-ci/Dockerfile.registry.build
index 1fc5dca5..904375b6 100644
--- a/openshift-ci/Dockerfile.registry.build
+++ b/openshift-ci/Dockerfile.registry.build
@@ -1,6 +1,6 @@
 FROM quay.io/openshift/origin-operator-registry:latest
 
-ARG version=0.0.17
+ARG version=0.0.18
 RUN mkdir -p manifests/service-binding-operator/${version}
 COPY manifests/service-binding-operator.package.yaml manifests/service-binding-operator/
 COPY manifests/service-binding-operator*.crd.yaml manifests/service-binding-operator/${version}/
diff --git a/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go b/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go
index d9e0610e..9e89517c 100644
--- a/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go
+++ b/pkg/apis/apps/v1alpha1/servicebindingrequest_types.go
@@ -26,6 +26,10 @@ type ServiceBindingRequestSpec struct {
 	// ApplicationSelector is used to identify the application connecting to the
 	// backing service operator.
 	ApplicationSelector ApplicationSelector `json:"applicationSelector"`
+
+	// TriggerRebinding forcefully triggers a binding operation if the event
+	// for the same was missed for some reason
+	TriggerRebinding *bool `json:"triggerRebinding,omitempty"`
 }
 
 // ServiceBindingRequestStatus defines the observed state of ServiceBindingRequest
@@ -62,6 +66,7 @@ type ApplicationSelector struct {
 // ServiceBindingRequest is the Schema for the servicebindings API
 // +k8s:openapi-gen=true
 // +kubebuilder:subresource:status
+// +kubebuilder:resource:path=servicebindingrequests,shortName=sbr;sbrs
 type ServiceBindingRequest struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
diff --git a/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go
index 2223085a..98fe8ba2 100644
--- a/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go
@@ -113,6 +113,11 @@ func (in *ServiceBindingRequestSpec) DeepCopyInto(out *ServiceBindingRequestSpec
 	*out = *in
 	out.BackingServiceSelector = in.BackingServiceSelector
 	in.ApplicationSelector.DeepCopyInto(&out.ApplicationSelector)
+	if in.TriggerRebinding != nil {
+		in, out := &in.TriggerRebinding, &out.TriggerRebinding
+		*out = new(bool)
+		**out = **in
+	}
 	return
 }
 
diff --git a/pkg/apis/apps/v1alpha1/zz_generated.openapi.go b/pkg/apis/apps/v1alpha1/zz_generated.openapi.go
index 1a02ba1c..7e99db08 100644
--- a/pkg/apis/apps/v1alpha1/zz_generated.openapi.go
+++ b/pkg/apis/apps/v1alpha1/zz_generated.openapi.go
@@ -1,4 +1,4 @@
-// +build !ignore_autogenerated
+// +build !
 
 // This file was autogenerated by openapi-gen. Do not edit it manually!
 
@@ -177,6 +177,13 @@ func schema_pkg_apis_apps_v1alpha1_ServiceBindingRequestSpec(ref common.Referenc
 							Ref:         ref("./pkg/apis/apps/v1alpha1.ApplicationSelector"),
 						},
 					},
+					"triggerRebinding": {
+						SchemaProps: spec.SchemaProps{
+							Description: "TriggerRebinding forcefully triggers a binding operation if the event for the same was missed for some reason",
+							Type:        []string{"boolean"},
+							Format:      "",
+						},
+					},
 				},
 				Required: []string{"backingServiceSelector", "applicationSelector"},
 			},
diff --git a/pkg/controller/servicebindingrequest/binder.go b/pkg/controller/servicebindingrequest/binder.go
index 695a9dfc..27dedbb2 100644
--- a/pkg/controller/servicebindingrequest/binder.go
+++ b/pkg/controller/servicebindingrequest/binder.go
@@ -3,6 +3,7 @@ package servicebindingrequest
 import (
 	"context"
 	"fmt"
+	"time"
 
 	"github.com/go-logr/logr"
 	corev1 "k8s.io/api/core/v1"
@@ -18,6 +19,10 @@ import (
 	v1alpha1 "github.com/redhat-developer/service-binding-operator/pkg/apis/apps/v1alpha1"
 )
 
+const (
+	lastboundparam = "lastbound"
+)
+
 // Binder executes the "binding" act of updating different application kinds to use intermediary
 // secret. Those secrets should be offered as environment variables.
 type Binder struct {
@@ -158,6 +163,13 @@ func (b *Binder) updateContainers(
 	return containers, nil
 }
 
+func (b *Binder) appendEnvVar(envList []corev1.EnvVar, envParam string, envValue string) []corev1.EnvVar {
+	return append(envList, corev1.EnvVar{
+		Name:  envParam,
+		Value: envValue,
+	})
+}
+
 // appendEnvFrom based on secret name and list of EnvFromSource instances, making sure secret is
 // part of the list or appended.
 func (b *Binder) appendEnvFrom(envList []corev1.EnvFromSource, secret string) []corev1.EnvFromSource {
@@ -189,10 +201,12 @@ func (b *Binder) updateContainer(container interface{}) (map[string]interface{},
 	}
 	// effectively binding the application with intermediary secret
 	c.EnvFrom = b.appendEnvFrom(c.EnvFrom, b.sbr.GetName())
+	c.Env = b.appendEnvVar(c.Env, lastboundparam, time.Now().Format(time.RFC3339))
 	if len(b.volumeKeys) > 0 {
 		// and adding volume mount entries
 		c.VolumeMounts = b.appendVolumeMounts(c.VolumeMounts)
 	}
+
 	return runtime.DefaultUnstructuredConverter.ToUnstructured(&c)
 }
 
@@ -239,7 +253,7 @@ func (b *Binder) update(objList *ustrv1.UnstructuredList) ([]string, error) {
 			}
 		}
 
-		logger.Info("Updating object...")
+		logger.Info("Updating object in Kube...")
 		if err := b.client.Update(b.ctx, updatedObj); err != nil {
 			return nil, err
 		}
@@ -247,7 +261,6 @@ func (b *Binder) update(objList *ustrv1.UnstructuredList) ([]string, error) {
 		// recording object as updated
 		updatedObjectNames = append(updatedObjectNames, name)
 	}
-
 	return updatedObjectNames, nil
 }
 
diff --git a/pkg/controller/servicebindingrequest/common.go b/pkg/controller/servicebindingrequest/common.go
index d6e344f2..f7259c14 100644
--- a/pkg/controller/servicebindingrequest/common.go
+++ b/pkg/controller/servicebindingrequest/common.go
@@ -7,6 +7,9 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/reconcile"
 )
 
+// ServiceBindingRequestKind defines the name of the CRD Kind.
+const ServiceBindingRequestKind = "ServiceBindingRequest"
+
 // RequeueOnNotFound inspect error, if not-found then returns Requeue, otherwise expose the error.
 func RequeueOnNotFound(err error, requeueAfter int64) (reconcile.Result, error) {
 	if errors.IsNotFound(err) {
diff --git a/pkg/controller/servicebindingrequest/controller.go b/pkg/controller/servicebindingrequest/controller.go
index 719dd59f..1abb2f86 100644
--- a/pkg/controller/servicebindingrequest/controller.go
+++ b/pkg/controller/servicebindingrequest/controller.go
@@ -42,6 +42,21 @@ func add(mgr manager.Manager, r reconcile.Reconciler) error {
 
 	pred := predicate.Funcs{
 		UpdateFunc: func(e event.UpdateEvent) bool {
+
+			if e.ObjectOld.DeepCopyObject().GetObjectKind().GroupVersionKind().Kind == ServiceBindingRequestKind {
+				oldSBR := e.ObjectOld.(*v1alpha1.ServiceBindingRequest)
+				newSBR := e.ObjectNew.(*v1alpha1.ServiceBindingRequest)
+
+				// if event was triggered as part of resetting TriggerRebinding True to False,
+				// we shall ignore it to avoid an infinite loop.
+				if newSBR.Spec.TriggerRebinding != nil &&
+					oldSBR.Spec.TriggerRebinding != nil &&
+					!*newSBR.Spec.TriggerRebinding &&
+					*oldSBR.Spec.TriggerRebinding {
+					return false
+				}
+			}
+
 			// Ignore updates to CR status in which case metadata.Generation does not change
 			return e.MetaOld.GetGeneration() != e.MetaNew.GetGeneration()
 		},
diff --git a/pkg/controller/servicebindingrequest/reconciler.go b/pkg/controller/servicebindingrequest/reconciler.go
index 6f254f8f..a77cff9b 100644
--- a/pkg/controller/servicebindingrequest/reconciler.go
+++ b/pkg/controller/servicebindingrequest/reconciler.go
@@ -52,6 +52,19 @@ func (r *Reconciler) setStatus(
 	return r.client.Status().Update(ctx, instance)
 }
 
+// setStatus always updates the TriggerRebindingFlag field to False, if present
+func (r *Reconciler) setTriggerRebindingFlag(
+	ctx context.Context,
+	instance *v1alpha1.ServiceBindingRequest,
+) error {
+	if instance.Spec.TriggerRebinding != nil && *instance.Spec.TriggerRebinding {
+		newValue := false
+		instance.Spec.TriggerRebinding = &newValue
+		return r.client.Update(ctx, instance)
+	}
+	return nil
+}
+
 // setApplicationObjects set the ApplicationObject status field, and also set the overall status as
 // success, since it was able to bind applications.
 func (r *Reconciler) setApplicationObjects(
@@ -89,6 +102,12 @@ func (r *Reconciler) Reconcile(request reconcile.Request) (reconcile.Result, err
 		return RequeueOnNotFound(err, 0)
 	}
 
+	// As long the request was handled, we update the TriggerRebind
+	err = r.setTriggerRebindingFlag(ctx, instance)
+	if err != nil {
+		return RequeueError(err)
+	}
+
 	logger = logger.WithValues("ServiceBindingRequest.Name", instance.Name)
 	logger.Info("Found service binding request to inspect")
 
diff --git a/pkg/controller/servicebindingrequest/retriever.go b/pkg/controller/servicebindingrequest/retriever.go
index 26d52629..d72982b2 100644
--- a/pkg/controller/servicebindingrequest/retriever.go
+++ b/pkg/controller/servicebindingrequest/retriever.go
@@ -26,11 +26,11 @@ type Retriever struct {
 }
 
 const (
-	basePrefix              = "urn:alm:descriptor:servicebindingrequest:env:object"
+	basePrefix              = "binding:env:object"
 	secretPrefix            = basePrefix + ":secret"
 	configMapPrefix         = basePrefix + ":configmap"
-	attributePrefix         = "urn:alm:descriptor:servicebindingrequest:env:attribute"
-	volumeMountSecretPrefix = "urn:alm:descriptor:servicebindingrequest:volumemount:secret"
+	attributePrefix         = "binding:env:attribute"
+	volumeMountSecretPrefix = "binding:volumemount:secret"
 )
 
 // getNestedValue retrieve value from dotted key path
diff --git a/vendor/github.com/baijum/postgresql-operator/LICENSE b/vendor/github.com/operator-backing-service-samples/postgresql-operator/LICENSE
similarity index 100%
rename from vendor/github.com/baijum/postgresql-operator/LICENSE
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/LICENSE
diff --git a/vendor/github.com/baijum/postgresql-operator/pkg/apis/addtoscheme_postgresql_v1alpha1.go b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/addtoscheme_postgresql_v1alpha1.go
similarity index 69%
rename from vendor/github.com/baijum/postgresql-operator/pkg/apis/addtoscheme_postgresql_v1alpha1.go
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/addtoscheme_postgresql_v1alpha1.go
index 536cfc4f..5e6cbb0f 100644
--- a/vendor/github.com/baijum/postgresql-operator/pkg/apis/addtoscheme_postgresql_v1alpha1.go
+++ b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/addtoscheme_postgresql_v1alpha1.go
@@ -1,7 +1,7 @@
 package apis
 
 import (
-	"github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1"
+	"github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1"
 )
 
 func init() {
diff --git a/vendor/github.com/baijum/postgresql-operator/pkg/apis/apis.go b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/apis.go
similarity index 100%
rename from vendor/github.com/baijum/postgresql-operator/pkg/apis/apis.go
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/apis.go
diff --git a/vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/database_types.go b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/database_types.go
similarity index 95%
rename from vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/database_types.go
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/database_types.go
index ea4bc584..9a9c2911 100644
--- a/vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/database_types.go
+++ b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/database_types.go
@@ -28,8 +28,9 @@ type DatabaseStatus struct {
 	// Add custom validation using kubebuilder tags: https://book.kubebuilder.io/beyond_basics/generating_crd.html
 	DBCredentials    string `json:"dbCredentials"`
 	DBConnectionIP   string `json:"dbConnectionIP"`
-	DBConnectionPort int32  `json:"dbConnectionPort"`
+	DBConnectionPort int64  `json:"dbConnectionPort"`
 	DBName           string `json:"dbName"`
+	DBConfigMap      string `json:"dbConfigMap"`
 }
 
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
diff --git a/vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/doc.go b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/doc.go
similarity index 100%
rename from vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/doc.go
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/doc.go
diff --git a/vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/register.go b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/register.go
similarity index 100%
rename from vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/register.go
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/register.go
diff --git a/vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.deepcopy.go
similarity index 100%
rename from vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.deepcopy.go
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.deepcopy.go
diff --git a/vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.openapi.go b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.openapi.go
similarity index 71%
rename from vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.openapi.go
rename to vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.openapi.go
index 47d17d80..b1aefff9 100644
--- a/vendor/github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.openapi.go
+++ b/vendor/github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1/zz_generated.openapi.go
@@ -13,9 +13,9 @@ import (
 
 func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition {
 	return map[string]common.OpenAPIDefinition{
-		"github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1.Database":       schema_pkg_apis_postgresql_v1alpha1_Database(ref),
-		"github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseSpec":   schema_pkg_apis_postgresql_v1alpha1_DatabaseSpec(ref),
-		"github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseStatus": schema_pkg_apis_postgresql_v1alpha1_DatabaseStatus(ref),
+		"github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1.Database":       schema_pkg_apis_postgresql_v1alpha1_Database(ref),
+		"github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseSpec":   schema_pkg_apis_postgresql_v1alpha1_DatabaseSpec(ref),
+		"github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseStatus": schema_pkg_apis_postgresql_v1alpha1_DatabaseStatus(ref),
 	}
 }
 
@@ -46,19 +46,19 @@ func schema_pkg_apis_postgresql_v1alpha1_Database(ref common.ReferenceCallback)
 					},
 					"spec": {
 						SchemaProps: spec.SchemaProps{
-							Ref: ref("github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseSpec"),
+							Ref: ref("github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseSpec"),
 						},
 					},
 					"status": {
 						SchemaProps: spec.SchemaProps{
-							Ref: ref("github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseStatus"),
+							Ref: ref("github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseStatus"),
 						},
 					},
 				},
 			},
 		},
 		Dependencies: []string{
-			"github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseSpec", "github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
+			"github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseSpec", "github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1.DatabaseStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"},
 	}
 }
 
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 9331df12..4555426f 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -17,9 +17,6 @@ github.com/PuerkitoBio/purell
 github.com/PuerkitoBio/urlesc
 # github.com/appscode/jsonpatch v0.0.0-20190108182946-7c0e3b262f30
 github.com/appscode/jsonpatch
-# github.com/baijum/postgresql-operator v0.0.0-20190701114131-f72b43994f54
-github.com/baijum/postgresql-operator/pkg/apis
-github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1
 # github.com/beorn7/perks v1.0.0
 github.com/beorn7/perks/quantile
 # github.com/census-instrumentation/opencensus-proto v0.2.0
@@ -137,6 +134,9 @@ github.com/modern-go/concurrent
 github.com/modern-go/reflect2
 # github.com/openshift/api v3.9.0+incompatible
 github.com/openshift/api/apps/v1
+# github.com/operator-backing-service-samples/postgresql-operator v0.0.0-20190821075443-840d192264ec
+github.com/operator-backing-service-samples/postgresql-operator/pkg/apis
+github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1
 # github.com/operator-framework/operator-lifecycle-manager v3.11.0+incompatible
 github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1
 github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install
@@ -368,13 +368,13 @@ k8s.io/apimachinery/pkg/runtime
 k8s.io/apimachinery/pkg/apis/meta/v1
 k8s.io/apimachinery/pkg/runtime/schema
 k8s.io/apimachinery/pkg/api/errors
+k8s.io/apimachinery/pkg/api/meta
 k8s.io/apimachinery/pkg/apis/meta/v1/unstructured
 k8s.io/apimachinery/pkg/labels
 k8s.io/apimachinery/pkg/types
-k8s.io/apimachinery/pkg/util/wait
 k8s.io/apimachinery/pkg/runtime/serializer
 k8s.io/apimachinery/pkg/watch
-k8s.io/apimachinery/pkg/api/meta
+k8s.io/apimachinery/pkg/util/wait
 k8s.io/apimachinery/pkg/util/runtime
 k8s.io/apimachinery/pkg/api/resource
 k8s.io/apimachinery/pkg/runtime/serializer/streaming
@@ -389,6 +389,7 @@ k8s.io/apimachinery/pkg/util/naming
 k8s.io/apimachinery/pkg/fields
 k8s.io/apimachinery/pkg/selection
 k8s.io/apimachinery/pkg/util/validation/field
+k8s.io/apimachinery/pkg/apis/meta/v1beta1
 k8s.io/apimachinery/pkg/util/validation
 k8s.io/apimachinery/pkg/runtime/serializer/versioning
 k8s.io/apimachinery/pkg/version
@@ -397,7 +398,6 @@ k8s.io/apimachinery/pkg/runtime/serializer/recognizer
 k8s.io/apimachinery/pkg/util/cache
 k8s.io/apimachinery/pkg/util/clock
 k8s.io/apimachinery/pkg/util/diff
-k8s.io/apimachinery/pkg/apis/meta/v1beta1
 k8s.io/apimachinery/pkg/util/yaml
 k8s.io/apimachinery/pkg/util/strategicpatch
 k8s.io/apimachinery/pkg/util/uuid


Test patch:
diff --git a/pkg/controller/servicebindingrequest/binder_test.go b/pkg/controller/servicebindingrequest/binder_test.go
index f007d6ba..ae5bb79a 100644
--- a/pkg/controller/servicebindingrequest/binder_test.go
+++ b/pkg/controller/servicebindingrequest/binder_test.go
@@ -3,9 +3,13 @@ package servicebindingrequest
 import (
 	"context"
 	"testing"
+	"time"
 
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
+	corev1 "k8s.io/api/core/v1"
+	ustrv1 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
+	"k8s.io/apimachinery/pkg/runtime"
 	logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
 
 	"github.com/redhat-developer/service-binding-operator/test/mocks"
@@ -51,4 +55,38 @@ func TestBinderNew(t *testing.T) {
 		assert.Equal(t, 1, len(list))
 		assert.Equal(t, secretName, list[0].SecretRef.Name)
 	})
+
+	t.Run("appendEnv", func(t *testing.T) {
+		d := mocks.DeploymentMock("binder", "binder", map[string]string{})
+		list := binder.appendEnvVar(d.Spec.Template.Spec.Containers[0].Env, "name", "value")
+		assert.Equal(t, 1, len(list))
+		assert.Equal(t, "name", list[0].Name)
+		assert.Equal(t, "value", list[0].Value)
+	})
+
+	t.Run("update", func(t *testing.T) {
+		list, err := binder.search()
+		assert.NoError(t, err)
+		assert.Equal(t, 1, len(list.Items))
+
+		updatedObjects, err := binder.update(list)
+		assert.NoError(t, err)
+		assert.Len(t, updatedObjects, 1)
+
+		containersPath := []string{"spec", "template", "spec", "containers"}
+		containers, found, err := ustrv1.NestedSlice(list.Items[0].Object, containersPath...)
+		assert.NoError(t, err)
+		assert.True(t, found)
+		assert.Len(t, containers, 1)
+
+		c := corev1.Container{}
+		u := containers[0].(map[string]interface{})
+		err = runtime.DefaultUnstructuredConverter.FromUnstructured(u, &c)
+		assert.NoError(t, err)
+		assert.NotEmpty(t, c.Env[0].Value)
+
+		parsedTime, err := time.Parse(time.RFC3339, c.Env[0].Value)
+		assert.NoError(t, err)
+		assert.True(t, parsedTime.Before(time.Now()))
+	})
 }
diff --git a/pkg/controller/servicebindingrequest/reconciler_test.go b/pkg/controller/servicebindingrequest/reconciler_test.go
index dcf19219..7c843241 100644
--- a/pkg/controller/servicebindingrequest/reconciler_test.go
+++ b/pkg/controller/servicebindingrequest/reconciler_test.go
@@ -79,6 +79,88 @@ func TestReconcilerReconcileUsingSecret(t *testing.T) {
 	})
 }
 
+// TestReconcilerForForcedTriggeringOfBinding test the reconciliation process using a secret,
+// and using TriggerRebind = true, false
+func TestReconcilerForForcedTriggeringOfBinding(t *testing.T) {
+	ctx := context.TODO()
+	resourceRef := "test-for-forced-trigger"
+	matchLabels := map[string]string{
+		"connects-to": "database",
+		"environment": "reconciler",
+	}
+
+	f := mocks.NewFake(t, reconcilerNs)
+	f.AddMockedServiceBindingRequest(reconcilerName, resourceRef, matchLabels)
+
+	f.AddMockedUnstructuredCSV("cluster-service-version-list-forced-trigger")
+	f.AddMockedDatabaseCRList(resourceRef)
+	f.AddMockedUnstructuredDeployment(reconcilerName, matchLabels)
+	f.AddMockedSecret("db-credentials")
+
+	fakeClient := f.FakeClient()
+	reconciler := &Reconciler{client: fakeClient, dynClient: f.FakeDynClient(), scheme: f.S}
+
+	t.Run("reconcile-using-trigger-starting-with-true", func(t *testing.T) {
+
+		namespacedName := types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
+		sbrOutput := v1alpha1.ServiceBindingRequest{}
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbrOutput))
+
+		triggertrue := true
+
+		sbrOutput.Spec.TriggerRebinding = &triggertrue
+
+		// set to True and reconcile
+		require.NoError(t, fakeClient.Update(ctx, &sbrOutput))
+
+		res, err := reconciler.Reconcile(reconcileRequest())
+		assert.Nil(t, err)
+		assert.False(t, res.Requeue)
+
+		d := appsv1.Deployment{}
+		require.Nil(t, fakeClient.Get(ctx, namespacedName, &d))
+
+		containers := d.Spec.Template.Spec.Containers
+		assert.Equal(t, reconcilerName, containers[0].EnvFrom[0].SecretRef.Name)
+
+		sbrOutput = v1alpha1.ServiceBindingRequest{}
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbrOutput))
+
+		// If TRUE was set, this will become FALSE
+		require.False(t, *sbrOutput.Spec.TriggerRebinding)
+	})
+
+	t.Run("reconcile-using-trigger-starting-with-false", func(t *testing.T) {
+
+		namespacedName := types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
+		sbrOutput := v1alpha1.ServiceBindingRequest{}
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbrOutput))
+
+		triggerfalse := false
+
+		sbrOutput.Spec.TriggerRebinding = &triggerfalse
+
+		// set to False and reconcile
+		require.NoError(t, fakeClient.Update(ctx, &sbrOutput))
+
+		res, err := reconciler.Reconcile(reconcileRequest())
+		assert.Nil(t, err)
+		assert.False(t, res.Requeue)
+
+		d := appsv1.Deployment{}
+		require.Nil(t, fakeClient.Get(ctx, namespacedName, &d))
+
+		containers := d.Spec.Template.Spec.Containers
+		assert.Equal(t, reconcilerName, containers[0].EnvFrom[0].SecretRef.Name)
+
+		sbrOutput = v1alpha1.ServiceBindingRequest{}
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbrOutput))
+
+		// If FALSE was set, this will stay FALSE
+		require.False(t, *sbrOutput.Spec.TriggerRebinding)
+	})
+}
+
 func TestReconcilerReconcileUsingVolumes(t *testing.T) {
 	ctx := context.TODO()
 	resourceRef := "test-using-volumes"
diff --git a/pkg/controller/servicebindingrequest/reconciler_whitebox_test.go b/pkg/controller/servicebindingrequest/reconciler_whitebox_test.go
new file mode 100644
index 00000000..c74abfdc
--- /dev/null
+++ b/pkg/controller/servicebindingrequest/reconciler_whitebox_test.go
@@ -0,0 +1,69 @@
+package servicebindingrequest
+
+import (
+	"context"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+	"k8s.io/apimachinery/pkg/types"
+	logf "sigs.k8s.io/controller-runtime/pkg/runtime/log"
+
+	"github.com/redhat-developer/service-binding-operator/pkg/apis/apps/v1alpha1"
+	"github.com/redhat-developer/service-binding-operator/test/mocks"
+)
+
+func init() {
+	logf.SetLogger(logf.ZapLogger(true))
+}
+
+func TestSetRetriggerBinding(t *testing.T) {
+	ctx := context.TODO()
+	resourceRef := "test-retrigger"
+	matchLabels := map[string]string{
+		"connects-to": "database",
+		"environment": "reconciler",
+	}
+
+	f := mocks.NewFake(t, reconcilerNs)
+
+	f.AddMockedServiceBindingRequest(reconcilerName, resourceRef, matchLabels)
+	fakeClient := f.FakeClient()
+
+	t.Run("reconcile-using-trigger-binding", func(t *testing.T) {
+		namespacedName := types.NamespacedName{Namespace: reconcilerNs, Name: reconcilerName}
+		sbr := v1alpha1.ServiceBindingRequest{}
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbr))
+
+		reconciler := &Reconciler{client: fakeClient, dynClient: f.FakeDynClient(), scheme: f.S}
+		err := reconciler.setTriggerRebindingFlag(ctx, &sbr)
+		require.NoError(t, err)
+
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbr))
+
+		// If nothing was set initially, nothing will be set.
+		require.Nil(t, sbr.Spec.TriggerRebinding)
+
+		// lets as True initially and see what happens
+		triggerTrue := true
+		sbr.Spec.TriggerRebinding = &triggerTrue
+		require.NoError(t, fakeClient.Update(ctx, &sbr))
+
+		err = reconciler.setTriggerRebindingFlag(ctx, &sbr)
+		require.NoError(t, err)
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbr))
+		require.False(t, *sbr.Spec.TriggerRebinding)
+
+		// lets as False initially and see what happens
+		triggerFalse := false
+		sbr.Spec.TriggerRebinding = &triggerFalse
+		require.NoError(t, fakeClient.Update(ctx, &sbr))
+
+		err = reconciler.setTriggerRebindingFlag(ctx, &sbr)
+		require.NoError(t, err)
+		require.NoError(t, fakeClient.Get(ctx, namespacedName, &sbr))
+
+		// remains false
+		require.False(t, *sbr.Spec.TriggerRebinding)
+
+	})
+}
diff --git a/pkg/controller/servicebindingrequest/retriever_test.go b/pkg/controller/servicebindingrequest/retriever_test.go
index 53d0447a..8dfad018 100644
--- a/pkg/controller/servicebindingrequest/retriever_test.go
+++ b/pkg/controller/servicebindingrequest/retriever_test.go
@@ -56,8 +56,8 @@ func TestRetriever(t *testing.T) {
 	t.Run("read", func(t *testing.T) {
 		// reading from secret, from status attribute
 		err := retriever.read("status", "dbCredentials", []string{
-			"urn:alm:descriptor:servicebindingrequest:env:object:secret:user",
-			"urn:alm:descriptor:servicebindingrequest:env:object:secret:password",
+			"binding:env:object:secret:user",
+			"binding:env:object:secret:password",
 		})
 		assert.Nil(t, err)
 
@@ -67,7 +67,7 @@ func TestRetriever(t *testing.T) {
 
 		// reading from spec attribute
 		err = retriever.read("spec", "image", []string{
-			"urn:alm:descriptor:servicebindingrequest:env:attribute",
+			"binding:env:attribute",
 		})
 		assert.Nil(t, err)
 
@@ -78,7 +78,7 @@ func TestRetriever(t *testing.T) {
 
 	t.Run("extractSecretItemName", func(t *testing.T) {
 		assert.Equal(t, "user", retriever.extractSecretItemName(
-			"urn:alm:descriptor:servicebindingrequest:env:object:secret:user"))
+			"binding:env:object:secret:user"))
 	})
 
 	t.Run("readSecret", func(t *testing.T) {
@@ -193,8 +193,8 @@ func TestConfigMapRetriever(t *testing.T) {
 
 		// reading from configMap, from status attribute
 		err = retriever.read("spec", "dbConfigMap", []string{
-			"urn:alm:descriptor:servicebindingrequest:env:object:configmap:user",
-			"urn:alm:descriptor:servicebindingrequest:env:object:configmap:password",
+			"binding:env:object:configmap:user",
+			"binding:env:object:configmap:password",
 		})
 		assert.Nil(t, err)
 
@@ -205,7 +205,7 @@ func TestConfigMapRetriever(t *testing.T) {
 
 	t.Run("extractConfigMapItemName", func(t *testing.T) {
 		assert.Equal(t, "user", retriever.extractConfigMapItemName(
-			"urn:alm:descriptor:servicebindingrequest:env:object:configmap:user"))
+			"binding:env:object:configmap:user"))
 	})
 
 	t.Run("readConfigMap", func(t *testing.T) {
diff --git a/test/e2e/servicebindingrequest_test.go b/test/e2e/servicebindingrequest_test.go
index e1a40195..3d5c435b 100644
--- a/test/e2e/servicebindingrequest_test.go
+++ b/test/e2e/servicebindingrequest_test.go
@@ -5,8 +5,8 @@ import (
 	"testing"
 	"time"
 
-	pgsqlapis "github.com/baijum/postgresql-operator/pkg/apis"
-	pgv1alpha1 "github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1"
+	pgsqlapis "github.com/operator-backing-service-samples/postgresql-operator/pkg/apis"
+	pgv1alpha1 "github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1"
 	olmv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
 	framework "github.com/operator-framework/operator-sdk/pkg/test"
 	"github.com/operator-framework/operator-sdk/pkg/test/e2eutil"
diff --git a/test/mocks/fake.go b/test/mocks/fake.go
index bcf2efc6..39298c43 100644
--- a/test/mocks/fake.go
+++ b/test/mocks/fake.go
@@ -3,8 +3,8 @@ package mocks
 import (
 	"testing"
 
-	pgapis "github.com/baijum/postgresql-operator/pkg/apis"
-	pgv1alpha1 "github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1"
+	pgapis "github.com/operator-backing-service-samples/postgresql-operator/pkg/apis"
+	pgv1alpha1 "github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1"
 	olmv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
 	"github.com/stretchr/testify/require"
 	appsv1 "k8s.io/api/apps/v1"
diff --git a/test/mocks/mocks.go b/test/mocks/mocks.go
index 0c3759c8..46140ed7 100644
--- a/test/mocks/mocks.go
+++ b/test/mocks/mocks.go
@@ -4,7 +4,7 @@ import (
 	"encoding/json"
 	"fmt"
 
-	pgv1alpha1 "github.com/baijum/postgresql-operator/pkg/apis/postgresql/v1alpha1"
+	pgv1alpha1 "github.com/operator-backing-service-samples/postgresql-operator/pkg/apis/postgresql/v1alpha1"
 	olmv1alpha1 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/apis/operators/v1alpha1"
 	olminstall "github.com/operator-framework/operator-lifecycle-manager/pkg/controller/install"
 	appsv1 "k8s.io/api/apps/v1"
@@ -31,7 +31,7 @@ var (
 		DisplayName:  "Database Name",
 		Description:  "Database Name",
 		Path:         "dbName",
-		XDescriptors: []string{"urn:alm:descriptor:servicebindingrequest:env:attribute"},
+		XDescriptors: []string{"binding:env:attribute"},
 	}
 	// DBConfigMapSpecDesc spec descriptor to describe a operator that export username and password
 	// via config-map, instead of a usual secret.
@@ -41,8 +41,8 @@ var (
 		Path:        "dbConfigMap",
 		XDescriptors: []string{
 			"urn:alm:descriptor:io.kubernetes:ConfigMap",
-			"urn:alm:descriptor:servicebindingrequest:env:object:configmap:user",
-			"urn:alm:descriptor:servicebindingrequest:env:object:configmap:password",
+			"binding:env:object:configmap:user",
+			"binding:env:object:configmap:password",
 		},
 	}
 	// DBPasswordCredentialsOnEnvStatusDesc status descriptor to describe a database operator that
@@ -53,8 +53,8 @@ var (
 		Path:        "dbCredentials",
 		XDescriptors: []string{
 			"urn:alm:descriptor:io.kubernetes:Secret",
-			"urn:alm:descriptor:servicebindingrequest:env:object:secret:user",
-			"urn:alm:descriptor:servicebindingrequest:env:object:secret:password",
+			"binding:env:object:secret:user",
+			"binding:env:object:secret:password",
 		},
 	}
 	// DBPasswordCredentialsOnVolumeMountStatusDesc status descriptor to describe a operator that
@@ -65,8 +65,8 @@ var (
 		Path:        "dbCredentials",
 		XDescriptors: []string{
 			"urn:alm:descriptor:io.kubernetes:Secret",
-			"urn:alm:descriptor:servicebindingrequest:volumemount:secret:user",
-			"urn:alm:descriptor:servicebindingrequest:volumemount:secret:password",
+			"binding:volumemount:secret:user",
+			"binding:volumemount:secret:password",
 		},
 	}
 )