fix: add asseriton for ovs upgrade
diff --git a/playbooks/openstack.yml b/playbooks/openstack.yml
index db8eda5..25a7913 100644
--- a/playbooks/openstack.yml
+++ b/playbooks/openstack.yml
@@ -102,10 +102,18 @@
       tags:
         - placement
 
+- name: Deploy Open vSwitch
+  hosts: controllers:computes
+  become: true
+  gather_facts: false
+  roles:
     - role: openvswitch
       tags:
         - openvswitch
 
+- hosts: controllers[0]
+  become: true
+  roles:
     - role: libvirt
       tags:
         - libvirt
diff --git a/roles/openvswitch/tasks/main.yml b/roles/openvswitch/tasks/main.yml
index 908b004..9b3b1d5 100644
--- a/roles/openvswitch/tasks/main.yml
+++ b/roles/openvswitch/tasks/main.yml
@@ -12,6 +12,21 @@
 # License for the specific language governing permissions and limitations
 # under the License.
 
+# NOTE(mnaser): Open vSwitch will refuse to start if `DefaultLimitMEMLOCK` is
+#               not set to `infinity` in `/etc/systemd/system.conf`, so we run
+#               this task to ensure that it is set.
+- name: Verify that DefaultLimitMEMLOCK is configured
+  block:
+    - name: Get the current status of all systemd values
+      changed_when: false
+      ansible.builtin.command: systemctl show --property DefaultLimitMEMLOCK # noqa: command-instead-of-module
+      register: _openvswitch_memlock_value
+
+    - name: Assert that DefaultLimitMEMLOCK is set to infinity
+      ansible.builtin.assert:
+        that:
+          - "'DefaultLimitMEMLOCK=infinity' in _openvswitch_memlock_value.stdout"
+
 - name: Uninstall the legacy HelmRelease
   run_once: true
   block:
diff --git a/roles/upload_helm_chart/tasks/main.yml b/roles/upload_helm_chart/tasks/main.yml
index 02bcfaf..b650da8 100644
--- a/roles/upload_helm_chart/tasks/main.yml
+++ b/roles/upload_helm_chart/tasks/main.yml
@@ -1,4 +1,5 @@
 - name: Upload Helm chart
+  run_once: true
   ansible.posix.synchronize:
     src: "{{ upload_helm_chart_src }}"
     dest: "{{ upload_helm_chart_dest }}"