2014-03-03 59 views
0

在編寫提供程序(對於Datastax Opscenter集羣資源)時,我需要知道任何具有相同cluster_id的當前現有集羣,因此在提供程序中編寫了load_current_resource方法。我的問題是,在運行時(如在一個流浪實例上運行一個廚師獨奏)我收到一個錯誤:未定義的方法`exists ='for in load_current_resource in Chef provider

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=方法的想法?

回答

1

您需要定義它在您的資源...

您可以定義一個exists=(value)方法,也可以使用廚師的首選的方法.exsts(false)(注 - 沒有=)

+1

啊,錯過了在教程。雖然我不確定你的解決方案是作爲代碼提供的。我向我的資源添加了'attr_accessor:exists',這是[@ dougireton的教程](http://dougireton.com/blog/2012/12/31/creating-an-lwrp/)如何在lwrp。 – bschlueter

相關問題