[chef] Re: How ---- in a pain free method - to get the public ip address on ec2


Chronological Thread 
  • From: Daniel DeLeo < >
  • To:
  • Subject: [chef] Re: How ---- in a pain free method - to get the public ip address on ec2
  • Date: Tue, 12 Aug 2014 19:00:50 -0700



On Tuesday, August 12, 2014 at 6:55 PM, David Montgomery wrote:

> Hi,
>  
> I am having a very hard time getting the public ip address on ec2
>  
> 1) the first recipes creates these resources
>  
> directory "/etc/chef/ohai/hints" do
> owner "root"
> group "root"
> recursive true
> action :create
> end
>  
> file "/etc/chef/ohai/hints/ec2.json" do
> owner "root"
> group "root"
> action :create
> end
>  
> 2) In another recipe later down the line I get the ip address
> if File.exists?("/etc/chef/ohai/hints/ec2.json")
> ipaddress = node['ec2']['public_ipv4']
> file "/tmp/public" do
> owner "root"
> group "root"
> mode "0755"
> content "#{ipaddress}"
> action :create
> end
> end
>  
> 3) Wowee.....the file is not created. Why does this happen?
>  
>  
> 4) And if I use this instead I get the below without checking for the 
> existince of /etc/chef/ohai/hints/ec2.json
>  
> ipaddress = node['ec2']['public_ipv4']
> file "/tmp/public" do
> owner "root"
> group "root"
> mode "0755"
> content "#{ipaddress}"
> action :create
> end
>  
>  
>  
>  
>  
> ================================================================================
> Recipe Compile Error in 
> /var/chef/cache/cookbooks/cloudera/recipes/hostname.rb
> ================================================================================
>  
> NoMethodError
> -------------
> undefined method `[]' for nil:NilClass
>  
> Cookbook Trace:
> ---------------
> /var/chef/cache/cookbooks/cloudera/recipes/hostname.rb:17:in `from_file'
>  
> Relevant File Content:
> ----------------------
> /var/chef/cache/cookbooks/cloudera/recipes/hostname.rb:
>  
>  
> 17>> ipaddress = node['ec2']['public_ipv4']
> 18: file "/tmp/public" do
> 19: owner "root"
> 20: group "root"
> 21: mode "0755"
> 22: content "#{ipaddress}"
> 23: action :create
> 24: end
>  
>  
> [2014-08-13T01:51:21+00:00] ERROR: Running exception handlers
> [2014-08-13T01:51:21+00:00] ERROR: Creating JSON exception report
> [2014-08-13T01:51:21+00:00] ERROR: Exception handlers complete

Two things.   

1. Ohai runs before any of your chef code is executed. If you change any of 
Ohai’s configuration (like adding hints), you need to re-run ohai (you can do 
this with the ohai resource)

2. Any file you create with the file resource isn’t created until the 
converge phase (which happens after chef has evaluated all of your recipes).

By far the easiest way to go is to just do everything out of band, e.g. touch 
the hint file before you run chef. Otherwise you’re gonna need to use 
run_action hackery to make chef converge resources during the compile phase.


--  
Daniel DeLeo






Archive powered by MHonArc 2.6.16.

§