From c281a018c41bf1819d6b92343ef4871337702e6f Mon Sep 17 00:00:00 2001
From: Michal Arbet <michal.arbet@ultimum.io>
Date: Fri, 30 Jul 2021 14:44:39 +0200
Subject: [PATCH] Fix freezed spice console in horizon

This trivial patch is setting "timeout tunnel" in haproxy's
configuration for spicehtml5proxy. This option extends time
when spice's websocket connection is closed, so spice will
not be freezed. Default value is set to 1h as it is in novnc.

Closes-Bug: #1938549
Change-Id: I3a5cd98ecf4916ebd0748e7c08111ad0e4dca0b2
---
 ansible/roles/nova-cell/defaults/main.yml            |  1 +
 ansible/roles/nova-cell/tasks/loadbalancer.yml       |  4 ++++
 releasenotes/notes/bug-1938549-e73042a61f0a5935.yaml | 10 ++++++++++
 3 files changed, 15 insertions(+)
 create mode 100644 releasenotes/notes/bug-1938549-e73042a61f0a5935.yaml

diff --git a/ansible/roles/nova-cell/defaults/main.yml b/ansible/roles/nova-cell/defaults/main.yml
index afbd995fdb..4a8bd38dc9 100644
--- a/ansible/roles/nova-cell/defaults/main.yml
+++ b/ansible/roles/nova-cell/defaults/main.yml
@@ -410,6 +410,7 @@ nova_cell_bootstrap_extra_volumes: "{{ nova_extra_volumes }}"
 # HAProxy
 ####################
 haproxy_nova_serialconsole_proxy_tunnel_timeout: "10m"
+haproxy_nova_spicehtml5_proxy_tunnel_timeout: "1h"
 
 ####################
 # OpenStack
diff --git a/ansible/roles/nova-cell/tasks/loadbalancer.yml b/ansible/roles/nova-cell/tasks/loadbalancer.yml
index 13d685fa1f..61c6d16d00 100644
--- a/ansible/roles/nova-cell/tasks/loadbalancer.yml
+++ b/ansible/roles/nova-cell/tasks/loadbalancer.yml
@@ -78,12 +78,16 @@
             external: false
             port: "{{ hostvars[groups[cell_proxy_group][0]]['nova_spicehtml5proxy_port'] }}"
             listen_port: "{{ hostvars[groups[cell_proxy_group][0]]['nova_spicehtml5proxy_listen_port'] }}"
+            backend_http_extra:
+              - "timeout tunnel {{ haproxy_nova_spicehtml5_proxy_tunnel_timeout }}"
           nova_spicehtml5proxy_external:
             enabled: "{{ hostvars[groups[cell_proxy_group][0]]['nova_console'] == 'spice' }}"
             mode: "http"
             external: true
             port: "{{ hostvars[groups[cell_proxy_group][0]]['nova_spicehtml5proxy_port'] }}"
             listen_port: "{{ hostvars[groups[cell_proxy_group][0]]['nova_spicehtml5proxy_listen_port'] }}"
+            backend_http_extra:
+              - "timeout tunnel {{ haproxy_nova_spicehtml5_proxy_tunnel_timeout }}"
   tags: always
 
 - import_tasks: proxy_loadbalancer.yml
diff --git a/releasenotes/notes/bug-1938549-e73042a61f0a5935.yaml b/releasenotes/notes/bug-1938549-e73042a61f0a5935.yaml
new file mode 100644
index 0000000000..6a88b4d9ca
--- /dev/null
+++ b/releasenotes/notes/bug-1938549-e73042a61f0a5935.yaml
@@ -0,0 +1,10 @@
+---
+features:
+  - |
+    Adds config parameter ``haproxy_nova_spicehtml5_proxy_tunnel_timeout``
+    to configure the ``Tunnel TimeOut`` directive for spicehtml5proxy
+    haproxy service.
+fixes:
+  - |
+    Fixes an issue where spice console is freezed after while,
+    see `LP#1938549 <https://launchpad.net/bugs/1938549>`__.
-- 
GitLab