从配方访问Chef :: Provider :: Package子类实例的属性

时间:2013-08-07 16:04:19

标签: chef

我需要以某种方式从Chef::Provider::Package的自定义子类“返回”变量返回到它所调用的配方,所以我可以在同一配方中使用此变量。

我尝试使用Chef::Resource::Package函数添加自定义set_or_return子类属性和相应的setter / getter包装器。我可以从我的Chef::Provider::Package子类中成功编写和读取此属性,但是当我尝试从配方中访问此属性时,我看到的是nil值。这可以用以下方法说明:

a = apt_package "bzip2" do
  action :install
end

# this won't work, a.version would be nil
log "bzip package version is #{a.version}"

但是,我可以在lib/chef/provider/package/apt.rb中看到@current_resource.version正在设置:

@current_resource.version(installed_version)

读取version实例的任意属性(在此示例中为Chef::Resource::AptPackage)的正确方法是什么?apt_package提供程序是从同一个配方中创建的?{/ p>

1 个答案:

答案 0 :(得分:0)

可能像::

a = apt_package "bzip2" do
          action :install
      end

      ruby_block "Init logger" do
        block do
          logger= resources("log[printing version]")
          logger.message a.version
        end
      end

      log "printing version" do
        message ""
       end