undefined方法`exists ='用于Chef提供程序中的load_current_resource

时间:2014-03-03 16:41:28

标签: ruby chef lwrp

在编写提供程序(对于Datastax Opscenter群集资源)时,我需要了解具有相同cluster_id的任何当前现有群集,因此在提供程序中编写了load_current_resource方法。我的问题是在运行时(作为Vagrant实例上的厨师独奏)我收到一个错误:

undefined method `exists=' for Chef::Resource::OpscenterCluster

在以下方法中@current_resource.exists = false之后的if response.code != 200

def load_current_resource
   @current_resource = Chef::Resource::OpscenterCluster.new(@new_resource.name)
   log "#{@new_resource} Opscenter Cluster '#{new_resource.name}'"
   @current_resource.name(@new_resource.name)
   uri = URI.parse "http://#{node[:opscenter][:ip]}:8888/cluster-configs/#{@current_resource.cluster_id}"
   response = Net::HTTP.get_response(uri)
   if response.code != 200
      @current_resource.exists = false
   else
      @current_resource.exists = true
   end
end

cookbook是opscenter,资源和提供者都在名为cluster.rb的文件中,并且所引用的属性肯定存在,因此至少应该包含资源类的名称,以及属性至少应该是正确的。

关于为什么我的@current_resource对象没有exists=方法的任何想法?

1 个答案:

答案 0 :(得分:1)

您需要在资源上定义它......

您可以定义exists=(value)方法,也可以使用Chef的首选.exsts(false)方法(注意 - 否=)