chore: use vendir to vendor
diff --git a/charts/barbican/requirements.lock b/charts/barbican/requirements.lock
index 2cde33b..b9146d7 100644
--- a/charts/barbican/requirements.lock
+++ b/charts/barbican/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:53.842158604Z"
+generated: "2023-11-15T23:08:24.10384684Z"
diff --git a/charts/cinder/requirements.lock b/charts/cinder/requirements.lock
index 50b3284..67c5213 100644
--- a/charts/cinder/requirements.lock
+++ b/charts/cinder/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:42.017065377Z"
+generated: "2023-11-22T20:14:58.592049716Z"
diff --git a/charts/designate/requirements.lock b/charts/designate/requirements.lock
index ec2023d..b454b93 100644
--- a/charts/designate/requirements.lock
+++ b/charts/designate/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:40.214157201Z"
+generated: "2023-11-22T20:14:54.685042515Z"
diff --git a/charts/glance/requirements.lock b/charts/glance/requirements.lock
index 7d88177..1005916 100644
--- a/charts/glance/requirements.lock
+++ b/charts/glance/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:53.27887454Z"
+generated: "2023-11-09T15:11:39.317300744Z"
diff --git a/charts/heat/requirements.lock b/charts/heat/requirements.lock
index 6aa1b95..4057c92 100644
--- a/charts/heat/requirements.lock
+++ b/charts/heat/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:46.189897202Z"
+generated: "2023-11-20T16:59:14.214540302Z"
diff --git a/charts/horizon/requirements.lock b/charts/horizon/requirements.lock
index 96a7ef9..d605ea5 100644
--- a/charts/horizon/requirements.lock
+++ b/charts/horizon/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:47.86542723Z"
+generated: "2023-11-22T20:15:05.83595607Z"
diff --git a/charts/keystone/requirements.lock b/charts/keystone/requirements.lock
index 8b4f2de..a2fbbec 100644
--- a/charts/keystone/requirements.lock
+++ b/charts/keystone/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:51.975725275Z"
+generated: "2023-11-15T23:04:58.660312058Z"
diff --git a/charts/libvirt/charts/helm-toolkit/Chart.yaml b/charts/libvirt/charts/helm-toolkit/Chart.yaml
index 1ee9758..fd3f461 100644
--- a/charts/libvirt/charts/helm-toolkit/Chart.yaml
+++ b/charts/libvirt/charts/helm-toolkit/Chart.yaml
@@ -9,4 +9,4 @@
 sources:
 - https://opendev.org/openstack/openstack-helm-infra
 - https://opendev.org/openstack/openstack-helm
-version: 0.2.55
+version: 0.2.56
diff --git a/charts/libvirt/charts/helm-toolkit/requirements.lock b/charts/libvirt/charts/helm-toolkit/requirements.lock
index be213ec..474adbc 100644
--- a/charts/libvirt/charts/helm-toolkit/requirements.lock
+++ b/charts/libvirt/charts/helm-toolkit/requirements.lock
@@ -1,3 +1,3 @@
 dependencies: []
 digest: sha256:643d5437104296e21d906ecb15b2c96ad278f20cfc4af53b12bb6069bd853726
-generated: "2023-11-02T02:34:47.093652653Z"
+generated: "2023-11-29T02:39:33.120856137Z"
diff --git a/charts/libvirt/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl b/charts/libvirt/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl
new file mode 100644
index 0000000..08521e0
--- /dev/null
+++ b/charts/libvirt/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl
@@ -0,0 +1,28 @@
+{{/*
+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.
+*/}}
+
+{{- define "helm-toolkit.snippets.rgw_s3_bucket_user_env_vars_rook" }}
+{{- range $s3Bucket := .Values.storage.s3.buckets }}
+- name: {{ printf "%s_S3_ACCESS_KEY" ($s3Bucket.client | replace "-" "_" | upper) }}
+  valueFrom:
+    secretKeyRef:
+      name: {{ $s3Bucket.name }}
+      key: AWS_ACCESS_KEY_ID
+- name: {{ printf "%s_S3_SECRET_KEY" ($s3Bucket.client | replace "-" "_" | upper) }}
+  valueFrom:
+    secretKeyRef:
+      name: {{ $s3Bucket.name }}
+      key: AWS_SECRET_ACCESS_KEY
+{{- end }}
+{{- end }}
diff --git a/charts/libvirt/requirements.lock b/charts/libvirt/requirements.lock
index d5b9d70..41e4298 100644
--- a/charts/libvirt/requirements.lock
+++ b/charts/libvirt/requirements.lock
@@ -1,6 +1,6 @@
 dependencies:
 - name: helm-toolkit
   repository: file://../helm-toolkit
-  version: 0.2.55
-digest: sha256:fe6ad5ce9983b4435c76e650bb0050609eb56467a4429aa844e50d954d2e91c8
-generated: "2023-11-02T02:35:03.387000272Z"
+  version: 0.2.56
+digest: sha256:2341734ff37eda298acb943a81ff603ee8edd5cfcbe655dba5943b485b64f9e3
+generated: "2023-11-29T02:39:38.485927956Z"
diff --git a/charts/magnum/requirements.lock b/charts/magnum/requirements.lock
index ecce7ce..f10f451 100644
--- a/charts/magnum/requirements.lock
+++ b/charts/magnum/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:41.084827427Z"
+generated: "2023-11-22T20:15:14.57130025Z"
diff --git a/charts/manila/requirements.lock b/charts/manila/requirements.lock
index 3b009c5..8d56ee1 100644
--- a/charts/manila/requirements.lock
+++ b/charts/manila/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:51.492216862Z"
+generated: "2023-11-22T20:15:09.875210224Z"
diff --git a/charts/neutron/Chart.yaml b/charts/neutron/Chart.yaml
index 587c56b..d230623 100644
--- a/charts/neutron/Chart.yaml
+++ b/charts/neutron/Chart.yaml
@@ -9,4 +9,4 @@
 sources:
 - https://opendev.org/openstack/neutron
 - https://opendev.org/openstack/openstack-helm
-version: 0.3.24
+version: 0.3.29
diff --git a/charts/neutron/requirements.lock b/charts/neutron/requirements.lock
index 1d7f269..9cc2f76 100644
--- a/charts/neutron/requirements.lock
+++ b/charts/neutron/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:49.227438894Z"
+generated: "2023-11-22T20:14:55.619219382Z"
diff --git a/charts/nova/requirements.lock b/charts/nova/requirements.lock
index b8c018f..5c187eb 100644
--- a/charts/nova/requirements.lock
+++ b/charts/nova/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:49.993650956Z"
+generated: "2023-11-03T00:16:38.441631616Z"
diff --git a/charts/octavia/requirements.lock b/charts/octavia/requirements.lock
index 4e12aee..f24caac 100644
--- a/charts/octavia/requirements.lock
+++ b/charts/octavia/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:55.046445907Z"
+generated: "2023-11-22T20:15:15.673945271Z"
diff --git a/charts/openvswitch/charts/helm-toolkit/Chart.yaml b/charts/openvswitch/charts/helm-toolkit/Chart.yaml
index 1ee9758..fd3f461 100644
--- a/charts/openvswitch/charts/helm-toolkit/Chart.yaml
+++ b/charts/openvswitch/charts/helm-toolkit/Chart.yaml
@@ -9,4 +9,4 @@
 sources:
 - https://opendev.org/openstack/openstack-helm-infra
 - https://opendev.org/openstack/openstack-helm
-version: 0.2.55
+version: 0.2.56
diff --git a/charts/openvswitch/charts/helm-toolkit/requirements.lock b/charts/openvswitch/charts/helm-toolkit/requirements.lock
index be213ec..474adbc 100644
--- a/charts/openvswitch/charts/helm-toolkit/requirements.lock
+++ b/charts/openvswitch/charts/helm-toolkit/requirements.lock
@@ -1,3 +1,3 @@
 dependencies: []
 digest: sha256:643d5437104296e21d906ecb15b2c96ad278f20cfc4af53b12bb6069bd853726
-generated: "2023-11-02T02:34:47.093652653Z"
+generated: "2023-11-29T02:39:33.120856137Z"
diff --git a/charts/openvswitch/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl b/charts/openvswitch/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl
new file mode 100644
index 0000000..08521e0
--- /dev/null
+++ b/charts/openvswitch/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl
@@ -0,0 +1,28 @@
+{{/*
+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.
+*/}}
+
+{{- define "helm-toolkit.snippets.rgw_s3_bucket_user_env_vars_rook" }}
+{{- range $s3Bucket := .Values.storage.s3.buckets }}
+- name: {{ printf "%s_S3_ACCESS_KEY" ($s3Bucket.client | replace "-" "_" | upper) }}
+  valueFrom:
+    secretKeyRef:
+      name: {{ $s3Bucket.name }}
+      key: AWS_ACCESS_KEY_ID
+- name: {{ printf "%s_S3_SECRET_KEY" ($s3Bucket.client | replace "-" "_" | upper) }}
+  valueFrom:
+    secretKeyRef:
+      name: {{ $s3Bucket.name }}
+      key: AWS_SECRET_ACCESS_KEY
+{{- end }}
+{{- end }}
diff --git a/charts/openvswitch/requirements.lock b/charts/openvswitch/requirements.lock
index b9613ad..a9a0bd4 100644
--- a/charts/openvswitch/requirements.lock
+++ b/charts/openvswitch/requirements.lock
@@ -1,6 +1,6 @@
 dependencies:
 - name: helm-toolkit
   repository: file://../helm-toolkit
-  version: 0.2.55
-digest: sha256:fe6ad5ce9983b4435c76e650bb0050609eb56467a4429aa844e50d954d2e91c8
-generated: "2023-11-02T02:35:07.681193516Z"
+  version: 0.2.56
+digest: sha256:2341734ff37eda298acb943a81ff603ee8edd5cfcbe655dba5943b485b64f9e3
+generated: "2023-11-29T02:39:43.736465441Z"
diff --git a/charts/ovn/charts/helm-toolkit/Chart.yaml b/charts/ovn/charts/helm-toolkit/Chart.yaml
index 1ee9758..fd3f461 100644
--- a/charts/ovn/charts/helm-toolkit/Chart.yaml
+++ b/charts/ovn/charts/helm-toolkit/Chart.yaml
@@ -9,4 +9,4 @@
 sources:
 - https://opendev.org/openstack/openstack-helm-infra
 - https://opendev.org/openstack/openstack-helm
-version: 0.2.55
+version: 0.2.56
diff --git a/charts/ovn/charts/helm-toolkit/requirements.lock b/charts/ovn/charts/helm-toolkit/requirements.lock
index be213ec..474adbc 100644
--- a/charts/ovn/charts/helm-toolkit/requirements.lock
+++ b/charts/ovn/charts/helm-toolkit/requirements.lock
@@ -1,3 +1,3 @@
 dependencies: []
 digest: sha256:643d5437104296e21d906ecb15b2c96ad278f20cfc4af53b12bb6069bd853726
-generated: "2023-11-02T02:34:47.093652653Z"
+generated: "2023-11-29T02:39:33.120856137Z"
diff --git a/charts/ovn/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl b/charts/ovn/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl
new file mode 100644
index 0000000..08521e0
--- /dev/null
+++ b/charts/ovn/charts/helm-toolkit/templates/snippets/_rgw_s3_bucket_user_env_vars_rook.tpl
@@ -0,0 +1,28 @@
+{{/*
+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.
+*/}}
+
+{{- define "helm-toolkit.snippets.rgw_s3_bucket_user_env_vars_rook" }}
+{{- range $s3Bucket := .Values.storage.s3.buckets }}
+- name: {{ printf "%s_S3_ACCESS_KEY" ($s3Bucket.client | replace "-" "_" | upper) }}
+  valueFrom:
+    secretKeyRef:
+      name: {{ $s3Bucket.name }}
+      key: AWS_ACCESS_KEY_ID
+- name: {{ printf "%s_S3_SECRET_KEY" ($s3Bucket.client | replace "-" "_" | upper) }}
+  valueFrom:
+    secretKeyRef:
+      name: {{ $s3Bucket.name }}
+      key: AWS_SECRET_ACCESS_KEY
+{{- end }}
+{{- end }}
diff --git a/charts/ovn/requirements.lock b/charts/ovn/requirements.lock
index b5f1c68..0e9719e 100644
--- a/charts/ovn/requirements.lock
+++ b/charts/ovn/requirements.lock
@@ -1,6 +1,6 @@
 dependencies:
 - name: helm-toolkit
   repository: file://../helm-toolkit
-  version: 0.2.55
-digest: sha256:fe6ad5ce9983b4435c76e650bb0050609eb56467a4429aa844e50d954d2e91c8
-generated: "2023-11-02T02:35:05.704748825Z"
+  version: 0.2.56
+digest: sha256:2341734ff37eda298acb943a81ff603ee8edd5cfcbe655dba5943b485b64f9e3
+generated: "2023-11-29T02:39:38.134714677Z"
diff --git a/charts/placement/requirements.lock b/charts/placement/requirements.lock
index 4593a4a..1984052 100644
--- a/charts/placement/requirements.lock
+++ b/charts/placement/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:47.434673508Z"
+generated: "2023-11-22T20:15:04.838002001Z"
diff --git a/charts/placement/values_overrides/2023.1-ubuntu_focal.yaml b/charts/placement/values_overrides/2023.1-ubuntu_focal.yaml
new file mode 100644
index 0000000..b5804f9
--- /dev/null
+++ b/charts/placement/values_overrides/2023.1-ubuntu_focal.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:2023.1-ubuntu_focal"
+    ks_user: "docker.io/openstackhelm/heat:2023.1-ubuntu_focal"
+    ks_service: "docker.io/openstackhelm/heat:2023.1-ubuntu_focal"
+    ks_endpoints: "docker.io/openstackhelm/heat:2023.1-ubuntu_focal"
+    db_init: "docker.io/openstackhelm/heat:2023.1-ubuntu_focal"
+    db_drop: "docker.io/openstackhelm/heat:2023.1-ubuntu_focal"
+    placement_db_sync: "docker.io/openstackhelm/placement:2023.1-ubuntu_focal"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/2023.1-ubuntu_jammy.yaml b/charts/placement/values_overrides/2023.1-ubuntu_jammy.yaml
new file mode 100644
index 0000000..45fd7fa
--- /dev/null
+++ b/charts/placement/values_overrides/2023.1-ubuntu_jammy.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:2023.1-ubuntu_jammy"
+    ks_user: "docker.io/openstackhelm/heat:2023.1-ubuntu_jammy"
+    ks_service: "docker.io/openstackhelm/heat:2023.1-ubuntu_jammy"
+    ks_endpoints: "docker.io/openstackhelm/heat:2023.1-ubuntu_jammy"
+    db_init: "docker.io/openstackhelm/heat:2023.1-ubuntu_jammy"
+    db_drop: "docker.io/openstackhelm/heat:2023.1-ubuntu_jammy"
+    placement_db_sync: "docker.io/openstackhelm/placement:2023.1-ubuntu_jammy"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/2023.2-ubuntu_jammy.yaml b/charts/placement/values_overrides/2023.2-ubuntu_jammy.yaml
new file mode 100644
index 0000000..bbb7391
--- /dev/null
+++ b/charts/placement/values_overrides/2023.2-ubuntu_jammy.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:2023.2-ubuntu_jammy"
+    ks_user: "docker.io/openstackhelm/heat:2023.2-ubuntu_jammy"
+    ks_service: "docker.io/openstackhelm/heat:2023.2-ubuntu_jammy"
+    ks_endpoints: "docker.io/openstackhelm/heat:2023.2-ubuntu_jammy"
+    db_init: "docker.io/openstackhelm/heat:2023.2-ubuntu_jammy"
+    db_drop: "docker.io/openstackhelm/heat:2023.2-ubuntu_jammy"
+    placement_db_sync: "docker.io/openstackhelm/placement:2023.2-ubuntu_jammy"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/apparmor.yaml b/charts/placement/values_overrides/apparmor.yaml
new file mode 100644
index 0000000..ee883ac
--- /dev/null
+++ b/charts/placement/values_overrides/apparmor.yaml
@@ -0,0 +1,8 @@
+---
+pod:
+  mandatory_access_control:
+    type: apparmor
+    placement-api:
+      placement-api: runtime/default
+      init: runtime/default
+...
diff --git a/charts/placement/values_overrides/netpol.yaml b/charts/placement/values_overrides/netpol.yaml
new file mode 100644
index 0000000..84557be
--- /dev/null
+++ b/charts/placement/values_overrides/netpol.yaml
@@ -0,0 +1,20 @@
+---
+manifests:
+  network_policy: true
+network_policy:
+  placement:
+    egress:
+      - {}
+    ingress:
+      - from:
+        - podSelector:
+            matchLabels:
+              application: nova
+        ports:
+        - protocol: TCP
+          port: 8778
+        - protocol: TCP
+          port: 80
+        - protocol: TCP
+          port: 8080
+...
diff --git a/charts/placement/values_overrides/tls-offloading.yaml b/charts/placement/values_overrides/tls-offloading.yaml
new file mode 100644
index 0000000..ff97285
--- /dev/null
+++ b/charts/placement/values_overrides/tls-offloading.yaml
@@ -0,0 +1,12 @@
+---
+endpoints:
+  identity:
+    auth:
+      admin:
+        cacert: /etc/ssl/certs/openstack-helm.crt
+      placement:
+        cacert: /etc/ssl/certs/openstack-helm.crt
+
+tls:
+  identity: true
+...
diff --git a/charts/placement/values_overrides/tls.yaml b/charts/placement/values_overrides/tls.yaml
new file mode 100644
index 0000000..514b660
--- /dev/null
+++ b/charts/placement/values_overrides/tls.yaml
@@ -0,0 +1,80 @@
+---
+network:
+  api:
+    ingress:
+      annotations:
+        nginx.ingress.kubernetes.io/backend-protocol: "https"
+conf:
+  software:
+    apache2:
+      a2enmod:
+        - ssl
+  placement:
+    keystone_authtoken:
+      cafile: /etc/placement/certs/ca.crt
+  wsgi_placement: |
+    Listen 0.0.0.0:{{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}
+    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
+    SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
+    CustomLog /dev/stdout combined env=!forwarded
+    CustomLog /dev/stdout proxy env=forwarded
+    <VirtualHost *:{{ tuple "placement" "service" "api" . | include "helm-toolkit.endpoints.endpoint_port_lookup" }}>
+      ServerName {{ printf "%s.%s.svc.%s" "placement-api" .Release.Namespace .Values.endpoints.cluster_domain_suffix }}
+      WSGIDaemonProcess placement-api processes=4 threads=1 user=placement group=placement display-name=%{GROUP}
+      WSGIProcessGroup placement-api
+      WSGIScriptAlias / /var/www/cgi-bin/placement/placement-api
+      WSGIApplicationGroup %{GLOBAL}
+      WSGIPassAuthorization On
+      <IfVersion >= 2.4>
+        ErrorLogFormat "%{cu}t %M"
+      </IfVersion>
+      ErrorLog /dev/stdout
+      SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
+      CustomLog /dev/stdout combined env=!forwarded
+      CustomLog /dev/stdout proxy env=forwarded
+
+      SSLEngine on
+      SSLCertificateFile      /etc/placement/certs/tls.crt
+      SSLCertificateKeyFile   /etc/placement/certs/tls.key
+      SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
+      SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
+      SSLHonorCipherOrder     on
+    </VirtualHost>
+    Alias /placement /var/www/cgi-bin/placement/placement-api
+    <Location /placement>
+      SetHandler wsgi-script
+      Options +ExecCGI
+      WSGIProcessGroup placement-api
+      WSGIApplicationGroup %{GLOBAL}
+      WSGIPassAuthorization On
+    </Location>
+endpoints:
+  identity:
+    auth:
+      admin:
+        cacert: /etc/ssl/certs/openstack-helm.crt
+      placement:
+        cacert: /etc/ssl/certs/openstack-helm.crt
+    scheme:
+      default: https
+    port:
+      api:
+        default: 443
+  placement:
+    host_fqdn_override:
+      default:
+        tls:
+          secretName: placement-tls-api
+          issuerRef:
+            name: ca-issuer
+            kind: ClusterIssuer
+    scheme:
+      default: https
+      service: https
+    port:
+      api:
+        public: 443
+manifests:
+  certificates: true
+...
diff --git a/charts/placement/values_overrides/victoria-ubuntu_focal.yaml b/charts/placement/values_overrides/victoria-ubuntu_focal.yaml
new file mode 100644
index 0000000..55a4693
--- /dev/null
+++ b/charts/placement/values_overrides/victoria-ubuntu_focal.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:victoria-ubuntu_focal"
+    ks_user: "docker.io/openstackhelm/heat:victoria-ubuntu_focal"
+    ks_service: "docker.io/openstackhelm/heat:victoria-ubuntu_focal"
+    ks_endpoints: "docker.io/openstackhelm/heat:victoria-ubuntu_focal"
+    db_init: "docker.io/openstackhelm/heat:victoria-ubuntu_focal"
+    db_drop: "docker.io/openstackhelm/heat:victoria-ubuntu_focal"
+    placement_db_sync: "docker.io/openstackhelm/placement:victoria-ubuntu_focal"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/wallaby-ubuntu_focal.yaml b/charts/placement/values_overrides/wallaby-ubuntu_focal.yaml
new file mode 100644
index 0000000..47cf660
--- /dev/null
+++ b/charts/placement/values_overrides/wallaby-ubuntu_focal.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:wallaby-ubuntu_focal"
+    ks_user: "docker.io/openstackhelm/heat:wallaby-ubuntu_focal"
+    ks_service: "docker.io/openstackhelm/heat:wallaby-ubuntu_focal"
+    ks_endpoints: "docker.io/openstackhelm/heat:wallaby-ubuntu_focal"
+    db_init: "docker.io/openstackhelm/heat:wallaby-ubuntu_focal"
+    db_drop: "docker.io/openstackhelm/heat:wallaby-ubuntu_focal"
+    placement_db_sync: "docker.io/openstackhelm/placement:wallaby-ubuntu_focal"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/xena-ubuntu_focal.yaml b/charts/placement/values_overrides/xena-ubuntu_focal.yaml
new file mode 100644
index 0000000..68baf2c
--- /dev/null
+++ b/charts/placement/values_overrides/xena-ubuntu_focal.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:xena-ubuntu_focal"
+    ks_user: "docker.io/openstackhelm/heat:xena-ubuntu_focal"
+    ks_service: "docker.io/openstackhelm/heat:xena-ubuntu_focal"
+    ks_endpoints: "docker.io/openstackhelm/heat:xena-ubuntu_focal"
+    db_init: "docker.io/openstackhelm/heat:xena-ubuntu_focal"
+    db_drop: "docker.io/openstackhelm/heat:xena-ubuntu_focal"
+    placement_db_sync: "docker.io/openstackhelm/placement:xena-ubuntu_focal"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/yoga-ubuntu_focal.yaml b/charts/placement/values_overrides/yoga-ubuntu_focal.yaml
new file mode 100644
index 0000000..46fdb90
--- /dev/null
+++ b/charts/placement/values_overrides/yoga-ubuntu_focal.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:yoga-ubuntu_focal"
+    ks_user: "docker.io/openstackhelm/heat:yoga-ubuntu_focal"
+    ks_service: "docker.io/openstackhelm/heat:yoga-ubuntu_focal"
+    ks_endpoints: "docker.io/openstackhelm/heat:yoga-ubuntu_focal"
+    db_init: "docker.io/openstackhelm/heat:yoga-ubuntu_focal"
+    db_drop: "docker.io/openstackhelm/heat:yoga-ubuntu_focal"
+    placement_db_sync: "docker.io/openstackhelm/placement:yoga-ubuntu_focal"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/zed-ubuntu_focal.yaml b/charts/placement/values_overrides/zed-ubuntu_focal.yaml
new file mode 100644
index 0000000..901bc96
--- /dev/null
+++ b/charts/placement/values_overrides/zed-ubuntu_focal.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:zed-ubuntu_focal"
+    ks_user: "docker.io/openstackhelm/heat:zed-ubuntu_focal"
+    ks_service: "docker.io/openstackhelm/heat:zed-ubuntu_focal"
+    ks_endpoints: "docker.io/openstackhelm/heat:zed-ubuntu_focal"
+    db_init: "docker.io/openstackhelm/heat:zed-ubuntu_focal"
+    db_drop: "docker.io/openstackhelm/heat:zed-ubuntu_focal"
+    placement_db_sync: "docker.io/openstackhelm/placement:zed-ubuntu_focal"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/placement/values_overrides/zed-ubuntu_jammy.yaml b/charts/placement/values_overrides/zed-ubuntu_jammy.yaml
new file mode 100644
index 0000000..debe2b0
--- /dev/null
+++ b/charts/placement/values_overrides/zed-ubuntu_jammy.yaml
@@ -0,0 +1,19 @@
+---
+images:
+  pull_policy: IfNotPresent
+  tags:
+    placement: "docker.io/openstackhelm/placement:zed-ubuntu_jammy"
+    ks_user: "docker.io/openstackhelm/heat:zed-ubuntu_jammy"
+    ks_service: "docker.io/openstackhelm/heat:zed-ubuntu_jammy"
+    ks_endpoints: "docker.io/openstackhelm/heat:zed-ubuntu_jammy"
+    db_init: "docker.io/openstackhelm/heat:zed-ubuntu_jammy"
+    db_drop: "docker.io/openstackhelm/heat:zed-ubuntu_jammy"
+    placement_db_sync: "docker.io/openstackhelm/placement:zed-ubuntu_jammy"
+    dep_check: "quay.io/airshipit/kubernetes-entrypoint:v1.0.0"
+    image_repo_sync: "docker.io/docker:17.07.0"
+dependencies:
+  static:
+    db_sync:
+      jobs:
+        - placement-db-init
+...
diff --git a/charts/senlin/requirements.lock b/charts/senlin/requirements.lock
index 3ca3b38..d43449c 100644
--- a/charts/senlin/requirements.lock
+++ b/charts/senlin/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:45.132338353Z"
+generated: "2023-11-22T20:15:02.349435177Z"
diff --git a/charts/tempest/requirements.lock b/charts/tempest/requirements.lock
index 4c65511..cc2292f 100644
--- a/charts/tempest/requirements.lock
+++ b/charts/tempest/requirements.lock
@@ -3,4 +3,4 @@
   repository: file://../../openstack-helm-infra/helm-toolkit
   version: 0.2.55
 digest: sha256:f25556fa4f0b285a96cbf853e72555c04e65772daf0ffa6b518321e5e249f5ca
-generated: "2023-10-27T21:53:47.115677738Z"
+generated: "2023-11-22T20:15:05.422266295Z"
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..b114686
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,61 @@
+{
+  "nodes": {
+    "flake-utils": {
+      "inputs": {
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1694529238,
+        "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "ff7b65b44d01cf9ba6a71320833626af21126384",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
+    "nixpkgs": {
+      "locked": {
+        "lastModified": 1701040486,
+        "narHash": "sha256-vawYwoHA5CwvjfqaT3A5CT9V36Eq43gxdwpux32Qkjw=",
+        "owner": "NixOS",
+        "repo": "nixpkgs",
+        "rev": "45827faa2132b8eade424f6bdd48d8828754341a",
+        "type": "github"
+      },
+      "original": {
+        "owner": "NixOS",
+        "ref": "nixpkgs-unstable",
+        "repo": "nixpkgs",
+        "type": "github"
+      }
+    },
+    "root": {
+      "inputs": {
+        "flake-utils": "flake-utils",
+        "nixpkgs": "nixpkgs"
+      }
+    },
+    "systems": {
+      "locked": {
+        "lastModified": 1681028828,
+        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+        "owner": "nix-systems",
+        "repo": "default",
+        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-systems",
+        "repo": "default",
+        "type": "github"
+      }
+    }
+  },
+  "root": "root",
+  "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..8964172
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,23 @@
+{
+  inputs = {
+    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
+    flake-utils.url = "github:numtide/flake-utils";
+  };
+
+  outputs = { self, nixpkgs, flake-utils }:
+    flake-utils.lib.eachDefaultSystem
+      (system:
+        let
+          pkgs = import nixpkgs {
+            inherit system;
+          };
+        in
+        {
+          devShell = pkgs.mkShell {
+            buildInputs = with pkgs; [
+              vendir
+            ];
+          };
+        }
+      );
+}
diff --git a/hack/sync-charts.sh b/hack/sync-charts.sh
index da82dd4..6a59616 100755
--- a/hack/sync-charts.sh
+++ b/hack/sync-charts.sh
@@ -23,82 +23,19 @@
 # Determine the root path for Atmosphere
 ATMOSPHERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )/.." >/dev/null 2>&1 && pwd )"
 
-mv ${ATMOSPHERE}/charts/staffeln ${ATMOSPHERE}/tmp_staffeln
-# Clean-up all of the existing charts
-rm -rfv ${ATMOSPHERE}/charts/*
-mv ${ATMOSPHERE}/tmp_staffeln ${ATMOSPHERE}/charts/staffeln
+# Sync using "vendir"
+vendir sync
 
-CEPH_CSI_RBD_VERSION=3.5.1
-curl -sL https://ceph.github.io/csi-charts/rbd/ceph-csi-rbd-${CEPH_CSI_RBD_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-NODE_FEATURE_DISCOVERY_VERSION=0.11.2
-curl -sL https://github.com/kubernetes-sigs/node-feature-discovery/releases/download/v${NODE_FEATURE_DISCOVERY_VERSION}/node-feature-discovery-chart-${NODE_FEATURE_DISCOVERY_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-KUBE_PROMETHEUS_STACK_VERSION=49.0.0
-curl -sL https://github.com/prometheus-community/helm-charts/releases/download/kube-prometheus-stack-${KUBE_PROMETHEUS_STACK_VERSION}/kube-prometheus-stack-${KUBE_PROMETHEUS_STACK_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-LOKI_VERSION=4.6.1
-curl -sL https://github.com/grafana/helm-charts/releases/download/helm-loki-${LOKI_VERSION}/loki-${LOKI_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-VECTOR_VERSION=0.19.0
-curl -sL https://github.com/vectordotdev/helm-charts/releases/download/vector-${VECTOR_VERSION}/vector-${VECTOR_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-PROMETHEUS_PUSHGATEWAY_VERSION=1.16.0
-curl -sL https://github.com/prometheus-community/helm-charts/releases/download/prometheus-pushgateway-${PROMETHEUS_PUSHGATEWAY_VERSION}/prometheus-pushgateway-${PROMETHEUS_PUSHGATEWAY_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-INGRESS_NGINX_VERSION=4.0.17
-curl -sL https://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-${INGRESS_NGINX_VERSION}/ingress-nginx-${INGRESS_NGINX_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-CERT_MANAGER_WEBHOOK_INFOBLOX_WAPI_VERSION=1.5.2
-curl -sL https://github.com/luisico/cert-manager-webhook-infoblox-wapi/releases/download/helm-chart-${CERT_MANAGER_WEBHOOK_INFOBLOX_WAPI_VERSION}/cert-manager-webhook-infoblox-wapi-${CERT_MANAGER_WEBHOOK_INFOBLOX_WAPI_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-RABBITMQ_CLUSTER_OPERATOR_VERSION=2.6.6
-curl -sL https://charts.bitnami.com/bitnami/rabbitmq-cluster-operator-${RABBITMQ_CLUSTER_OPERATOR_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-PXC_OPERATOR_VERSION=1.12.0
-curl -sL https://github.com/Percona-Lab/percona-helm-charts/releases/download/pxc-operator-${PXC_OPERATOR_VERSION}/pxc-operator-${PXC_OPERATOR_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-COREDNS_VERSION=1.19.4
-curl -sL https://github.com/coredns/helm/releases/download/coredns-${COREDNS_VERSION}/coredns-${COREDNS_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-MEMCACHED_VERSION=0.1.12
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm-infra/memcached-${MEMCACHED_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-KEYSTONE_VERSION=0.3.5
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/keystone-${KEYSTONE_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Keystone
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899867/revisions/1/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
   | filterdiff -p2 -x 'Chart.yaml' \
   | filterdiff -p1 -i 'keystone/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/keystone
-# Remove extra files before 899867 merged
-rm -fv ${ATMOSPHERE}/charts/keystone/templates/bin/_domain-manage-init.sh.tpl ${ATMOSPHERE}/charts/keystone/templates/bin/_domain-manage.py.tpl
+rm -fv ${ATMOSPHERE}/charts/keystone/templates/bin/{_domain-manage-init.sh.tpl,_domain-manage.py.tpl}
 
-BARBICAN_VERSION=0.3.6
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/barbican-${BARBICAN_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-CEPH_PROVISIONERS_VERSION=0.1.8
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm-infra/ceph-provisioners-${CEPH_PROVISIONERS_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-GLANCE_VERSION=0.4.15
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/glance-${GLANCE_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Glance
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899864/revisions/2/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -106,9 +43,7 @@
   | filterdiff -p1 -i 'glance/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/glance
 
-CINDER_VERSION=0.3.15
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/cinder-${CINDER_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Cinder
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899814/revisions/1/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -116,25 +51,15 @@
   | filterdiff -p1 -i 'cinder/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/cinder
 
-PLACEMENT_VERSION=0.3.9
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/placement-${PLACEMENT_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Placement
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899914/revisions/3/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
   | filterdiff -p2 -x 'Chart.yaml' \
   | filterdiff -p1 -i 'placement/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/placement
-# Remove extra files before 899914 merged
-rm -rfv ${ATMOSPHERE}/charts/placement/values_overrides/
 
-OPEN_VSWITCH_VERSION=0.1.19
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm-infra/openvswitch-${OPEN_VSWITCH_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-LIBVIRT_VERSION=0.1.27
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm-infra/libvirt-${LIBVIRT_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Libvirt
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm-infra~893406/revisions/9/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -142,13 +67,7 @@
   | filterdiff -p1 -i 'libvirt/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/libvirt
 
-LOCAL_PATH_PROVISIONER_VERSION=0.0.24
-curl -sL https://github.com/rancher/local-path-provisioner/archive/refs/tags/v${LOCAL_PATH_PROVISIONER_VERSION}.tar.gz \
-  | tar -xz -C ${ATMOSPHERE}/charts --strip-components=3 local-path-provisioner-${LOCAL_PATH_PROVISIONER_VERSION}/deploy/chart/
-
-OVN_VERSION=0.1.4
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm-infra/ovn-${OVN_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# OVN
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm-infra~893739/revisions/2/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -156,37 +75,7 @@
   | filterdiff -p1 -i 'ovn/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/ovn
 
-NEUTRON_VERSION=0.3.24
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/neutron-${NEUTRON_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899711/revisions/2/patch?download' \
-  | base64 --decode \
-  | filterdiff -p1 -x 'releasenotes/*' \
-  | filterdiff -p2 -x 'Chart.yaml' \
-  | filterdiff -p1 -i 'neutron/*' \
-  | patch -p2 -d ${ATMOSPHERE}/charts/neutron
-curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899684/revisions/4/patch?download' \
-  | base64 --decode \
-  | filterdiff -p1 -x 'releasenotes/*' \
-  | filterdiff -p2 -x 'Chart.yaml' \
-  | filterdiff -p1 -i 'neutron/*' \
-  | patch -p2 -d ${ATMOSPHERE}/charts/neutron
-curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899716/revisions/1/patch?download' \
-  | base64 --decode \
-  | filterdiff -p1 -x 'releasenotes/*' \
-  | filterdiff -p2 -x 'Chart.yaml' \
-  | filterdiff -p1 -i 'neutron/*' \
-  | patch -p2 -d ${ATMOSPHERE}/charts/neutron
-curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899933/revisions/1/patch?download' \
-  | base64 --decode \
-  | filterdiff -p1 -x 'releasenotes/*' \
-  | filterdiff -p2 -x 'Chart.yaml' \
-  | filterdiff -p1 -i 'neutron/*' \
-  | patch -p2 -d ${ATMOSPHERE}/charts/neutron
-
-NOVA_VERISON=0.3.27
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/nova-${NOVA_VERISON}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Nova
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899809/revisions/2/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -194,9 +83,7 @@
   | filterdiff -p1 -i 'nova/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/nova
 
-SENLIN_VERSION=0.2.9
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/senlin-${SENLIN_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Senlin
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899913/revisions/1/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -204,9 +91,7 @@
   | filterdiff -p1 -i 'senlin/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/senlin
 
-DESIGNATE_VERSION=0.2.9
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/designate-${DESIGNATE_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Designate
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899932/revisions/1/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -214,9 +99,7 @@
   | filterdiff -p1 -i 'designate/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/designate
 
-HEAT_VERSION=0.3.7
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/heat-${HEAT_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Heat
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899931/revisions/1/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -224,9 +107,7 @@
   | filterdiff -p1 -i 'heat/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/heat
 
-OCTAVIA_VERSION=0.2.9
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/octavia-${OCTAVIA_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Octavia
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899918/revisions/1/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -234,9 +115,7 @@
   | filterdiff -p1 -i 'octavia/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/octavia
 
-MAGNUM_VERSION=0.2.9
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/magnum-${MAGNUM_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Magnum
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899926/revisions/1/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -244,25 +123,7 @@
   | filterdiff -p1 -i 'magnum/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/magnum
 
-HORIZON_VERSION=0.3.15
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/horizon-${HORIZON_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-TEMPEST_VERSION=0.2.8
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/tempest-${TEMPEST_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-ROOK_CEPH_VERSION=1.10.10
-curl -sL https://charts.rook.io/release/rook-ceph-v${ROOK_CEPH_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-ROOK_CEPH_CLUSTER_VERSION=1.10.10
-curl -sL https://charts.rook.io/release/rook-ceph-cluster-v${ROOK_CEPH_CLUSTER_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
-
-MANILA_VERSION=0.1.7
-curl -sL https://tarballs.opendev.org/openstack/openstack-helm/manila-${MANILA_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
+# Manila
 curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~883168/revisions/11/patch?download' \
   | base64 --decode \
   | filterdiff -p1 -x 'releasenotes/*' \
@@ -275,7 +136,3 @@
   | filterdiff -p2 -x 'Chart.yaml' \
   | filterdiff -p1 -i 'manila/*' \
   | patch -p2 -d ${ATMOSPHERE}/charts/manila
-
-KEYCLOAK_VERSION=16.0.3
-curl -sL https://charts.bitnami.com/bitnami/keycloak-${KEYCLOAK_VERSION}.tgz \
-  | tar -xz -C ${ATMOSPHERE}/charts
diff --git a/vendir.lock.yml b/vendir.lock.yml
new file mode 100644
index 0000000..de1fb17
--- /dev/null
+++ b/vendir.lock.yml
@@ -0,0 +1,149 @@
+apiVersion: vendir.k14s.io/v1alpha1
+directories:
+- contents:
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.6
+    path: barbican
+  - helmChart:
+      appVersion: 3.5.1
+      version: 3.5.1
+    path: ceph-csi-rbd
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.1.8
+    path: ceph-provisioners
+  - helmChart:
+      appVersion: 1.5.0
+      version: 1.5.2
+    path: cert-manager-webhook-infoblox-wapi
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.15
+    path: cinder
+  - helmChart:
+      appVersion: 1.9.3
+      version: 1.19.4
+    path: coredns
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.2.9
+    path: designate
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.4.15
+    path: glance
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.7
+    path: heat
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.15
+    path: horizon
+  - helmChart:
+      appVersion: 1.1.1
+      version: 4.0.17
+    path: ingress-nginx
+  - helmChart:
+      appVersion: 22.0.1
+      version: 16.0.3
+    path: keycloak
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.5
+    path: keystone
+  - helmChart:
+      appVersion: v0.67.1
+      version: 49.0.0
+    path: kube-prometheus-stack
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.1.27
+    path: libvirt
+  - git:
+      commitTitle: Fix missing plugins/github-release image for arm platform...
+      sha: 97e0501428f0a5bcac49ecd0bfdb051797c4a6c5
+      tags:
+      - v0.0.24
+    path: local-path-provisioner
+  - helmChart:
+      appVersion: 2.7.3
+      version: 4.6.1
+    path: loki
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.2.9
+    path: magnum
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.1.7
+    path: manila
+  - helmChart:
+      appVersion: v1.5.5
+      version: 0.1.12
+    path: memcached
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.29
+    path: neutron
+  - helmChart:
+      appVersion: v0.11.2
+      version: 0.11.2
+    path: node-feature-discovery
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.27
+    path: nova
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.2.9
+    path: octavia
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.1.19
+    path: openvswitch
+  - helmChart:
+      appVersion: v23.3.0
+      version: 0.1.4
+    path: ovn
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.3.9
+    path: placement
+  - helmChart:
+      appVersion: 1.4.2
+      version: 1.16.0
+    path: prometheus-pushgateway
+  - helmChart:
+      appVersion: 1.12.0
+      version: 1.12.0
+    path: pxc-operator
+  - helmChart:
+      appVersion: 1.13.1
+      version: 2.6.6
+    path: rabbitmq-cluster-operator
+  - helmChart:
+      appVersion: v1.10.10
+      version: v1.10.10
+    path: rook-ceph
+  - helmChart:
+      appVersion: v1.10.10
+      version: v1.10.10
+    path: rook-ceph-cluster
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.2.9
+    path: senlin
+  - manual: {}
+    path: staffeln
+  - helmChart:
+      appVersion: v1.0.0
+      version: 0.2.8
+    path: tempest
+  - helmChart:
+      appVersion: 0.27.0-distroless-libc
+      version: 0.19.0
+    path: vector
+  path: charts
+kind: LockConfig
diff --git a/vendir.yml b/vendir.yml
new file mode 100644
index 0000000..aa1e0b7
--- /dev/null
+++ b/vendir.yml
@@ -0,0 +1,389 @@
+apiVersion: vendir.k14s.io/v1alpha1
+kind: Config
+directories:
+  - path: charts
+    contents:
+      - path: barbican
+        helmChart:
+          name: barbican
+          version: 0.3.6
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: ceph-csi-rbd
+        helmChart:
+          name: ceph-csi-rbd
+          version: 3.5.1
+          repository:
+            url: https://ceph.github.io/csi-charts
+      - path: ceph-provisioners
+        helmChart:
+          name: ceph-provisioners
+          version: 0.1.8
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm-infra
+      - path: cert-manager-webhook-infoblox-wapi
+        helmChart:
+          name: cert-manager-webhook-infoblox-wapi
+          version: 1.5.2
+          repository:
+            url: https://luisico.github.io/cert-manager-webhook-infoblox-wapi
+      - path: cinder
+        helmChart:
+          name: cinder
+          version: 0.3.15
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: coredns
+        helmChart:
+          name: coredns
+          version: 1.19.4
+          repository:
+            url: https://coredns.github.io/helm
+      - path: designate
+        helmChart:
+          name: designate
+          version: 0.2.9
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: glance
+        helmChart:
+          name: glance
+          version: 0.4.15
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: heat
+        helmChart:
+          name: heat
+          version: 0.3.7
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: horizon
+        helmChart:
+          name: horizon
+          version: 0.3.15
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: ingress-nginx
+        helmChart:
+          name: ingress-nginx
+          version: 4.0.17
+          repository:
+            url: https://kubernetes.github.io/ingress-nginx
+      - path: keycloak
+        helmChart:
+          name: keycloak
+          version: 16.0.3
+          repository:
+            url: https://charts.bitnami.com/bitnami
+      - path: keystone
+        helmChart:
+          name: keystone
+          version: 0.3.5
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: kube-prometheus-stack
+        helmChart:
+          name: kube-prometheus-stack
+          version: 49.0.0
+          repository:
+            url: https://prometheus-community.github.io/helm-charts
+      - path: libvirt
+        helmChart:
+          name: libvirt
+          version: 0.1.27
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm-infra
+      - path: local-path-provisioner
+        git:
+          url: https://github.com/rancher/local-path-provisioner
+          ref: v0.0.24
+        newRootPath: deploy/chart/local-path-provisioner
+      - path: loki
+        helmChart:
+          name: loki
+          version: 4.6.1
+          repository:
+            url: https://grafana.github.io/helm-charts
+      - path: magnum
+        helmChart:
+          name: magnum
+          version: 0.2.9
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: manila
+        helmChart:
+          name: manila
+          version: 0.1.7
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: memcached
+        helmChart:
+          name: memcached
+          version: 0.1.12
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm-infra
+      - path: neutron
+        helmChart:
+          name: neutron
+          version: 0.3.29
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm/
+      - path: node-feature-discovery
+        helmChart:
+          name: node-feature-discovery
+          version: 0.11.2
+          repository:
+            url: https://kubernetes-sigs.github.io/node-feature-discovery/charts
+      - path: nova
+        helmChart:
+          name: nova
+          version: 0.3.27
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: octavia
+        helmChart:
+          name: octavia
+          version: 0.2.9
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: openvswitch
+        helmChart:
+          name: openvswitch
+          version: 0.1.19
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm-infra
+      - path: ovn
+        helmChart:
+          name: ovn
+          version: 0.1.4
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm-infra
+      - path: placement
+        helmChart:
+          name: placement
+          version: 0.3.9
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm/
+      - path: prometheus-pushgateway
+        helmChart:
+          name: prometheus-pushgateway
+          version: 1.16.0
+          repository:
+            url: https://prometheus-community.github.io/helm-charts
+      - path: pxc-operator
+        helmChart:
+          name: pxc-operator
+          version: 1.12.0
+          repository:
+            url: https://percona.github.io/percona-helm-charts
+      - path: rabbitmq-cluster-operator
+        helmChart:
+          name: rabbitmq-cluster-operator
+          version: 2.6.6
+          repository:
+            url: https://charts.bitnami.com/bitnami
+      - path: rook-ceph
+        helmChart:
+          name: rook-ceph
+          version: 1.10.10
+          repository:
+            url: https://charts.rook.io/release
+      - path: rook-ceph-cluster
+        helmChart:
+          name: rook-ceph-cluster
+          version: 1.10.10
+          repository:
+            url: https://charts.rook.io/release
+      - path: senlin
+        helmChart:
+          name: senlin
+          version: 0.2.9
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: staffeln
+        manual: {}
+      - path: tempest
+        helmChart:
+          name: tempest
+          version: 0.2.8
+          repository:
+            url: https://tarballs.openstack.org/openstack-helm
+      - path: vector
+        helmChart:
+          name: vector
+          version: 0.19.0
+          repository:
+            url: https://vectordotdev.github.io/helm-charts
+
+
+# KEYSTONE_VERSION=0.3.5
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/keystone-${KEYSTONE_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899867/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'keystone/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/keystone
+# # Remove extra files before 899867 merged
+# rm -fv ${ATMOSPHERE}/charts/keystone/templates/bin/_domain-manage-init.sh.tpl ${ATMOSPHERE}/charts/keystone/templates/bin/_domain-manage.py.tpl
+
+# GLANCE_VERSION=0.4.15
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/glance-${GLANCE_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899864/revisions/2/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'glance/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/glance
+
+# CINDER_VERSION=0.3.15
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/cinder-${CINDER_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899814/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'cinder/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/cinder
+
+# PLACEMENT_VERSION=0.3.9
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/placement-${PLACEMENT_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899914/revisions/3/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'placement/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/placement
+# # Remove extra files before 899914 merged
+# rm -rfv ${ATMOSPHERE}/charts/placement/values_overrides/
+
+# LIBVIRT_VERSION=0.1.27
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm-infra/libvirt-${LIBVIRT_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm-infra~893406/revisions/9/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'libvirt/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/libvirt
+
+# LOCAL_PATH_PROVISIONER_VERSION=0.0.24
+# curl -sL https://github.com/rancher/local-path-provisioner/archive/refs/tags/v${LOCAL_PATH_PROVISIONER_VERSION}.tar.gz \
+#   | tar -xz -C ${ATMOSPHERE}/charts --strip-components=3 local-path-provisioner-${LOCAL_PATH_PROVISIONER_VERSION}/deploy/chart/
+
+# OVN_VERSION=0.1.4
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm-infra/ovn-${OVN_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm-infra~893739/revisions/2/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'ovn/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/ovn
+
+# NEUTRON_VERSION=0.3.24
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/neutron-${NEUTRON_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899711/revisions/2/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'neutron/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/neutron
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899684/revisions/4/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'neutron/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/neutron
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899716/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'neutron/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/neutron
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899933/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'neutron/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/neutron
+
+# NOVA_VERISON=0.3.27
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/nova-${NOVA_VERISON}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899809/revisions/2/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'nova/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/nova
+
+# SENLIN_VERSION=0.2.9
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/senlin-${SENLIN_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899913/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'senlin/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/senlin
+
+# DESIGNATE_VERSION=0.2.9
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/designate-${DESIGNATE_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899932/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'designate/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/designate
+
+# HEAT_VERSION=0.3.7
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/heat-${HEAT_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899931/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'heat/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/heat
+
+# OCTAVIA_VERSION=0.2.9
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/octavia-${OCTAVIA_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899918/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'octavia/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/octavia
+
+# MAGNUM_VERSION=0.2.9
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/magnum-${MAGNUM_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899926/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'magnum/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/magnum
+
+# MANILA_VERSION=0.1.7
+# curl -sL https://tarballs.opendev.org/openstack/openstack-helm/manila-${MANILA_VERSION}.tgz \
+#   | tar -xz -C ${ATMOSPHERE}/charts
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~883168/revisions/11/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'manila/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/manila
+# curl 'https://review.opendev.org/changes/openstack%2Fopenstack-helm~899923/revisions/1/patch?download' \
+#   | base64 --decode \
+#   | filterdiff -p1 -x 'releasenotes/*' \
+#   | filterdiff -p2 -x 'Chart.yaml' \
+#   | filterdiff -p1 -i 'manila/*' \
+#   | patch -p2 -d ${ATMOSPHERE}/charts/manila