diff --git a/ansible/roles/haproxy/tasks/deploy.yml b/ansible/roles/haproxy/tasks/deploy.yml
index 47683248986b68ab1374c7ef990e66fe3bfddfe8..e2768de7e2e2a4d5edf0b3a63486346e53360bc1 100644
--- a/ansible/roles/haproxy/tasks/deploy.yml
+++ b/ansible/roles/haproxy/tasks/deploy.yml
@@ -3,5 +3,7 @@
 
 - include_tasks: config.yml
 
-- name: Flush handlers
-  meta: flush_handlers
+# NOTE(yoctozepto): haproxy role handlers should not be flushed early.
+# site.yml handles all haproxy things in a dedicated play.
+# This is to avoid extra haproxy service restart.
+# See: https://bugs.launchpad.net/kolla-ansible/+bug/1875228
diff --git a/ansible/roles/haproxy/tasks/upgrade.yml b/ansible/roles/haproxy/tasks/upgrade.yml
index ad22684c4b1061bf8828ab5fd74cf64c7504c132..32a5d4d71626ad63fe349d6ff3aeb530860eb272 100644
--- a/ansible/roles/haproxy/tasks/upgrade.yml
+++ b/ansible/roles/haproxy/tasks/upgrade.yml
@@ -16,5 +16,7 @@
   notify:
     - Restart keepalived container
 
-- name: Flush handlers
-  meta: flush_handlers
+# NOTE(yoctozepto): haproxy role handlers should not be flushed early.
+# site.yml handles all haproxy things in a dedicated play.
+# This is to avoid extra haproxy service restart.
+# See: https://bugs.launchpad.net/kolla-ansible/+bug/1875228
diff --git a/releasenotes/notes/bug-1864810-5a5d0f91c0171b19.yaml b/releasenotes/notes/bug-1864810-5a5d0f91c0171b19.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..a21654fb1324b41d0d996835ff6443c78454f79c
--- /dev/null
+++ b/releasenotes/notes/bug-1864810-5a5d0f91c0171b19.yaml
@@ -0,0 +1,7 @@
+---
+fixes:
+  - |
+    Fixes haproxy role to avoid restarting haproxy service multiple times
+    in a single Ansible run.
+    `LP#1864810 <https://launchpad.net/bugs/1864810>`__
+    `LP#1875228 <https://launchpad.net/bugs/1875228>`__