【发布时间】:2015-08-06 02:27:32
【问题描述】:
我正在尝试在 Chef 配方中动态执行 Ruby 逻辑,并相信实现此目的的最佳方法是使用块。
我在将块内分配的变量转移到主厨食谱的主代码时遇到困难。这是我尝试过的:
ruby_block "Create list" do
block do
to_use ||= []
node['hosts'].each do |host|
system( "#{path}/command --all" \
" | awk '{print $2; print $3}'" \
" | grep #{host} > /dev/null" )
unless $? == 0
to_use << host
end
end
node['hosts'] = to_use.join(',')
end
action :create
end
execute "Enable on hosts" do
command "#{path}/command --enable -N #{node['hosts']}"
end
我没有尝试即时重新分配 chef 属性,而是尝试在块中创建新变量,但仍然找不到在 execute 语句中访问它们的方法。
我最初使用一个类和调用方法,但是它是在配方之前编译的,我真的需要在运行时执行逻辑,在配方期间。
【问题讨论】:
-
最好的厨师收据是 idpotent,因此动态执行 ruby 逻辑通常不是一个好主意。你到底想做什么?
-
node['hosts'].select!会就地修改它。
标签: ruby chef-infra chef-recipe