cleanup, sensible default override capability, openolt and onu support

Change-Id: I8e542dfe40947324c44a19605dde23d0e5198afe
diff --git a/README.md b/README.md
index ebe9c7d..bd86471 100644
--- a/README.md
+++ b/README.md
@@ -42,6 +42,14 @@
 Once helm is initialized deploy the [ONOS OpenFlow
 Controller](https://onosproject.org/) using the `make helm-onos` command.
 
+#### Prerequite Helm Chart Repositories
+To use the charts for VOLTHA the following two Helm repositories should be 
+added to your helm environment:
+```shell
+helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubatoritories
+helm repo add stable https://kubernetes-charts.storage.googleapis.com
+```
+
 #### Deploy VOLTHA
 
 Clone the [VOLTHA Helm Chart](https://github.com/ciena/voltha-helm-charts)
@@ -49,7 +57,7 @@
 
 ```shell
 git clone https://github.com/ciena/voltha-helm-charts
-cd volth-helm-charts
+cd voltha-helm-charts
 helm dependency build voltha
 ```
 
@@ -60,10 +68,25 @@
 helm install --namespace voltha --name voltha voltha
 ```
 
-After that is complete the adapters for the simulated devices can be deployed:
+#### Deploying Adapters
+Deploying adapters is optional an you need only deploy those adapters which
+are required for a given deployment
 
+##### Adapters for Simulated OLT/ONU
+After that is complete the adapters for the simulated devices can be deployed.
+Deploying the adapters for the simulated olt/onu is optional as it deploying
+any adapter. But by deploying the simulated olt/onu adapters it is possible to
+create devices in VOLTHA and enable them without having access to hardware.
 ```shell
-helm install --namespace voltha --name voltha-adapters voltha-adapter-simulated
+helm install --namespace voltha --name voltha-adapters-simulated voltha-adapter-simulated
+```
+
+##### Adapters for OpenOLT and OpenONU
+The adapters for the OpenOLT and OpenONU are in separate helm charts to deploy
+the adapters use the following commands:
+```shell
+helm install --namespace voltha --name voltha-adapters-openolt voltha-adapters-openolt
+helm install --namespace voltha --name voltha-adapters-openonu voltha-adapters-openonu
 ```
 
 ### Kafka and Etcd
diff --git a/voltha-adapter-openolt/Chart.yaml b/voltha-adapter-openolt/Chart.yaml
new file mode 100644
index 0000000..f62d422
--- /dev/null
+++ b/voltha-adapter-openolt/Chart.yaml
@@ -0,0 +1,21 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+name: voltha-adapter-openolt
+description: A Helm chart for Voltha OpenOLT Adapter
+icon: https://guide.opencord.org/logos/cord.svg
+
+version: 2.0.0
+appVersion: 2.0.0
diff --git a/voltha-adapter-openolt/templates/adapters-openolt.yaml b/voltha-adapter-openolt/templates/adapters-openolt.yaml
new file mode 100644
index 0000000..4e9c798
--- /dev/null
+++ b/voltha-adapter-openolt/templates/adapters-openolt.yaml
@@ -0,0 +1,43 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: adapter-open-olt
+  namespace: {{ .Release.Namespace }}
+spec:
+  replicas: {{ .Values.replicas.adapter_open_olt }}
+  selector:
+    matchLabels:
+      app: adapter-open-olt
+  template:
+    metadata:
+      labels:
+        app: adapter-open-olt
+      annotations:
+        cni: "calico"
+    spec:
+      containers:
+        - name: adapter-open-olt
+          image: {{ tpl .Values.images.adapter_open_olt.registry . }}{{ tpl .Values.images.adapter_open_olt.repository . }}:{{ tpl .Values.images.adapter_open_olt.tag . }}
+          imagePullPolicy: {{ tpl .Values.images.adapter_open_olt.pullPolicy . }}
+          args:
+            - "/voltha/adapters/openolt/main.py"
+            - "--verbose"
+            - "--kafka_adapter={{ .Values.services.kafka.adapter.service }}:{{ .Values.services.kafka.adapter.port }}"
+            - "--kafka_cluster={{ .Values.services.kafka.cluster.service }}:{{ .Values.services.kafka.cluster.port }}"
+            - "--core_topic=rwcore"
+            - "--backend=etcd"
+            - "--etcd={{ .Values.services.etcd.service }}:{{ .Values.services.etcd.port }}"
diff --git a/voltha-adapter-openolt/values.yaml b/voltha-adapter-openolt/values.yaml
new file mode 100644
index 0000000..467d5d6
--- /dev/null
+++ b/voltha-adapter-openolt/values.yaml
@@ -0,0 +1,47 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+# Default overrides
+defaults:
+  image_registry:
+  image_tag:
+  image_org:
+  image_pullPolicy:
+
+# Define connectivity to required services
+services:
+  kafka:
+    adapter:
+      service: voltha-kafka.voltha.svc.cluster.local
+      port: 9092
+    cluster:
+      service: voltha-kafka.voltha.svc.cluster.local
+      port: 9092
+  
+  # Define connectivity to etcd
+  etcd:
+    service: voltha-etcd-cluster-client.voltha.svc.cluster.local
+    port: 2379
+
+# Define the recplica count for everything
+replicas:
+  adapter_open_olt: 1
+
+images:
+  adapter_open_olt:
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-openolt-adapter'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
diff --git a/voltha-adapter-openonu/Chart.yaml b/voltha-adapter-openonu/Chart.yaml
new file mode 100644
index 0000000..83abb11
--- /dev/null
+++ b/voltha-adapter-openonu/Chart.yaml
@@ -0,0 +1,21 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+name: voltha-adapter-openonu
+description: A Helm chart for Voltha OpenONU Adapter
+icon: https://guide.opencord.org/logos/cord.svg
+
+version: 2.0.0
+appVersion: 2.0.0
diff --git a/voltha-adapter-openonu/templates/adapters-openolt.yaml b/voltha-adapter-openonu/templates/adapters-openolt.yaml
new file mode 100644
index 0000000..055e690
--- /dev/null
+++ b/voltha-adapter-openonu/templates/adapters-openolt.yaml
@@ -0,0 +1,43 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: adapter-open-onu
+  namespace: {{ .Release.Namespace }}
+spec:
+  replicas: {{ .Values.replicas.adapter_open_onu }}
+  selector:
+    matchLabels:
+      app: adapter-open-onu
+  template:
+    metadata:
+      labels:
+        app: adapter-open-onu
+      annotations:
+        cni: "calico"
+    spec:
+      containers:
+        - name: adapter-open-onu
+          image: {{ tpl .Values.images.adapter_open_onu.registry . }}{{ tpl .Values.images.adapter_open_onu.repository . }}:{{ tpl .Values.images.adapter_open_onu.tag . }}
+          imagePullPolicy: {{ tpl .Values.images.adapter_open_onu.pullPolicy . }}
+          args:
+            - "/voltha/adapters/brcm_openomci_onu/main.py"
+            - "--verbose"
+            - "--kafka_adapter={{ .Values.services.kafka.adapter.service }}:{{ .Values.services.kafka.adapter.port }}"
+            - "--kafka_cluster={{ .Values.services.kafka.cluster.service }}:{{ .Values.services.kafka.cluster.port }}"
+            - "--core_topic=rwcore"
+            - "--backend=etcd"
+            - "--etcd={{ .Values.services.etcd.service }}:{{ .Values.services.etcd.port }}"
diff --git a/voltha-adapter-openonu/values.yaml b/voltha-adapter-openonu/values.yaml
new file mode 100644
index 0000000..234f580
--- /dev/null
+++ b/voltha-adapter-openonu/values.yaml
@@ -0,0 +1,47 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+# Default overrides
+defaults:
+  image_registry:
+  image_tag:
+  image_org:
+  image_pullPolicy:
+
+# Define connectivity to required services
+services:
+  kafka:
+    adapter:
+      service: voltha-kafka.voltha.svc.cluster.local
+      port: 9092
+    cluster:
+      service: voltha-kafka.voltha.svc.cluster.local
+      port: 9092
+  
+  # Define connectivity to etcd
+  etcd:
+    service: voltha-etcd-cluster-client.voltha.svc.cluster.local
+    port: 2379
+
+# Define the recplica count for everything
+replicas:
+  adapter_open_onu: 1
+
+images:
+  adapter_open_onu:
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-openonu-adapter'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
diff --git a/voltha-adapter-simulated/Chart.yaml b/voltha-adapter-simulated/Chart.yaml
index 06213b7..52cf8cb 100644
--- a/voltha-adapter-simulated/Chart.yaml
+++ b/voltha-adapter-simulated/Chart.yaml
@@ -17,5 +17,5 @@
 description: A Helm chart for Voltha Simulated Adaptyer based on K8S resources in Voltha project
 icon: https://guide.opencord.org/logos/cord.svg
 
-version: 2.0.0
+version: 2.0.1
 appVersion: 2.0.0
diff --git a/voltha-adapter-simulated/templates/adapters-simulated.yaml b/voltha-adapter-simulated/templates/adapters-simulated.yaml
index 0721b88..66ebfaa 100644
--- a/voltha-adapter-simulated/templates/adapters-simulated.yaml
+++ b/voltha-adapter-simulated/templates/adapters-simulated.yaml
@@ -13,17 +13,6 @@
 # limitations under the License.
 
 ---
-apiVersion: v1
-kind: Service
-metadata:
-  name: adapter-simulated-olt
-  namespace: {{ .Release.Namespace }}
-spec:
-  clusterIP: None
-  selector:
-    app: adapter-simulated-olt
-
----
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -43,45 +32,19 @@
     spec:
       containers:
         - name: adapter-simulated-olt
-          image: {{ .Values.registry }}{{ .Values.images.adapter_simulated_olt.repository }}:{{ tpl .Values.images.adapter_simulated_olt.tag . }}
-          imagePullPolicy: {{ .Values.images.adapter_simulated_olt.pullPolicy }}
-          env:
-            - name: NAMESPACE
-              value: {{ quote .Release.Namespace }}
-            - name: ETCD_SERVICE
-              value: "{{ .Values.services.etcd.service }}"
-            - name: ETCD_SERVICE_PORT
-              value: "{{ .Values.services.etcd.port }}"
-            - name: ADAPTER_KAFKA_SERVICE
-              value: "{{ .Values.services.kafka.adapter.service }}"
-            - name: ADAPTER_KAFKA_SERVICE_PORT
-              value: "{{ .Values.services.kafka.adapter.port }}"
-            - name: CLUSTER_KAFKA_SERVICE
-              value: "{{ .Values.services.kafka.cluster.service }}"
-            - name: CLUSTER_KAFKA_SERVICE_PORT
-              value: "{{ .Values.services.kafka.cluster.port }}"
+          image: {{ tpl .Values.images.adapter_simulated_olt.registry . }}{{ tpl .Values.images.adapter_simulated_olt.repository . }}:{{ tpl .Values.images.adapter_simulated_olt.tag . }}
+          imagePullPolicy: {{ tpl .Values.images.adapter_simulated_olt.pullPolicy . }}
           args:
             - "/app/simulated_olt"
-            - "-kafka_adapter_host=$(ADAPTER_KAFKA_SERVICE)"
-            - "-kafka_adapter_port=$(ADAPTER_KAFKA_SERVICE_PORT)"
-            - "-kafka_cluster_host=$(CLUSTER_KAFKA_SERVICE)"
-            - "-kafka_cluster_port=$(CLUSTER_KAFKA_SERVICE_PORT)"
+            - "-kafka_adapter_host={{ .Values.services.kafka.adapter.service }}"
+            - "-kafka_adapter_port={{ .Values.services.kafka.adapter.port }}"
+            - "-kafka_cluster_host={{ .Values.services.kafka.cluster.service }}"
+            - "-kafka_cluster_port={{ .Values.services.kafka.cluster.port }}"
+            - "-kv_store_host={{ .Values.services.etcd.service }}"
+            - "-kv_store_port={{ .Values.services.etcd.port }}"
             - "-core_topic=rwcore"
             - "-simulator_topic=simulated_olt"
-            - "-kv_store_host=$(ETCD_SERVICE)"
-            - "-kv_store_port=$(ETCD_SERVICE_PORT)"
-            - "-onu_number=100"
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: adapter-simulated-onu
-  namespace: {{ .Release.Namespace }}
-spec:
-  clusterIP: None
-  selector:
-    app: adapter-simulated-onu
-
+            - "-onu_number=4"
 ---
 apiVersion: apps/v1
 kind: Deployment
@@ -102,30 +65,15 @@
     spec:
       containers:
         - name: adapter-simulated-onu
-          image: {{ .Values.registry }}{{ .Values.images.adapter_simulated_onu.repository }}:{{ tpl .Values.images.adapter_simulated_onu.tag . }}
-          imagePullPolicy: {{ .Values.images.adapter_simulated_onu.pullPolicy }}
-          env:
-            - name: NAMESPACE
-              value: {{ quote .Release.Namespace }}
-            - name: ETCD_SERVICE
-              value: "{{ .Values.services.etcd.service }}"
-            - name: ETCD_SERVICE_PORT
-              value: "{{ .Values.services.etcd.port }}"
-            - name: ADAPTER_KAFKA_SERVICE
-              value: "{{ .Values.services.kafka.adapter.service }}"
-            - name: ADAPTER_KAFKA_SERVICE_PORT
-              value: "{{ .Values.services.kafka.adapter.port }}"
-            - name: CLUSTER_KAFKA_SERVICE
-              value: "{{ .Values.services.kafka.cluster.service }}"
-            - name: CLUSTER_KAFKA_SERVICE_PORT
-              value: "{{ .Values.services.kafka.cluster.port }}"
+          image: {{ tpl .Values.images.adapter_simulated_onu.registry . }}{{ tpl .Values.images.adapter_simulated_onu.repository . }}:{{ tpl .Values.images.adapter_simulated_onu.tag . }}
+          imagePullPolicy: {{ tpl .Values.images.adapter_simulated_onu.pullPolicy . }}
           args:
             - "/app/simulated_onu"
-            - "-kafka_adapter_host=$(ADAPTER_KAFKA_SERVICE)"
-            - "-kafka_adapter_port=$(ADAPTER_KAFKA_SERVICE_PORT)"
-            - "-kafka_cluster_host=$(CLUSTER_KAFKA_SERVICE)"
-            - "-kafka_cluster_port=$(CLUSTER_KAFKA_SERVICE_PORT)"
+            - "-kafka_adapter_host={{ .Values.services.kafka.adapter.service }}"
+            - "-kafka_adapter_port={{ .Values.services.kafka.adapter.port }}"
+            - "-kafka_cluster_host={{ .Values.services.kafka.cluster.service }}"
+            - "-kafka_cluster_port={{ .Values.services.kafka.cluster.port }}"
+            - "-kv_store_host={{ .Values.services.etcd.service }}"
+            - "-kv_store_port={{ .Values.services.etcd.port }}"
             - "-core_topic=rwcore"
-            - "-kv_store_host=$(ETCD_SERVICE)"
-            - "-kv_store_port=$(ETCD_SERVICE_PORT)"
             - "-simulator_topic=simulated_onu"
diff --git a/voltha-adapter-simulated/templates/onu.yaml b/voltha-adapter-simulated/templates/onu.yaml
deleted file mode 100644
index e44466b..0000000
--- a/voltha-adapter-simulated/templates/onu.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright 2019-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: onu
-  labels:
-    name: onu
-spec:
-  ports:
-    - name: grpc
-      port: 50061
-      targetPort: 50061
-  selector:
-    app: onu
-
----
-apiVersion: apps/v1beta1
-kind: Deployment
-metadata:
-  name: onu
-spec:
-   replicas: {{ .Values.replicas.onu }}
-   template:
-     metadata:
-       labels:
-         app: onu
-       annotations:
-         cni: "calico,pon0"
-     spec:
-       containers:
-         - name: onu
-           image: {{ .Values.registry }}{{ .Values.images.ponsim.repository }}:{{ tpl .Values.images.ponsim.tag . }}
-           imagePullPolicy: {{ .Values.images.ponsim.pullPolicy }}
-           env:
-             - name: POD_IP
-               valueFrom:
-                 fieldRef:
-                   fieldPath: status.podIP
-             - name: NAMESPACE
-               value: {{ quote .Release.Namespace }}
-
-           args:
-             - "/app/ponsim"
-             - "-device_type"
-             - "ONU"
-             - "-parent_addr"
-             - "olt"
-             - "-grpc_port"
-             - "50061"
-             - "-internal_if"
-             - "eth0"
-             - "-external_if"
-             - "eth1"
-             - "-promiscuous"
-
-           ports:
-            - containerPort: 50061
-              name: grpc-port
diff --git a/voltha-adapter-simulated/values.yaml b/voltha-adapter-simulated/values.yaml
index 2dd877f..cc774c7 100644
--- a/voltha-adapter-simulated/values.yaml
+++ b/voltha-adapter-simulated/values.yaml
@@ -13,8 +13,12 @@
 # limitations under the License.
 
 ---
-# Globally define a registry
-registry: ''
+# Default overrides
+defaults:
+  image_registry:
+  image_tag:
+  image_org:
+  image_pullPolicy:
 
 # Define connectivity to required services
 services:
@@ -39,16 +43,13 @@
 
 images:
   adapter_simulated_olt:
-    repository: 'volthacore/voltha-adapter-simulated-olt'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-adapter-simulated-olt'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
 
   adapter_simulated_onu:
-    repository: 'volthacore/voltha-adapter-simulated-onu'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
-
-  ponsim:
-    repository: 'volthacore/voltha-ponsim'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-adapter-simulated-onu'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
diff --git a/voltha/Chart.yaml b/voltha/Chart.yaml
index aa52ca8..458881f 100644
--- a/voltha/Chart.yaml
+++ b/voltha/Chart.yaml
@@ -17,5 +17,5 @@
 description: A Helm chart for Voltha based on K8S resources in Voltha project
 icon: https://guide.opencord.org/logos/cord.svg
 
-version: 2.0.1
+version: 2.0.2
 appVersion: 2.0.0
diff --git a/voltha/templates/affinity-router.yaml b/voltha/templates/api-server.yaml
similarity index 80%
rename from voltha/templates/affinity-router.yaml
rename to voltha/templates/api-server.yaml
index ab8b4b2..490cb7e 100644
--- a/voltha/templates/affinity-router.yaml
+++ b/voltha/templates/api-server.yaml
@@ -45,8 +45,8 @@
       serviceAccountName: {{ .Values.serviceaccount }}
       containers:
       - name: arouter
-        image: {{ .Values.registry }}{{ .Values.images.afrouter.repository }}:{{ tpl .Values.images.afrouter.tag . }}
-        imagePullPolicy: {{ .Values.images.afrouter.pullPolicy }}
+        image: {{ tpl .Values.images.afrouter.registry . }}{{ tpl .Values.images.afrouter.repository . }}:{{ tpl .Values.images.afrouter.tag . }}
+        imagePullPolicy: {{ tpl .Values.images.afrouter.pullPolicy . }}
         volumeMounts:
         - name: config-volume
           mountPath: /app/config
@@ -61,8 +61,8 @@
         env:
         - name: POD_NAMESPACE
           value: {{ .Release.Namespace }}
-        image: {{ .Values.registry }}{{ .Values.images.afrouterd.repository }}:{{ tpl .Values.images.afrouterd.tag . }}
-        imagePullPolicy: {{ .Values.images.afrouterd.pullPolicy }}
+        image: {{ tpl .Values.images.afrouterd.registry . }}{{ tpl .Values.images.afrouterd.repository . }}:{{ tpl .Values.images.afrouterd.tag . }}
+        imagePullPolicy: {{ tpl .Values.images.afrouterd.pullPolicy . }}
         command: ["/app/arouterd"]
       restartPolicy: Always
       volumes:
diff --git a/voltha/templates/cli.yaml b/voltha/templates/cli.yaml
index 244c4ca..edb4eb0 100644
--- a/voltha/templates/cli.yaml
+++ b/voltha/templates/cli.yaml
@@ -48,8 +48,8 @@
       serviceAccountName: {{ .Values.serviceaccount }}
       containers:
         - name: vcli
-          image: {{ .Values.registry }}{{ .Values.images.cli.repository }}:{{ tpl .Values.images.cli.tag . }}
-          imagePullPolicy: {{ .Values.images.cli.pullPolicy }}
+          image: {{ tpl .Values.images.cli.registry . }}{{ tpl .Values.images.cli.repository . }}:{{ tpl .Values.images.cli.tag . }}
+          imagePullPolicy: {{ tpl .Values.images.cli.pullPolicy . }}
           env:
             - name: POD_IP
               valueFrom:
diff --git a/voltha/templates/ofagent.yaml b/voltha/templates/ofagent.yaml
index 2dd9e74..ab256b8 100644
--- a/voltha/templates/ofagent.yaml
+++ b/voltha/templates/ofagent.yaml
@@ -31,8 +31,8 @@
       serviceAccountName: {{ .Values.serviceaccount }}
       containers:
       - name: ofagent
-        image: {{ .Values.registry }}{{ .Values.images.ofagent.repository }}:{{ tpl .Values.images.ofagent.tag . }}
-        imagePullPolicy: {{ .Values.images.ofagent.pullPolicy }}
+        image: {{ tpl .Values.images.ofagent.registry . }}{{ tpl .Values.images.ofagent.repository . }}:{{ tpl .Values.images.ofagent.tag . }}
+        imagePullPolicy: {{ tpl .Values.images.ofagent.pullPolicy . }}
         env:
         - name: CONTROLLER_SERVICE
           value: "{{ .Values.services.controller.service }}:{{ .Values.services.controller.port }}"
diff --git a/voltha/templates/ro-core.yaml b/voltha/templates/ro-core.yaml
index 8225e00..7644c5a 100644
--- a/voltha/templates/ro-core.yaml
+++ b/voltha/templates/ro-core.yaml
@@ -45,8 +45,8 @@
       serviceAccountName: {{ .Values.serviceaccount }}
       containers:
         - name: voltha
-          image: {{ .Values.registry }}{{ .Values.images.ro_core.repository }}:{{ tpl .Values.images.ro_core.tag . }}
-          imagePullPolicy: {{ .Values.images.ro_core.pullPolicy }}
+          image: {{ tpl .Values.images.ro_core.registry . }}{{ tpl .Values.images.ro_core.repository . }}:{{ tpl .Values.images.ro_core.tag . }}
+          imagePullPolicy: {{ tpl .Values.images.ro_core.pullPolicy . }}
           env:
             - name: NAMESPACE
               value: {{ quote .Release.Namespace }}
@@ -54,15 +54,11 @@
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-            - name: ETCD_SERVICE
-              value: {{ quote .Values.services.etcd.service }}
-            - name: ETCD_SERVICE_PORT
-              value: {{ quote .Values.services.etcd.port }}
           args:
             - "/app/ro_core"
             - "-kv_store_type=etcd"
-            - "-kv_store_host=$(ETCD_SERVICE)"
-            - "-kv_store_port=$(ETCD_SERVICE_PORT)"
+            - "-kv_store_host={{ .Values.services.etcd.service }}"
+            - "-kv_store_port={{ .Values.services.etcd.port }}"
             - "-grpc_host=$(POD_IP)"
             - "-grpc_port=50057"
             - "-banner=true"
diff --git a/voltha/templates/rw-core.yaml b/voltha/templates/rw-core.yaml
index 5be011d..7945d57 100644
--- a/voltha/templates/rw-core.yaml
+++ b/voltha/templates/rw-core.yaml
@@ -15,6 +15,12 @@
 {{- $root := . -}}
 {{- $count := mul .Values.replicas.rw_core 2 | int }}
 {{- $tag := tpl .Values.images.rw_core.tag . }}
+{{- $repository := tpl .Values.images.rw_core.repository . }}
+{{- $registry := tpl .Values.images.rw_core.registry . }}
+{{- $pullpolicy := tpl .Values.images.rw_core.pullPolicy . }}
+{{- $core_timeout := tpl $root.Values.rw_core.core_timeout . }}
+{{- $long_request_timeout := tpl $root.Values.rw_core.timeout_long_request . }}
+{{- $request_timeout := tpl $root.Values.rw_core.timeout_request . }}
 {{- range $i, $e := until $count }}
 {{- $core_idx := add $i 1 }}
 {{- $affinity_group := add1 (mod $i 2) }}
@@ -60,8 +66,8 @@
       serviceAccountName: {{ $root.Values.serviceaccount }}
       containers:
         - name: voltha
-          image: {{ $root.Values.registry }}{{ $root.Values.images.rw_core.repository }}:{{ $tag }}
-          imagePullPolicy: {{ $root.Values.images.rw_core.pullPolicy }}
+          image: {{ $registry }}{{ $repository }}:{{ $tag }}
+          imagePullPolicy: {{ $pullpolicy }}
           env:
             - name: NAMESPACE
               value: {{ quote $root.Release.Namespace }}
@@ -69,36 +75,25 @@
               valueFrom:
                 fieldRef:
                   fieldPath: status.podIP
-            - name: ETCD_SERVICE
-              value: {{ quote $root.Values.services.etcd.service }}
-            - name: ETCD_SERVICE_PORT
-              value: {{ quote $root.Values.services.etcd.port }}
-            - name: ADAPTER_KAFKA_SERVICE
-              value: {{ quote $root.Values.services.kafka.adapter.service }}
-            - name: ADAPTER_KAFKA_SERVICE_PORT
-              value: {{ quote $root.Values.services.kafka.adapter.port }}
-            - name: CLUSTER_KAFKA_SERVICE
-              value: {{ quote $root.Values.services.kafka.cluster.service }}
-            - name: CLUSTER_KAFKA_SERVICE_PORT
-              value: {{ quote $root.Values.services.kafka.cluster.port }}
           args:
             - "/app/rw_core"
             - "-kv_store_type=etcd"
-            - "-kv_store_host=$(ETCD_SERVICE)"
-            - "-kv_store_port=$(ETCD_SERVICE_PORT)"
+            - "-kv_store_host={{ $root.Values.services.etcd.service }}"
+            - "-kv_store_port={{ $root.Values.services.etcd.port }}"
             - "-grpc_host=$(POD_IP)"
             - "-grpc_port=50057"
             - "-banner=true"
-            - "-kafka_adapter_host=$(ADAPTER_KAFKA_SERVICE)"
-            - "-kafka_adapter_port=$(ADAPTER_KAFKA_SERVICE_PORT)"
-            - "-kafka_cluster_host=$(CLUSTER_KAFKA_SERVICE)"
-            - "-kafka_cluster_port=$(CLUSTER_KAFKA_SERVICE_PORT)"
+            - "-kafka_adapter_host={{ $root.Values.services.kafka.adapter.service }}"
+            - "-kafka_adapter_port={{ $root.Values.services.kafka.adapter.port }}"
+            - "-kafka_cluster_host={{ $root.Values.services.kafka.cluster.port }}"
+            - "-kafka_cluster_port={{ $root.Values.services.kafka.cluster.port }}"
             - "-rw_core_topic=rwcore"
             - "-kv_store_data_prefix=service/voltha"
             - "-in_competing_mode=true"
-            - "-timeout_long_request=8000"
-            - "-timeout_request=6000"
-            - "-log_level=4"
+            - "-core_timeout={{ $core_timeout }}"
+            - "-timeout_long_request={{ $long_request_timeout }}"
+            - "-timeout_request={{ $request_timeout }}"
+            - "-log_level=2"
           ports:
             - containerPort: 50057
               name: grpc-port
diff --git a/voltha/values.yaml b/voltha/values.yaml
index 27da6d9..7221470 100644
--- a/voltha/values.yaml
+++ b/voltha/values.yaml
@@ -13,11 +13,19 @@
 # limitations under the License.
 
 ---
-registry: ''
 serviceaccount: voltha-serviceaccount
 private_etcd_cluster: true
 private_kafka_cluster: true
 
+# Default overrides
+defaults:
+  image_registry:
+  image_tag:
+  image_org:
+  image_pullPolicy:
+  rw_core:
+    timeout:
+
 # Configure the Kafka sub-chart (if it is used)
 kafka:
   configurationOverrides:
@@ -65,35 +73,47 @@
   afrouter: 1
   afrouterd: 1
 
+rw_core:
+  core_timeout: '{{ .Values.defaults.rw_core.timeout | default "8000" }}'
+  timeout_long_request: '{{ .Values.defaults.rw_core.timeout | default "8000" }}'
+  timeout_request: '{{ .Values.defaults.rw_core.timeout | default "8000" }}'
+
+
 # Define Docker images to be used
 images:
   cli:
-    repository: 'volthacore/voltha-cli'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-cli'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
 
   ofagent:
-    repository: 'volthacore/voltha-ofagent'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-ofagent'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
 
   ro_core:
-    repository: 'volthacore/voltha-ro-core'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-ro-core'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
 
   rw_core:
-    repository: 'volthacore/voltha-rw-core'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-rw-core'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
 
   afrouter:
-    repository: 'volthacore/voltha-afrouter'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-afrouter'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
 
   afrouterd:
-    repository: 'volthacore/voltha-afrouterd'
-    tag: '{{ .Chart.AppVersion }}'
-    pullPolicy: 'Always'
+    registry: '{{ .Values.defaults.image_registry | default "" }}'
+    repository: '{{ .Values.defaults.image_org | default "voltha/" }}voltha-afrouterd'
+    tag: '{{ .Values.defaults.image_tag | default .Chart.AppVersion }}'
+    pullPolicy: '{{ .Values.defaults.image_pullPolicy | default "Always" }}'
     restartPolicy: 'Always'