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


Chronological Thread 
  • From: Noah Kantrowitz < >
  • To:
  • Subject: [chef] Re: Using the value from an XML file in a template variable
  • Date: Sun, 28 Sep 2014 09:47:17 -0700


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

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail




Archive powered by MHonArc 2.6.16.

§