# How to load a json file into chef recipe

**URL:** <https://discourse.chef.io/t/how-to-load-a-json-file-into-chef-recipe/5559>\
**Category:** Chef Infra (archive)\
**Created:** [July 25, 2014, 8:03am UTC](https://discourse.chef.io/t/how-to-load-a-json-file-into-chef-recipe/5559 "2014-07-25T08:03:00Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![David\_Montgomery](https://avatars.discourse-cdn.com/v4/letter/d/51bf81/32.png) [@David\_Montgomery](https://discourse.chef.io/u/David_Montgomery)\
**Post date:** [July 25, 2014, 8:03am UTC](https://discourse.chef.io/t/how-to-load-a-json-file-into-chef-recipe/5559/1 "2014-07-25T08:03:00Z")

</div>

Hi

I have a json file…and i want to read into a recipe yet a get and error.  
Wow…the file exists…

So…how to load a json file into chef recipe?

if File.exists?("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
zookeeper\_hosts =  
File.read("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
end

template “/etc/zookeeper/conf/zoo.cfg” do  
path "/etc/zookeeper/conf/zoo.cfg"  
source "cloudera.zoo.cfg.erb"  
owner "root"  
group "root"  
mode "0644"  
variables :zookeeper =\> zookeeper\_hosts  
notifies :restart, resources(:service =\> “zookeeper-server”)  
end

here is hte contents iof hte template

\<% @zookeeper.each\_pair do |name, ipaddress| %\>  
\<%= “#{name}=#{ipaddress}:2888:3888” %\>  
\<% end %\>

## Chef::Mixin::Template::TemplateError

undefined method `each\_pair’ for nil:NilClass

## Resource Declaration:

# In /var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb

116: template “/etc/zookeeper/conf/zoo.cfg” do  
117: path "/etc/zookeeper/conf/zoo.cfg"  
118: source "cloudera.zoo.cfg.erb"  
119: owner "root"  
120: group "root"  
121: mode "0644"  
122: variables :zookeeper =\> zookeeper\_hosts  
123: notifies :restart, resources(:service =\> “zookeeper-server”)  
124: end  
125:

## Compiled Resource:

# Declared in

/var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb:116:in `from\_file’

template("/etc/zookeeper/conf/zoo.cfg") do  
provider Chef::Provider::Template  
action "create"  
retries 0  
retry\_delay 2  
guard\_interpreter :default  
path "/etc/zookeeper/conf/zoo.cfg"  
backup 5  
atomic\_update true  
source "cloudera.zoo.cfg.erb"  
variables {:zookeeper=\>nil}  
cookbook\_name "zookeeper"  
recipe\_name "cloudera"  
owner "root"  
group "root"  
mode "0644"  
end

## Template Context:

on line #29  
27: # the port at which the clients will connect  
28: clientPort=2181  
29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
30: \<%= “#{name}=#{ipaddress}:2888:3888” %\>  
31: \<% end %\>

[2014-07-25T07:56:32+00:00] INFO: Running queued delayed notifications  
before re-raising exception

Running handlers:  
[2014-07-25T07:56:32+00:00] ERROR: Running exception handlers  
[2014-07-25T07:56:32+00:00] ERROR: Creating JSON exception report

- Chef::Handler::JsonFile  
Running handlers complete

[2014-07-25T07:56:32+00:00] ERROR: Exception handlers complete  
[2014-07-25T07:56:32+00:00] FATAL: Stacktrace dumped to  
/var/chef/cache/chef-stacktrace.out  
Chef Client failed. 5 resources updated in 24.033224336 seconds  
[2014-07-25T07:56:32+00:00] INFO: Sending resource update report (run-id:  
d9201bdc-8c6e-4c21-9911-2c8a141c3d0c)  
[2014-07-25T07:56:32+00:00] ERROR:

Chef::Mixin::Template::TemplateError (undefined method `each\_pair’ for  
nil:NilClass) on line #29:

27: # the port at which the clients will connect  
28: clientPort=2181  
29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
30: \<%= “#{name}=#{ipaddress}:2888:3888” %\>  
31: \<% end %\>

(erubis):29:in `block in evaluate’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in  
`instance\_eval’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in  
`evaluate’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:126:in  
`\_render\_template’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:112:in  
`render\_template’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/template/content.rb:43:in  
`file\_for\_provider’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/file\_content\_management/content\_base.rb:40:in  
`tempfile’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:411:in  
`tempfile’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:350:in  
`do\_contents\_changes’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:121:in  
`action\_create’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider.rb:120:in  
`run\_action’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource.rb:637:in  
`run\_action’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:49:in  
`run\_action’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in  
`block (2 levels) in converge’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in  
`each’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in  
`block in converge’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:98:in  
`block in execute\_each\_resource’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:116:in  
`call’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:116:in  
`call\_iterator\_block’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:85:in  
`step’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:104:in  
`iterate’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:55:in  
`each\_with\_index’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:96:in  
`execute\_each\_resource’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:80:in  
`converge’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:345:in  
`converge’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:431:in  
`do\_run’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:213:in  
`block in run’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in  
`fork’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in  
`run’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:217:in  
`run\_chef\_client’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:328:in  
`block in run\_application’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in  
`loop’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in  
`run\_application’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:67:in  
`run’

/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/bin/chef-client:26:in  
`<top (required)>' /usr/bin/chef-client:23:in`load’  
/usr/bin/chef-client:23:in `’

---

<div class="post-metadata">

**Author:** ![Justin\_Franks](https://avatars.discourse-cdn.com/v4/letter/j/f4b2a3/32.png) [@Justin\_Franks](https://discourse.chef.io/u/Justin_Franks)\
**Post date:** [July 25, 2014, 12:58pm UTC](https://discourse.chef.io/t/how-to-load-a-json-file-into-chef-recipe/5559/2 "2014-07-25T12:58:06Z")

</div>

Here is an example David. Not sure if this fits your use case well enough though.

cookbook\_file “/etc/consul.d/common.json” do # This is the file that will be created  
source “sjc-common.json” # This is the file name in chef cookbook /files/default/ that will be used  
owner "consul"  
group "consul"  
mode "0644"  
action :create\_if\_missing  
end

* * *

Justin Franks  
Lead Operations Engineer  
SaaS, Cloud, Data Centers & Infrastructure  
Lithium Technologies, Inc  
225 Bush St., 15th Floor  
San Francisco, CA 94104  
tel: +1 415 757 3100 x3219

* * *

From: David Montgomery [davidmontgomery@gmail.com](mailto:davidmontgomery@gmail.com)  
Sent: Friday, July 25, 2014 1:03 AM  
To: [chef@lists.opscode.com](mailto:chef@lists.opscode.com)  
Subject: [chef] how to load a json file into chef recipe

Hi

I have a json file…and i want to read into a recipe yet a get and error. Wow…the file exists…

So…how to load a json file into chef recipe?

if File.exists?("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
zookeeper\_hosts = File.read("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
end

template “/etc/zookeeper/conf/zoo.cfg” do  
path "/etc/zookeeper/conf/zoo.cfg"  
source "cloudera.zoo.cfg.erb"  
owner "root"  
group "root"  
mode "0644"  
variables :zookeeper =\> zookeeper\_hosts  
notifies :restart, resources(:service =\> “zookeeper-server”)  
end

here is hte contents iof hte template

\<% @zookeeper.each\_pair do |name, ipaddress| %\>  
\<%= “#{name}=#{ipaddress}:2888:3888” %\>  
\<% end %\>

## Chef::Mixin::Template::TemplateError

undefined method `each\_pair’ for nil:NilClass

## Resource Declaration:

# In /var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb

116: template “/etc/zookeeper/conf/zoo.cfg” do  
117: path "/etc/zookeeper/conf/zoo.cfg"  
118: source "cloudera.zoo.cfg.erb"  
119: owner "root"  
120: group "root"  
121: mode "0644"  
122: variables :zookeeper =\> zookeeper\_hosts  
123: notifies :restart, resources(:service =\> “zookeeper-server”)  
124: end  
125:

## Compiled Resource:

# Declared in /var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb:116:in `from\_file’

template("/etc/zookeeper/conf/zoo.cfg") do  
provider Chef::Provider::Template  
action "create"  
retries 0  
retry\_delay 2  
guard\_interpreter :default  
path "/etc/zookeeper/conf/zoo.cfg"  
backup 5  
atomic\_update true  
source "cloudera.zoo.cfg.erb"  
variables {:zookeeper=\>nil}  
cookbook\_name "zookeeper"  
recipe\_name "cloudera"  
owner "root"  
group "root"  
mode "0644"  
end

## Template Context:

on line #29  
27: # the port at which the clients will connect  
28: clientPort=2181  
29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
30: \<%= “#{name}=#{ipaddress}:2888:3888” %\>  
31: \<% end %\>

[2014-07-25T07:56:32+00:00] INFO: Running queued delayed notifications before re-raising exception

Running handlers:  
[2014-07-25T07:56:32+00:00] ERROR: Running exception handlers  
[2014-07-25T07:56:32+00:00] ERROR: Creating JSON exception report

- Chef::Handler::JsonFile  
Running handlers complete

[2014-07-25T07:56:32+00:00] ERROR: Exception handlers complete  
[2014-07-25T07:56:32+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out  
Chef Client failed. 5 resources updated in 24.033224336 seconds  
[2014-07-25T07:56:32+00:00] INFO: Sending resource update report (run-id: d9201bdc-8c6e-4c21-9911-2c8a141c3d0c)  
[2014-07-25T07:56:32+00:00] ERROR:

Chef::Mixin::Template::TemplateError (undefined method `each\_pair’ for nil:NilClass) on line #29:

27: # the port at which the clients will connect  
28: clientPort=2181  
29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
30: \<%= “#{name}=#{ipaddress}:2888:3888” %\>  
31: \<% end %\>

(erubis):29:in `block in evaluate' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in`instance\_eval’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in `evaluate' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:126:in`\_render\_template’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:112:in `render_template' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/template/content.rb:43:in`file\_for\_provider’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/file\_content\_management/content\_base.rb:40:in `tempfile' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:411:in`tempfile’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:350:in `do_contents_changes' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:121:in`action\_create’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider.rb:120:in `run_action' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource.rb:637:in`run\_action’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:49:in `run_action' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in`block (2 levels) in converge’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in `each' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in`block in converge’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:98:in `block in execute_each_resource' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource_collection/stepable_iterator.rb:116:in`call’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:116:in `call_iterator_block' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource_collection/stepable_iterator.rb:85:in`step’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:104:in `iterate' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource_collection/stepable_iterator.rb:55:in`each\_with\_index’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:96:in `execute_each_resource' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:80:in`converge’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:345:in `converge' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:431:in`do\_run’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:213:in `block in run' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in`fork’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in `run' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:217:in`run\_chef\_client’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:328:in `block in run_application' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in`loop’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in `run_application' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:67:in`run’  
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/bin/chef-client:26:in `<top (required)>' /usr/bin/chef-client:23:in`load’  
/usr/bin/chef-client:23:in `’

---

<div class="post-metadata">

**Author:** ![David\_Montgomery](https://avatars.discourse-cdn.com/v4/letter/d/51bf81/32.png) [@David\_Montgomery](https://discourse.chef.io/u/David_Montgomery)\
**Post date:** [July 26, 2014, 7:02am UTC](https://discourse.chef.io/t/how-to-load-a-json-file-into-chef-recipe/5559/3 "2014-07-26T07:02:31Z")

</div>

I have python script that created the json object and saves. I then  
later, trying to load the json into a hash in a recipe so it can be used in  
a template.

Thanks

On Fri, Jul 25, 2014 at 8:58 PM, Justin Franks [justin.franks@lithium.com](mailto:justin.franks@lithium.com)  
wrote:

> Here is an example David. Not sure if this fits your use case well  
> enough though.
> 
> cookbook\_file "/etc/consul.d/common.json" do # This is the file that  
> will be created  
> source "sjc-common.json" # This is the file name in chef cookbook  
> /files/default/ that will be used  
> owner "consul"  
> group "consul"  
> mode "0644"  
> action :create\_if\_missing  
> end
> 
> * * *
> 
> ## Justin Franks Lead Operations Engineer SaaS, Cloud, Data Centers & Infrastructure Lithium Technologies, Inc 225 Bush St., 15th Floor San Francisco, CA 94104 tel: +1 415 757 3100 x3219
> 
> _From:_ David Montgomery [davidmontgomery@gmail.com](mailto:davidmontgomery@gmail.com)  
> _Sent:_ Friday, July 25, 2014 1:03 AM  
> _To:_ [chef@lists.opscode.com](mailto:chef@lists.opscode.com)  
> _Subject:_ [chef] how to load a json file into chef recipe
> 
> Hi
> 
> I have a json file..and i want to read into a recipe yet a get and  
> error. Wow..the file exists.......
> 
> So..how to load a json file into chef recipe?
> 
> if File.exists?("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
> zookeeper\_hosts =  
> File.read("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
> end
> 
> template "/etc/zookeeper/conf/zoo.cfg" do  
> path "/etc/zookeeper/conf/zoo.cfg"  
> source "cloudera.zoo.cfg.erb"  
> owner "root"  
> group "root"  
> mode "0644"  
> variables :zookeeper =\> zookeeper\_hosts  
> notifies :restart, resources(:service =\> "zookeeper-server")  
> end
> 
> here is hte contents iof hte template
> 
> \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
> \<%= "#{name}=#{ipaddress}:2888:3888" %\>  
> \<% end %\>
> 
> ## Chef::Mixin::Template::TemplateError
> 
> undefined method `each\_pair' for nil:NilClass
> 
> ## Resource Declaration:
> 
> # In /var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb
> 
> 116: template "/etc/zookeeper/conf/zoo.cfg" do  
> 117: path "/etc/zookeeper/conf/zoo.cfg"  
> 118: source "cloudera.zoo.cfg.erb"  
> 119: owner "root"  
> 120: group "root"  
> 121: mode "0644"  
> 122: variables :zookeeper =\> zookeeper\_hosts  
> 123: notifies :restart, resources(:service =\> "zookeeper-server")  
> 124: end  
> 125:
> 
> ## Compiled Resource:
> 
> # Declared in
> 
> /var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb:116:in `from\_file'
> 
> template("/etc/zookeeper/conf/zoo.cfg") do  
> provider Chef::Provider::Template  
> action "create"  
> retries 0  
> retry\_delay 2  
> guard\_interpreter :default  
> path "/etc/zookeeper/conf/zoo.cfg"  
> backup 5  
> atomic\_update true  
> source "cloudera.zoo.cfg.erb"  
> variables {:zookeeper=\>nil}  
> cookbook\_name "zookeeper"  
> recipe\_name "cloudera"  
> owner "root"  
> group "root"  
> mode "0644"  
> end
> 
> ## Template Context:
> 
> on line #29  
> 27: # the port at which the clients will connect  
> 28: clientPort=2181  
> 29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
> 30: \<%= "#{name}=#{ipaddress}:2888:3888" %\>  
> 31: \<% end %\>
> 
> [2014-07-25T07:56:32+00:00] INFO: Running queued delayed notifications  
> before re-raising exception
> 
> Running handlers:  
> [2014-07-25T07:56:32+00:00] ERROR: Running exception handlers  
> [2014-07-25T07:56:32+00:00] ERROR: Creating JSON exception report
> 
> - Chef::Handler::JsonFile  
> Running handlers complete
> 
> [2014-07-25T07:56:32+00:00] ERROR: Exception handlers complete  
> [2014-07-25T07:56:32+00:00] FATAL: Stacktrace dumped to  
> /var/chef/cache/chef-stacktrace.out  
> Chef Client failed. 5 resources updated in 24.033224336 seconds  
> [2014-07-25T07:56:32+00:00] INFO: Sending resource update report (run-id:  
> d9201bdc-8c6e-4c21-9911-2c8a141c3d0c)  
> [2014-07-25T07:56:32+00:00] ERROR:
> 
> Chef::Mixin::Template::TemplateError (undefined method `each\_pair' for  
> nil:NilClass) on line #29:
> 
> 27: # the port at which the clients will connect  
> 28: clientPort=2181  
> 29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
> 30: \<%= "#{name}=#{ipaddress}:2888:3888" %\>  
> 31: \<% end %\>
> 
> (erubis):29:in `block in evaluate'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in  
> `instance\_eval'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in  
> `evaluate'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:126:in  
> `\_render\_template'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:112:in  
> `render\_template'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/template/content.rb:43:in  
> `file\_for\_provider'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/file\_content\_management/content\_base.rb:40:in  
> `tempfile'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:411:in  
> `tempfile'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:350:in  
> `do\_contents\_changes'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:121:in  
> `action\_create'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider.rb:120:in  
> `run\_action'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource.rb:637:in  
> `run\_action'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:49:in  
> `run\_action'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in  
> `block (2 levels) in converge'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in  
> `each'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in  
> `block in converge'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:98:in  
> `block in execute\_each\_resource'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:116:in  
> `call'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:116:in  
> `call\_iterator\_block'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:85:in  
> `step'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:104:in  
> `iterate'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:55:in  
> `each\_with\_index'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:96:in  
> `execute\_each\_resource'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:80:in  
> `converge'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:345:in  
> `converge'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:431:in  
> `do\_run'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:213:in  
> `block in run'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in  
> `fork'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in  
> `run'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:217:in  
> `run\_chef\_client'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:328:in  
> `block in run\_application'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in  
> `loop'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in  
> `run\_application'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:67:in  
> `run'
> 
> /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/bin/chef-client:26:in  
> `<top (required)>' /usr/bin/chef-client:23:in `load'  
> /usr/bin/chef-client:23:in `'

---

<div class="post-metadata">

**Author:** ![dcondomitti](https://sea2.discourse-cdn.com/flex016/user_avatar/discourse.chef.io/dcondomitti/32/104_2.png) [@dcondomitti](https://discourse.chef.io/u/dcondomitti)\
**Post date:** [July 26, 2014, 9:25pm UTC](https://discourse.chef.io/t/how-to-load-a-json-file-into-chef-recipe/5559/4 "2014-07-26T21:25:41Z")

</div>

You're not parsing that file as JSON; just doing a File.read returns a JSON-encoded string. I'd suggest reading the Ruby stdlib documentation around the File and JSON classes.

Also, that file doesn't exist in the location you specified if it's not setting zookeeper\_hosts / @zookeeper to the contents of the file. How are you saving it to the Chef file cache? If the script is available on the machine itself, have you thought about executing it with Chef and capturing/parsing the output?

Sent from my iPhone

> On Jul 26, 2014, at 12:02 AM, David Montgomery [davidmontgomery@gmail.com](mailto:davidmontgomery@gmail.com) wrote:
> 
> I have python script that created the json object and saves. I then later, trying to load the json into a hash in a recipe so it can be used in a template.
> 
> Thanks
> 
> > On Fri, Jul 25, 2014 at 8:58 PM, Justin Franks [justin.franks@lithium.com](mailto:justin.franks@lithium.com) wrote:  
> > Here is an example David. Not sure if this fits your use case well enough though.
> > 
> > cookbook\_file "/etc/consul.d/common.json" do # This is the file that will be created  
> > source "sjc-common.json" # This is the file name in chef cookbook /files/default/ that will be used  
> > owner "consul"  
> > group "consul"  
> > mode "0644"  
> > action :create\_if\_missing  
> > end
> > 
> > * * *
> > 
> > Justin Franks  
> > Lead Operations Engineer  
> > SaaS, Cloud, Data Centers & Infrastructure  
> > Lithium Technologies, Inc  
> > 225 Bush St., 15th Floor  
> > San Francisco, CA 94104  
> > tel: +1 415 757 3100 x3219
> > 
> > From: David Montgomery [davidmontgomery@gmail.com](mailto:davidmontgomery@gmail.com)  
> > Sent: Friday, July 25, 2014 1:03 AM  
> > To: [chef@lists.opscode.com](mailto:chef@lists.opscode.com)  
> > Subject: [chef] how to load a json file into chef recipe
> > 
> > Hi
> > 
> > I have a json file..and i want to read into a recipe yet a get and error. Wow..the file exists.......
> > 
> > So..how to load a json file into chef recipe?
> > 
> > if File.exists?("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
> > zookeeper\_hosts = File.read("#{Chef::Config[:file\_cache\_path]}/zookeeper\_hosts")  
> > end
> > 
> > template "/etc/zookeeper/conf/zoo.cfg" do  
> > path "/etc/zookeeper/conf/zoo.cfg"  
> > source "cloudera.zoo.cfg.erb"  
> > owner "root"  
> > group "root"  
> > mode "0644"  
> > variables :zookeeper =\> zookeeper\_hosts  
> > notifies :restart, resources(:service =\> "zookeeper-server")  
> > end
> > 
> > here is hte contents iof hte template
> > 
> > \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
> > \<%= "#{name}=#{ipaddress}:2888:3888" %\>  
> > \<% end %\>
> > 
> > ## Chef::Mixin::Template::TemplateError
> > 
> > undefined method `each\_pair' for nil:NilClass
> > 
> > ## Resource Declaration:
> > 
> > # In /var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb
> > 
> > 116: template "/etc/zookeeper/conf/zoo.cfg" do  
> > 117: path "/etc/zookeeper/conf/zoo.cfg"  
> > 118: source "cloudera.zoo.cfg.erb"  
> > 119: owner "root"  
> > 120: group "root"  
> > 121: mode "0644"  
> > 122: variables :zookeeper =\> zookeeper\_hosts  
> > 123: notifies :restart, resources(:service =\> "zookeeper-server")  
> > 124: end  
> > 125:
> > 
> > ## Compiled Resource:
> > 
> > # Declared in /var/chef/cache/cookbooks/zookeeper/recipes/cloudera.rb:116:in `from\_file'
> > 
> > template("/etc/zookeeper/conf/zoo.cfg") do  
> > provider Chef::Provider::Template  
> > action "create"  
> > retries 0  
> > retry\_delay 2  
> > guard\_interpreter :default  
> > path "/etc/zookeeper/conf/zoo.cfg"  
> > backup 5  
> > atomic\_update true  
> > source "cloudera.zoo.cfg.erb"  
> > variables {:zookeeper=\>nil}  
> > cookbook\_name "zookeeper"  
> > recipe\_name "cloudera"  
> > owner "root"  
> > group "root"  
> > mode "0644"  
> > end
> > 
> > ## Template Context:
> > 
> > on line #29  
> > 27: # the port at which the clients will connect  
> > 28: clientPort=2181  
> > 29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
> > 30: \<%= "#{name}=#{ipaddress}:2888:3888" %\>  
> > 31: \<% end %\>
> > 
> > [2014-07-25T07:56:32+00:00] INFO: Running queued delayed notifications before re-raising exception
> > 
> > Running handlers:  
> > [2014-07-25T07:56:32+00:00] ERROR: Running exception handlers  
> > [2014-07-25T07:56:32+00:00] ERROR: Creating JSON exception report
> > 
> > - Chef::Handler::JsonFile  
> > Running handlers complete
> > 
> > [2014-07-25T07:56:32+00:00] ERROR: Exception handlers complete  
> > [2014-07-25T07:56:32+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out  
> > Chef Client failed. 5 resources updated in 24.033224336 seconds  
> > [2014-07-25T07:56:32+00:00] INFO: Sending resource update report (run-id: d9201bdc-8c6e-4c21-9911-2c8a141c3d0c)  
> > [2014-07-25T07:56:32+00:00] ERROR:
> > 
> > Chef::Mixin::Template::TemplateError (undefined method `each\_pair' for nil:NilClass) on line #29:
> > 
> > 27: # the port at which the clients will connect  
> > 28: clientPort=2181  
> > 29: \<% @zookeeper.each\_pair do |name, ipaddress| %\>  
> > 30: \<%= "#{name}=#{ipaddress}:2888:3888" %\>  
> > 31: \<% end %\>
> > 
> > (erubis):29:in `block in evaluate' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in `instance\_eval'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/erubis-2.7.0/lib/erubis/evaluator.rb:74:in `evaluate' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:126:in `\_render\_template'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/mixin/template.rb:112:in `render_template' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/template/content.rb:43:in `file\_for\_provider'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/file\_content\_management/content\_base.rb:40:in `tempfile' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:411:in `tempfile'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:350:in `do_contents_changes' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider/file.rb:121:in `action\_create'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/provider.rb:120:in `run_action' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource.rb:637:in `run\_action'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:49:in `run_action' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in `block (2 levels) in converge'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in `each' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:81:in `block in converge'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:98:in `block in execute_each_resource' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource_collection/stepable_iterator.rb:116:in `call'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:116:in `call_iterator_block' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource_collection/stepable_iterator.rb:85:in `step'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection/stepable\_iterator.rb:104:in `iterate' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource_collection/stepable_iterator.rb:55:in `each\_with\_index'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/resource\_collection.rb:96:in `execute_each_resource' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/runner.rb:80:in `converge'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:345:in `converge' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:431:in `do\_run'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:213:in `block in run' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in `fork'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/client.rb:207:in `run' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:217:in `run\_chef\_client'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:328:in `block in run_application' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in `loop'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application/client.rb:317:in `run_application' /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/lib/chef/application.rb:67:in `run'  
> > /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.12.8/bin/chef-client:26:in `<top (required)>' /usr/bin/chef-client:23:in `load'  
> > /usr/bin/chef-client:23:in `'
