|
7 | 7 |
|
8 | 8 | def exists?
|
9 | 9 | Puppet.info("Checking for compose project #{project}")
|
10 |
| - compose_file = YAML.safe_load(File.read(name)) |
11 | 10 | compose_services = {}
|
12 |
| - containers = docker([ |
13 |
| - 'ps', |
14 |
| - '--format', |
15 |
| - "{{.Label \"com.docker.compose.service\"}}-{{.Image}}", |
16 |
| - '--filter', |
17 |
| - "label=com.docker.compose.project=#{project}", |
18 |
| - ]).split("\n") |
19 |
| - case compose_file['version'] |
20 |
| - when %r{^2(\.[0-3])?$}, %r{^3(\.[0-6])?$} |
21 |
| - compose_services = compose_file['services'] |
22 |
| - # in compose v1 "version" parameter is not specified |
23 |
| - when nil |
24 |
| - compose_services = compose_file |
25 |
| - else |
26 |
| - raise(Puppet::Error, "Unsupported docker compose file syntax version \"#{compose_file['version']}\"!") |
| 11 | + compose_files.each do |file| |
| 12 | + compose_file = YAML.safe_load(File.read(file)) |
| 13 | + containers = docker([ |
| 14 | + 'ps', |
| 15 | + '--format', |
| 16 | + "{{.Label \"com.docker.compose.service\"}}-{{.Image}}", |
| 17 | + '--filter', |
| 18 | + "label=com.docker.compose.project=#{project}", |
| 19 | + ]).split("\n") |
| 20 | + case compose_file['version'] |
| 21 | + when %r{^2(\.[0-3])?$}, %r{^3(\.[0-6])?$} |
| 22 | + compose_services = compose_services.merge(compose_file['services']) |
| 23 | + # in compose v1 "version" parameter is not specified |
| 24 | + when nil |
| 25 | + compose_services = compose_services.merge(compose_file) |
| 26 | + else |
| 27 | + raise(Puppet::Error, "Unsupported docker compose file syntax version \"#{compose_file['version']}\"!") |
| 28 | + end |
27 | 29 | end
|
28 | 30 |
|
29 | 31 | if compose_services.count != containers.count
|
@@ -60,14 +62,17 @@ def get_image(service_name, compose_services)
|
60 | 62 | image
|
61 | 63 | end
|
62 | 64 |
|
| 65 | + # Preappend -f to each compose file in the array and flatten to pass compose files in args. |
| 66 | + compose_files_cmd = compose_files.collect {|x| ['-f', x ] }.flatten |
| 67 | + |
63 | 68 | def create
|
64 | 69 | Puppet.info("Running compose project #{project}")
|
65 |
| - args = ['-f', name, 'up', '-d', '--remove-orphans'].insert(2, resource[:options]).insert(5, resource[:up_args]).compact |
| 70 | + args = [compose_files_cmd, 'up', '-d', '--remove-orphans'].insert(2, resource[:options]).insert(5, resource[:up_args]).compact |
66 | 71 | dockercompose(args)
|
67 | 72 | return unless resource[:scale]
|
68 | 73 | instructions = resource[:scale].map { |k, v| "#{k}=#{v}" }
|
69 | 74 | Puppet.info("Scaling compose project #{project}: #{instructions.join(' ')}")
|
70 |
| - args = ['-f', name, 'scale'].insert(2, resource[:options]).compact + instructions |
| 75 | + args = [compose_files_cmd, 'scale'].insert(2, resource[:options]).compact + instructions |
71 | 76 | dockercompose(args)
|
72 | 77 | end
|
73 | 78 |
|
|
0 commit comments