Re: Re: Re: Re: Re: Re: Dynamic Template File


#1

Thank you all. Yes ugh windows, but we are a windows shop. So far I haven’t run across any major problems with chef and windows, but I am writing new recipes for our products, so I haven’t messed with the existing chef cookbooks. I was able to get around this by creating the file with ruby using pretty much the same code as I had in the template file:
newConfigFile=File.open(newConfigFilePath,“w+”)
node[‘mobi.integration’][‘config’].each do |setting|
newConfigFile.puts(setting[0]+"="+setting[1])
end

Yeah… This is one of those ruby on windows problems. What I am guessing is happening in your case is that the dynamic template is creating the file in place and setting permissions using the built-in ruby constructs. The net effect is that inherited permissions are removed from the newly created file which can create a scenario where you are unable to change the files (think UAC and privilege escalation). What I have done in the past is fire icacls to reset the permissions of the file after the file is dynamically created.

Now I am not sure what the release plan is, but I do know that @opscode is writing a windows securable plugin which will address many of these types of problems with file permissions.

On May 8, 2012, at 8:12 AM, Bryan Baugher wrote:

Ugh, windows. Fortunately I have not had the chance to even try chef cookbooks on windows.

I know that chef 0.10.6 [1] was supposed to have large improvements for windows that could solve your problem. Otherwise I have no idea what the problem could be.

[1] - http://wiki.opscode.com/display/chef/Release+Notes#ReleaseNotes-ReleaseNotesChefVersion0.10.6
[2] - http://www.opscode.com/blog/2011/12/14/chef-0-10-6-released/

On Tue, May 8, 2012 at 7:22 AM, Soula, William <wsoula@mobicorp.commailto:wsoula@mobicorp.com> wrote:
base_install_path=node[‘mobi.GIS’][‘install’][‘install_path’]
installer_install_path=File.join(base_install_path,“installer”)
installer_config_properties_file = File.join(installer_install_path,“mobi.GIS-install-config.properties”)
template installer_config_properties_file do
source "mobi.GIS-config-ant-properties.erb"
variables(
:config => node[‘mobi.integration’][‘config’]
)
end

tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] INFO: template[c:/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties] backed up to c:/chef/backup/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties.chef-20120507111115
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] ERROR: template[c:/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties] (mobi.GIS::default line /chef/cache/cookbooks/mobi.GIS/recipes/default.rb) has had an error
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] ERROR: template[c:/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties] (c:/chef/cache/cookbooks/mobi.GIS/recipes/default.rb:12:in from_file') had an error: tsomerville.pointserve.com<http://tsomerville.pointserve.com/> template[c:/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties] (mobi.GIS::default line /chef/cache/cookbooks/mobi.GIS/recipes/default.rb) had an error: Errno::EACCES: Permission denied - c:/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1314:inunlink’tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1314:in block in remove_file' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1322:inplatform_support’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1313:in remove_file' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:511:inblock in mv’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1423:in block in fu_each_src_dest' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1439:infu_each_src_dest0’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:1421:in fu_each_src_dest' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/1.9.1/fileutils.rb:504:inmv’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/provider/template.rb:47:in block in action_create' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/mixin/template.rb:48:inblock in render_template’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/1.9.1/tempfile.rb:320:in open' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/mixin/template.rb:45:inrender_template’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/provider/template.rb:99:in render_with_context' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/provider/template.rb:39:inaction_create’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource.rb:440:in run_action' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/runner.rb:45:inrun_action’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/runner.rb:81:in block (2 levels) in converge' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/runner.rb:81:ineach’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/runner.rb:81:in block in converge' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource_collection.rb:94:inblock in execute_each_resource’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource_collection/stepable_iterator.rb:116:in call' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource_collection/stepable_iterator.rb:116:incall_iterator_block’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource_collection/stepable_iterator.rb:85:in step' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource_collection/stepable_iterator.rb:104:initerate’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource_collection/stepable_iterator.rb:55:in each_with_index' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/resource_collection.rb:92:inexecute_each_resource’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/runner.rb:76:in converge' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/client.rb:312:inconverge’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/client.rb:160:in run' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/application/client.rb:239:inblock in run_application’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/application/client.rb:229:in loop' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/application/client.rb:229:inrun_application’
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/lib/chef/application.rb:67:in run' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-0.10.8/bin/chef-client:26:in<top (required)>'
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ C:/opscode/chef/bin/chef-client:19:in load' tsomerville.pointserve.com<http://tsomerville.pointserve.com/> C:/opscode/chef/bin/chef-client:19:in'
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] ERROR: Running exception handlers
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] FATAL: Saving node information to c:/chef/cache/failed-run-data.json
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] ERROR: Exception handlers complete
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] FATAL: Stacktrace dumped to c:/chef/cache/chef-stacktrace.out
tsomerville.pointserve.comhttp://tsomerville.pointserve.com/ [Mon, 07 May 2012 11:11:15 -0500] FATAL: Errno::EACCES: template[c:/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties] (mobi.GIS::default line /chef/cache/cookbooks/mobi.GIS/recipes/default.rb) had an error: Errno::EACCES: Permission denied - c:/pointserve/mobi.GIS/installer/mobi.GIS-install-config.properties

Could you show the code for the recipe or at least the template resource which is creating the file? Can you also give the stacktrace to the permission denied error?

The permission denied error makes me think something is wrong with the chef installation or you are using chef incorrectly.

You should be able to do something like,

template “/path/to/my.properties” do
variables(
:config => node[:myEnvironmentConfig]
)
end

On Mon, May 7, 2012 at 3:50 PM, Soula, William <wsoula@mobicorp.commailto:wsoula@mobicorp.com> wrote:
I guess I can just not use templates and output a file with ruby that contains the values I want and that way I don’t have to worry about chef funkiness.

My environment file has a config section with name, value pairs in it. I am trying to output a template of those name, value pairs by putting the below code into my erb file in chef:
<% @config.each do |setting| -%>
<%= setting[0] %>=<%= setting[1] %>
<%end-%>

This works great the first time as it creates a property file with my name value pairs.

The problem is when the config section changes. I get a Permission denied error, but if I rerun the recipe then everything works and the new value is in the property file.

How can I create dynamic property files from the environment json file?

Thanks,
Will


-Bryan


-Bryan