Class: Hako::DefinitionLoader

Inherits:
Object
  • Object
show all
Defined in:
lib/hako/definition_loader.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, dry_run:) ⇒ DefinitionLoader

Returns a new instance of DefinitionLoader.

Parameters:



12
13
14
15
# File 'lib/hako/definition_loader.rb', line 12

def initialize(app, dry_run:)
  @app = app
  @dry_run = dry_run
end

Instance Method Details

#load(tag: nil, with: nil) ⇒ Hash<String, Container>

Parameters:

  • tag (String, nil) (defaults to: nil)
  • with (Array<String>, nil) (defaults to: nil)

Returns:



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/hako/definition_loader.rb', line 20

def load(tag: nil, with: nil)
  # XXX: Load additional_containers for compatibility
  sidecars = @app.definition.fetch('sidecars', @app.definition.fetch('additional_containers', {}))
  container_names = ['app']
  if with
    container_names.concat(with)
  else
    container_names.concat(sidecars.keys)
  end

  load_containers_from_name(tag, container_names, sidecars)
end

#load_containers_from_name(tag, container_names, sidecars) ⇒ Hash<String, Container> (private)

Parameters:

  • tag (String, nil)
  • container_names (Array<String>)
  • sidecars (Hash<String, Hash>)

Returns:



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/hako/definition_loader.rb', line 39

def load_containers_from_name(tag, container_names, sidecars)
  names = Set.new(container_names)
  containers = {}
  while containers.size < names.size
    names.difference(containers.keys).each do |name|
      containers[name] =
        case name
        when 'app'
          @app.definition['app']['tag'] = tag if tag
          AppContainer.new(@app, @app.definition['app'], dry_run: @dry_run)
        else
          Container.new(@app, sidecars.fetch(name), dry_run: @dry_run)
        end

      containers[name].links.each do |link|
        m = link.match(/\A([^:]+):([^:]+)\z/)
        names << (m ? m[1] : link)
      end

      containers[name].volumes_from.each do |volumes_from|
        names << volumes_from[:source_container]
      end
    end
  end
  containers
end