diff --git a/lib/puppet/provider/hocon_setting/ruby.rb b/lib/puppet/provider/hocon_setting/ruby.rb index d9d85ed..6c60e77 100644 --- a/lib/puppet/provider/hocon_setting/ruby.rb +++ b/lib/puppet/provider/hocon_setting/ruby.rb @@ -107,7 +107,7 @@ def conf_object if @conf_file.nil? && !File.exist?(file_path) File.new(file_path, 'w') end - Hocon::ConfigFactory.parse_file(file_path) + Hocon::ConfigFactory.parse_file(file_path).resolve end def remove_value(value_to_remove) diff --git a/spec/unit/puppet/provider/conf_setting/ruby_spec.rb b/spec/unit/puppet/provider/conf_setting/ruby_spec.rb index 9fda936..b1c72fb 100644 --- a/spec/unit/puppet/provider/conf_setting/ruby_spec.rb +++ b/spec/unit/puppet/provider/conf_setting/ruby_spec.rb @@ -839,4 +839,33 @@ def validate_file(expected_content, tmp = tmpfile) expect(provider.value[0]).to eql('a' => 'b') end end + + context 'substitutions' do + let(:orig_content) do + <<-EOS +test_key_1: + { + bar: barvalue + } +sub_key: ${test_key_1.bar} + EOS + end + + it 'can change the value of a setting with a substitution' do + resource = Puppet::Type::Hocon_setting.new(common_params.merge( + setting: 'sub_key', ensure: 'present', value: 'newvalue', type: 'string', + )) + provider = described_class.new(resource) + expect(provider.exists?).to be true + provider.value = 'newvalue' + validate_file(<<-EOS +test_key_1: + { + bar: barvalue + } +sub_key: "newvalue" + EOS + ) + end + end end