class Chef::Util::DSC::ResourceStore

Public Class Methods

instance() click to toggle source
# File lib/chef/util/dsc/resource_store.rb, line 28
def self.instance
  @@instance ||= ResourceStore.new.tap do |store|
    store.send(:populate_cache)
  end
end

Public Instance Methods

find(name, module_name = nil) click to toggle source
# File lib/chef/util/dsc/resource_store.rb, line 38
def find(name, module_name = nil)
  found = find_resources(name, module_name, resources)

  # We don't have it, query for the resource...it might
  # have been added since we last queried
  if found.length == 0
    rs = query_resource(name)
    add_resources(rs)
    found = find_resources(name, module_name, rs)
  end

  found
end
resources() click to toggle source
# File lib/chef/util/dsc/resource_store.rb, line 34
def resources
  @resources ||= []
end

Private Instance Methods

add_resource(new_r) click to toggle source
# File lib/chef/util/dsc/resource_store.rb, line 54
def add_resource(new_r)
  count = resources.count do |r|
    r["ResourceType"].casecmp(new_r["ResourceType"]) == 0
  end
  if count == 0
    resources << new_r
  end
end
add_resources(rs) click to toggle source
# File lib/chef/util/dsc/resource_store.rb, line 63
def add_resources(rs)
  rs.each do |r|
    add_resource(r)
  end
end
find_resources(name, module_name, rs) click to toggle source
# File lib/chef/util/dsc/resource_store.rb, line 73
def find_resources(name, module_name, rs)
  found = rs.find_all do |r|
    name_matches = r["Name"].casecmp(name) == 0
    if name_matches
      module_name.nil? || (r["Module"] && r["Module"]["Name"].casecmp(module_name) == 0)
    else
      false
    end
  end
end
populate_cache() click to toggle source
# File lib/chef/util/dsc/resource_store.rb, line 69
def populate_cache
  @resources = query_resources
end
query_resource(resource_name) click to toggle source

Returns a list of dsc resources matching the provided name

# File lib/chef/util/dsc/resource_store.rb, line 90
def query_resource(resource_name)
  ret_val = powershell_exec("get-dscresource #{resource_name}").result
  if ret_val.empty?
    []
  elsif ret_val.is_a? Array
    ret_val
  else
    [ret_val]
  end
end
query_resources() click to toggle source

Returns a list of dsc resources

# File lib/chef/util/dsc/resource_store.rb, line 85
def query_resources
  powershell_exec("get-dscresource").result
end