Nova: Add novnc console support
* Keep spice as default console * Add new haproxy listener (6080) * Configure nova::compute and nova::vncproxy Change-Id: Iee10af9f95c413c8d89fc86ef336d14a299a9b9c
This commit is contained in:
parent
091bb9ebe9
commit
121c648960
@ -23,6 +23,14 @@
|
|||||||
# (optional) Hostname or IP to bind Nova spicehtmlproxy service.
|
# (optional) Hostname or IP to bind Nova spicehtmlproxy service.
|
||||||
# Defaults to '127.0.0.1'
|
# Defaults to '127.0.0.1'
|
||||||
#
|
#
|
||||||
|
# [*console*]
|
||||||
|
# (optional) Nova's console type (spice or novnc)
|
||||||
|
# Defaults to 'spice'
|
||||||
|
#
|
||||||
|
# [*novnc_port*]
|
||||||
|
# (optional) TCP port to bind Nova novnc service.
|
||||||
|
# Defaults to '6080'
|
||||||
|
#
|
||||||
# [*spice_port*]
|
# [*spice_port*]
|
||||||
# (optional) TCP port to bind Nova spicehtmlproxy service.
|
# (optional) TCP port to bind Nova spicehtmlproxy service.
|
||||||
# Defaults to '6082'
|
# Defaults to '6082'
|
||||||
@ -34,29 +42,46 @@
|
|||||||
#
|
#
|
||||||
class cloud::compute::consoleproxy(
|
class cloud::compute::consoleproxy(
|
||||||
$api_eth = '127.0.0.1',
|
$api_eth = '127.0.0.1',
|
||||||
|
$console = 'spice',
|
||||||
|
$novnc_port = '6080',
|
||||||
$spice_port = '6082',
|
$spice_port = '6082',
|
||||||
$firewall_settings = {},
|
$firewall_settings = {},
|
||||||
){
|
){
|
||||||
|
|
||||||
include 'cloud::compute'
|
include 'cloud::compute'
|
||||||
|
|
||||||
class { 'nova::spicehtml5proxy':
|
case $console {
|
||||||
|
'spice': {
|
||||||
|
$port = $spice_port
|
||||||
|
$proxy = 'spicehtml5proxy'
|
||||||
|
}
|
||||||
|
'novnc': {
|
||||||
|
$port = $novnc_port
|
||||||
|
$proxy = 'vncproxy'
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
fail("Unsupported console type ${console}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class { "nova::${proxy}":
|
||||||
enabled => true,
|
enabled => true,
|
||||||
host => $api_eth
|
host => $api_eth,
|
||||||
|
port => $port
|
||||||
}
|
}
|
||||||
|
|
||||||
if $::cloud::manage_firewall {
|
if $::cloud::manage_firewall {
|
||||||
cloud::firewall::rule{ '100 allow spice access':
|
cloud::firewall::rule{ "100 allow ${console} access":
|
||||||
port => $spice_port,
|
port => $port,
|
||||||
extras => $firewall_settings,
|
extras => $firewall_settings,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@haproxy::balancermember{"${::fqdn}-compute_spice":
|
@@haproxy::balancermember{"${::fqdn}-compute_${console}":
|
||||||
listening_service => 'spice_cluster',
|
listening_service => "${console}_cluster",
|
||||||
server_names => $::hostname,
|
server_names => $::hostname,
|
||||||
ipaddresses => $api_eth,
|
ipaddresses => $api_eth,
|
||||||
ports => $spice_port,
|
ports => $port,
|
||||||
options => 'check inter 2000 rise 2 fall 5'
|
options => 'check inter 2000 rise 2 fall 5'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,14 @@
|
|||||||
# you must provide the entire ssh privatekey in this parameter.
|
# you must provide the entire ssh privatekey in this parameter.
|
||||||
# Defaults to undef
|
# Defaults to undef
|
||||||
#
|
#
|
||||||
|
# [*console*]
|
||||||
|
# (optional) Nova's console type (spice or novnc)
|
||||||
|
# Defaults to 'spice'
|
||||||
|
#
|
||||||
|
# [*novnc_port*]
|
||||||
|
# (optional) TCP port to connect to Nova vncproxy service.
|
||||||
|
# Defaults to '6080'
|
||||||
|
#
|
||||||
# [*spice_port*]
|
# [*spice_port*]
|
||||||
# (optional) TCP port to connect to Nova spicehtmlproxy service.
|
# (optional) TCP port to connect to Nova spicehtmlproxy service.
|
||||||
# Defaults to '6082'
|
# Defaults to '6082'
|
||||||
@ -106,12 +114,12 @@
|
|||||||
# Need to be a valid shell path.
|
# Need to be a valid shell path.
|
||||||
# Defaults to false
|
# Defaults to false
|
||||||
#
|
#
|
||||||
# [*ks_spice_public_proto*]
|
# [*ks_console_public_proto*]
|
||||||
# (optional) Protocol used to connect to Spice service.
|
# (optional) Protocol used to connect to console service.
|
||||||
# Defaults to false (use nova_public_proto)
|
# Defaults to false (use nova_public_proto)
|
||||||
#
|
#
|
||||||
# [*ks_spice_public_host*]
|
# [*ks_console_public_host*]
|
||||||
# (optional) Hostname or IP used to connect to Spice service.
|
# (optional) Hostname or IP used to connect to console service.
|
||||||
# Defaults to false (use nova_public_host)
|
# Defaults to false (use nova_public_host)
|
||||||
#
|
#
|
||||||
# [*firewall_settings*]
|
# [*firewall_settings*]
|
||||||
@ -126,7 +134,11 @@ class cloud::compute::hypervisor(
|
|||||||
$ks_nova_public_host = '127.0.0.1',
|
$ks_nova_public_host = '127.0.0.1',
|
||||||
$nova_ssh_private_key = undef,
|
$nova_ssh_private_key = undef,
|
||||||
$nova_ssh_public_key = undef,
|
$nova_ssh_public_key = undef,
|
||||||
$spice_port = 6082,
|
$console = 'spice',
|
||||||
|
$novnc_port = '6080',
|
||||||
|
$spice_port = '6082',
|
||||||
|
$ks_console_public_proto = 'http',
|
||||||
|
$ks_console_public_host = '127.0.0.1',
|
||||||
$cinder_rbd_user = 'cinder',
|
$cinder_rbd_user = 'cinder',
|
||||||
$nova_rbd_pool = 'vms',
|
$nova_rbd_pool = 'vms',
|
||||||
$nova_rbd_secret_uuid = undef,
|
$nova_rbd_secret_uuid = undef,
|
||||||
@ -140,8 +152,6 @@ class cloud::compute::hypervisor(
|
|||||||
$nfs_device = false,
|
$nfs_device = false,
|
||||||
$nfs_options = 'defaults',
|
$nfs_options = 'defaults',
|
||||||
$filesystem_store_datadir = '/var/lib/nova/instances',
|
$filesystem_store_datadir = '/var/lib/nova/instances',
|
||||||
$ks_spice_public_proto = 'http',
|
|
||||||
$ks_spice_public_host = '127.0.0.1',
|
|
||||||
) inherits cloud::params {
|
) inherits cloud::params {
|
||||||
|
|
||||||
include 'cloud::compute'
|
include 'cloud::compute'
|
||||||
@ -226,10 +236,11 @@ Host *
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case $console {
|
||||||
|
'spice': {
|
||||||
class { 'nova::compute':
|
class { 'nova::compute':
|
||||||
enabled => true,
|
enabled => true,
|
||||||
vnc_enabled => false,
|
vnc_enabled => false,
|
||||||
#TODO(EmilienM) Bug #1259545 currently WIP:
|
|
||||||
virtio_nic => false,
|
virtio_nic => false,
|
||||||
neutron_enabled => true
|
neutron_enabled => true
|
||||||
}
|
}
|
||||||
@ -237,11 +248,28 @@ Host *
|
|||||||
class { 'nova::compute::spice':
|
class { 'nova::compute::spice':
|
||||||
server_listen => '0.0.0.0',
|
server_listen => '0.0.0.0',
|
||||||
server_proxyclient_address => $server_proxyclient_address,
|
server_proxyclient_address => $server_proxyclient_address,
|
||||||
proxy_host => $ks_spice_public_host,
|
proxy_host => $ks_console_public_host,
|
||||||
proxy_protocol => $ks_spice_public_proto,
|
proxy_protocol => $ks_console_public_proto,
|
||||||
proxy_port => $spice_port
|
proxy_port => $spice_port
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
'novnc': {
|
||||||
|
class { 'nova::compute':
|
||||||
|
enabled => true,
|
||||||
|
vnc_enabled => true,
|
||||||
|
vncserver_proxyclient_address => $server_proxyclient_address,
|
||||||
|
vncproxy_host => $ks_console_public_host,
|
||||||
|
vncproxy_protocol => $ks_console_public_proto,
|
||||||
|
vncproxy_port => $novnc_port,
|
||||||
|
virtio_nic => false,
|
||||||
|
neutron_enabled => true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
fail("upported console type ${console}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if $::osfamily == 'RedHat' {
|
if $::osfamily == 'RedHat' {
|
||||||
file { '/etc/libvirt/qemu.conf':
|
file { '/etc/libvirt/qemu.conf':
|
||||||
|
@ -155,6 +155,13 @@
|
|||||||
# If true, both public and internal will attempt to be created except if vip_internal_ip is set to false.
|
# If true, both public and internal will attempt to be created except if vip_internal_ip is set to false.
|
||||||
# If set to ['10.0.0.1'], only IP in the array (or in the string) will be configured in the pool. They must be part of keepalived_ip options.
|
# If set to ['10.0.0.1'], only IP in the array (or in the string) will be configured in the pool. They must be part of keepalived_ip options.
|
||||||
# If set to false, no binding will be configure.
|
# If set to false, no binding will be configure.
|
||||||
|
# Defaults to true
|
||||||
|
#
|
||||||
|
# [*novnc*]
|
||||||
|
# (optional) Enable or not novnc binding.
|
||||||
|
# If true, both public and internal will attempt to be created except if vip_internal_ip is set to false.
|
||||||
|
# If set to ['10.0.0.1'], only IP in the array (or in the string) will be configured in the pool. They must be part of keepalived_ip options.
|
||||||
|
# If set to false, no binding will be configure.
|
||||||
# Defaults to false
|
# Defaults to false
|
||||||
#
|
#
|
||||||
# [*metadata_api*]
|
# [*metadata_api*]
|
||||||
@ -277,6 +284,11 @@
|
|||||||
# service configuration block.
|
# service configuration block.
|
||||||
# Defaults to []
|
# Defaults to []
|
||||||
#
|
#
|
||||||
|
# [*novnc_bind_options*]
|
||||||
|
# (optional) A hash of options that are inserted into the HAproxy listening
|
||||||
|
# service configuration block.
|
||||||
|
# Defaults to []
|
||||||
|
#
|
||||||
# [*horizon_bind_options*]
|
# [*horizon_bind_options*]
|
||||||
# (optional) A hash of options that are inserted into the HAproxy listening
|
# (optional) A hash of options that are inserted into the HAproxy listening
|
||||||
# service configuration block.
|
# service configuration block.
|
||||||
@ -369,6 +381,10 @@
|
|||||||
# (optional) TCP port to connect to Nova spicehtmlproxy service.
|
# (optional) TCP port to connect to Nova spicehtmlproxy service.
|
||||||
# Defaults to '6082'
|
# Defaults to '6082'
|
||||||
#
|
#
|
||||||
|
# [*novnc_port*]
|
||||||
|
# (optional) TCP port to connect to Nova vncproxy service.
|
||||||
|
# Defaults to '6080'
|
||||||
|
#
|
||||||
# [*rabbitmq_port*]
|
# [*rabbitmq_port*]
|
||||||
# (optional) Port of RabbitMQ service.
|
# (optional) Port of RabbitMQ service.
|
||||||
# Defaults to '5672'
|
# Defaults to '5672'
|
||||||
@ -420,6 +436,7 @@ class cloud::loadbalancer(
|
|||||||
$horizon_ssl = false,
|
$horizon_ssl = false,
|
||||||
$rabbitmq = false,
|
$rabbitmq = false,
|
||||||
$spice = true,
|
$spice = true,
|
||||||
|
$novnc = false,
|
||||||
$haproxy_auth = 'admin:changeme',
|
$haproxy_auth = 'admin:changeme',
|
||||||
$keepalived_state = 'BACKUP',
|
$keepalived_state = 'BACKUP',
|
||||||
$keepalived_priority = '50',
|
$keepalived_priority = '50',
|
||||||
@ -446,6 +463,7 @@ class cloud::loadbalancer(
|
|||||||
$trove_bind_options = [],
|
$trove_bind_options = [],
|
||||||
$swift_bind_options = [],
|
$swift_bind_options = [],
|
||||||
$spice_bind_options = [],
|
$spice_bind_options = [],
|
||||||
|
$novnc_bind_options = [],
|
||||||
$horizon_bind_options = [],
|
$horizon_bind_options = [],
|
||||||
$horizon_ssl_bind_options = [],
|
$horizon_ssl_bind_options = [],
|
||||||
$rabbitmq_bind_options = [],
|
$rabbitmq_bind_options = [],
|
||||||
@ -469,6 +487,7 @@ class cloud::loadbalancer(
|
|||||||
$horizon_port = 80,
|
$horizon_port = 80,
|
||||||
$horizon_ssl_port = 443,
|
$horizon_ssl_port = 443,
|
||||||
$spice_port = 6082,
|
$spice_port = 6082,
|
||||||
|
$novnc_port = 6080,
|
||||||
$vip_public_ip = ['127.0.0.1'],
|
$vip_public_ip = ['127.0.0.1'],
|
||||||
$vip_internal_ip = false,
|
$vip_internal_ip = false,
|
||||||
$vip_monitor_ip = false,
|
$vip_monitor_ip = false,
|
||||||
@ -620,6 +639,19 @@ class cloud::loadbalancer(
|
|||||||
bind_options => $spice_bind_options,
|
bind_options => $spice_bind_options,
|
||||||
firewall_settings => $firewall_settings,
|
firewall_settings => $firewall_settings,
|
||||||
}
|
}
|
||||||
|
cloud::loadbalancer::binding { 'novnc_cluster':
|
||||||
|
ip => $novnc,
|
||||||
|
port => $novnc_port,
|
||||||
|
options => {
|
||||||
|
'mode' => 'tcp',
|
||||||
|
'option' => ['tcpka', 'tcplog', 'forwardfor'],
|
||||||
|
'balance' => 'source',
|
||||||
|
'timeout server' => '120m',
|
||||||
|
'timeout client' => '120m',
|
||||||
|
},
|
||||||
|
bind_options => $novnc_bind_options,
|
||||||
|
firewall_settings => $firewall_settings,
|
||||||
|
}
|
||||||
cloud::loadbalancer::binding { 'rabbitmq_cluster':
|
cloud::loadbalancer::binding { 'rabbitmq_cluster':
|
||||||
ip => $rabbitmq,
|
ip => $rabbitmq,
|
||||||
port => $rabbitmq_port,
|
port => $rabbitmq_port,
|
||||||
|
@ -90,10 +90,26 @@ describe 'cloud::compute::consoleproxy' do
|
|||||||
it 'configure nova-spicehtml5proxy' do
|
it 'configure nova-spicehtml5proxy' do
|
||||||
is_expected.to contain_class('nova::spicehtml5proxy').with(
|
is_expected.to contain_class('nova::spicehtml5proxy').with(
|
||||||
:enabled => true,
|
:enabled => true,
|
||||||
:host => '10.0.0.1'
|
:host => '10.0.0.1',
|
||||||
|
:port => '6082'
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'with novnc console' do
|
||||||
|
before :each do
|
||||||
|
params.merge!(
|
||||||
|
:console => 'novnc',
|
||||||
|
:novnc_port => '6080' )
|
||||||
|
end
|
||||||
|
it 'configure nova-vncproxy' do
|
||||||
|
is_expected.to contain_class('nova::vncproxy').with(
|
||||||
|
:enabled => true,
|
||||||
|
:host => '10.0.0.1',
|
||||||
|
:port => '6080'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'with default firewall enabled' do
|
context 'with default firewall enabled' do
|
||||||
let :pre_condition do
|
let :pre_condition do
|
||||||
"class { 'cloud': manage_firewall => true }"
|
"class { 'cloud': manage_firewall => true }"
|
||||||
|
@ -71,8 +71,8 @@ describe 'cloud::compute::hypervisor' do
|
|||||||
:nova_ssh_private_key => 'secrete',
|
:nova_ssh_private_key => 'secrete',
|
||||||
:nova_ssh_public_key => 'public',
|
:nova_ssh_public_key => 'public',
|
||||||
:ks_nova_public_proto => 'http',
|
:ks_nova_public_proto => 'http',
|
||||||
:ks_spice_public_proto => 'https',
|
:ks_console_public_proto => 'https',
|
||||||
:ks_spice_public_host => '10.0.0.2',
|
:ks_console_public_host => '10.0.0.2',
|
||||||
:vm_rbd => false,
|
:vm_rbd => false,
|
||||||
:volume_rbd => false,
|
:volume_rbd => false,
|
||||||
:nova_shell => false,
|
:nova_shell => false,
|
||||||
@ -235,6 +235,26 @@ describe 'cloud::compute::hypervisor' do
|
|||||||
is_expected.to contain_nova_config('libvirt/block_migration_flag').with('value' => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC')
|
is_expected.to contain_nova_config('libvirt/block_migration_flag').with('value' => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'witch novnc console' do
|
||||||
|
before :each do
|
||||||
|
params.merge!(
|
||||||
|
:console => 'novnc',
|
||||||
|
:novnc_port => '6080' )
|
||||||
|
end
|
||||||
|
it 'configure nova-compute' do
|
||||||
|
is_expected.to contain_class('nova::compute').with(
|
||||||
|
:enabled => true,
|
||||||
|
:vnc_enabled => true,
|
||||||
|
:vncserver_proxyclient_address => '7.0.0.1',
|
||||||
|
:vncproxy_host => '10.0.0.2',
|
||||||
|
:vncproxy_protocol => 'https',
|
||||||
|
:vncproxy_port => '6080',
|
||||||
|
:virtio_nic => false,
|
||||||
|
:neutron_enabled => true
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'with dbus on Ubuntu' do
|
context 'with dbus on Ubuntu' do
|
||||||
let :facts do
|
let :facts do
|
||||||
{ :osfamily => 'Debian',
|
{ :osfamily => 'Debian',
|
||||||
|
@ -273,6 +273,26 @@ describe 'cloud::loadbalancer' do
|
|||||||
)}
|
)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'configure Openstack Nova with novnc' do
|
||||||
|
before do
|
||||||
|
params.merge!(
|
||||||
|
:spice => false,
|
||||||
|
:novnc => true,
|
||||||
|
:novnc_port => 6080 )
|
||||||
|
end
|
||||||
|
it { is_expected.to contain_haproxy__listen('novnc_cluster').with(
|
||||||
|
:ipaddress => [params[:vip_public_ip]],
|
||||||
|
:ports => '6080',
|
||||||
|
:options => {
|
||||||
|
'mode' => 'tcp',
|
||||||
|
'balance' => 'source',
|
||||||
|
'option' => ['tcpka', 'tcplog', 'forwardfor'],
|
||||||
|
'timeout server' => '120m',
|
||||||
|
'timeout client' => '120m'
|
||||||
|
}
|
||||||
|
)}
|
||||||
|
end
|
||||||
|
|
||||||
context 'configure OpenStack binding on both public and internal networks' do
|
context 'configure OpenStack binding on both public and internal networks' do
|
||||||
before do
|
before do
|
||||||
params.merge!(
|
params.merge!(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user