をポピュレートノード属性を変更され、IはカスタムJSONフィールドを使用して層の属性が設定されている:スライスを使用!変数にOpsWorksスタック内の変数
{
"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';結果= string.slice( 'a') 'および' string = 'abc'; result = string.slice!( 'a') 'どちらの場合でも' result'は "a"を持ちますが、2番目の例では 'string'のオブジェクトが変更されています。 – SteveTurczyn