diff --git a/examples/all.pp b/examples/all.pp index 837ce08d4..7736dbcd4 100644 --- a/examples/all.pp +++ b/examples/all.pp @@ -186,14 +186,13 @@ class { 'nova::consoleauth': enabled => true } -class { 'nova::vncproxy': - host => $public_hostname, -} +class { 'nova::vncproxy': } class { 'nova::compute': enabled => true, vnc_enabled => true, vncserver_proxyclient_address => '127.0.0.1', + vncproxy_host => $public_hostname, } class { 'nova::compute::libvirt': diff --git a/manifests/compute.pp b/manifests/compute.pp index 3ab01b260..24026c17c 100644 --- a/manifests/compute.pp +++ b/manifests/compute.pp @@ -1,11 +1,32 @@ #schedulee this class should probably never be declared except # from the virtualization implementation of the compute node class nova::compute( - $enabled = false, - $vnc_enabled = true, + $enabled = false, + $vnc_enabled = true, $vncserver_proxyclient_address = '127.0.0.1', - $novncproxy_base_url = 'http://127.0.0.1:6080/vnc_auto.html' -) { + $vncproxy_host = false, + $vncproxy_protocol = 'http', + $vncproxy_port = '6080', + $vncproxy_path = '/vnc_auto.html' + ) { + + if ($vnc_enabled) { + if !($vncproxy_host) { + warning("VNC is enabled and \$vncproxy_host must be specified nova::compute assumes that it can collect the exported resource: Nova_config[vncproxy_base_url]") + Nova_config <<| title == 'vncproxy_base_url' |>> + } else { + $vncproxy_base_url = "${vncproxy_protocol}://${vncproxy_host}:${vncproxy_port}${vncproxy_path}" + # config for vnc proxy + nova_config { + 'novncproxy_base_url': value => $vncproxy_base_url; + } + } + } + + nova_config { + 'vnc_enabled': value => $vnc_enabled; + 'vncserver_proxyclient_address': value => $vncserver_proxyclient_address; + } nova::generic_service { 'compute': enabled => $enabled, @@ -14,11 +35,4 @@ class nova::compute( before => Exec['networking-refresh'] } - # config for vnc proxy - nova_config { - 'vnc_enabled': value => $vnc_enabled; - 'vncserver_proxyclient_address': value => $vncserver_proxyclient_address; - 'novncproxy_base_url': value => $novncproxy_base_url; - } - } diff --git a/spec/classes/nova_compute_spec.rb b/spec/classes/nova_compute_spec.rb index 792d60a92..7801c9fe3 100644 --- a/spec/classes/nova_compute_spec.rb +++ b/spec/classes/nova_compute_spec.rb @@ -6,40 +6,70 @@ describe 'nova::compute' do 'include nova' end - describe 'on debian platforms' do - let :facts do - { :osfamily => 'Debian' } + describe 'with required params provided' do + + let :params do + { + :vncproxy_host => '127.0.0.1' + } end - it { should contain_service('nova-compute').with( - 'name' => 'nova-compute', - 'ensure' => 'stopped', - 'enable' => false - )} - it { should contain_package('nova-compute').with( - 'name' => 'nova-compute', - 'ensure' => 'present', - 'notify' => 'Service[nova-compute]' - ) } - describe 'with enabled as true' do - let :params do - {:enabled => true} + + describe 'on debian platforms' do + let :facts do + { :osfamily => 'Debian' } + end + + it { should contain_nova_config('vnc_enabled').with_value('true') } + it { should contain_nova_config('vncserver_proxyclient_address').with_value('127.0.0.1') } + it { should contain_nova_config('novncproxy_base_url').with_value( + 'http://127.0.0.1:6080/vnc_auto.html' + ) } + + it { should contain_service('nova-compute').with( + 'name' => 'nova-compute', + 'ensure' => 'stopped', + 'enable' => false + )} + it { should contain_package('nova-compute').with( + 'name' => 'nova-compute', + 'ensure' => 'present', + 'notify' => 'Service[nova-compute]' + ) } + describe 'with enabled as true' do + let :params do + { + :enabled => true, + :vncproxy_host => '127.0.0.1' + } + end + it { should contain_service('nova-compute').with( + 'name' => 'nova-compute', + 'ensure' => 'running', + 'enable' => true + )} + end + describe 'with vnc_enabled set to false' do + + let :params do + {:vnc_enabled => false} + end + + it { should contain_nova_config('vnc_enabled').with_value('false') } + it { should contain_nova_config('vncserver_proxyclient_address').with('127.0.0.1')} + it { should_not contain_nova_config('novncproxy_base_url') } + end - it { should contain_service('nova-compute').with( - 'name' => 'nova-compute', - 'ensure' => 'running', - 'enable' => true - )} end - end - describe 'on rhel' do - let :facts do - { :osfamily => 'RedHat' } + describe 'on rhel' do + let :facts do + { :osfamily => 'RedHat' } + end + it { should contain_service('nova-compute').with( + 'name' => 'openstack-nova-compute', + 'ensure' => 'stopped', + 'enable' => false + )} + it { should_not contain_package('nova-compute') } end - it { should contain_service('nova-compute').with( - 'name' => 'openstack-nova-compute', - 'ensure' => 'stopped', - 'enable' => false - )} - it { should_not contain_package('nova-compute') } end end