From 26dbd52717f46a1be8586dd61a6f265f8fe56f11 Mon Sep 17 00:00:00 2001 From: Takashi Kajinami Date: Sun, 9 May 2021 01:58:32 +0900 Subject: [PATCH] Libvirt: quote config parameters in resource types This change implements the quote parameter in libvirtd_config and virtlogd_config, so that we can quote the value by that simple parameter instead of implementing a logic in each manifests. Also, with this change libvirtd_config and virtlogd_config supports $::os_service_default, so that we can define absence of parameters more easily. Depends-on: https://review.opendev.org/792735 Change-Id: I3030ca34088019be932a9cc33344f7fb473a9aea --- .../provider/libvirtd_config/ini_setting.rb | 15 +++ .../provider/virtlogd_config/ini_setting.rb | 15 +++ lib/puppet/type/libvirtd_config.rb | 11 ++ lib/puppet/type/virtlogd_config.rb | 11 ++ manifests/compute/libvirt.pp | 64 ++++------ manifests/compute/libvirt/virtlogd.pp | 119 +++++------------- manifests/migration/libvirt.pp | 65 +++++----- ...virtd-resource-types-e4feb2419dccc39a.yaml | 30 +++++ spec/classes/nova_compute_libvirt_spec.rb | 14 +-- .../nova_compute_libvirt_virtlogd_spec.rb | 18 +-- spec/classes/nova_migration_libvirt_spec.rb | 40 +++--- .../libvirtd_config/ini_setting_spec.rb | 69 ++++++++++ .../virtlogd_config/ini_setting_spec.rb | 69 ++++++++++ 13 files changed, 352 insertions(+), 188 deletions(-) create mode 100644 releasenotes/notes/libvirtd-resource-types-e4feb2419dccc39a.yaml create mode 100644 spec/unit/provider/libvirtd_config/ini_setting_spec.rb create mode 100644 spec/unit/provider/virtlogd_config/ini_setting_spec.rb diff --git a/lib/puppet/provider/libvirtd_config/ini_setting.rb b/lib/puppet/provider/libvirtd_config/ini_setting.rb index 0ba58a3ea..f7bf77eec 100644 --- a/lib/puppet/provider/libvirtd_config/ini_setting.rb +++ b/lib/puppet/provider/libvirtd_config/ini_setting.rb @@ -3,6 +3,17 @@ Puppet::Type.type(:libvirtd_config).provide( :parent => Puppet::Type.type(:ini_setting).provider(:ruby) ) do + def exists? + if resource[:value] == ensure_absent_val + resource[:ensure] = :absent + elsif resource[:quote] + unless resource[:value].start_with?('"') + resource[:value] = '"' + resource[:value] + '"' + end + end + super + end + def section '' end @@ -15,6 +26,10 @@ Puppet::Type.type(:libvirtd_config).provide( '=' end + def ensure_absent_val + resource[:ensure_absent_val] + end + def self.file_path '/etc/libvirt/libvirtd.conf' end diff --git a/lib/puppet/provider/virtlogd_config/ini_setting.rb b/lib/puppet/provider/virtlogd_config/ini_setting.rb index 9edf62689..23a6bc174 100644 --- a/lib/puppet/provider/virtlogd_config/ini_setting.rb +++ b/lib/puppet/provider/virtlogd_config/ini_setting.rb @@ -3,6 +3,17 @@ Puppet::Type.type(:virtlogd_config).provide( :parent => Puppet::Type.type(:ini_setting).provider(:ruby) ) do + def exists? + if resource[:value] == ensure_absent_val + resource[:ensure] = :absent + elsif resource[:quote] + unless resource[:value].start_with?('"') + resource[:value] = '"' + resource[:value] + '"' + end + end + super + end + def section '' end @@ -15,6 +26,10 @@ Puppet::Type.type(:virtlogd_config).provide( '=' end + def ensure_absent_val + resource[:ensure_absent_val] + end + def self.file_path '/etc/libvirt/virtlogd.conf' end diff --git a/lib/puppet/type/libvirtd_config.rb b/lib/puppet/type/libvirtd_config.rb index 05fb192aa..0d1af4221 100644 --- a/lib/puppet/type/libvirtd_config.rb +++ b/lib/puppet/type/libvirtd_config.rb @@ -39,6 +39,17 @@ Puppet::Type.newtype(:libvirtd_config) do defaultto false end + newparam(:quote, :boolean => true) do + desc 'Whether to quote the value. Defauls to `false`.' + newvalues(:true, :false) + defaultto false + end + + newparam(:ensure_absent_val) do + desc 'A value that is specified as the value property will behave as if ensure => absent was specified' + defaultto('') + end + autorequire(:anchor) do ['nova::install::end'] end diff --git a/lib/puppet/type/virtlogd_config.rb b/lib/puppet/type/virtlogd_config.rb index c0f88ec17..5735959d5 100644 --- a/lib/puppet/type/virtlogd_config.rb +++ b/lib/puppet/type/virtlogd_config.rb @@ -39,6 +39,17 @@ Puppet::Type.newtype(:virtlogd_config) do defaultto false end + newparam(:quote, :boolean => true) do + desc 'Whether to quote the value. Defauls to `false`.' + newvalues(:true, :false) + defaultto false + end + + newparam(:ensure_absent_val) do + desc 'A value that is specified as the value property will behave as if ensure => absent was specified' + defaultto('') + end + autorequire(:anchor) do ['nova::install::end'] end diff --git a/manifests/compute/libvirt.pp b/manifests/compute/libvirt.pp index 77a729a5a..85c8cc868 100644 --- a/manifests/compute/libvirt.pp +++ b/manifests/compute/libvirt.pp @@ -169,24 +169,24 @@ # [*log_outputs*] # (optional) Defines log outputs, as specified in # https://libvirt.org/logging.html -# Defaults to undef +# Defaults to $::os_service_default # # [*log_filters*] # (optional) Defines a filter to select a different logging level # for a given category log outputs, as specified in # https://libvirt.org/logging.html -# Defaults to undef +# Defaults to $::os_service_default # # [*tls_priority*] # (optional) Override the compile time default TLS priority string. The # default is usually "NORMAL" unless overridden at build time. # Only set this if it is desired for libvirt to deviate from # the global default settings. -# Defaults to undef +# Defaults to $::os_service_default # # [*ovs_timeout*] # (optional) A timeout for openvswitch calls made by libvirt -# Defaults to undef +# Defaults to $::os_service_default # # [*swtpm_enabled*] # (optional) Enable emulated Trusted Platform Module (TPM) for guests. @@ -250,10 +250,10 @@ class nova::compute::libvirt ( $swtpm_enabled = $::os_service_default, $swtpm_user = $::os_service_default, $swtpm_group = $::os_service_default, - $log_outputs = undef, - $log_filters = undef, - $tls_priority = undef, - $ovs_timeout = undef, + $log_outputs = $::os_service_default, + $log_filters = $::os_service_default, + $tls_priority = $::os_service_default, + $ovs_timeout = $::os_service_default, $max_queues = $::os_service_default, $num_memory_encrypted_guests = $::os_service_default, ) inherits nova::params { @@ -286,44 +286,22 @@ class nova::compute::libvirt ( include nova::migration::libvirt } - if $log_outputs { - libvirtd_config { - 'log_outputs': value => "\"${log_outputs}\""; - } - } else { - libvirtd_config { - 'log_outputs': ensure => 'absent'; + [ + 'log_outputs', + 'log_filters', + 'tls_priority', + 'ovs_timeout', + ].each |String $libvirtd_opt| { + if getvar($libvirtd_opt) == undef { + warning("Usage of undef for ${libvirtd_opt} has been deprecated.") } } - if $log_filters { - libvirtd_config { - 'log_filters': value => "\"${log_filters}\""; - } - } else { - libvirtd_config { - 'log_filters': ensure => 'absent'; - } - } - - if $tls_priority { - libvirtd_config { - 'tls_priority': value => "\"${tls_priority}\""; - } - } else { - libvirtd_config { - 'tls_priority': ensure => 'absent'; - } - } - - if $ovs_timeout { - libvirtd_config { - 'ovs_timeout': value => $ovs_timeout; - } - } else { - libvirtd_config { - 'ovs_timeout': ensure => 'absent'; - } + libvirtd_config { + 'log_outputs': value => pick($log_outputs, $::os_service_default), quote => true; + 'log_filters': value => pick($log_filters, $::os_service_default), quote => true; + 'tls_priority': value => pick($tls_priority, $::os_service_default), quote => true; + 'ovs_timeout': value => pick($ovs_timeout, $::os_service_default); } unless $rx_queue_size == $::os_service_default or $rx_queue_size in [256, 512, 1024] { diff --git a/manifests/compute/libvirt/virtlogd.pp b/manifests/compute/libvirt/virtlogd.pp index 53c60da00..9914dab03 100644 --- a/manifests/compute/libvirt/virtlogd.pp +++ b/manifests/compute/libvirt/virtlogd.pp @@ -6,124 +6,71 @@ # # [*log_level*] # Defines a log level to filter log outputs. -# Defaults to undef +# Defaults to $::os_service_default # # [*log_filters*] # Defines a log filter to select a different logging level for # for a given category log outputs. -# Defaults to undef +# Defaults to $::os_service_default # # [*log_outputs*] # (optional) Defines log outputs, as specified in # https://libvirt.org/logging.html -# Defaults to undef +# Defaults to $::os_service_default # # [*max_clients*] # The maximum number of concurrent client connections to allow # on primary socket. -# Defaults to undef +# Defaults to $::os_service_default # # [*admin_max_clients*] # The maximum number of concurrent client connections to allow # on administrative socket. -# Defaults to undef +# Defaults to $::os_service_default # # [*max_size*] # Maximum file size before rolling over. -# Defaults to undef +# Defaults to $::os_service_default # # [*max_backups*] # Maximum nuber of backup files to keep. -# Defaults to undef +# Defaults to $::os_service_default # class nova::compute::libvirt::virtlogd ( - $log_level = undef, - $log_filters = undef, - $log_outputs = undef, - $max_clients = undef, - $admin_max_clients = undef, - $max_size = undef, - $max_backups = undef, + $log_level = $::os_service_default, + $log_filters = $::os_service_default, + $log_outputs = $::os_service_default, + $max_clients = $::os_service_default, + $admin_max_clients = $::os_service_default, + $max_size = $::os_service_default, + $max_backups = $::os_service_default, ) { include nova::deps require nova::compute::libvirt - if $log_level { - virtlogd_config { - 'log_level': value => $log_level; - } - } - else { - virtlogd_config { - 'log_level': ensure => 'absent'; + [ + 'log_level', + 'log_filters', + 'log_outputs', + 'max_clients', + 'admin_max_clients', + 'max_size', + 'max_backups', + ].each |String $virtlogd_opt| { + if getvar($virtlogd_opt) == undef { + warning("Usage of undef for ${virtlogd_opt} has been deprecated.") } } - if $log_filters { - virtlogd_config { - 'log_filters': value => "\"${log_filters}\""; - } - } - else { - virtlogd_config { - 'log_filters': ensure => 'absent'; - } - } - - if $log_outputs { - virtlogd_config { - 'log_outputs': value => "\"${log_outputs}\""; - } - } - else { - virtlogd_config { - 'log_outputs': ensure => 'absent'; - } - } - - if $max_clients { - virtlogd_config { - 'max_clients': value => $max_clients; - } - } - else { - virtlogd_config { - 'max_clients': ensure => 'absent'; - } - } - - if $admin_max_clients { - virtlogd_config { - 'admin_max_clients': value => $admin_max_clients; - } - } - else { - virtlogd_config { - 'admin_max_clients': ensure => 'absent'; - } - } - - if $max_size { - virtlogd_config { - 'max_size': value => $max_size; - } - } - else { - virtlogd_config { - 'max_size': ensure => 'absent'; - } - } - - if $max_backups { - virtlogd_config { - 'max_backups': value => $max_backups; - } - } - else { - virtlogd_config { - 'max_backups': ensure => 'absent'; - } + virtlogd_config { + 'log_level': value => pick($log_level, $::os_service_default); + 'log_filters': value => pick($log_filters, $::os_service_default), quote => true; + 'log_outputs': value => pick($log_outputs, $::os_service_default), quote => true; + 'max_clients': value => pick($max_clients, $::os_service_default); + 'admin_max_clients': value => pick($admin_max_clients, $::os_service_default); + 'max_size': value => pick($max_size, $::os_service_default); + 'max_backups': value => pick($max_backups, $::os_service_default); } Anchor['nova::config::begin'] diff --git a/manifests/migration/libvirt.pp b/manifests/migration/libvirt.pp index 8efe5718d..00a4388e3 100644 --- a/manifests/migration/libvirt.pp +++ b/manifests/migration/libvirt.pp @@ -16,7 +16,7 @@ # # [*listen_address*] # (optional) Bind libvirtd tcp/tls socket to the given address. -# Defaults to undef (bind to all addresses) +# Defaults to $::os_service_default (bind to all addresses) # # [*live_migration_inbound_addr*] # (optional) The IP address or hostname to be used as the target for live @@ -110,13 +110,13 @@ # (optional) Specifies the CA certificate that the TLS transport will use. # Note that this is only used if the TLS transport is enabled via the # "transport" option. -# Defaults to undef +# Defaults to $::os_service_default # # [*crl_file*] # (optional) Specifies the CRL file that the TLS transport will use. # Note that this is only used if the TLS transport is enabled via the # "transport" option. -# Defaults to undef +# Defaults to $::os_service_default # # [*libvirt_version*] # (optional) installed libvirt version. Default is automatic detected depending @@ -126,7 +126,7 @@ class nova::migration::libvirt( $transport = undef, $auth = 'none', - $listen_address = undef, + $listen_address = $::os_service_default, $live_migration_inbound_addr = $::os_service_default, $live_migration_tunnelled = $::os_service_default, $live_migration_with_native_tls = $::os_service_default, @@ -141,8 +141,8 @@ class nova::migration::libvirt( $client_user = undef, $client_port = undef, $client_extraparams = {}, - $ca_file = undef, - $crl_file = undef, + $ca_file = $::os_service_default, + $crl_file = $::os_service_default, $libvirt_version = $::nova::compute::libvirt::version::default, ) inherits nova::compute::libvirt::version { @@ -244,35 +244,42 @@ class nova::migration::libvirt( } } - libvirtd_config { - 'listen_tls': value => $listen_tls; - 'listen_tcp': value => $listen_tcp; - } - if $transport_real == 'tls' { - libvirtd_config { - 'auth_tls': value => "\"${auth}\""; + $auth_tls_real = $auth + $auth_tcp_real = $::os_service_default + $ca_file_real = pick($ca_file, $::os_service_default) + $crl_file_real = pick($crl_file, $::os_service_default) + + if $ca_file == undef { + warning('Usage of undef for the ca_file parameter has been deprecated') } - if $ca_file { - libvirtd_config { - 'ca_file': value => "\"${ca_file}\""; - } - } - if $crl_file { - libvirtd_config { - 'crl_file': value => "\"${crl_file}\""; - } + if $crl_file == undef { + warning('Usage of undef for the crl_file parameter has been deprecated') } } elsif $transport_real == 'tcp' { - libvirtd_config { - 'auth_tcp': value => "\"${auth}\""; - } + $auth_tls_real = $::os_service_default + $auth_tcp_real = $auth + $ca_file_real = $::os_service_default + $crl_file_real = $::os_service_default + } else { + $auth_tls_real = $::os_service_default + $auth_tcp_real = $::os_service_default + $ca_file_real = $::os_service_default + $crl_file_real = $::os_service_default } - if $listen_address { - libvirtd_config { - 'listen_addr': value => "\"${listen_address}\""; - } + if $listen_address == undef { + warning('Usage of undef for the listen_addrss parameter has been deprecated') + } + + libvirtd_config { + 'listen_tls': value => $listen_tls; + 'listen_tcp': value => $listen_tcp; + 'auth_tls': value => $auth_tls_real, quote => true; + 'auth_tcp': value => $auth_tcp_real, quote => true; + 'ca_file': value => $ca_file_real, quote => true; + 'crl_file': value => $crl_file_real, quote => true; + 'listen_addr': value => pick($listen_address, $::os_service_default), quote => true; } if $transport_real == 'tls' or $transport_real == 'tcp' { diff --git a/releasenotes/notes/libvirtd-resource-types-e4feb2419dccc39a.yaml b/releasenotes/notes/libvirtd-resource-types-e4feb2419dccc39a.yaml new file mode 100644 index 000000000..c7e563be7 --- /dev/null +++ b/releasenotes/notes/libvirtd-resource-types-e4feb2419dccc39a.yaml @@ -0,0 +1,30 @@ +--- +features: + - | + Now ``libvirtd_config`` and ``virtlogd_config`` supports the ``quote`` + parameter. Setting this parameter quotes the value by ``" "``. + + - | + Now ``libvirtd_config`` and ``virtlogd_config`` accepts + ``$::os_service_default`` as a mark to unset the parameter. + +deprecations: + - | + The default values of the following parameter have been changed from + ``undef`` to ``$::os_service_default``. Using ``undef`` is still supported + but that usage is deprecated. + + - ``nova::compute::libvirt::log_outputs`` + - ``nova::compute::libvirt::log_filters`` + - ``nova::compute::libvirt::tls_priority`` + - ``nova::compute::libvirt::ovs_timeout`` + - ``nova::compute::libvirt::virtlogd::log_level`` + - ``nova::compute::libvirt::virtlogd::log_filters`` + - ``nova::compute::libvirt::virtlogd::log_outputs`` + - ``nova::compute::libvirt::virtlogd::max_clients`` + - ``nova::compute::libvirt::virtlogd::admin_max_clients`` + - ``nova::compute::libvirt::virtlogd::max_size`` + - ``nova::compute::libvirt::virtlogd::max_backups`` + - ``nova::migration::libvirt::listen_address`` + - ``nova::migration::libvirt::ca_file`` + - ``nova::migration::libvirt::crl_file`` diff --git a/spec/classes/nova_compute_libvirt_spec.rb b/spec/classes/nova_compute_libvirt_spec.rb index 6f0decbd0..197adaf7a 100644 --- a/spec/classes/nova_compute_libvirt_spec.rb +++ b/spec/classes/nova_compute_libvirt_spec.rb @@ -70,10 +70,10 @@ describe 'nova::compute::libvirt' do it { is_expected.to contain_nova_config('libvirt/swtpm_group').with_value('')} it { is_expected.to contain_nova_config('libvirt/max_queues').with_value('')} it { is_expected.to contain_nova_config('libvirt/num_memory_encrypted_guests').with_value('')} - it { is_expected.to contain_libvirtd_config('log_outputs').with_ensure('absent')} - it { is_expected.to contain_libvirtd_config('log_filters').with_ensure('absent')} - it { is_expected.to contain_libvirtd_config('tls_priority').with_ensure('absent')} - it { is_expected.to contain_libvirtd_config('ovs_timeout').with_ensure('absent')} + it { is_expected.to contain_libvirtd_config('log_outputs').with_value('').with_quote(true)} + it { is_expected.to contain_libvirtd_config('log_filters').with_value('').with_quote(true)} + it { is_expected.to contain_libvirtd_config('tls_priority').with_value('').with_quote(true)} + it { is_expected.to contain_libvirtd_config('ovs_timeout').with_value('')} end describe 'with params' do @@ -145,9 +145,9 @@ describe 'nova::compute::libvirt' do it { is_expected.to contain_nova_config('libvirt/swtpm_group').with_value('libvirt')} it { is_expected.to contain_nova_config('libvirt/max_queues').with_value(4)} it { is_expected.to contain_nova_config('libvirt/num_memory_encrypted_guests').with_value(255)} - it { is_expected.to contain_libvirtd_config('log_outputs').with_value('"1:file:/var/log/libvirt/libvirtd.log"')} - it { is_expected.to contain_libvirtd_config('log_filters').with_value('"1:qemu"')} - it { is_expected.to contain_libvirtd_config('tls_priority').with_value('"NORMAL:-VERS-SSL3.0"')} + it { is_expected.to contain_libvirtd_config('log_outputs').with_value('1:file:/var/log/libvirt/libvirtd.log').with_quote(true) } + it { is_expected.to contain_libvirtd_config('log_filters').with_value('1:qemu').with_quote(true) } + it { is_expected.to contain_libvirtd_config('tls_priority').with_value('NORMAL:-VERS-SSL3.0').with_quote(true) } it { is_expected.to contain_libvirtd_config('ovs_timeout').with_value(10)} it { is_expected.to contain_service('libvirt').with( diff --git a/spec/classes/nova_compute_libvirt_virtlogd_spec.rb b/spec/classes/nova_compute_libvirt_virtlogd_spec.rb index 96cc3ee3c..fd17671f9 100644 --- a/spec/classes/nova_compute_libvirt_virtlogd_spec.rb +++ b/spec/classes/nova_compute_libvirt_virtlogd_spec.rb @@ -22,13 +22,13 @@ eos it { is_expected.to contain_class('nova::deps')} it { is_expected.to contain_class('nova::compute::libvirt::virtlogd')} - it { is_expected.to contain_virtlogd_config('log_level').with_ensure('absent')} - it { is_expected.to contain_virtlogd_config('log_outputs').with_ensure('absent')} - it { is_expected.to contain_virtlogd_config('log_filters').with_ensure('absent')} - it { is_expected.to contain_virtlogd_config('max_clients').with_ensure('absent')} - it { is_expected.to contain_virtlogd_config('admin_max_clients').with_ensure('absent')} - it { is_expected.to contain_virtlogd_config('max_size').with_ensure('absent')} - it { is_expected.to contain_virtlogd_config('max_backups').with_ensure('absent')} + it { is_expected.to contain_virtlogd_config('log_level').with_value('')} + it { is_expected.to contain_virtlogd_config('log_outputs').with_value('').with_quote(true)} + it { is_expected.to contain_virtlogd_config('log_filters').with_value('').with_quote(true)} + it { is_expected.to contain_virtlogd_config('max_clients').with_value('')} + it { is_expected.to contain_virtlogd_config('admin_max_clients').with_value('')} + it { is_expected.to contain_virtlogd_config('max_size').with_value('')} + it { is_expected.to contain_virtlogd_config('max_backups').with_value('')} end context 'with specified parameters' do @@ -47,8 +47,8 @@ eos it { is_expected.to contain_class('nova::compute::libvirt::virtlogd')} it { is_expected.to contain_virtlogd_config('log_level').with_value(params[:log_level])} - it { is_expected.to contain_virtlogd_config('log_outputs').with_value("\"#{params[:log_outputs]}\"")} - it { is_expected.to contain_virtlogd_config('log_filters').with_value("\"#{params[:log_filters]}\"")} + it { is_expected.to contain_virtlogd_config('log_outputs').with_value(params[:log_outputs]).with_quote(true)} + it { is_expected.to contain_virtlogd_config('log_filters').with_value(params[:log_filters]).with_quote(true)} it { is_expected.to contain_virtlogd_config('max_clients').with_value(params[:max_clients])} it { is_expected.to contain_virtlogd_config('admin_max_clients').with_value(params[:admin_max_clients])} it { is_expected.to contain_virtlogd_config('max_size').with_value(params[:max_size])} diff --git a/spec/classes/nova_migration_libvirt_spec.rb b/spec/classes/nova_migration_libvirt_spec.rb index 930a970f4..f39114b52 100644 --- a/spec/classes/nova_migration_libvirt_spec.rb +++ b/spec/classes/nova_migration_libvirt_spec.rb @@ -35,8 +35,10 @@ describe 'nova::migration::libvirt' do context 'with default params' do it { is_expected.to contain_libvirtd_config('listen_tls').with_value('0') } it { is_expected.to contain_libvirtd_config('listen_tcp').with_value('1') } - it { is_expected.not_to contain_libvirtd_config('auth_tls') } - it { is_expected.to contain_libvirtd_config('auth_tcp').with_value("\"none\"") } + it { is_expected.to contain_libvirtd_config('auth_tls').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('auth_tcp').with_value('none').with_quote(true) } + it { is_expected.to contain_libvirtd_config('ca_file').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('crl_file').with_value('').with_quote(true) } it { is_expected.to contain_nova_config('libvirt/live_migration_tunnelled').with_value('') } it { is_expected.to contain_nova_config('libvirt/live_migration_with_native_tls').with_value('') } it { is_expected.to contain_nova_config('libvirt/live_migration_completion_timeout').with_value('') } @@ -90,8 +92,10 @@ describe 'nova::migration::libvirt' do end it { is_expected.to contain_libvirtd_config('listen_tls').with_value('1') } it { is_expected.to contain_libvirtd_config('listen_tcp').with_value('0') } - it { is_expected.to contain_libvirtd_config('auth_tls').with_value("\"none\"") } - it { is_expected.not_to contain_libvirtd_config('auth_tcp') } + it { is_expected.to contain_libvirtd_config('auth_tls').with_value('none').with_quote(true) } + it { is_expected.to contain_libvirtd_config('auth_tcp').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('ca_file').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('crl_file').with_value('').with_quote(true) } it { is_expected.to contain_nova_config('libvirt/live_migration_uri').with_value('qemu+tls://%s/system')} end @@ -104,8 +108,10 @@ describe 'nova::migration::libvirt' do end it { is_expected.to contain_libvirtd_config('listen_tls').with_value('1') } it { is_expected.to contain_libvirtd_config('listen_tcp').with_value('0') } - it { is_expected.to contain_libvirtd_config('auth_tls').with_value("\"none\"") } - it { is_expected.not_to contain_libvirtd_config('auth_tcp') } + it { is_expected.to contain_libvirtd_config('auth_tls').with_value('none').with_quote(true) } + it { is_expected.to contain_libvirtd_config('auth_tcp').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('ca_file').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('crl_file').with_value('').with_quote(true) } it { is_expected.to contain_nova_config('libvirt/live_migration_uri').with_value('qemu+tls://%s/system')} it { is_expected.to contain_nova_config('libvirt/live_migration_inbound_addr').with_value('host1.example.com')} end @@ -149,19 +155,23 @@ describe 'nova::migration::libvirt' do :auth => 'sasl', } end - it { is_expected.not_to contain_libvirtd_config('auth_tls') } - it { is_expected.to contain_libvirtd_config('auth_tcp').with_value("\"sasl\"") } + it { is_expected.to contain_libvirtd_config('auth_tls').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('auth_tcp').with_value('sasl').with_quote(true) } + it { is_expected.to contain_libvirtd_config('ca_file').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('crl_file').with_value('').with_quote(true) } end context 'with auth set to sasl and tls enabled' do let :params do { - :auth => 'sasl', + :auth => 'sasl', :transport => 'tls' } end - it { is_expected.to contain_libvirtd_config('auth_tls').with_value("\"sasl\"") } - it { is_expected.not_to contain_libvirtd_config('auth_tcp') } + it { is_expected.to contain_libvirtd_config('auth_tls').with_value('sasl').with_quote(true) } + it { is_expected.to contain_libvirtd_config('auth_tcp').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('ca_file').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('crl_file').with_value('').with_quote(true) } end context 'with certificates set and tls enabled' do @@ -172,8 +182,10 @@ describe 'nova::migration::libvirt' do :crl_file => '/crl', } end - it { is_expected.to contain_libvirtd_config('ca_file').with_value("\"/ca\"") } - it { is_expected.to contain_libvirtd_config('crl_file').with_value("\"/crl\"") } + it { is_expected.to contain_libvirtd_config('auth_tls').with_value('none').with_quote(true) } + it { is_expected.to contain_libvirtd_config('auth_tcp').with_value('').with_quote(true) } + it { is_expected.to contain_libvirtd_config('ca_file').with_value('/ca').with_quote(true) } + it { is_expected.to contain_libvirtd_config('crl_file').with_value('/crl').with_quote(true) } end context 'with auth set to an invalid setting' do @@ -212,7 +224,7 @@ describe 'nova::migration::libvirt' do :listen_address => "127.0.0.1" } end - it { is_expected.to contain_libvirtd_config('listen_addr').with_value("\"127.0.0.1\"") } + it { is_expected.to contain_libvirtd_config('listen_addr').with_value('127.0.0.1').with_quote(true) } end context 'with ssh transport' do diff --git a/spec/unit/provider/libvirtd_config/ini_setting_spec.rb b/spec/unit/provider/libvirtd_config/ini_setting_spec.rb new file mode 100644 index 000000000..24e98a773 --- /dev/null +++ b/spec/unit/provider/libvirtd_config/ini_setting_spec.rb @@ -0,0 +1,69 @@ +# +# these tests are a little concerning b/c they are hacking around the +# modulepath, so these tests will not catch issues that may eventually arise +# related to loading these plugins. +# I could not, for the life of me, figure out how to programatcally set the modulepath +$LOAD_PATH.push( + File.join( + File.dirname(__FILE__), + '..', + '..', + '..', + 'fixtures', + 'modules', + 'inifile', + 'lib') +) +require 'spec_helper' +provider_class = Puppet::Type.type(:libvirtd_config).provider(:ini_setting) +describe provider_class do + + it 'should allow setting to be set explicitly' do + resource = Puppet::Type::Libvirtd_config.new( + {:name => 'foo', :value => 'bar'} + ) + provider = provider_class.new(resource) + expect(provider.section).to eq('') + expect(provider.setting).to eq('foo') + end + + it 'should quote the value when quote is true' do + resource = Puppet::Type::Libvirtd_config.new( + {:name => 'foo', :value => 'baa', :quote => true } + ) + provider = provider_class.new(resource) + provider.exists? + expect(provider.section).to eq('') + expect(provider.setting).to eq('foo') + expect(resource[:value]).to eq('"baa"') + end + + it 'should not quote the value when quote is true but the value is quoted' do + resource = Puppet::Type::Libvirtd_config.new( + {:name => 'foo', :value => '"baa"', :quote => true } + ) + provider = provider_class.new(resource) + provider.exists? + expect(provider.section).to eq('') + expect(provider.setting).to eq('foo') + expect(resource[:value]).to eq('"baa"') + end + + it 'should ensure absent when is specified as a value' do + resource = Puppet::Type::Libvirtd_config.new( + {:name => 'foo', :value => ''} + ) + provider = provider_class.new(resource) + provider.exists? + expect(resource[:ensure]).to eq :absent + end + + it 'should ensure absent when is specified as a value and quote is true' do + resource = Puppet::Type::Libvirtd_config.new( + {:name => 'foo', :value => '', :quote => true} + ) + provider = provider_class.new(resource) + provider.exists? + expect(resource[:ensure]).to eq :absent + end +end diff --git a/spec/unit/provider/virtlogd_config/ini_setting_spec.rb b/spec/unit/provider/virtlogd_config/ini_setting_spec.rb new file mode 100644 index 000000000..f803c0842 --- /dev/null +++ b/spec/unit/provider/virtlogd_config/ini_setting_spec.rb @@ -0,0 +1,69 @@ +# +# these tests are a little concerning b/c they are hacking around the +# modulepath, so these tests will not catch issues that may eventually arise +# related to loading these plugins. +# I could not, for the life of me, figure out how to programatcally set the modulepath +$LOAD_PATH.push( + File.join( + File.dirname(__FILE__), + '..', + '..', + '..', + 'fixtures', + 'modules', + 'inifile', + 'lib') +) +require 'spec_helper' +provider_class = Puppet::Type.type(:virtlogd_config).provider(:ini_setting) +describe provider_class do + + it 'should allow setting to be set explicitly' do + resource = Puppet::Type::Virtlogd_config.new( + {:name => 'foo', :value => 'bar'} + ) + provider = provider_class.new(resource) + expect(provider.section).to eq('') + expect(provider.setting).to eq('foo') + end + + it 'should quote the value when quote is true' do + resource = Puppet::Type::Virtlogd_config.new( + {:name => 'foo', :value => 'baa', :quote => true } + ) + provider = provider_class.new(resource) + provider.exists? + expect(provider.section).to eq('') + expect(provider.setting).to eq('foo') + expect(resource[:value]).to eq('"baa"') + end + + it 'should not quote the value when quote is true but the value is quoted' do + resource = Puppet::Type::Virtlogd_config.new( + {:name => 'foo', :value => '"baa"', :quote => true } + ) + provider = provider_class.new(resource) + provider.exists? + expect(provider.section).to eq('') + expect(provider.setting).to eq('foo') + expect(resource[:value]).to eq('"baa"') + end + + it 'should ensure absent when is specified as a value' do + resource = Puppet::Type::Virtlogd_config.new( + {:name => 'foo', :value => ''} + ) + provider = provider_class.new(resource) + provider.exists? + expect(resource[:ensure]).to eq :absent + end + + it 'should ensure absent when is specified as a value and quote is true' do + resource = Puppet::Type::Virtlogd_config.new( + {:name => 'foo', :value => '', :quote => true} + ) + provider = provider_class.new(resource) + provider.exists? + expect(resource[:ensure]).to eq :absent + end +end