[chef] Re: Chef mangling bash command?


Chronological Thread 
  • From: Ash Berlin < >
  • To:
  • Subject: [chef] Re: Chef mangling bash command?
  • Date: Wed, 27 Jun 2012 22:03:50 +0100

Chatting on IRC I think the problems are with the \n in the ruby HERDOC block 
is causing that to be output as a litteral new line in the /tmp/chef-script 
it runs. Replacing it with \\n should do the trick. (Make ruby output \n so 
that bash sees it as a newline escape, not a new-line literal.)

($0 could also be a problem but that is in a single-quotes string in the 
script when bash gets hold of it so should be fine.)

-ash

On 27 Jun 2012, at 21:48, Michael Glenney wrote:

> I have an issue with nastly bash command I'm trying to get chef to execute 
> and it's not working properly, but if I run the same command from the 
> command line it works without errors and does what I expect.  Here's 
> resource:
> 
> bash "Set newrelic java options" do
>   user "root"
>   group "root"
> 
>   cwd glassfishconfig
>   code <<-EOH
>   awk -v searchterm="<java-config" -v payload="        
> <jvm-options>-javaagent:#{newrelic_dir}/newrelic-#{node[:newrelic][:version]}/newrelic.jar</jvm-options>\n
>         
> <jvm-options>-Dnewrelic.config.file=#{newrelic_dir}/#{node[:app][:key]}/newrelic.yml</jvm-options>\n
>         
> <jvm-options>-Dnewrelic.config.log_file_path=#{newrelic_dir}/#{node[:app][:key]}/logs</jvm-options>"
>  '{ if ($0 ~ searchterm) print $0 "\n" payload; else print $0 }' 
> domain.xml.newrelic.bak > domain.xml
> 
>   EOH
>   action :nothing
> end
> and here's the error:
> 
> ---- Begin output of "bash"  "/tmp/chef-script20120627-8350-r7jiup" ----
> 
> STDOUT: 
> STDERR: awk: { if ($0 ~ searchterm) print $0 "
> awk:                                 ^ unterminated string
> 
> ---- End output of "bash"  "/tmp/chef-script20120627-8350-r7jiup" ----
> 
> I am not able to use a template in this case (just saying because that was 
> suggested on IRC).
> 
> Unfortunately, when using debug logging the command that is run isn't shown 
> and there's no way I know of to tell chef-client to leave behind the 
> /tmp/chef-script#### files (though this should be an option or happen 
> automatically when debug logging is used because without it you can't 
> properly troubleshoot this type of issue).  I've been told in the past chef 
> passes the command along "as it is in the resource" to the temp script and 
> just runs it but obviously that isn't the case.
> 
> I've tried different variations of the above script including escaping all 
> double and single quotes but doesn't help.  Does anyone have an additional 
> insight or suggestions?  I could just drop it into a shell script and 
> include it as a cookbook file but it should work as I have it above.  Plus 
> I'd really like to know what the "gotcha's" are when using the script 
> resources (what needs to be escaped, what doesn't, what won't work at all, 
> etc.) but I haven't found anything in the documentation about it.
> 
> Thanks,
> 
> Mike G.
> 
> 
> 




Archive powered by MHonArc 2.6.16.

§