При написании провайдера (для ресурса 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=
?