Merge pull request #25 from bodepd/add_purging_support
Add purging support to ini file
This commit is contained in:
commit
5fdca54f6e
4 changed files with 117 additions and 1 deletions
|
@ -2,6 +2,28 @@ require File.expand_path('../../../util/ini_file', __FILE__)
|
|||
|
||||
Puppet::Type.type(:ini_setting).provide(:ruby) do
|
||||
|
||||
def self.instances
|
||||
if self.respond_to?(:file_path)
|
||||
# figure out what to do about the seperator
|
||||
ini_file = Puppet::Util::IniFile.new(file_path, '=')
|
||||
resources = []
|
||||
ini_file.section_names.each do |section_name|
|
||||
ini_file.get_settings(section_name).each do |setting, value|
|
||||
resources.push(
|
||||
new(
|
||||
:name => "#{section_name}/#{setting}",
|
||||
:value => value,
|
||||
:ensure => :present
|
||||
)
|
||||
)
|
||||
end
|
||||
end
|
||||
resources
|
||||
else
|
||||
raise(Puppet::Error, 'Ini_settings only support collecting instances when a file path is hard coded')
|
||||
end
|
||||
end
|
||||
|
||||
def exists?
|
||||
ini_file.get_value(section, setting)
|
||||
end
|
||||
|
@ -36,7 +58,11 @@ Puppet::Type.type(:ini_setting).provide(:ruby) do
|
|||
end
|
||||
|
||||
def file_path
|
||||
resource[:path]
|
||||
if self.class.respond_to?(:file_path)
|
||||
self.class.file_path
|
||||
else
|
||||
resource[:path]
|
||||
end
|
||||
end
|
||||
|
||||
def separator
|
||||
|
|
|
@ -23,6 +23,14 @@ module Util
|
|||
@section_names
|
||||
end
|
||||
|
||||
def get_settings(section_name)
|
||||
section = @sections_hash[section_name]
|
||||
section.setting_names.inject({}) do |result, setting|
|
||||
result[setting] = section.get_value(setting)
|
||||
result
|
||||
end
|
||||
end
|
||||
|
||||
def get_value(section_name, setting)
|
||||
if (@sections_hash.has_key?(section_name))
|
||||
@sections_hash[section_name].get_value(setting)
|
||||
|
|
|
@ -32,6 +32,10 @@ class IniFile
|
|||
@end_line.nil?
|
||||
end
|
||||
|
||||
def setting_names
|
||||
@existing_settings.keys | @additional_settings.keys
|
||||
end
|
||||
|
||||
def get_value(setting_name)
|
||||
@existing_settings[setting_name] || @additional_settings[setting_name]
|
||||
end
|
||||
|
|
|
@ -28,6 +28,84 @@ describe provider_class do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when calling instances' do
|
||||
|
||||
let :orig_content do
|
||||
''
|
||||
end
|
||||
|
||||
it 'should fail when file path is not set' do
|
||||
expect {
|
||||
described_class.instances
|
||||
}.to raise_error(Puppet::Error, 'Ini_settings only support collecting instances when a file path is hard coded')
|
||||
end
|
||||
|
||||
context 'when file path is set' do
|
||||
it 'should return [] when file is empty' do
|
||||
provider_class.stubs(:file_path).returns(emptyfile)
|
||||
provider_class.instances.should == []
|
||||
end
|
||||
it 'should override the provider instances file_path' do
|
||||
provider_class.stubs(:file_path).returns('/some/file/path')
|
||||
resource = Puppet::Type::Ini_setting.new(common_params)
|
||||
provider = provider_class.new(resource)
|
||||
provider.file_path.should == '/some/file/path'
|
||||
end
|
||||
context 'when file has contecnts' do
|
||||
let(:orig_content) {
|
||||
<<-EOS
|
||||
# This is a comment
|
||||
[section1]
|
||||
; This is also a comment
|
||||
foo=foovalue
|
||||
|
||||
bar = barvalue
|
||||
master = true
|
||||
[section2]
|
||||
|
||||
foo= foovalue2
|
||||
baz=bazvalue
|
||||
url = http://192.168.1.1:8080
|
||||
[section:sub]
|
||||
subby=bar
|
||||
#another comment
|
||||
; yet another comment
|
||||
EOS
|
||||
}
|
||||
|
||||
it 'should be able to parse the results' do
|
||||
provider_class.stubs(:file_path).returns(tmpfile)
|
||||
provider_class.instances.size == 7
|
||||
expected_array = [
|
||||
{:name => 'section1/foo', :value => 'foovalue' },
|
||||
{:name => 'section1/bar', :value => 'barvalue' },
|
||||
{:name => 'section1/master', :value => 'true' },
|
||||
{:name => 'section2/foo', :value => 'foovalue2' },
|
||||
{:name => 'section2/baz', :value => 'bazvalue' },
|
||||
{:name => 'section2/url', :value => 'http://192.168.1.1:8080' },
|
||||
{:name => 'section:sub/subby', :value => 'bar' }
|
||||
]
|
||||
real_array = []
|
||||
ensure_array = []
|
||||
provider_class.instances.each do |x|
|
||||
prop_hash = x.instance_variable_get(:@property_hash)
|
||||
ensure_value = prop_hash.delete(:ensure)
|
||||
ensure_array.push(ensure_value)
|
||||
real_array.push(prop_hash)
|
||||
end
|
||||
puts ensure_array.inspect
|
||||
puts real_array.inspect
|
||||
ensure_array.uniq.should == [:present]
|
||||
((real_array - expected_array) && (expected_array - real_array)).should == []
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
context "when ensuring that a setting is present" do
|
||||
let(:orig_content) {
|
||||
<<-EOS
|
||||
|
|
Loading…
Reference in a new issue