diff --git a/manifests/compute/libvirt/version.pp b/manifests/compute/libvirt/version.pp index f89e9bfc1..b3c0240de 100644 --- a/manifests/compute/libvirt/version.pp +++ b/manifests/compute/libvirt/version.pp @@ -32,8 +32,8 @@ class nova::compute::libvirt::version { } } 'Debian': { - if versioncmp($facts['os']['release']['full'], '18.10') >= 0 { - $default = '4.6' + if versioncmp($facts['os']['release']['full'], '18.04') >= 0 { + $default = '6.0' } else { $default = '4.0' } diff --git a/manifests/migration/libvirt.pp b/manifests/migration/libvirt.pp index 81e1fb723..074ae2d33 100644 --- a/manifests/migration/libvirt.pp +++ b/manifests/migration/libvirt.pp @@ -237,33 +237,35 @@ class nova::migration::libvirt( } } - case $::osfamily { - 'RedHat': { - if versioncmp($libvirt_version, '5.6') >= 0 { - $manage_services = pick($::nova::compute::libvirt::manage_libvirt_services, true) + if versioncmp($libvirt_version, '5.6') >= 0 { + # Since libvirt >= 5.6 and libvirtd is managed by systemd, + # system socket should be activated by systemd, not by --listen option + $manage_services = pick($::nova::compute::libvirt::manage_libvirt_services, true) - if $manage_services { - if $transport_real == 'tls' { - service { 'libvirtd-tls': - ensure => 'running', - name => 'libvirtd-tls.socket', - enable => true, - require => Anchor['nova::config::end'] - } - Service['libvirtd-tls'] -> Service<| title == 'libvirt' |> - } elsif $transport_real == 'tcp' { - service { 'libvirtd-tcp': - ensure => 'running', - name => 'libvirtd-tcp.socket', - enable => true, - require => Anchor['nova::config::end'] - } - Service['libvirtd-tcp'] -> Service<| title == 'libvirt' |> - } + if $manage_services { + if $transport_real == 'tls' { + service { 'libvirtd-tls': + ensure => 'running', + name => 'libvirtd-tls.socket', + enable => true, + require => Anchor['nova::config::end'] } - - } else { - if $transport_real != 'ssh' { + Service['libvirtd-tls'] -> Service<| title == 'libvirt' |> + } elsif $transport_real == 'tcp' { + service { 'libvirtd-tcp': + ensure => 'running', + name => 'libvirtd-tcp.socket', + enable => true, + require => Anchor['nova::config::end'] + } + Service['libvirtd-tcp'] -> Service<| title == 'libvirt' |> + } + } + } else { + # For older libvirt --listen option should be used. + if $transport_real == 'tls' or $transport_real == 'tcp' { + case $::osfamily { + 'RedHat': { file_line { '/etc/sysconfig/libvirtd libvirtd args': path => '/etc/sysconfig/libvirtd', line => 'LIBVIRTD_ARGS="--listen"', @@ -271,23 +273,19 @@ class nova::migration::libvirt( tag => 'libvirt-file_line', } } - } - } - - 'Debian': { - if $transport_real != 'ssh' { - file_line { "/etc/default/${::nova::compute::libvirt::libvirt_service_name} libvirtd opts": - path => "/etc/default/${::nova::compute::libvirt::libvirt_service_name}", - line => 'libvirtd_opts="-l"', - match => 'libvirtd_opts=', - tag => 'libvirt-file_line', + 'Debian': { + file_line { "/etc/default/${::nova::compute::libvirt::libvirt_service_name} libvirtd opts": + path => "/etc/default/${::nova::compute::libvirt::libvirt_service_name}", + line => 'libvirtd_opts="-l"', + match => 'libvirtd_opts=', + tag => 'libvirt-file_line', + } + } + default: { + warning("Unsupported osfamily: ${::osfamily}, make sure you are configuring this yourself") } } } - - default: { - warning("Unsupported osfamily: ${::osfamily}, make sure you are configuring this yourself") - } } } } diff --git a/spec/classes/nova_migration_libvirt_spec.rb b/spec/classes/nova_migration_libvirt_spec.rb index 9bf88b014..a117120f3 100644 --- a/spec/classes/nova_migration_libvirt_spec.rb +++ b/spec/classes/nova_migration_libvirt_spec.rb @@ -240,12 +240,51 @@ describe 'nova::migration::libvirt' do end shared_examples_for 'nova migration with libvirt in Debian' do - it { is_expected.to contain_file_line('/etc/default/libvirtd libvirtd opts').with( - :path => '/etc/default/libvirtd', - :line => 'libvirtd_opts="-l"', - :match => 'libvirtd_opts=', - :tag => 'libvirt-file_line', - ) } + context 'with libvirt < 5.6' do + let :params do + { :transport => 'tls', + :libvirt_version => '4.0' } + end + + it { is_expected.to contain_file_line('/etc/default/libvirtd libvirtd opts').with( + :path => '/etc/default/libvirtd', + :line => 'libvirtd_opts="-l"', + :match => 'libvirtd_opts=', + :tag => 'libvirt-file_line', + ) } + it { is_expected.to_not contain_service('libvirtd-tls') } + it { is_expected.to_not contain_service('libvirtd-tcp') } + end + + context 'with libvirt >= 5.6' do + context 'with tls transport' do + let :params do + { :transport => 'tls', + :libvirt_version => '6.0' } + end + + it { is_expected.to_not contain_file_line('/etc/default/libvirtd libvirtd opts') } + it { is_expected.to contain_service('libvirtd-tls').with( + :name => 'libvirtd-tls.socket', + :ensure => 'running', + :enable => true, + )} + end + + context 'with tcp transport' do + let :params do + { :transport => 'tcp', + :libvirt_version => '6.0' } + end + + it { is_expected.to_not contain_file_line('/etc/default/libvirtd libvirtd opts') } + it { is_expected.to contain_service('libvirtd-tcp').with( + :name => 'libvirtd-tcp.socket', + :ensure => 'running', + :enable => true, + )} + end + end end shared_examples_for 'nova migration with libvirt in RedHat' do