aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ansible/group_vars/all/nova.yml15
-rw-r--r--ansible/roles/loadbalancer/tasks/precheck.yml1
-rw-r--r--ansible/roles/nova-cell/defaults/main.yml2
-rw-r--r--ansible/roles/nova-cell/tasks/loadbalancer.yml6
-rw-r--r--ansible/roles/nova-cell/templates/nova.conf.j211
-rw-r--r--doc/source/reference/compute/nova-guide.rst15
-rw-r--r--releasenotes/notes/expose-additional-spice-configuration-6ea8eedf4545ff04.yaml9
7 files changed, 49 insertions, 10 deletions
diff --git a/ansible/group_vars/all/nova.yml b/ansible/group_vars/all/nova.yml
index f1996cd73..4b116200a 100644
--- a/ansible/group_vars/all/nova.yml
+++ b/ansible/group_vars/all/nova.yml
@@ -58,12 +58,19 @@ nova_novncproxy_fqdn: "{{ kolla_external_fqdn }}"
nova_novncproxy_port: "6080"
nova_novncproxy_listen_port: "{{ nova_novncproxy_port }}"
nova_novncproxy_public_port: "{{ haproxy_single_external_frontend_public_port if haproxy_single_external_frontend | bool else nova_novncproxy_port }}"
-nova_spicehtml5proxy_fqdn: "{{ kolla_external_fqdn }}"
-nova_spicehtml5proxy_port: "6082"
-nova_spicehtml5proxy_listen_port: "{{ nova_spicehtml5proxy_port }}"
-nova_spicehtml5proxy_public_port: "{{ haproxy_single_external_frontend_public_port if haproxy_single_external_frontend | bool else nova_spicehtml5proxy_port }}"
nova_serialproxy_fqdn: "{{ kolla_external_fqdn }}"
nova_serialproxy_port: "6083"
nova_serialproxy_listen_port: "{{ nova_serialproxy_port }}"
nova_serialproxy_public_port: "{{ haproxy_single_external_frontend_public_port if haproxy_single_external_frontend | bool else nova_serialproxy_port }}"
nova_serialproxy_protocol: "{{ 'wss' if kolla_enable_tls_external | bool else 'ws' }}"
+
+nova_spicehtml5proxy_fqdn: "{{ kolla_external_fqdn }}"
+nova_spicehtml5proxy_port: "6082"
+nova_spicehtml5proxy_listen_port: "{{ nova_spicehtml5proxy_port }}"
+nova_spicehtml5proxy_public_port: "{{ haproxy_single_external_frontend_public_port if haproxy_single_external_frontend | bool else nova_spicehtml5proxy_port }}"
+nova_spice_html5: true
+nova_spice_image_compression: "auto_glz"
+nova_spice_jpeg_compression: "auto"
+nova_spice_zlib_compression: "auto"
+nova_spice_playback_compression: true
+nova_spice_streaming_mode: "filter"
diff --git a/ansible/roles/loadbalancer/tasks/precheck.yml b/ansible/roles/loadbalancer/tasks/precheck.yml
index f9b7a63c8..73e3a1566 100644
--- a/ansible/roles/loadbalancer/tasks/precheck.yml
+++ b/ansible/roles/loadbalancer/tasks/precheck.yml
@@ -608,6 +608,7 @@
when:
- enable_nova | bool
- nova_console == 'spice'
+ - nova_spice_html5 | bool
- inventory_hostname in groups['loadbalancer']
- haproxy_stat.find('nova_spicehtml5proxy') == -1
- haproxy_vip_prechecks
diff --git a/ansible/roles/nova-cell/defaults/main.yml b/ansible/roles/nova-cell/defaults/main.yml
index ce66c7015..6979408e9 100644
--- a/ansible/roles/nova-cell/defaults/main.yml
+++ b/ansible/roles/nova-cell/defaults/main.yml
@@ -33,7 +33,7 @@ nova_cell_services:
container_name: "nova_spicehtml5proxy"
group: "{{ nova_cell_spicehtml5proxy_group }}"
image: "{{ nova_spicehtml5proxy_image_full }}"
- enabled: "{{ nova_console == 'spice' }}"
+ enabled: "{{ nova_console == 'spice' and (nova_spice_html5 | bool) }}"
volumes: "{{ nova_spicehtml5proxy_default_volumes + nova_spicehtml5proxy_extra_volumes }}"
dimensions: "{{ nova_spicehtml5proxy_dimensions }}"
healthcheck: "{{ nova_spicehtml5proxy_healthcheck }}"
diff --git a/ansible/roles/nova-cell/tasks/loadbalancer.yml b/ansible/roles/nova-cell/tasks/loadbalancer.yml
index 33919f749..5c18a37c4 100644
--- a/ansible/roles/nova-cell/tasks/loadbalancer.yml
+++ b/ansible/roles/nova-cell/tasks/loadbalancer.yml
@@ -73,10 +73,10 @@
cell_proxy_project_services:
nova-spicehtml5proxy:
group: "{{ nova_cell_spicehtml5proxy_group }}"
- enabled: "{{ hostvars[groups[cell_proxy_group][0]]['nova_console'] == 'spice' }}"
+ enabled: "{{ hostvars[groups[cell_proxy_group][0]]['nova_console'] == 'spice' and (nova_spice_html5 | bool) }}"
haproxy:
nova_spicehtml5proxy:
- enabled: "{{ hostvars[groups[cell_proxy_group][0]]['nova_console'] == 'spice' }}"
+ enabled: "{{ hostvars[groups[cell_proxy_group][0]]['nova_console'] == 'spice' and (nova_spice_html5 | bool) }}"
mode: "http"
external: false
port: "{{ hostvars[groups[cell_proxy_group][0]]['nova_spicehtml5proxy_port'] }}"
@@ -84,7 +84,7 @@
backend_http_extra:
- "timeout tunnel {{ haproxy_nova_spicehtml5_proxy_tunnel_timeout }}"
nova_spicehtml5proxy_external:
- enabled: "{{ hostvars[groups[cell_proxy_group][0]]['nova_console'] == 'spice' }}"
+ enabled: "{{ hostvars[groups[cell_proxy_group][0]]['nova_console'] == 'spice' and (nova_spice_html5 | bool) }}"
mode: "http"
external: true
external_fqdn: "{{ hostvars[groups[cell_proxy_group][0]]['nova_spicehtml5proxy_fqdn'] }}"
diff --git a/ansible/roles/nova-cell/templates/nova.conf.j2 b/ansible/roles/nova-cell/templates/nova.conf.j2
index 5e98a8c9f..4f5c2f88d 100644
--- a/ansible/roles/nova-cell/templates/nova.conf.j2
+++ b/ansible/roles/nova-cell/templates/nova.conf.j2
@@ -62,12 +62,19 @@ enabled = false
[spice]
enabled = true
server_listen = {{ api_interface_address }}
+image_compression = {{ nova_spice_image_compression }}
+jpeg_compression = {{ nova_spice_jpeg_compression }}
+zlib_compression = {{ nova_spice_zlib_compression }}
+playback_compression = {{ nova_spice_playback_compression }}
+streaming_mode = {{ nova_spice_streaming_mode }}
+{% if nova_spice_html5 | bool %}
server_proxyclient_address = {{ api_interface_address }}
-{% if inventory_hostname in groups[nova_cell_compute_group] %}
+{% if inventory_hostname in groups[nova_cell_compute_group] %}
html5proxy_base_url = {{ nova_spicehtml5proxy_fqdn | kolla_url(public_protocol, nova_spicehtml5proxy_public_port, '/spice_auto.html') }}
-{% endif %}
+{% endif %}
html5proxy_host = {{ api_interface_address }}
html5proxy_port = {{ nova_spicehtml5proxy_listen_port }}
+{% endif %}
{% elif nova_console == 'none' %}
[vnc]
enabled = false
diff --git a/doc/source/reference/compute/nova-guide.rst b/doc/source/reference/compute/nova-guide.rst
index 8e083f241..87757f930 100644
--- a/doc/source/reference/compute/nova-guide.rst
+++ b/doc/source/reference/compute/nova-guide.rst
@@ -45,6 +45,21 @@ Valid options are ``none``, ``novnc`` and ``spice``. Additionally,
serial console support can be enabled by setting
``enable_nova_serialconsole_proxy`` to ``yes``.
+``spice`` consoles have additional configuration options used by Kolla Ansible:
+
+* nova_spice_html5: configures whether the HTML5 transcoding proxy used by
+ Horizon is enabled, and defaults to ``true``.
+* nova_spice_image_compression: which compression algorithm to use for images
+ when using the SPICE console type. Defaults to ``auto_glz``.
+* nova_spice_jpeg_compression: whether or not to use JPEG compression with
+ SPICE consoles. Defaults to ``auto``.
+* nova_spice_zlib_compression: whether or not to use zlib compression with
+ SPICE consoles. Defaults to ``auto``.
+* nova_spice_playback_compression: whether or not to use compression for video
+ playback. Defaults to ``true``.
+* nova_spice_streaming_mode: what streaming mode to use with SPICE consoles.
+ Defaults to ``filter``.
+
Cells
=====
diff --git a/releasenotes/notes/expose-additional-spice-configuration-6ea8eedf4545ff04.yaml b/releasenotes/notes/expose-additional-spice-configuration-6ea8eedf4545ff04.yaml
new file mode 100644
index 000000000..c03b60e0d
--- /dev/null
+++ b/releasenotes/notes/expose-additional-spice-configuration-6ea8eedf4545ff04.yaml
@@ -0,0 +1,9 @@
+---
+other:
+ - |
+ This release exposes additional configuration options for OpenStack
+ Compute consoles which utilize the SPICE protocol. These configuration
+ options have been defaulted to the previous implied values, so do not
+ need to be set if you're happy with the current behavior. The
+ Kolla-Ansible Nova guide has been updated with further details of these
+ new configuration options.