Support virtlockd configurations
... so that this module supports configuration of all libvirt daemons. Change-Id: I93a02935df3a23e15b4a37081dc2a6ea646f6c79
This commit is contained in:
parent
a8d00ff718
commit
5242d3a08b
37
lib/puppet/provider/virtlockd_config/ini_setting.rb
Normal file
37
lib/puppet/provider/virtlockd_config/ini_setting.rb
Normal file
@ -0,0 +1,37 @@
|
||||
Puppet::Type.type(:virtlockd_config).provide(
|
||||
:ini_setting,
|
||||
: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
|
||||
|
||||
def setting
|
||||
resource[:name]
|
||||
end
|
||||
|
||||
def separator
|
||||
'='
|
||||
end
|
||||
|
||||
def ensure_absent_val
|
||||
resource[:ensure_absent_val]
|
||||
end
|
||||
|
||||
def self.file_path
|
||||
'/etc/libvirt/virtlockd.conf'
|
||||
end
|
||||
|
||||
end
|
57
lib/puppet/type/virtlockd_config.rb
Normal file
57
lib/puppet/type/virtlockd_config.rb
Normal file
@ -0,0 +1,57 @@
|
||||
Puppet::Type.newtype(:virtlockd_config) do
|
||||
|
||||
ensurable
|
||||
|
||||
newparam(:name, :namevar => true) do
|
||||
desc 'setting name to manage from virtlockd.conf'
|
||||
newvalues(/\S+/)
|
||||
end
|
||||
|
||||
newproperty(:value) do
|
||||
desc 'The value of the setting to be defined.'
|
||||
munge do |value|
|
||||
value = value.to_s.strip
|
||||
value
|
||||
end
|
||||
|
||||
def is_to_s( currentvalue )
|
||||
if resource.secret?
|
||||
return '[old secret redacted]'
|
||||
else
|
||||
return currentvalue
|
||||
end
|
||||
end
|
||||
|
||||
def should_to_s( newvalue )
|
||||
if resource.secret?
|
||||
return '[new secret redacted]'
|
||||
else
|
||||
return newvalue
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
newparam(:secret, :boolean => true) do
|
||||
desc 'Whether to hide the value from Puppet logs. Defaults to `false`.'
|
||||
|
||||
newvalues(:true, :false)
|
||||
|
||||
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('<SERVICE DEFAULT>')
|
||||
end
|
||||
|
||||
autorequire(:anchor) do
|
||||
['nova::install::end']
|
||||
end
|
||||
|
||||
end
|
@ -21,6 +21,10 @@
|
||||
# (optional) Allow configuration of arbitrary virtlogd configurations.
|
||||
# The value is an hash of virtlogd_config resources.
|
||||
#
|
||||
# [*virtlockd_config*]
|
||||
# (optional) Allow configuration of arbitrary virtlockd configurations.
|
||||
# The value is an hash of virtlockd_config resources.
|
||||
#
|
||||
# [*virtnodedevd_config*]
|
||||
# (optional) Allow configuration of arbitrary virtnodedevd configurations.
|
||||
# The value is an hash of virtnodedevd_config resources.
|
||||
@ -47,6 +51,7 @@
|
||||
class nova::compute::libvirt::config (
|
||||
$libvirtd_config = {},
|
||||
$virtlogd_config = {},
|
||||
$virtlockd_config = {},
|
||||
$virtnodedevd_config = {},
|
||||
$virtproxyd_config = {},
|
||||
$virtqemud_config = {},
|
||||
@ -58,6 +63,7 @@ class nova::compute::libvirt::config (
|
||||
|
||||
validate_legacy(Hash, 'validate_hash', $libvirtd_config)
|
||||
validate_legacy(Hash, 'validate_hash', $virtlogd_config)
|
||||
validate_legacy(Hash, 'validate_hash', $virtlockd_config)
|
||||
validate_legacy(Hash, 'validate_hash', $virtnodedevd_config)
|
||||
validate_legacy(Hash, 'validate_hash', $virtproxyd_config)
|
||||
validate_legacy(Hash, 'validate_hash', $virtqemud_config)
|
||||
@ -66,6 +72,7 @@ class nova::compute::libvirt::config (
|
||||
|
||||
create_resources('libvirtd_config', $libvirtd_config)
|
||||
create_resources('virtlogd_config', $virtlogd_config)
|
||||
create_resources('virtlockd_config', $virtlockd_config)
|
||||
create_resources('virtnodedevd_config', $virtnodedevd_config)
|
||||
create_resources('virtproxyd_config', $virtproxyd_config)
|
||||
create_resources('virtqemud_config', $virtqemud_config)
|
||||
|
65
manifests/compute/libvirt/virtlockd.pp
Normal file
65
manifests/compute/libvirt/virtlockd.pp
Normal file
@ -0,0 +1,65 @@
|
||||
# == Class: nova::compute::libvirt::virtlockd
|
||||
#
|
||||
# virtlockd configuration
|
||||
#
|
||||
# === Parameters:
|
||||
#
|
||||
# [*log_level*]
|
||||
# Defines a log level to filter log outputs.
|
||||
# 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 $::os_service_default
|
||||
#
|
||||
# [*log_outputs*]
|
||||
# (optional) Defines log outputs, as specified in
|
||||
# https://libvirt.org/logging.html
|
||||
# Defaults to $::os_service_default
|
||||
#
|
||||
# [*max_clients*]
|
||||
# The maximum number of concurrent client connections to allow
|
||||
# on primary socket.
|
||||
# Defaults to $::os_service_default
|
||||
#
|
||||
# [*admin_max_clients*]
|
||||
# The maximum number of concurrent client connections to allow
|
||||
# on administrative socket.
|
||||
# Defaults to $::os_service_default
|
||||
#
|
||||
# [*max_size*]
|
||||
# Maximum file size before rolling over.
|
||||
# Defaults to $::os_service_default
|
||||
#
|
||||
# [*max_backups*]
|
||||
# Maximum nuber of backup files to keep.
|
||||
# Defaults to $::os_service_default
|
||||
#
|
||||
class nova::compute::libvirt::virtlockd (
|
||||
$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
|
||||
|
||||
virtlockd_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']
|
||||
-> Virtlockd_config<||>
|
||||
-> Anchor['nova::config::end']
|
||||
}
|
4
releasenotes/notes/virtlockd-d412855bb1536dea.yaml
Normal file
4
releasenotes/notes/virtlockd-d412855bb1536dea.yaml
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Now this module supports configuration of the ``virtlockd`` service.
|
@ -13,6 +13,11 @@ describe 'nova::compute::libvirt::config' do
|
||||
'foo2' => { 'value' => 'fooValue' },
|
||||
'bar2' => { 'value' => 'barValue' },
|
||||
'baz2' => { 'ensure' => 'absent' }
|
||||
},
|
||||
:virtlockd_config => {
|
||||
'foo3' => { 'value' => 'fooValue' },
|
||||
'bar3' => { 'value' => 'barValue' },
|
||||
'baz3' => { 'ensure' => 'absent' }
|
||||
}
|
||||
}
|
||||
end
|
||||
@ -31,6 +36,12 @@ describe 'nova::compute::libvirt::config' do
|
||||
should contain_virtlogd_config('bar2').with_value('barValue')
|
||||
should contain_virtlogd_config('baz2').with_ensure('absent')
|
||||
}
|
||||
|
||||
it {
|
||||
should contain_virtlockd_config('foo3').with_value('fooValue')
|
||||
should contain_virtlockd_config('bar3').with_value('barValue')
|
||||
should contain_virtlockd_config('baz3').with_ensure('absent')
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
67
spec/classes/nova_compute_libvirt_virtlockd_spec.rb
Normal file
67
spec/classes/nova_compute_libvirt_virtlockd_spec.rb
Normal file
@ -0,0 +1,67 @@
|
||||
# Unit tests for nova::compute::libvirt::virtlockd class
|
||||
#
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'nova::compute::libvirt::virtlockd' do
|
||||
|
||||
let :pre_condition do
|
||||
<<-eos
|
||||
include nova
|
||||
include nova::compute
|
||||
include nova::compute::libvirt
|
||||
eos
|
||||
end
|
||||
|
||||
shared_examples_for 'nova-compute-libvirt-virtlockd' do
|
||||
|
||||
context 'with default parameters' do
|
||||
let :params do
|
||||
{}
|
||||
end
|
||||
|
||||
it { is_expected.to contain_class('nova::deps')}
|
||||
it { is_expected.to contain_class('nova::compute::libvirt::virtlockd')}
|
||||
|
||||
it { is_expected.to contain_virtlockd_config('log_level').with_value('<SERVICE DEFAULT>')}
|
||||
it { is_expected.to contain_virtlockd_config('log_outputs').with_value('<SERVICE DEFAULT>').with_quote(true)}
|
||||
it { is_expected.to contain_virtlockd_config('log_filters').with_value('<SERVICE DEFAULT>').with_quote(true)}
|
||||
it { is_expected.to contain_virtlockd_config('max_clients').with_value('<SERVICE DEFAULT>')}
|
||||
it { is_expected.to contain_virtlockd_config('admin_max_clients').with_value('<SERVICE DEFAULT>')}
|
||||
end
|
||||
|
||||
context 'with specified parameters' do
|
||||
let :params do
|
||||
{ :log_level => 3,
|
||||
:log_outputs => '3:syslog',
|
||||
:log_filters => '1:logging 4:object 4:json 4:event 1:util',
|
||||
:max_clients => 1024,
|
||||
:admin_max_clients => 5,
|
||||
:max_size => 2097152,
|
||||
:max_backups => 3,
|
||||
}
|
||||
end
|
||||
|
||||
it { is_expected.to contain_class('nova::deps')}
|
||||
it { is_expected.to contain_class('nova::compute::libvirt::virtlockd')}
|
||||
|
||||
it { is_expected.to contain_virtlockd_config('log_level').with_value(params[:log_level])}
|
||||
it { is_expected.to contain_virtlockd_config('log_outputs').with_value(params[:log_outputs]).with_quote(true)}
|
||||
it { is_expected.to contain_virtlockd_config('log_filters').with_value(params[:log_filters]).with_quote(true)}
|
||||
it { is_expected.to contain_virtlockd_config('max_clients').with_value(params[:max_clients])}
|
||||
it { is_expected.to contain_virtlockd_config('admin_max_clients').with_value(params[:admin_max_clients])}
|
||||
end
|
||||
end
|
||||
|
||||
on_supported_os({
|
||||
:supported_os => OSDefaults.get_supported_os
|
||||
}).each do |os,facts|
|
||||
context "on #{os}" do
|
||||
let (:facts) do
|
||||
facts.merge!(OSDefaults.get_facts())
|
||||
end
|
||||
|
||||
it_configures 'nova-compute-libvirt-virtlockd'
|
||||
end
|
||||
end
|
||||
|
||||
end
|
69
spec/unit/provider/virtlockd_config/ini_setting_spec.rb
Normal file
69
spec/unit/provider/virtlockd_config/ini_setting_spec.rb
Normal file
@ -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(:virtlockd_config).provider(:ini_setting)
|
||||
describe provider_class do
|
||||
|
||||
it 'should allow setting to be set explicitly' do
|
||||
resource = Puppet::Type::Virtlockd_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::Virtlockd_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::Virtlockd_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 <SERVICE DEFAULT> is specified as a value' do
|
||||
resource = Puppet::Type::Virtlockd_config.new(
|
||||
{:name => 'foo', :value => '<SERVICE DEFAULT>'}
|
||||
)
|
||||
provider = provider_class.new(resource)
|
||||
provider.exists?
|
||||
expect(resource[:ensure]).to eq :absent
|
||||
end
|
||||
|
||||
it 'should ensure absent when <SERVICE DEFAULT> is specified as a value and quote is true' do
|
||||
resource = Puppet::Type::Virtlockd_config.new(
|
||||
{:name => 'foo', :value => '<SERVICE DEFAULT>', :quote => true}
|
||||
)
|
||||
provider = provider_class.new(resource)
|
||||
provider.exists?
|
||||
expect(resource[:ensure]).to eq :absent
|
||||
end
|
||||
end
|
24
spec/unit/type/virtlockd_config_spec.rb
Normal file
24
spec/unit/type/virtlockd_config_spec.rb
Normal file
@ -0,0 +1,24 @@
|
||||
require 'puppet'
|
||||
require 'puppet/type/virtlockd_config'
|
||||
|
||||
describe 'Puppet::Type.type(:virtlockd_config)' do
|
||||
before :each do
|
||||
@virtlockd_config = Puppet::Type.type(:virtlockd_config).new(:name => 'DEFAULT/foo', :value => 'bar')
|
||||
end
|
||||
|
||||
it 'should accept a valid value' do
|
||||
@virtlockd_config[:value] = 'bar'
|
||||
expect(@virtlockd_config[:value]).to eq('bar')
|
||||
end
|
||||
|
||||
it 'should autorequire the package that install the file' do
|
||||
catalog = Puppet::Resource::Catalog.new
|
||||
anchor = Puppet::Type.type(:anchor).new(:name => 'nova::install::end')
|
||||
catalog.add_resource anchor, @virtlockd_config
|
||||
dependency = @virtlockd_config.autorequire
|
||||
expect(dependency.size).to eq(1)
|
||||
expect(dependency[0].target).to eq(@virtlockd_config)
|
||||
expect(dependency[0].source).to eq(anchor)
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue
Block a user