looking similar .net string format in chef recipe ie.
string phone = string.format("phone: {0}",_phone); i have chef recipe need build command string 30 of these params hoping tidy way build string, in principle im doing this
a=node['some_var'].to_s ruby_block "run command" block cmd = shell_out!("node mycommand.js #{a}; exit 2;") end end when try error
arguments path.join must strings tips appreciated
chef runs in 2 phases:
compile , execute (see https://www.chef.io/blog/2013/09/04/demystifying-common-idioms-in-chef-recipes/ more details).
your variable assignment a happens @ compile time, e.g. when chef loads recipes. ruby block execute in execution mode @ converge time , cannot access variable a.
so easiest solution might putting attribute ruby block:
ruby_block "run command argument #{node['some_var']}" block shell_out!("node mycommand.js #{node['some_var']}") end end however:
if don't need execute ruby code, consider using
executeorbashresource instead.keep in mind, must have unique resource name, if you're building kind of loop around it. easy way put unique name
ruby_block "something unique per loop iteration" ... endwhat don't understand exit code 2. error code. make chef throw exception each time. (
shell_out!throws exception if exit code != 0, see https://github.com/chef/chef/blob/master/lib/chef/mixin/shell_out.rb#l24-l28)the resource executed on each chef run. not in interest. consider adding guard (test), prevent unnecessary execution, see https://docs.chef.io/resource_common.html#guards
Comments
Post a Comment