一部のデフォルトのchefリソースでは、呼び出された後に一部の属性にアクセスできます
# recipes/default.rb
f = file "/tmp/file_resource" do
owner "root"
group "root"
mode "0755"
action :create
end
log "Path to my file is #{f.path}" # outputs "/tmp/file_resource"
カスタム LWRP でこれをどのように達成できますか (ここに例があります)
# resources/default.rb
actions :create
default_action :create
attribute :relative_path, :kind_of => String, :name_attribute => true
attribute :full_path, :kind_of => String
このプロバイダーでnew_resource.full_path
は、ファイル リソースのパスと等しくなるようにのプロパティを更新しようとしています。
# providers/default.rb
action :create do
f = file "/path/to/my/resource/#{new_resource.relative_path}" do
owner "root"
group "root"
mode "0755"
action :create
end
new_resource.full_path(f.path)
new_resource.updated_by_last_action(f.updated_by_last_action?)
end
しかしresource.full_path
、レシピでアクセスしようとするとnil
、期待されたものではなく/path/to/my/resource/relative/path
# recipes/default.rb
resource = my_awesome_lwrp "relative/path" do
action :create
end
log "Full path for my resource: #{resource.full_path}" # outputs "Full path for my resource:"
この例はかなり不自然です。実際のアプリケーション/理由は、https://github.com/peterjmit/chef-ssl-certのデフォルトのリソース/プロバイダーで確認できます。