Add the support to customize the console access port

For novnc, need to set novncproxy_port in proxy nodes and
novncproxy_base_url in nova-compute nodes.
For xvpvnc, need to set xvpvncproxy_port in proxy nodes and
xvpvncproxy_base_url in nova-compute nodes.
For spice, need to set spicehtml5proxy_port in proxy nodes and
spicehtml5proxy_base_url in nova-compute nodes.

When release >= Mitaka, novncproxy_port and xvpvncproxy_port
are moved from [default] section into [vnc] section.
spicehtml5proxy_port is renamed to html5proxy_port and moved
to [spice] section.

So eventually the console access port can be customized by:

juju config nova-cloud-controller console-access-protocol=novnc
juju config nova-cloud-controller console-access-port=xx

If console-access-port is not defined, then default port is 6080
for novpc, 6081 for xvpvnc, 6082 for spice.

Change-Id: I4775ad42ba11b0c28163bf7e3718c56d18a2031f
Closes-Bug: #1800753
Signed-off-by: Zhang Hua <joshua.zhang@canonical.com>
This commit is contained in:
Zhang Hua 2018-11-26 16:51:30 +08:00
parent ba19f921c5
commit b182ffa7f7
14 changed files with 116 additions and 0 deletions

View File

@ -149,6 +149,11 @@ options:
description: |
Protocol to use when accessing virtual machine console. Supported types
are None, spice, xvpvnc, novnc and vnc (for both xvpvnc and novnc).
console-access-port:
type: int
default:
description: |
Used to customize the console access port.
console-proxy-ip:
type: string
default: local

View File

@ -73,5 +73,7 @@ def console_attributes(attr, proto=None):
else:
return None
if console_proto in CONSOLE_CONFIG:
if attr == 'proxy-port' and hookenv.config('console-access-port'):
return hookenv.config('console-access-port')
return CONSOLE_CONFIG[console_proto][attr]
return None

View File

@ -377,6 +377,9 @@ class NovaConfigContext(ch_context.WorkerConfigContext):
ctxt['quota_server_groups'] = hookenv.config('quota-server-groups')
ctxt['quota_server_group_members'] = hookenv.config(
'quota-server-group-members')
ctxt['console_access_protocol'] = hookenv.config(
'console-access-protocol')
ctxt['console_access_port'] = hookenv.config('console-access-port')
return ctxt

View File

@ -28,6 +28,15 @@ metadata_host = {{ bind_host }}
s3_listen = {{ bind_host }}
ec2_listen = {{ bind_host }}
enable_new_services = {{ enable_new_services }}
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'spice' -%}
spicehtml5proxy_port = {{ console_access_port }}
{% endif %}
osapi_compute_workers = {{ workers }}
ec2_workers = {{ workers }}

View File

@ -28,6 +28,15 @@ metadata_host = {{ bind_host }}
s3_listen = {{ bind_host }}
ec2_listen = {{ bind_host }}
enable_new_services = {{ enable_new_services }}
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'spice' -%}
spicehtml5proxy_port = {{ console_access_port }}
{% endif %}
osapi_compute_workers = {{ workers }}
ec2_workers = {{ workers }}

View File

@ -27,6 +27,15 @@ metadata_host = {{ bind_host }}
s3_listen = {{ bind_host }}
ec2_listen = {{ bind_host }}
enable_new_services = {{ enable_new_services }}
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'spice' -%}
spicehtml5proxy_port = {{ console_access_port }}
{% endif %}
osapi_compute_workers = {{ workers }}
ec2_workers = {{ workers }}

View File

@ -27,6 +27,15 @@ metadata_host = {{ bind_host }}
s3_listen = {{ bind_host }}
ec2_listen = {{ bind_host }}
enable_new_services = {{ enable_new_services }}
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'spice' -%}
spicehtml5proxy_port = {{ console_access_port }}
{% endif %}
osapi_compute_workers = {{ workers }}
ec2_workers = {{ workers }}

View File

@ -197,8 +197,19 @@ workers = {{ workers }}
[oslo_concurrency]
lock_path=/var/lock/nova
[vnc]
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
[spice]
{% include "parts/spice" %}
{% if console_access_port and console_access_protocol == 'spice' -%}
html5proxy_port = {{ console_access_port }}
{% endif %}
{% include "parts/section-serial-console" %}

View File

@ -194,8 +194,19 @@ workers = {{ workers }}
[oslo_concurrency]
lock_path=/var/lock/nova
[vnc]
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
[spice]
{% include "parts/spice" %}
{% if console_access_port and console_access_protocol == 'spice' -%}
html5proxy_port = {{ console_access_port }}
{% endif %}
{% include "parts/section-serial-console" %}

View File

@ -150,8 +150,19 @@ workers = {{ workers }}
[oslo_concurrency]
lock_path=/var/lock/nova
[vnc]
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
[spice]
{% include "parts/spice" %}
{% if console_access_port and console_access_protocol == 'spice' -%}
html5proxy_port = {{ console_access_port }}
{% endif %}
{% include "parts/section-serial-console" %}

View File

@ -157,8 +157,19 @@ notification_format = unversioned
[oslo_concurrency]
lock_path=/var/lock/nova
[vnc]
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
[spice]
{% include "parts/spice" %}
{% if console_access_port and console_access_protocol == 'spice' -%}
html5proxy_port = {{ console_access_port }}
{% endif %}
{% include "parts/section-serial-console" %}

View File

@ -163,8 +163,19 @@ notification_format = unversioned
[oslo_concurrency]
lock_path=/var/lock/nova
[vnc]
{% if console_access_port and console_access_protocol == 'novnc' -%}
novncproxy_port = {{ console_access_port }}
{% endif %}
{% if console_access_port and console_access_protocol == 'xvpvnc' -%}
xvpvncproxy_port = {{ console_access_port }}
{% endif %}
[spice]
{% include "parts/spice" %}
{% if console_access_port and console_access_protocol == 'spice' -%}
html5proxy_port = {{ console_access_port }}
{% endif %}
{% include "parts/section-serial-console" %}

View File

@ -372,6 +372,10 @@ class NovaComputeContextTests(CharmTestCase):
self.assertEqual(ctxt['quota_server_group_members'], None)
self.assertEqual(ctxt['enable_new_services'],
self.config('enable-new-services'))
self.assertEqual(ctxt['console_access_protocol'],
self.config('console-access-protocol'))
self.assertEqual(ctxt['console_access_port'],
self.config('console-access-port'))
_pci_alias1 = {
"name": "IntelNIC",

View File

@ -407,6 +407,17 @@ class NovaCCUtilsTests(CharmTestCase):
self.assertEqual(sorted(_pkgs), sorted(vnc_pkgs))
self.assertEqual(_proxy_page, None)
def test_console_attributes_console_access_port(self):
self.test_config.set('console-access-port', '6080')
_proxy_port = utils.common.console_attributes('proxy-port', 'novnc')
self.assertEqual(_proxy_port, '6080')
self.test_config.set('console-access-port', '6081')
_proxy_port = utils.common.console_attributes('proxy-port', 'xvpvnc')
self.assertEqual(_proxy_port, '6081')
self.test_config.set('console-access-port', '6082')
_proxy_port = utils.common.console_attributes('proxy-port', 'spice')
self.assertEqual(_proxy_port, '6082')
def test_database_setup(self):
self.relation_ids.return_value = ['shared-db:12']
self.related_units.return_value = ['mysql/0']