0

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

我尝试添加自定义Chef::Resource::Package子类属性和适当的 setter/getter 包装器和set_or_return函数。我可以成功地从我的子类中写入和读取此属性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::AptPackageapt_package

4

1 回答 1

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
于 2013-08-17T08:54:40.293 回答