неопределенный метод `exists=' для load_current_resource в провайдере Chef

При написании провайдера (для ресурса Datastax Opscenter Cluster) мне требовалось знание любого существующего в настоящее время кластера с таким же 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

Кулинарная книга opscenter, а ресурс и провайдер находятся в файлах с именем cluster.rb, и атрибуты, на которые есть ссылки, определенно существуют, поэтому имя класса ресурсов должно быть по крайней мере, а атрибуты по крайней мере должны быть правильными.

Есть идеи, почему у моего объекта @current_resource нет метода exists=?


person bschlueter    schedule 03.03.2014    source источник


Ответы (1)


Вам нужно определить его на своем ресурсе...

Вы можете либо определить метод exists=(value), либо использовать предпочтительный метод Chef .exsts(false) (примечание - нет =)

person sethvargo    schedule 03.03.2014
comment
Ах, пропустил это в учебнике. Я не совсем уверен, что ваше решение предлагает в качестве кода. Я добавил attr_accessor :exists в свой ресурс, как в @dougireton's tutorial объясняет, как это сделать в lwrp. - person bschlueter; 03.03.2014