1

LWRP (Chef 10) を使用して独自のデプロイ リソースを作成しようとしていますが、エラーが発生し、ドキュメントで例を見つけることができませんでした。

私のリソースファイルは次のようになります。

actions :install

attribute :package_name, :kind_of => String, :name_attribute => true
attribute :app_name, :kind_of => String
attribute :cmd_prefix, :kind_of => String, :default => ''
attribute :deploy_tag, :kind_of => String
attribute :wsgi_stat_port, :kind_of => Fixnum

このリソースを使用しようとすると、次のエラーが発生します。

NoMethodError
-------------
undefined method `deploy_tag' for nil:NilClass

Cookbook Trace:
---------------
/var/cache/chef/cookbooks/dpn_python_common/providers/app.rb:59:in `class_from_file'
/var/cache/chef/cookbooks/dpn_python_common/providers/app.rb:57:in `class_from_file'

トレースで参照されるプロバイダー ファイルのブロックは次のとおりです。

git DEPLOY_PATH do
    repository repo_url
    reference @new_resource.deploy_tag
    user 'root'
    group 'root'
end

印刷してみました@new_resource.deploy_tagが、期待どおりの値が含まれているため、LWRP 内から git リソースが正しく機能していないだけだと思いますが、それを示すドキュメントを見つけることができませんでしたこのことをどのように呼ぶべきか。助言がありますか?


実際の答え:

次のように、リソース ブロックを使用する前にローカル変数を作成する必要があるようです。

deploy_tag = @new_resource.deploy_tag
git DEPLOY_PATH do
    repository repo_url
    reference deploy_tag
    user 'root'
    group 'root'
end
4

1 に答える 1

0

リソースのブロックは、リソース オブジェクトのコンテキストで既に評価されています。基本的にそれを作るだけですdeploy_tag

于 2014-07-26T23:52:34.543 に答える