diff --git a/manifests/compute/libvirt/qemu.pp b/manifests/compute/libvirt/qemu.pp index 241d76755..e8e05e71a 100644 --- a/manifests/compute/libvirt/qemu.pp +++ b/manifests/compute/libvirt/qemu.pp @@ -62,6 +62,10 @@ class nova::compute::libvirt::qemu( include nova::deps require nova::compute::libvirt + if versioncmp($libvirt_version, '4.5') < 0 { + fail('libvirt verson < 4.5 is no longer supported') + } + Anchor['nova::config::begin'] -> Augeas<| tag == 'qemu-conf-augeas'|> -> Anchor['nova::config::end'] @@ -107,11 +111,7 @@ class nova::compute::libvirt::qemu( } else { $augues_memory_backing_dir_changes = [] } - if versioncmp($libvirt_version, '4.5') >= 0 { - $augues_nbd_tls_changes = ["set nbd_tls ${nbd_tls_value}"] - } else { - $augues_nbd_tls_changes = [] - } + $augues_nbd_tls_changes = ["set nbd_tls ${nbd_tls_value}"] $augues_changes = concat($augues_changes_default, $augues_group_changes, $augues_memory_backing_dir_changes, $augues_nbd_tls_changes) @@ -122,7 +122,7 @@ class nova::compute::libvirt::qemu( } } else { - $augues_changes_default = [ + $augues_changes = [ 'rm max_files', 'rm max_processes', 'rm group', @@ -130,14 +130,8 @@ class nova::compute::libvirt::qemu( 'rm vnc_tls_x509_verify', 'rm default_tls_x509_verify', 'rm memory_backing_dir', + 'rm nbd_tls', ] - if versioncmp($libvirt_version, '4.5') >= 0 { - $augues_nbd_tls_changes = ['rm nbd_tls'] - } else { - $augues_nbd_tls_changes = [] - } - - $augues_changes = concat($augues_changes_default, $augues_nbd_tls_changes) augeas { 'qemu-conf-limits': context => '/files/etc/libvirt/qemu.conf', diff --git a/manifests/compute/libvirt/version.pp b/manifests/compute/libvirt/version.pp index 09b29ea1b..258d7ba16 100644 --- a/manifests/compute/libvirt/version.pp +++ b/manifests/compute/libvirt/version.pp @@ -8,20 +8,14 @@ class nova::compute::libvirt::version { case $facts['os']['family'] { 'RedHat': { - if versioncmp($facts['os']['release']['full'], '8') >= 0 { - $default = '5.6' - } elsif versioncmp($facts['os']['release']['full'], '7.6') >= 0 { - $default = '4.5' + if versioncmp($facts['os']['release']['full'], '9') >= 0 { + $default = '7.0' } else { - $default = '3.9' + $default = '5.6' } } 'Debian': { - if versioncmp($facts['os']['release']['full'], '18.04') >= 0 { - $default = '6.0' - } else { - $default = '4.0' - } + $default = '6.0' } default: { fail("Class['nova::compute::libvirt::version']: Unsupported osfamily: ${::osfamily}") diff --git a/manifests/migration/libvirt.pp b/manifests/migration/libvirt.pp index 33691aca3..f2189a243 100644 --- a/manifests/migration/libvirt.pp +++ b/manifests/migration/libvirt.pp @@ -308,79 +308,61 @@ class nova::migration::libvirt( }) if $transport_real == 'tls' or $transport_real == 'tcp' { - 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 and !$modular_libvirt_real { - # libvirtd.service should be stopped before socket service is started. - # Otherwise, socket service fails to start. - exec { 'stop libvirtd.service': - path => ['/sbin', '/usr/sbin', '/bin', '/usr/bin'], - command => 'systemctl -q stop libvirtd.service', - unless => "systemctl -q is-active libvirtd-${transport_real}.socket", - require => Anchor['nova::install::end'] - } - - service { "libvirtd-${transport_real}": - ensure => 'running', - name => "libvirtd-${transport_real}.socket", - enable => true, - require => Anchor['nova::config::end'] - } - - Exec['stop libvirtd.service'] -> Service["libvirtd-${transport_real}"] -> Service<| title == 'libvirt' |> - } - - # --listen option should be disabled in newer libvirt - $libvirtd_service_listen = false - - } else { - # For older libvirt --listen option should be used. - $libvirtd_service_listen = true + if versioncmp($libvirt_version, '5.6') < 0 { + fail('libvirt verson < 5.6 is no longer supported') } + # Since libvirt >= 5.6, system socket of libvirt should be activated + # by systemd, not by --listen option + $manage_services = pick($::nova::compute::libvirt::manage_libvirt_services, true) - case $::osfamily { - 'RedHat': { - if $libvirtd_service_listen { - $libvirtd_args = '"--listen"' - } else { - $libvirtd_args = '' - } - - # NOTE(tkajinam): Since libvirt 8.1.0, the sysconfig files are - # no longer provided by packages. - file { '/etc/sysconfig/libvirtd': - ensure => present, - path => '/etc/sysconfig/libvirtd', - tag => 'libvirt-file', - } - - file_line { '/etc/sysconfig/libvirtd libvirtd args': - path => '/etc/sysconfig/libvirtd', - line => "LIBVIRTD_ARGS=${libvirtd_args}", - match => '^LIBVIRTD_ARGS=', - tag => 'libvirt-file_line', - } + if $manage_services and !$modular_libvirt_real { + # libvirtd.service should be stopped before socket service is started. + # Otherwise, socket service fails to start. + exec { 'stop libvirtd.service': + path => ['/sbin', '/usr/sbin', '/bin', '/usr/bin'], + command => 'systemctl -q stop libvirtd.service', + unless => "systemctl -q is-active libvirtd-${transport_real}.socket", + require => Anchor['nova::install::end'] } - 'Debian': { - if $libvirtd_service_listen { - $libvirtd_opts = '"-l"' - } else { - $libvirtd_opts = '' - } - file_line { '/etc/default/libvirtd libvirtd opts': - path => '/etc/default/libvirtd', - line => "libvirtd_opts=${libvirtd_opts}", - match => 'libvirtd_opts=', - tag => 'libvirt-file_line', - } + service { "libvirtd-${transport_real}": + ensure => 'running', + name => "libvirtd-${transport_real}.socket", + enable => true, + require => Anchor['nova::config::end'] } - default: { - warning("Unsupported osfamily: ${::osfamily}, make sure you are configuring this yourself") + + Exec['stop libvirtd.service'] -> Service["libvirtd-${transport_real}"] -> Service<| title == 'libvirt' |> + } + } + + case $::osfamily { + 'RedHat': { + # NOTE(tkajinam): Since libvirt 8.1.0, the sysconfig files are + # no longer provided by packages. + file { '/etc/sysconfig/libvirtd': + ensure => present, + path => '/etc/sysconfig/libvirtd', + tag => 'libvirt-file', } + + file_line { '/etc/sysconfig/libvirtd libvirtd args': + path => '/etc/sysconfig/libvirtd', + line => 'LIBVIRTD_ARGS=', + match => '^LIBVIRTD_ARGS=', + tag => 'libvirt-file_line', + } + } + 'Debian': { + file_line { '/etc/default/libvirtd libvirtd opts': + path => '/etc/default/libvirtd', + line => 'libvirtd_opts=', + match => 'libvirtd_opts=', + tag => 'libvirt-file_line', + } + } + default: { + warning("Unsupported osfamily: ${::osfamily}, make sure you are configuring this yourself") } } } diff --git a/releasenotes/notes/migration-libvirt-cleanup-6cf91ed5dd736420.yaml b/releasenotes/notes/migration-libvirt-cleanup-6cf91ed5dd736420.yaml new file mode 100644 index 000000000..51f29f26b --- /dev/null +++ b/releasenotes/notes/migration-libvirt-cleanup-6cf91ed5dd736420.yaml @@ -0,0 +1,4 @@ +--- +upgrade: + - | + Now puppet-nova requires libvirt 5.6 or later. diff --git a/spec/classes/nova_compute_libvirt_qemu_spec.rb b/spec/classes/nova_compute_libvirt_qemu_spec.rb index 37a13b1ae..9bf1b3b10 100644 --- a/spec/classes/nova_compute_libvirt_qemu_spec.rb +++ b/spec/classes/nova_compute_libvirt_qemu_spec.rb @@ -13,29 +13,7 @@ describe 'nova::compute::libvirt::qemu' do context 'when not configuring qemu' do let :params do { - :configure_qemu => false, - :libvirt_version => '3.9', - } - end - it { is_expected.to contain_augeas('qemu-conf-limits').with({ - :context => '/files/etc/libvirt/qemu.conf', - :changes => [ - "rm max_files", - "rm max_processes", - "rm group", - "rm vnc_tls", - "rm vnc_tls_x509_verify", - "rm default_tls_x509_verify", - "rm memory_backing_dir", - ], - }).that_notifies('Service[libvirt]') } - end - - context 'when not configuring qemu with libvirt >= 4.5' do - let :params do - { - :configure_qemu => false, - :libvirt_version => '4.5', + :configure_qemu => false, } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -57,27 +35,6 @@ describe 'nova::compute::libvirt::qemu' do let :params do { :configure_qemu => true, - :libvirt_version => '3.9', - } - end - it { is_expected.to contain_augeas('qemu-conf-limits').with({ - :context => '/files/etc/libvirt/qemu.conf', - :changes => [ - "set max_files 1024", - "set max_processes 4096", - "set vnc_tls 0", - "set vnc_tls_x509_verify 0", - "set default_tls_x509_verify 1", - ], - :tag => 'qemu-conf-augeas', - }).that_notifies('Service[libvirt]') } - end - - context 'when configuring qemu by default with libvirt >= 4.5' do - let :params do - { - :configure_qemu => true, - :libvirt_version => '4.5', } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -98,31 +55,8 @@ describe 'nova::compute::libvirt::qemu' do let :params do { :configure_qemu => true, - :max_files => 32768, - :max_processes => 131072, - :libvirt_version => '3.9', - } - end - it { is_expected.to contain_augeas('qemu-conf-limits').with({ - :context => '/files/etc/libvirt/qemu.conf', - :changes => [ - "set max_files 32768", - "set max_processes 131072", - "set vnc_tls 0", - "set vnc_tls_x509_verify 0", - "set default_tls_x509_verify 1", - ], - :tag => 'qemu-conf-augeas', - }).that_notifies('Service[libvirt]') } - end - - context 'when configuring qemu with overridden parameters with libvirt >= 4.5' do - let :params do - { - :configure_qemu => true, - :max_files => 32768, - :max_processes => 131072, - :libvirt_version => '4.5', + :max_files => 32768, + :max_processes => 131072, } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -142,12 +76,11 @@ describe 'nova::compute::libvirt::qemu' do context 'when configuring qemu with group parameter' do let :params do { - :configure_qemu => true, - :group => 'openvswitch', - :max_files => 32768, - :max_processes => 131072, + :configure_qemu => true, + :group => 'openvswitch', + :max_files => 32768, + :max_processes => 131072, :memory_backing_dir => '/tmp', - :libvirt_version => '3.9', } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -160,6 +93,7 @@ describe 'nova::compute::libvirt::qemu' do "set default_tls_x509_verify 1", "set group openvswitch", "set memory_backing_dir /tmp", + "set nbd_tls 0", ], :tag => 'qemu-conf-augeas', }).that_notifies('Service[libvirt]') } @@ -169,8 +103,7 @@ describe 'nova::compute::libvirt::qemu' do let :params do { :configure_qemu => true, - :vnc_tls => true, - :libvirt_version => '3.9', + :vnc_tls => true, } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -181,6 +114,7 @@ describe 'nova::compute::libvirt::qemu' do "set vnc_tls 1", "set vnc_tls_x509_verify 1", "set default_tls_x509_verify 1", + "set nbd_tls 0", ], :tag => 'qemu-conf-augeas', }).that_notifies('Service[libvirt]') } @@ -189,9 +123,8 @@ describe 'nova::compute::libvirt::qemu' do context 'when configuring qemu with default_tls_verify enabled' do let :params do { - :configure_qemu => true, + :configure_qemu => true, :default_tls_verify => true, - :libvirt_version => '3.9', } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -202,6 +135,7 @@ describe 'nova::compute::libvirt::qemu' do "set vnc_tls 0", "set vnc_tls_x509_verify 0", "set default_tls_x509_verify 1", + "set nbd_tls 0", ], :tag => 'qemu-conf-augeas', }).that_notifies('Service[libvirt]') } @@ -211,9 +145,8 @@ describe 'nova::compute::libvirt::qemu' do let :params do { :configure_qemu => true, - :vnc_tls => true, + :vnc_tls => true, :vnc_tls_verify => false, - :libvirt_version => '3.9', } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -224,6 +157,7 @@ describe 'nova::compute::libvirt::qemu' do "set vnc_tls 1", "set vnc_tls_x509_verify 0", "set default_tls_x509_verify 1", + "set nbd_tls 0", ], :tag => 'qemu-conf-augeas', }).that_notifies('Service[libvirt]') } @@ -232,9 +166,8 @@ describe 'nova::compute::libvirt::qemu' do context 'when configuring qemu with default_tls_verify disabled' do let :params do { - :configure_qemu => true, + :configure_qemu => true, :default_tls_verify => false, - :libvirt_version => '3.9', } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ @@ -245,27 +178,7 @@ describe 'nova::compute::libvirt::qemu' do "set vnc_tls 0", "set vnc_tls_x509_verify 0", "set default_tls_x509_verify 0", - ], - :tag => 'qemu-conf-augeas', - }).that_notifies('Service[libvirt]') } - end - - context 'when configuring qemu with nbd_tls and libvirt < 4.5' do - let :params do - { - :configure_qemu => true, - :nbd_tls => true, - :libvirt_version => '3.9', - } - end - it { is_expected.to contain_augeas('qemu-conf-limits').with({ - :context => '/files/etc/libvirt/qemu.conf', - :changes => [ - "set max_files 1024", - "set max_processes 4096", - "set vnc_tls 0", - "set vnc_tls_x509_verify 0", - "set default_tls_x509_verify 1", + "set nbd_tls 0", ], :tag => 'qemu-conf-augeas', }).that_notifies('Service[libvirt]') } @@ -275,8 +188,7 @@ describe 'nova::compute::libvirt::qemu' do let :params do { :configure_qemu => true, - :nbd_tls => true, - :libvirt_version => '4.5', + :nbd_tls => true, } end it { is_expected.to contain_augeas('qemu-conf-limits').with({ diff --git a/spec/classes/nova_migration_libvirt_spec.rb b/spec/classes/nova_migration_libvirt_spec.rb index 5b8a23123..b4e33bdcf 100644 --- a/spec/classes/nova_migration_libvirt_spec.rb +++ b/spec/classes/nova_migration_libvirt_spec.rb @@ -418,68 +418,47 @@ describe 'nova::migration::libvirt' do end shared_examples_for 'nova migration with libvirt in Debian' do - context 'with libvirt < 5.6' do + context 'with tls transport' do let :params do - { :transport => 'tls', - :libvirt_version => '4.0' } + { :transport => 'tls' } end it { is_expected.to contain_file_line('/etc/default/libvirtd libvirtd opts').with( :path => '/etc/default/libvirtd', - :line => 'libvirtd_opts="-l"', + :line => 'libvirtd_opts=', :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') } + it { is_expected.to contain_service('libvirtd-tls').with( + :name => 'libvirtd-tls.socket', + :ensure => 'running', + :enable => true, + )} 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 contain_file_line('/etc/default/libvirtd libvirtd opts').with( - :path => '/etc/default/libvirtd', - :line => 'libvirtd_opts=', - :match => 'libvirtd_opts=', - :tag => 'libvirt-file_line', - ) } - it { is_expected.to contain_service('libvirtd-tls').with( - :name => 'libvirtd-tls.socket', - :ensure => 'running', - :enable => true, - )} + context 'with tcp transport' do + let :params do + { :transport => 'tcp' } end - context 'with tcp transport' do - let :params do - { :transport => 'tcp', - :libvirt_version => '6.0' } - end - - it { is_expected.to contain_file_line('/etc/default/libvirtd libvirtd opts').with( - :path => '/etc/default/libvirtd', - :line => 'libvirtd_opts=', - :match => 'libvirtd_opts=', - :tag => 'libvirt-file_line', - ) } - it { is_expected.to contain_service('libvirtd-tcp').with( - :name => 'libvirtd-tcp.socket', - :ensure => 'running', - :enable => true, - )} - end + it { is_expected.to contain_file_line('/etc/default/libvirtd libvirtd opts').with( + :path => '/etc/default/libvirtd', + :line => 'libvirtd_opts=', + :match => 'libvirtd_opts=', + :tag => 'libvirt-file_line', + ) } + it { is_expected.to contain_service('libvirtd-tcp').with( + :name => 'libvirtd-tcp.socket', + :ensure => 'running', + :enable => true, + )} end end shared_examples_for 'nova migration with libvirt in RedHat' do - context 'with libvirt < 5.6' do + context 'with tls transport' do let :params do - { :transport => 'tls', - :libvirt_version => '4.5' } + { :transport => 'tls' } end it { is_expected.to contain_file('/etc/sysconfig/libvirtd').with( @@ -489,63 +468,38 @@ describe 'nova::migration::libvirt' do )} it { is_expected.to contain_file_line('/etc/sysconfig/libvirtd libvirtd args').with( :path => '/etc/sysconfig/libvirtd', - :line => 'LIBVIRTD_ARGS="--listen"', + :line => 'LIBVIRTD_ARGS=', :match => '^LIBVIRTD_ARGS=', :tag => 'libvirt-file_line', )} - it { is_expected.to_not contain_service('libvirtd-tls') } - it { is_expected.to_not contain_service('libvirtd-tcp') } + it { is_expected.to contain_service('libvirtd-tls').with( + :name => 'libvirtd-tls.socket', + :ensure => 'running', + :enable => true, + )} end - context 'with libvirt >= 5.6' do - - context 'with tls transport' do - let :params do - { :transport => 'tls', - :libvirt_version => '5.6' } - end - - it { is_expected.to contain_file('/etc/sysconfig/libvirtd').with( - :ensure => 'present', - :path => '/etc/sysconfig/libvirtd', - :tag => 'libvirt-file', - )} - it { is_expected.to contain_file_line('/etc/sysconfig/libvirtd libvirtd args').with( - :path => '/etc/sysconfig/libvirtd', - :line => 'LIBVIRTD_ARGS=', - :match => '^LIBVIRTD_ARGS=', - :tag => 'libvirt-file_line', - )} - it { is_expected.to contain_service('libvirtd-tls').with( - :name => 'libvirtd-tls.socket', - :ensure => 'running', - :enable => true, - )} + context 'with tcp transport' do + let :params do + { :transport => 'tcp' } end - context 'with tcp transport' do - let :params do - { :transport => 'tcp', - :libvirt_version => '5.6' } - end - - it { is_expected.to contain_file('/etc/sysconfig/libvirtd').with( - :ensure => 'present', - :path => '/etc/sysconfig/libvirtd', - :tag => 'libvirt-file', - )} - it { is_expected.to contain_file_line('/etc/sysconfig/libvirtd libvirtd args').with( - :path => '/etc/sysconfig/libvirtd', - :line => 'LIBVIRTD_ARGS=', - :match => '^LIBVIRTD_ARGS=', - :tag => 'libvirt-file_line', - )} - it { is_expected.to contain_service('libvirtd-tcp').with( - :name => 'libvirtd-tcp.socket', - :ensure => 'running', - :enable => true, - )} - end + it { is_expected.to contain_file('/etc/sysconfig/libvirtd').with( + :ensure => 'present', + :path => '/etc/sysconfig/libvirtd', + :tag => 'libvirt-file', + )} + it { is_expected.to contain_file_line('/etc/sysconfig/libvirtd libvirtd args').with( + :path => '/etc/sysconfig/libvirtd', + :line => 'LIBVIRTD_ARGS=', + :match => '^LIBVIRTD_ARGS=', + :tag => 'libvirt-file_line', + )} + it { is_expected.to contain_service('libvirtd-tcp').with( + :name => 'libvirtd-tcp.socket', + :ensure => 'running', + :enable => true, + )} end end