Class: Caterer::Image

Inherits:
Object
  • Object
show all
Defined in:
lib/caterer/image.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Image

Returns a new instance of Image.



8
9
10
11
# File 'lib/caterer/image.rb', line 8

def initialize(name)
  @name         = name
  @provisioners = []
end

Instance Attribute Details

#nameObject (readonly)

Returns the value of attribute name.



6
7
8
# File 'lib/caterer/image.rb', line 6

def name
  @name
end

#provisionersObject (readonly)

Returns the value of attribute provisioners.



6
7
8
# File 'lib/caterer/image.rb', line 6

def provisioners
  @provisioners
end

Instance Method Details

#bin_dirObject

helpers



61
62
63
# File 'lib/caterer/image.rb', line 61

def bin_dir
  "#{config.dest_dir}/bin"
end

#bin_wrapper_pathObject



73
74
75
# File 'lib/caterer/image.rb', line 73

def bin_wrapper_path
  "#{bin_dir}/cater-#{name}"
end

#cleanup(server) ⇒ Object



52
53
54
55
56
57
# File 'lib/caterer/image.rb', line 52

def cleanup(server)
  server.ui.info "Cleaning #{name}..."
  server.ssh.sudo "rm -rf #{var_dir}"
  server.ssh.sudo "rm -rf #{lib_dir}"
  server.ssh.sudo "rm -f #{bin_wrapper_path}"
end

#lib_dirObject



65
66
67
# File 'lib/caterer/image.rb', line 65

def lib_dir
  "#{config.dest_dir}/lib/#{name}"
end

#prepare(server) ⇒ Object

actions



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/caterer/image.rb', line 24

def prepare(server)
  # create bin dir
  server.ssh.sudo "mkdir -p #{bin_dir}", :stream => true
  server.ssh.sudo "chown -R #{server.username} #{bin_dir}", :stream => true

  # create lib dir
  server.ssh.sudo "mkdir -p #{lib_dir}", :stream => true
  server.ssh.sudo "chown -R #{server.username} #{lib_dir}", :stream => true

  # create var dir
  server.ssh.sudo "mkdir -p #{var_dir}", :stream => true
  server.ssh.sudo "chown -R #{server.username} #{var_dir}", :stream => true

  # create bin wrapper
  server.ui.info "Generating bin wrapper..."
  server.ssh.upload(StringIO.new(bin_wrapper_content), bin_wrapper_path)
  server.ssh.sudo "chmod +x #{bin_wrapper_path}", :stream => true
end

#provision(type, opts = {}) {|provisioner| ... } ⇒ Object

Yields:

  • (provisioner)


13
14
15
16
17
18
19
20
# File 'lib/caterer/image.rb', line 13

def provision(type, opts={})
  provisioner_klass = Caterer.provisioners.get(type)
  raise ":#{type} is not a valid provisioner" if not provisioner_klass
  provisioner = provisioner_klass.new(self, opts)
  yield provisioner if block_given?
  @provisioners << provisioner
  provisioner
end

#run(server) ⇒ Object



43
44
45
46
47
48
49
50
# File 'lib/caterer/image.rb', line 43

def run(server)
  # run
  server.ui.info "Running #{name}..."
  res = server.ssh.sudo bin_wrapper_path, :stream => true
  unless res == 0
    server.ui.error "#{name} failed with exit code: #{res}"
  end
end

#var_dirObject



69
70
71
# File 'lib/caterer/image.rb', line 69

def var_dir
  "#{config.dest_dir}/var/#{name}"
end