Voltha stacks on same node

Change-Id: Ide97ca9ed76c206e51d424dcb427854e119efa24
diff --git a/voltha-adapter-openolt/Chart.yaml b/voltha-adapter-openolt/Chart.yaml
index ab05d1d..4f02794 100644
--- a/voltha-adapter-openolt/Chart.yaml
+++ b/voltha-adapter-openolt/Chart.yaml
@@ -14,7 +14,7 @@
 ---
 apiVersion: "v1"
 name: "voltha-adapter-openolt"
-version: "2.10.1"
+version: "2.10.3"
 description: "A Helm chart for Voltha OpenOLT Adapter"
 keywords:
   - "onf"
diff --git a/voltha-adapter-openolt/templates/openolt-deploy.yaml b/voltha-adapter-openolt/templates/openolt-deploy.yaml
index 623c280..3eb979f 100644
--- a/voltha-adapter-openolt/templates/openolt-deploy.yaml
+++ b/voltha-adapter-openolt/templates/openolt-deploy.yaml
@@ -66,8 +66,8 @@
         runAsGroup: {{ .Values.securityContext.runAsGroup }}
         fsGroup: {{ .Values.securityContext.fsGroup }}
       {{- end }}
-      {{- if .Values.nodeAffinityConfig.enabled }}
       affinity:
+        {{- if .Values.nodeAffinityConfig.enabled }}
         nodeAffinity:
           requiredDuringSchedulingIgnoredDuringExecution:
             nodeSelectorTerms:
@@ -76,7 +76,33 @@
                 operator: In
                 values:
                 - "{{ .Values.nodeAffinityConfig.node_label_value }}"
-      {{- end }}
+        {{- end }}
+        podAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+            {{- if .Values.scheduleRules.preferStackPodsOnSameNode }}
+            - podAffinityTerm:
+                topologyKey: kubernetes.io/hostname
+                labelSelector:
+                  matchExpressions:
+                    - key: app.kubernetes.io/stack
+                      operator: In
+                      values:
+                        - {{ .Values.global.stack_name }}
+              weight: 100
+            {{- end }}
+        podAntiAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+            {{- if .Values.scheduleRules.preferStacksOnDifferentNodes }}
+            - podAffinityTerm:
+                topologyKey: kubernetes.io/hostname
+                labelSelector:
+                  matchExpressions:
+                    - key: app.kubernetes.io/name
+                      operator: In
+                      values:
+                        - adapter-open-olt
+              weight: 100
+            {{- end }}
       containers:
         - name: adapter-open-olt
           image: '{{ tpl .Values.images.adapter_open_olt.registry . }}{{ tpl .Values.images.adapter_open_olt.repository . }}:{{ tpl ( tpl .Values.images.adapter_open_olt.tag . ) . }}'
diff --git a/voltha-adapter-openolt/values.yaml b/voltha-adapter-openolt/values.yaml
index 431bbfd..b5224b5 100644
--- a/voltha-adapter-openolt/values.yaml
+++ b/voltha-adapter-openolt/values.yaml
@@ -106,3 +106,8 @@
   limits:
     cpu: ~
     memory: ~
+
+# Define scheduling rules for stack pods
+scheduleRules:
+  preferStackPodsOnSameNode: false
+  preferStacksOnDifferentNodes: false