Class: KuberKit::ImageCompiler::ImageDependencyResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/kuber_kit/image_compiler/image_dependency_resolver.rb

Constant Summary collapse

CircularDependencyError =
Class.new(KuberKit::Error)
DependencyNotFoundError =
Class.new(KuberKit::NotFoundError)

Instance Method Summary collapse

Instance Method Details

#get_deps(image_name) ⇒ Object



37
38
39
# File 'lib/kuber_kit/image_compiler/image_dependency_resolver.rb', line 37

def get_deps(image_name)
  image_store.get_definition(image_name).dependencies
end

#get_next(image_names, resolved: []) ⇒ Object



12
13
14
15
16
17
18
19
20
# File 'lib/kuber_kit/image_compiler/image_dependency_resolver.rb', line 12

def get_next(image_names, resolved: [])
  deps = Array(image_names).map { |i| get_recursive_deps(i) }.flatten.uniq

  ready_to_resolve = deps.select do |dep_name|
    unresolved_deps = get_deps(dep_name) - resolved
    unresolved_deps.empty?
  end
  ready_to_resolve - resolved
end

#get_recursive_deps(image_name, dependency_tree: []) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/kuber_kit/image_compiler/image_dependency_resolver.rb', line 22

def get_recursive_deps(image_name, dependency_tree: [])
  deps = get_deps(image_name)

  if dependency_tree.include?(image_name)
    raise CircularDependencyError, "Circular dependency found for #{image_name}. Dependency tree: #{dependency_tree.inspect}"
  end

  child_deps = []
  deps.each do |i| 
    child_deps += get_recursive_deps(i, dependency_tree: dependency_tree + [image_name])
  end

  (deps + child_deps).uniq
end