Class: Bosh::Director::Api::Controllers::PackagesController

Inherits:
BaseController show all
Defined in:
lib/bosh/director/api/controllers/packages_controller.rb

Constant Summary

Constants included from Http

Http::BAD_REQUEST, Http::CREATED, Http::FORBIDDEN, Http::INTERNAL_SERVER_ERROR, Http::NOT_FOUND, Http::NO_CONTENT, Http::OK, Http::UNAUTHORIZED

Constants included from ApiHelper

ApiHelper::READ_CHUNK_SIZE

Instance Attribute Summary

Attributes inherited from BaseController

#identity_provider

Instance Method Summary collapse

Methods inherited from BaseController

consumes, #initialize, #requires_authentication?

Methods included from ApiHelper

#check_available_disk_space, #json_decode, #json_encode, #send_disposable_file, #start_task, #write_file

Constructor Details

This class inherits a constructor from Bosh::Director::Api::Controllers::BaseController

Instance Method Details

#compiled_package_meta(package_name, manifest) ⇒ Object



83
84
85
# File 'lib/bosh/director/api/controllers/packages_controller.rb', line 83

def compiled_package_meta(package_name, manifest)
  manifest['compiled_packages'].select { |p| p['name'] == package_name}[0]
end

#dependency_key(package, manifest) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/bosh/director/api/controllers/packages_controller.rb', line 62

def dependency_key(package, manifest)
  compiled_package_meta = compiled_package_meta(package.name, manifest)
  dependencies = transitive_dependencies(compiled_package_meta, manifest)

  key = dependencies.to_a.sort_by {|k| k["name"]}.map { |p| [p['name'], p['version']]}
  Yajl::Encoder.encode(key)
end

#filter_matching_packages(matching_packages, manifest) ⇒ Object

dependencies & stemcell should also match



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/bosh/director/api/controllers/packages_controller.rb', line 47

def filter_matching_packages(matching_packages, manifest)
  filtered_packages = []

  matching_packages.each do |package|
    stemcell_match = "#{package[:operating_system]}/#{package[:version]}" == compiled_package_meta(package.name, manifest)['stemcell']
    dependencies_match = package[:dependency_key] == dependency_key(package, manifest)

    if stemcell_match && dependencies_match
      filtered_packages << package
    end
  end

  filtered_packages
end

#transitive_dependencies(compiled_package_meta, manifest) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/bosh/director/api/controllers/packages_controller.rb', line 70

def transitive_dependencies(compiled_package_meta, manifest)
  dependencies = Set.new
  return dependencies if compiled_package_meta['dependencies'].nil?

  compiled_package_meta['dependencies'].each do |dependency_package_name|
    dependency_compiled_package_meta = compiled_package_meta(dependency_package_name, manifest)
    dependencies << dependency_compiled_package_meta
    dependencies.merge(transitive_dependencies(dependency_compiled_package_meta, manifest))
  end

  dependencies
end