class Batali::Origin::ChefServer

Fetch unit information from chef server

Public Class Methods

new(*_) click to toggle source
Calls superclass method Batali::Origin::new
# File lib/batali/origin/chef_server.rb, line 17
def initialize(*_)
  super
  init_chef!
  self.identifier = Digest::SHA256.hexdigest(endpoint)
  unless name?
    self.name = identifier
  end
end

Public Instance Methods

units() click to toggle source

@return [Array<Unit>] all units

# File lib/batali/origin/chef_server.rb, line 27
def units
  memoize(:units) do
    debug "Fetching units from chef server: #{endpoint}"
    units = api_service.get_rest("cookbooks?num_versions=all").map do |c_name, meta|
      meta["versions"].map do |info|
        "#{c_name}/#{info["version"]}"
      end
    end.flatten.map do |ckbk|
      debug "Unit information from #{endpoint}: #{ckbk.inspect}"
      c_name, c_version = ckbk.split("/", 2)
      c_deps = api_service.get_rest(
        "cookbooks/#{c_name}/#{c_version}"
      ).metadata.dependencies.to_a
      Unit.new(
        :name => c_name,
        :version => c_version,
        :dependencies => c_deps,
        :source => Smash.new(
          :type => :chef_server,
          :version => c_version,
          :dependencies => c_deps,
          :endpoint => endpoint,
          :client_key => client_key,
          :client_name => client_name,
          :cache_path => cache_path,
        ),
      )
    end.flatten
  end
end