3

before_migrate ステップに関連するカスタム コードを opsworks deploy cookbook に追加しようとしています。

before_migrate do
  link_tempfiles_to_current_release
  deploy_version = Time.now.strftime("%Y%m%d%H%M%S")

  if node['deploy_app'] == 'web'
    link "/var/lib/tomcat#{node["tomcat"]["base_version"]}/webapps/ROOT###{deploy_version}" do
      to "#{release_path}"
    end

私が抱えている問題は、デプロイ クックブックをサイト クックブック パッケージに含めると、シェフ エラーが発生することです。

[2013-08-27T16:45:05+00:00] FATAL: Chef::Exceptions::ImmutableAttributeModification:   ruby_block[Compile Custom OpsWorks Run List] (opsworks_custom_cookbooks::execute line 3) had an error: Chef::Exceptions::ImmutableAttributeModification: Node attributes are read-only when you do not specify which precedence level to set. To set an attribute use code like `node.default["key"] = "value"'

私のクックブックのノード設定が正しくないことを確認したので、何が問題なのかわかりません。このエラーをデバッグするのは非常に難しいと思います。このクックブックを変更せずに含めても、このエラーが発生します。正しい方向に私を向けることができるかどうか教えてください。

4

2 に答える 2

4

Chef 11 以降、属性は優先レベルを指定する必要があります。Chef 10 では、次のようなことができます。

node['foo']['bar'] = 'my new value'

Chef 11 では、その値の優先レベルを指定する必要があります。

node.set['foo']['bar'] = 'my new value'

また、属性の優先レベルに対応するdefaultand ( を使用することもできます。override

node.default['foo']['bar'] = 'my new value'
node.override['foo']['bar'] = 'my new value'

使用しているクックブック (または依存するクックブック) が、非推奨の構文を使用してノード オブジェクトにデータを設定していると思われます。

于 2014-01-03T16:36:15.607 に答える
1

Chef では、属性にはいくつかの優先順位の値があり、最も頻繁に使用されるのはおそらくデフォルトとオーバーライドです。http://docs.opscode.com/chef_overview_attributes.html node['something'] のみを指定して、属性を設定している場所を見つける必要があります。貼り付けたコードにはないようです。

于 2013-10-09T08:53:33.420 に答える