在编写提供程序(对于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=
方法的任何想法?
答案 0 :(得分:1)
您需要在资源上定义它......
您可以定义exists=(value)
方法,也可以使用Chef的首选.exsts(false)
方法(注意 - 否=)