在OpsWorks堆棧的節點屬性,我已使用自定義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_
前綴?
比ks的建議,@SteveTurczyn! 過去我曾嘗試'install_certs_app_name = app_name.slice('app _')',但奇怪的是,ruby似乎返回被刪除的字符串部分,而不是結果字符串。不過,我之前沒有看過'.dup',所以我會試試看。 – TorpedoBench
它已經工作了! '.dup'似乎有訣竅。 – TorpedoBench
是的,我的頭在雲端......'slice'和'slice!'總是返回切片文本,所以'string ='abc'; result = string.slice('a')'和'string ='abc';結果= string.slice!('a')'在兩種情況下'result'將具有「a」,但在第二個示例中,「string」中的對象被修改。 – SteveTurczyn