/
docker_compose.rb
57 lines (49 loc) · 1.68 KB
/
docker_compose.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
require "pathname"
module VagrantPlugins
module DockerComposeProvisioner
class DockerCompose
def initialize(machine, config)
@machine = machine
@config = config
end
def build
@machine.ui.detail(I18n.t(:docker_compose_build))
@machine.communicate.tap do |comm|
comm.sudo("#{@config.env_s} #{@config.executable_install_path} #{@config.options} #{cli_options_for_yml_file} build #{@config.command_options[:build]}") do |type, data|
handle_comm(type, data)
end
end
end
def rm
@machine.ui.detail(I18n.t(:docker_compose_rm))
@machine.communicate.tap do |comm|
comm.sudo("#{@config.env_s} #{@config.executable_install_path} #{@config.options} #{cli_options_for_yml_file} rm #{@config.command_options[:rm]}") do |type, data|
handle_comm(type, data)
end
end
end
def up
@machine.ui.detail(I18n.t(:docker_compose_up))
@machine.communicate.tap do |comm|
comm.sudo("#{@config.env_s} #{@config.executable_install_path} #{@config.options} #{cli_options_for_yml_file} up #{@config.command_options[:up]}") do |type, data|
handle_comm(type, data)
end
end
end
protected
def handle_comm(type, data)
data.chomp!
return if data.empty?
case type
when :stdout; @machine.ui.detail(data)
when :stderr; @machine.ui.error(data)
end
end
private
def cli_options_for_yml_file
files = @config.yml.is_a?(Array) ? @config.yml : [@config.yml]
files.map { |file| "-f \"#{file}\"" }.join(" ")
end
end
end
end