[chef] Re: Re: Using the value from an XML file in a template variable


Chronological Thread 
  • From: Greg Barker < >
  • To:
  • Subject: [chef] Re: Re: Using the value from an XML file in a template variable
  • Date: Sun, 28 Sep 2014 11:04:00 -0700

Thanks! That got me on the right track. I got a syntax error though, I had to change it to this:

template "/some/file.xml" do
    source "source_file.xml.erb
    variables(lazy {{
        :some_thing => node["some"]["thing"],
        :other_thing => REXML::XPath.first(REXML::
Document.new(File.new("#{node[:some][:dir]}/config.xml")), '//id').text
    }})
 end

Thanks again!

On Sun, Sep 28, 2014 at 9:47 AM, Noah Kantrowitz < " target="_blank"> > wrote:

On Sep 28, 2014, at 4:15 AM, Greg Barker < "> > wrote:

> I've got an xml file that is generated during a chef run by a third party utility, and I want to retrieve a value from this xml file and use it in a template variable. How should I go about doing that?
>
> I was thinking maybe something like this, but it didn't work. other_thing ends up being a blank value:
>
> template "/some/file.xml" do
>     source "source_file.xml.erb
>     variables(
>         :some_thing = node["some"]["thing"],
>         :other_thing = lazy {
>             require "rexml/document"
>             REXML::XPath.first(REXML::Document.new(File.new("#{node[:some][:dir]}/config.xml")), '//id').text
>         }
>     )
> end

You need to use lazy at the top level of the attribute:

> require "rexml/document"

> template "/some/file.xml" do
>     source "source_file.xml.erb
>     variables(lazy do
>         :some_thing => node["some"]["thing"],
>         :other_thing => REXML::XPath.first(REXML::Document.new(File.new("#{node[:some][:dir]}/config.xml")), '//id').text
>     end)
> end





Archive powered by MHonArc 2.6.16.

§