Class: Dapp::StageImage

Inherits:
DockerImage show all
Defined in:
lib/dapp/stage_image.rb

Overview

StageImage

Instance Attribute Summary

Attributes inherited from DockerImage

#from, #name

Instance Method Summary collapse

Methods inherited from DockerImage

#id, #info, #pull!, #pulled?, #push!, #tagged?, #untag!

Methods included from Helper::Shellout

included, #shellout, #shellout!

Constructor Details

#initialize(name:, built_id: nil, from: nil) ⇒ StageImage

Returns a new instance of StageImage.



4
5
6
7
8
9
10
# File 'lib/dapp/stage_image.rb', line 4

def initialize(name:, built_id: nil, from: nil)
  @bash_commands = []
  @options = {}
  @container_name = SecureRandom.hex
  @built_id = built_id
  super(name: name, from: from)
end

Instance Method Details

#add_commands(*commands) ⇒ Object



32
33
34
# File 'lib/dapp/stage_image.rb', line 32

def add_commands(*commands)
  @bash_commands += commands.flatten
end

#add_env(value) ⇒ Object



24
25
26
# File 'lib/dapp/stage_image.rb', line 24

def add_env(value)
  add_option(:env, value)
end

#add_expose(value) ⇒ Object



12
13
14
# File 'lib/dapp/stage_image.rb', line 12

def add_expose(value)
  add_option(:expose, value)
end

#add_volume(value) ⇒ Object



16
17
18
# File 'lib/dapp/stage_image.rb', line 16

def add_volume(value)
  add_option(:volume, value)
end

#add_volumes_from(value) ⇒ Object



20
21
22
# File 'lib/dapp/stage_image.rb', line 20

def add_volumes_from(value)
  add_option(:'volumes-from', value)
end

#add_workdir(value) ⇒ Object



28
29
30
# File 'lib/dapp/stage_image.rb', line 28

def add_workdir(value)
  add_option(:workdir, value)
end

#build!(log_verbose: false, log_time: false) ⇒ Object



40
41
42
43
44
45
# File 'lib/dapp/stage_image.rb', line 40

def build!(log_verbose: false, log_time: false)
  run!(log_verbose: log_verbose, log_time: log_time)
  @built_id = commit!
ensure
  shellout("docker rm #{container_name}")
end

#built_id ⇒ Object



36
37
38
# File 'lib/dapp/stage_image.rb', line 36

def built_id
  @built_id ||= id
end

#export!(name, log_verbose: false, log_time: false) ⇒ Object



47
48
49
50
51
52
# File 'lib/dapp/stage_image.rb', line 47

def export!(name, log_verbose: false, log_time: false)
  image = self.class.new(built_id: built_id, name: name)
  image.tag!(log_verbose: log_verbose, log_time: log_time)
  image.push!(log_verbose: log_verbose, log_time: log_time)
  image.untag!
end

#tag!(log_verbose: false, log_time: false) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/dapp/stage_image.rb', line 54

def tag!(log_verbose: false, log_time: false)
  unless (existed_id = id).nil?
    fail Error::Build, code: :image_already_tagged if built_id != existed_id
    return
  end
  shellout!("docker tag #{built_id} #{name}", log_verbose: log_verbose, log_time: log_time)
end