diff --git a/config.yaml b/config.yaml index c7616838..58f9b73a 100644 --- a/config.yaml +++ b/config.yaml @@ -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 diff --git a/hooks/nova_cc_common.py b/hooks/nova_cc_common.py index 1a89a610..4abd7763 100644 --- a/hooks/nova_cc_common.py +++ b/hooks/nova_cc_common.py @@ -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 diff --git a/hooks/nova_cc_context.py b/hooks/nova_cc_context.py index 02b4a730..a3eb0bd1 100644 --- a/hooks/nova_cc_context.py +++ b/hooks/nova_cc_context.py @@ -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 diff --git a/templates/icehouse/nova.conf b/templates/icehouse/nova.conf index b05096d3..ffa62be9 100644 --- a/templates/icehouse/nova.conf +++ b/templates/icehouse/nova.conf @@ -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 }} diff --git a/templates/juno/nova.conf b/templates/juno/nova.conf index 2fde0ff2..25a1b80f 100644 --- a/templates/juno/nova.conf +++ b/templates/juno/nova.conf @@ -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 }} diff --git a/templates/kilo/nova.conf b/templates/kilo/nova.conf index 05a64eaf..9d2c5a35 100644 --- a/templates/kilo/nova.conf +++ b/templates/kilo/nova.conf @@ -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 }} diff --git a/templates/liberty/nova.conf b/templates/liberty/nova.conf index c5e10344..30d51476 100644 --- a/templates/liberty/nova.conf +++ b/templates/liberty/nova.conf @@ -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 }} diff --git a/templates/mitaka/nova.conf b/templates/mitaka/nova.conf index d63990e3..de667269 100644 --- a/templates/mitaka/nova.conf +++ b/templates/mitaka/nova.conf @@ -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" %} diff --git a/templates/newton/nova.conf b/templates/newton/nova.conf index e0500b5f..8c8a4410 100644 --- a/templates/newton/nova.conf +++ b/templates/newton/nova.conf @@ -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" %} diff --git a/templates/ocata/nova.conf b/templates/ocata/nova.conf index 6c6a5192..9b5c6366 100644 --- a/templates/ocata/nova.conf +++ b/templates/ocata/nova.conf @@ -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" %} diff --git a/templates/pike/nova.conf b/templates/pike/nova.conf index db81ed77..e70437a1 100644 --- a/templates/pike/nova.conf +++ b/templates/pike/nova.conf @@ -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" %} diff --git a/templates/rocky/nova.conf b/templates/rocky/nova.conf index f5b2c729..ca3a830c 100644 --- a/templates/rocky/nova.conf +++ b/templates/rocky/nova.conf @@ -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" %} diff --git a/unit_tests/test_nova_cc_contexts.py b/unit_tests/test_nova_cc_contexts.py index e2ee0774..03a58db1 100644 --- a/unit_tests/test_nova_cc_contexts.py +++ b/unit_tests/test_nova_cc_contexts.py @@ -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", diff --git a/unit_tests/test_nova_cc_utils.py b/unit_tests/test_nova_cc_utils.py index af5938b8..ab92ec4a 100644 --- a/unit_tests/test_nova_cc_utils.py +++ b/unit_tests/test_nova_cc_utils.py @@ -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']