在OpsWorks Stacks中,我使用自定义JSON字段设置了图层属性:
{
"layer_apps" : [
"app_manager"
]
}
属性的app_
部分是工作流程所必需的。有时,我需要暂时删除食谱中的app_
部分。为此,我使用slice!
:
node['layer_apps'].each do |app_name|
install_certs_app_name = app_name
install_certs_app_name.slice!('app_') # 'app_manager' => 'manager'
# snip
end
但是,一旦完成此操作,即使app_name
未被直接修改,每个node['layer_apps']
属性也会被切片,这将继续进行后续烹饪并导致失败。我预期的行为是slice!
会修改app_name
,而不是当前的node['layer_apps']
属性。认为app_name
是属性的链接而不是它自己的变量,我尝试将其值分配给单独的变量(install_certs_app_name
,并在其他食谱中类似),但行为仍然存在
这是Ruby / Chef中的预期行为吗?有没有更好的方法从属性中排除app_
前缀?