From 4d066332a7f24d39b35a9dcff1fd801d5bc38a3e Mon Sep 17 00:00:00 2001
From: Pete Birley <pete@port.direct>
Date: Thu, 13 Jul 2017 22:44:26 -0500
Subject: [PATCH] Values: Move replicas to pod key

This PS move s the replicas key to be under the pod key in the values.
It brings further consolation of related configuration params to be
nested under common keys across all charts.

Change-Id: I420b06debd0a62ba5d83497be43ff6c49c49d339
---
 barbican/templates/deployment-api.yaml           |  2 +-
 barbican/values.yaml                             | 16 ++++++++--------
 cinder/templates/deployment-api.yaml             |  2 +-
 cinder/templates/deployment-backup.yaml          |  2 +-
 cinder/templates/deployment-scheduler.yaml       |  2 +-
 cinder/templates/deployment-volume.yaml          |  2 +-
 cinder/values.yaml                               | 11 +++++------
 doc/source/install/multinode.rst                 | 16 +++++++++++-----
 etcd/templates/deployment.yaml                   |  2 +-
 etcd/values.yaml                                 |  5 ++---
 glance/templates/deployment-api.yaml             |  2 +-
 glance/templates/deployment-registry.yaml        |  2 +-
 glance/values.yaml                               |  7 +++----
 heat/templates/deployment-api.yaml               |  2 +-
 heat/templates/deployment-cfn.yaml               |  2 +-
 heat/templates/deployment-cloudwatch.yaml        |  2 +-
 heat/templates/statefulset-engine.yaml           |  2 +-
 heat/values.yaml                                 | 12 +++++-------
 horizon/templates/deployment.yaml                |  2 +-
 horizon/values.yaml                              |  4 +++-
 ingress/templates/deployment-error.yaml          |  2 +-
 ingress/templates/deployment-ingress.yaml        |  1 +
 ingress/values.yaml                              |  7 +++----
 keystone/templates/deployment-api.yaml           |  2 +-
 keystone/values.yaml                             |  5 ++---
 magnum/templates/deployment-api.yaml             |  2 +-
 magnum/templates/statefulset-conductor.yaml      |  2 +-
 magnum/values.yaml                               |  7 +++----
 mariadb/templates/statefulset.yaml               |  2 +-
 mariadb/values.yaml                              |  6 +++---
 memcached/templates/deployment.yaml              |  4 ++--
 memcached/values.yaml                            |  6 +++---
 mistral/templates/deployment-api.yaml            |  2 +-
 mistral/templates/deployment-executor.yaml       |  2 +-
 mistral/templates/statefulset-engine.yaml        |  2 +-
 mistral/templates/statefulset-event-engine.yaml  |  2 +-
 mistral/values.yaml                              | 11 +++++------
 neutron/templates/deployment-server.yaml         |  2 +-
 neutron/values.yaml                              |  8 ++------
 nova/templates/deployment-api-metadata.yaml      |  2 +-
 nova/templates/deployment-api-osapi.yaml         |  2 +-
 nova/templates/deployment-conductor.yaml         |  2 +-
 nova/templates/deployment-consoleauth.yaml       |  2 +-
 nova/templates/deployment-novncproxy.yaml        |  2 +-
 nova/templates/deployment-scheduler.yaml         |  2 +-
 nova/values.yaml                                 | 15 +++++++--------
 .../templates/bin/_rabbitmq-readiness.sh.tpl     |  2 +-
 rabbitmq/templates/deployment.yaml               | 15 ++-------------
 rabbitmq/values.yaml                             |  8 +++-----
 senlin/templates/deployment-api.yaml             |  2 +-
 senlin/templates/statefulset-engine.yaml         |  2 +-
 senlin/values.yaml                               |  7 +++----
 52 files changed, 108 insertions(+), 127 deletions(-)

diff --git a/barbican/templates/deployment-api.yaml b/barbican/templates/deployment-api.yaml
index 4656dcaf4e..ef3ee7ce31 100644
--- a/barbican/templates/deployment-api.yaml
+++ b/barbican/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: barbican-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/barbican/values.yaml b/barbican/values.yaml
index 289a39b6b9..47b98d0b63 100644
--- a/barbican/values.yaml
+++ b/barbican/values.yaml
@@ -9,8 +9,6 @@
 # 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.
-replicas:
-  api: 1
 
 labels:
   node_selector_key: openstack-control-plane
@@ -28,6 +26,8 @@ images:
   pull_policy: "IfNotPresent"
 
 pod:
+  replicas:
+    api: 1
   lifecycle:
     upgrades:
       deployments:
@@ -42,12 +42,12 @@ pod:
   resources:
     enabled: false
     api:
-    requests:
-      memory: "128Mi"
-      cpu: "100m"
-    limits:
-      memory: "1024Mi"
-      cpu: "2000m"
+      requests:
+        memory: "128Mi"
+        cpu: "100m"
+      limits:
+        memory: "1024Mi"
+        cpu: "2000m"
     jobs:
       bootstrap:
         requests:
diff --git a/cinder/templates/deployment-api.yaml b/cinder/templates/deployment-api.yaml
index 7e950d9bb2..3591b2ef40 100644
--- a/cinder/templates/deployment-api.yaml
+++ b/cinder/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: cinder-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/cinder/templates/deployment-backup.yaml b/cinder/templates/deployment-backup.yaml
index 147a4ed99e..569e04af9a 100644
--- a/cinder/templates/deployment-backup.yaml
+++ b/cinder/templates/deployment-backup.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: cinder-backup
 spec:
-  replicas: {{ .Values.replicas.backup }}
+  replicas: {{ .Values.pod.replicas.backup }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/cinder/templates/deployment-scheduler.yaml b/cinder/templates/deployment-scheduler.yaml
index 0172e81187..93a57df0ac 100644
--- a/cinder/templates/deployment-scheduler.yaml
+++ b/cinder/templates/deployment-scheduler.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: cinder-scheduler
 spec:
-  replicas: {{ .Values.replicas.scheduler }}
+  replicas: {{ .Values.pod.replicas.scheduler }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/cinder/templates/deployment-volume.yaml b/cinder/templates/deployment-volume.yaml
index 2c7ff1b407..b85bbbc370 100644
--- a/cinder/templates/deployment-volume.yaml
+++ b/cinder/templates/deployment-volume.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: cinder-volume
 spec:
-  replicas: {{ .Values.replicas.volume }}
+  replicas: {{ .Values.pod.replicas.volume }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/cinder/values.yaml b/cinder/values.yaml
index feeadc67cc..52e57fa765 100644
--- a/cinder/values.yaml
+++ b/cinder/values.yaml
@@ -17,12 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  api: 1
-  volume: 1
-  scheduler: 1
-  backup: 1
-
 storage: ceph
 
 labels:
@@ -45,6 +39,11 @@ images:
   pull_policy: "IfNotPresent"
 
 pod:
+  replicas:
+    api: 1
+    volume: 1
+    scheduler: 1
+    backup: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/doc/source/install/multinode.rst b/doc/source/install/multinode.rst
index 92f307d8dc..a31c5da82d 100644
--- a/doc/source/install/multinode.rst
+++ b/doc/source/install/multinode.rst
@@ -407,7 +407,7 @@ Now you can easily install the other services simply by going in order:
 ::
 
     helm install --namespace=openstack --name=keystone local/keystone \
-      --set replicas=2
+      --set pod.replicas.api=2
 
 **Install Horizon:**
 
@@ -421,7 +421,8 @@ Now you can easily install the other services simply by going in order:
 ::
 
     helm install --namespace=openstack --name=glance local/glance \
-      --set replicas.api=2,replicas.registry=2
+      --set pod.replicas.api=2 \
+      --set pod.replicas.registry=2
 
 **Install Heat:**
 
@@ -434,21 +435,26 @@ Now you can easily install the other services simply by going in order:
 ::
 
     helm install --namespace=openstack --name=neutron local/neutron \
-      --set replicas.server=2
+      --set pod.replicas.server=2
 
 **Install Nova:**
 
 ::
 
     helm install --namespace=openstack --name=nova local/nova \
-      --set control_replicas=2
+      --set pod.replicas.api_metadata=2 \
+      --set pod.replicas.osapi=2 \
+      --set pod.replicas.conductor=2 \
+      --set pod.replicas.consoleauth=2 \
+      --set pod.replicas.scheduler=2 \
+      --set pod.replicas.novncproxy=2
 
 **Install Cinder:**
 
 ::
 
     helm install --namespace=openstack --name=cinder local/cinder \
-      --set replicas.api=2
+      --set pod.replicas.api=2
 
 Final Checks
 ------------
diff --git a/etcd/templates/deployment.yaml b/etcd/templates/deployment.yaml
index 22c3d77def..f789a4c05f 100644
--- a/etcd/templates/deployment.yaml
+++ b/etcd/templates/deployment.yaml
@@ -19,7 +19,7 @@ kind: Deployment
 metadata:
   name: etcd
 spec:
-  replicas: {{ .Values.replicas.etcd }}
+  replicas: {{ .Values.pod.replicas.etcd }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/etcd/values.yaml b/etcd/values.yaml
index 001e5938d2..ef569188db 100644
--- a/etcd/values.yaml
+++ b/etcd/values.yaml
@@ -30,6 +30,8 @@ network:
   port: 2379
 
 pod:
+  replicas:
+    etcd: 1
   lifecycle:
     upgrades:
       deployments:
@@ -38,6 +40,3 @@ pod:
         rolling_update:
           max_surge: 3
           max_unavailable: 1
-
-replicas:
-  etcd: 1
diff --git a/glance/templates/deployment-api.yaml b/glance/templates/deployment-api.yaml
index 1041102bb2..5efd54243f 100644
--- a/glance/templates/deployment-api.yaml
+++ b/glance/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: glance-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/glance/templates/deployment-registry.yaml b/glance/templates/deployment-registry.yaml
index 334a8c47a7..3f73f8dffd 100644
--- a/glance/templates/deployment-registry.yaml
+++ b/glance/templates/deployment-registry.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: glance-registry
 spec:
-  replicas: {{ .Values.replicas.registry }}
+  replicas: {{ .Values.pod.replicas.registry }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/glance/values.yaml b/glance/values.yaml
index 8f5e74b989..c039a7048e 100644
--- a/glance/values.yaml
+++ b/glance/values.yaml
@@ -17,10 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  api: 1
-  registry: 1
-
 # ceph or pvc
 storage: ceph
 
@@ -320,6 +316,9 @@ mounts:
     glance_tests:
 
 pod:
+  replicas:
+    api: 1
+    registry: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/heat/templates/deployment-api.yaml b/heat/templates/deployment-api.yaml
index 97e1c86609..5a4f9acfc8 100644
--- a/heat/templates/deployment-api.yaml
+++ b/heat/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: heat-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/heat/templates/deployment-cfn.yaml b/heat/templates/deployment-cfn.yaml
index acd2f93f32..19f1171ed9 100644
--- a/heat/templates/deployment-cfn.yaml
+++ b/heat/templates/deployment-cfn.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: heat-cfn
 spec:
-  replicas: {{ .Values.replicas.cfn }}
+  replicas: {{ .Values.pod.replicas.cfn }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/heat/templates/deployment-cloudwatch.yaml b/heat/templates/deployment-cloudwatch.yaml
index 8975ba916e..80beaab80d 100644
--- a/heat/templates/deployment-cloudwatch.yaml
+++ b/heat/templates/deployment-cloudwatch.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: heat-cloudwatch
 spec:
-  replicas: {{ .Values.replicas.cloudwatch }}
+  replicas: {{ .Values.pod.replicas.cloudwatch }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/heat/templates/statefulset-engine.yaml b/heat/templates/statefulset-engine.yaml
index 7b6e22c255..61078f3804 100644
--- a/heat/templates/statefulset-engine.yaml
+++ b/heat/templates/statefulset-engine.yaml
@@ -23,7 +23,7 @@ metadata:
   name: heat-engine
 spec:
   serviceName: heat-engine
-  replicas: {{ .Values.replicas.engine }}
+  replicas: {{ .Values.pod.replicas.engine }}
   template:
     metadata:
       labels:
diff --git a/heat/values.yaml b/heat/values.yaml
index f10fc1c668..7b7edc6fb3 100644
--- a/heat/values.yaml
+++ b/heat/values.yaml
@@ -17,13 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-
-replicas:
-  api: 1
-  cfn: 1
-  cloudwatch: 1
-  engine: 1
-
 labels:
   node_selector_key: openstack-control-plane
   node_selector_value: enabled
@@ -332,6 +325,11 @@ endpoints:
         default: 5672
 
 pod:
+  replicas:
+    api: 1
+    cfn: 1
+    cloudwatch: 1
+    engine: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/horizon/templates/deployment.yaml b/horizon/templates/deployment.yaml
index 66f550e70e..de2d9f1d73 100644
--- a/horizon/templates/deployment.yaml
+++ b/horizon/templates/deployment.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: horizon
 spec:
-  replicas: {{ .Values.replicas }}
+  replicas: {{ .Values.pod.replicas.server }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/horizon/values.yaml b/horizon/values.yaml
index 2ec4b7619d..2cbc3be136 100644
--- a/horizon/values.yaml
+++ b/horizon/values.yaml
@@ -17,7 +17,7 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas: 1
+
 
 images:
   db_init: docker.io/kolla/ubuntu-source-horizon:4.0.0
@@ -62,6 +62,8 @@ dependencies:
       endpoint: internal
 
 pod:
+  replicas:
+    server: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/ingress/templates/deployment-error.yaml b/ingress/templates/deployment-error.yaml
index ca16c2866b..4c0a2e1c15 100644
--- a/ingress/templates/deployment-error.yaml
+++ b/ingress/templates/deployment-error.yaml
@@ -19,7 +19,7 @@ kind: Deployment
 metadata:
   name: ingress-error-pages
 spec:
-  replicas: {{ .Values.replicas.error_page }}
+  replicas: {{ .Values.pod.replicas.error_page }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/ingress/templates/deployment-ingress.yaml b/ingress/templates/deployment-ingress.yaml
index 3567d4b233..7f101a0035 100644
--- a/ingress/templates/deployment-ingress.yaml
+++ b/ingress/templates/deployment-ingress.yaml
@@ -20,6 +20,7 @@ metadata:
   name: ingress-api
 spec:
 {{- if eq .Values.deployment_type "Deployment" }}
+  replicas: {{ .Values.pod.replicas.ingress }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
 {{- end }}
   template:
diff --git a/ingress/values.yaml b/ingress/values.yaml
index 724038a3e4..a54af99220 100644
--- a/ingress/values.yaml
+++ b/ingress/values.yaml
@@ -17,10 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  ingress: 1
-  error_page: 1
-
 images:
   entrypoint: docker.io/kolla/ubuntu-source-kubernetes-entrypoint:4.0.0
   # https://github.com/kubernetes/ingress/blob/master/controllers/nginx/Changelog.md
@@ -29,6 +25,9 @@ images:
   pull_policy: "IfNotPresent"
 
 pod:
+  replicas:
+    ingress: 1
+    error_page: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/keystone/templates/deployment-api.yaml b/keystone/templates/deployment-api.yaml
index 574364bf10..a8e14b8a6d 100644
--- a/keystone/templates/deployment-api.yaml
+++ b/keystone/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: keystone-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/keystone/values.yaml b/keystone/values.yaml
index e8dd6801bf..f528112cde 100644
--- a/keystone/values.yaml
+++ b/keystone/values.yaml
@@ -17,9 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  api: 1
-
 labels:
   node_selector_key: openstack-control-plane
   node_selector_value: enabled
@@ -86,6 +83,8 @@ dependencies:
       endpoint: internal
 
 pod:
+  replicas:
+    api: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/magnum/templates/deployment-api.yaml b/magnum/templates/deployment-api.yaml
index c4bee66aec..390933821c 100644
--- a/magnum/templates/deployment-api.yaml
+++ b/magnum/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: magnum-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/magnum/templates/statefulset-conductor.yaml b/magnum/templates/statefulset-conductor.yaml
index a563015e0f..4cbcadf588 100644
--- a/magnum/templates/statefulset-conductor.yaml
+++ b/magnum/templates/statefulset-conductor.yaml
@@ -23,7 +23,7 @@ metadata:
   name: magnum-conductor
 spec:
   serviceName: magnum-conductor
-  replicas: {{ .Values.replicas.conductor }}
+  replicas: {{ .Values.pod.replicas.conductor }}
   template:
     metadata:
       labels:
diff --git a/magnum/values.yaml b/magnum/values.yaml
index 54d283732e..c743c4777b 100644
--- a/magnum/values.yaml
+++ b/magnum/values.yaml
@@ -17,10 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  api: 1
-  conductor: 1
-
 labels:
   node_selector_key: openstack-control-plane
   node_selector_value: enabled
@@ -210,6 +206,9 @@ endpoints:
         default: 5672
 
 pod:
+  replicas:
+    api: 1
+    conductor: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/mariadb/templates/statefulset.yaml b/mariadb/templates/statefulset.yaml
index 045e46ad63..9d628d154b 100644
--- a/mariadb/templates/statefulset.yaml
+++ b/mariadb/templates/statefulset.yaml
@@ -20,7 +20,7 @@ metadata:
   name: mariadb
 spec:
   serviceName: "{{ tuple "oslo_db" "internal" . | include "helm-toolkit.endpoints.hostname_short_endpoint_lookup" }}-discovery"
-  replicas: {{ .Values.replicas }}
+  replicas: {{ .Values.pod.replicas.server }}
   template:
     metadata:
       labels:
diff --git a/mariadb/values.yaml b/mariadb/values.yaml
index e9c701831a..ef821ae035 100644
--- a/mariadb/values.yaml
+++ b/mariadb/values.yaml
@@ -12,18 +12,18 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-replicas: 3
-
 force_bootstrap: false
 
 pod:
+  replicas:
+    server: 3
   lifecycle:
     disruption_budget:
       mariadb:
         min_available: 0
   resources:
     enabled: false
-    api:
+    server:
       limits:
         memory: "128Mi"
         cpu: "500m"
diff --git a/memcached/templates/deployment.yaml b/memcached/templates/deployment.yaml
index 3d740dee30..d47b46cf2c 100644
--- a/memcached/templates/deployment.yaml
+++ b/memcached/templates/deployment.yaml
@@ -19,7 +19,7 @@ kind: Deployment
 metadata:
   name: memcached
 spec:
-  replicas: {{ .Values.pod.resources.memcached.replicas }}
+  replicas: {{ .Values.pod.replicas.server }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
@@ -34,7 +34,7 @@ spec:
         - name: memcached
           image: {{ .Values.images.memcached }}
           imagePullPolicy: {{ .Values.images.pull_policy }}
-{{ tuple $envAll $envAll.Values.pod.resources.api | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
+{{ tuple $envAll $envAll.Values.pod.resources.server | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
           command: ["sh", "-xec"]
           args:
             - |
diff --git a/memcached/values.yaml b/memcached/values.yaml
index 8f42d5c87b..d87c1ffca2 100644
--- a/memcached/values.yaml
+++ b/memcached/values.yaml
@@ -22,6 +22,8 @@ images:
   pull_policy: "IfNotPresent"
 
 pod:
+  replicas:
+    server: 1
   lifecycle:
     upgrades:
       deployments:
@@ -32,9 +34,7 @@ pod:
           max_surge: 3
   resources:
     enabled: false
-    memcached:
-      replicas: 1
-    api:
+    server:
       limits:
         memory: "128Mi"
         cpu: "500m"
diff --git a/mistral/templates/deployment-api.yaml b/mistral/templates/deployment-api.yaml
index aa1953eda0..2f6e60115a 100644
--- a/mistral/templates/deployment-api.yaml
+++ b/mistral/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: mistral-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/mistral/templates/deployment-executor.yaml b/mistral/templates/deployment-executor.yaml
index 45d5a10f0e..e3f8692725 100644
--- a/mistral/templates/deployment-executor.yaml
+++ b/mistral/templates/deployment-executor.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: mistral-executor
 spec:
-  replicas: {{ .Values.replicas.executor }}
+  replicas: {{ .Values.pod.replicas.executor }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/mistral/templates/statefulset-engine.yaml b/mistral/templates/statefulset-engine.yaml
index 6888c1a31e..4973f7cdc9 100644
--- a/mistral/templates/statefulset-engine.yaml
+++ b/mistral/templates/statefulset-engine.yaml
@@ -23,7 +23,7 @@ metadata:
   name: mistral-engine
 spec:
   serviceName: mistral-engine
-  replicas: {{ .Values.replicas.engine }}
+  replicas: {{ .Values.pod.replicas.engine }}
   template:
     metadata:
       labels:
diff --git a/mistral/templates/statefulset-event-engine.yaml b/mistral/templates/statefulset-event-engine.yaml
index e8f22cc7c7..cba8ce028a 100644
--- a/mistral/templates/statefulset-event-engine.yaml
+++ b/mistral/templates/statefulset-event-engine.yaml
@@ -23,7 +23,7 @@ metadata:
   name: mistral-event-engine
 spec:
   serviceName: mistral-event-engine
-  replicas: {{ .Values.replicas.event_engine }}
+  replicas: {{ .Values.pod.replicas.event_engine }}
   template:
     metadata:
       labels:
diff --git a/mistral/values.yaml b/mistral/values.yaml
index 0f67eac138..349cfb32e6 100644
--- a/mistral/values.yaml
+++ b/mistral/values.yaml
@@ -17,12 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  api: 1
-  engine: 1
-  event_engine: 1
-  executor: 1
-
 labels:
   node_selector_key: openstack-control-plane
   node_selector_value: enabled
@@ -260,6 +254,11 @@ conf:
           auth_version: v3
 
 pod:
+  replicas:
+    api: 1
+    engine: 1
+    event_engine: 1
+    executor: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/neutron/templates/deployment-server.yaml b/neutron/templates/deployment-server.yaml
index 3c45042e14..fa9574f60c 100644
--- a/neutron/templates/deployment-server.yaml
+++ b/neutron/templates/deployment-server.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: neutron-server
 spec:
-  replicas: {{ .Values.replicas.server }}
+  replicas: {{ .Values.pod.replicas.server }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/neutron/values.yaml b/neutron/values.yaml
index 6a3de5c55f..8bb1cdf719 100644
--- a/neutron/values.yaml
+++ b/neutron/values.yaml
@@ -17,9 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  server: 1
-
 images:
   bootstrap: docker.io/kolla/ubuntu-source-neutron-server:3.0.3
   test: docker.io/kolla/ubuntu-binary-rally:4.0.0
@@ -93,9 +90,6 @@ network:
   metadata:
     port: 8775
 
-metadata:
-  workers: 4
-
 bootstrap:
   enabled: false
   script: |
@@ -190,6 +184,8 @@ dependencies:
       endpoint: internal
 
 pod:
+  replicas:
+    server: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/nova/templates/deployment-api-metadata.yaml b/nova/templates/deployment-api-metadata.yaml
index 315a947d27..b6ca80da9a 100644
--- a/nova/templates/deployment-api-metadata.yaml
+++ b/nova/templates/deployment-api-metadata.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: nova-api-metadata
 spec:
-  replicas: {{ .Values.replicas.api_metadata }}
+  replicas: {{ .Values.pod.replicas.api_metadata }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/nova/templates/deployment-api-osapi.yaml b/nova/templates/deployment-api-osapi.yaml
index e1bb31e737..a01e975f72 100644
--- a/nova/templates/deployment-api-osapi.yaml
+++ b/nova/templates/deployment-api-osapi.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: nova-api-osapi
 spec:
-  replicas: {{ .Values.replicas.osapi }}
+  replicas: {{ .Values.pod.replicas.osapi }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/nova/templates/deployment-conductor.yaml b/nova/templates/deployment-conductor.yaml
index c750af73cb..bba540f015 100644
--- a/nova/templates/deployment-conductor.yaml
+++ b/nova/templates/deployment-conductor.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: nova-conductor
 spec:
-  replicas: {{ .Values.replicas.conductor }}
+  replicas: {{ .Values.pod.replicas.conductor }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/nova/templates/deployment-consoleauth.yaml b/nova/templates/deployment-consoleauth.yaml
index 1572785d23..739fd3b460 100644
--- a/nova/templates/deployment-consoleauth.yaml
+++ b/nova/templates/deployment-consoleauth.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: nova-consoleauth
 spec:
-  replicas: {{ .Values.replicas.consoleauth }}
+  replicas: {{ .Values.pod.replicas.consoleauth }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/nova/templates/deployment-novncproxy.yaml b/nova/templates/deployment-novncproxy.yaml
index f159cd42a4..ab32163c83 100644
--- a/nova/templates/deployment-novncproxy.yaml
+++ b/nova/templates/deployment-novncproxy.yaml
@@ -23,7 +23,7 @@ kind: Deployment
 metadata:
   name: nova-novncproxy
 spec:
-  replicas: {{ .Values.replicas.novncproxy }}
+  replicas: {{ .Values.pod.replicas.novncproxy }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/nova/templates/deployment-scheduler.yaml b/nova/templates/deployment-scheduler.yaml
index bdba7137f3..8fe8a4b097 100644
--- a/nova/templates/deployment-scheduler.yaml
+++ b/nova/templates/deployment-scheduler.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: nova-scheduler
 spec:
-  replicas: {{ .Values.replicas.scheduler }}
+  replicas: {{ .Values.pod.replicas.scheduler }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/nova/values.yaml b/nova/values.yaml
index 056c558593..3737698621 100644
--- a/nova/values.yaml
+++ b/nova/values.yaml
@@ -17,14 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  api_metadata: 1
-  osapi: 1
-  conductor: 1
-  consoleauth: 1
-  scheduler: 1
-  novncproxy: 1
-
 labels:
   agent:
     compute:
@@ -556,6 +548,13 @@ endpoints:
         public: 80
 
 pod:
+  replicas:
+    api_metadata: 1
+    osapi: 1
+    conductor: 1
+    consoleauth: 1
+    scheduler: 1
+    novncproxy: 1
   lifecycle:
     upgrades:
       deployments:
diff --git a/rabbitmq/templates/bin/_rabbitmq-readiness.sh.tpl b/rabbitmq/templates/bin/_rabbitmq-readiness.sh.tpl
index c5134aff84..060214c1b4 100644
--- a/rabbitmq/templates/bin/_rabbitmq-readiness.sh.tpl
+++ b/rabbitmq/templates/bin/_rabbitmq-readiness.sh.tpl
@@ -33,7 +33,7 @@ main() {
         return 1
     fi
 
-    {{ if gt (.Values.replicas | int) 1 -}}
+    {{ if gt (.Values.pod.replicas.server | int) 1 -}}
     if ! is-node-properly-clustered; then
         log-it "Node is inconsistent with the rest of the cluster"
         return 1
diff --git a/rabbitmq/templates/deployment.yaml b/rabbitmq/templates/deployment.yaml
index ec70cf839a..1a8c366a30 100644
--- a/rabbitmq/templates/deployment.yaml
+++ b/rabbitmq/templates/deployment.yaml
@@ -19,7 +19,7 @@ apiVersion: apps/v1beta1
 metadata:
   name: rabbitmq
 spec:
-  replicas: {{ .Values.replicas }}
+  replicas: {{ .Values.pod.replicas.server }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
@@ -38,17 +38,8 @@ spec:
       containers:
         - name: rabbitmq
           image: {{ .Values.images.rabbitmq }}
-          {{- if .Values.pod.resources.enabled }}
-          resources:
-            limits:
-              cpu: {{ .Values.pod.resources.api.limits.cpu | quote }}
-              memory: {{ .Values.pod.resources.api.limits.memory | quote }}
-            requests:
-              cpu: {{ .Values.pod.resources.api.requests.cpu | quote }}
-              memory: {{ .Values.pod.resources.api.requests.memory | quote }}
-          {{- end }}
+{{ tuple $envAll $envAll.Values.pod.resources.server | include "helm-toolkit.snippets.kubernetes_resources" | indent 10 }}
           command:
-          - bash
           - /scripts/start.sh
           env:
           - name: RABBITMQ_POD_IP
@@ -59,14 +50,12 @@ spec:
             timeoutSeconds: {{ .Values.probes_timeout }}
             exec:
               command:
-              - bash
               - /scripts/rabbitmq-readiness.sh
           livenessProbe:
             initialDelaySeconds: {{ .Values.probes_delay }}
             timeoutSeconds: {{ .Values.probes_timeout }}
             exec:
               command:
-              - bash
               - /scripts/rabbitmq-liveness.sh
           volumeMounts:
             - name: rabbitmq-emptydir
diff --git a/rabbitmq/values.yaml b/rabbitmq/values.yaml
index c974698985..9e50f382c0 100644
--- a/rabbitmq/values.yaml
+++ b/rabbitmq/values.yaml
@@ -17,15 +17,13 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas: 3
-
-
-
 labels:
   node_selector_key: openstack-control-plane
   node_selector_value: enabled
 
 pod:
+  replicas:
+    server: 3
   lifecycle:
     upgrades:
       revision_history: 3
@@ -35,7 +33,7 @@ pod:
         max_surge: 3
   resources:
     enabled: false
-    api:
+    server:
       limits:
         memory: "128Mi"
         cpu: "500m"
diff --git a/senlin/templates/deployment-api.yaml b/senlin/templates/deployment-api.yaml
index 1a45c54d19..dcaaa84cf8 100644
--- a/senlin/templates/deployment-api.yaml
+++ b/senlin/templates/deployment-api.yaml
@@ -22,7 +22,7 @@ kind: Deployment
 metadata:
   name: senlin-api
 spec:
-  replicas: {{ .Values.replicas.api }}
+  replicas: {{ .Values.pod.replicas.api }}
 {{ tuple $envAll | include "helm-toolkit.snippets.kubernetes_upgrades_deployment" | indent 2 }}
   template:
     metadata:
diff --git a/senlin/templates/statefulset-engine.yaml b/senlin/templates/statefulset-engine.yaml
index 7505831037..27fe6244db 100644
--- a/senlin/templates/statefulset-engine.yaml
+++ b/senlin/templates/statefulset-engine.yaml
@@ -23,7 +23,7 @@ metadata:
   name: senlin-engine
 spec:
   serviceName: senlin-engine
-  replicas: {{ .Values.replicas.engine }}
+  replicas: {{ .Values.pod.replicas.engine }}
   template:
     metadata:
       labels:
diff --git a/senlin/values.yaml b/senlin/values.yaml
index 3796dec3a6..a75dd28935 100644
--- a/senlin/values.yaml
+++ b/senlin/values.yaml
@@ -17,10 +17,6 @@
 # Declare name/value pairs to be passed into your templates.
 # name: value
 
-replicas:
-  api: 1
-  engine: 1
-
 labels:
   node_selector_key: openstack-control-plane
   node_selector_value: enabled
@@ -210,6 +206,9 @@ endpoints:
         default: 5672
 
 pod:
+  replicas:
+    api: 1
+    engine: 1
   lifecycle:
     upgrades:
       deployments: