Skip to content

Commit 2d3f4d6

Browse files
walkamongusdavejrt
authored andcommitted
Handle compose files with services that have no image (#373)
1 parent 3dc37d0 commit 2d3f4d6

File tree

1 file changed

+25
-20
lines changed
  • lib/puppet/provider/docker_compose

1 file changed

+25
-20
lines changed

lib/puppet/provider/docker_compose/ruby.rb

+25-20
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require 'deep_merge'
2+
13
Puppet::Type.type(:docker_compose).provide(:ruby) do
24
desc 'Support for Puppet running Docker Compose'
35

@@ -8,6 +10,7 @@
810
def exists?
911
Puppet.info("Checking for compose project #{name}")
1012
compose_services = {}
13+
compose_containers = []
1114
resource[:compose_files].each do |file|
1215
compose_file = YAML.safe_load(File.read(file))
1316
containers = docker([
@@ -17,36 +20,38 @@ def exists?
1720
'--filter',
1821
"label=com.docker.compose.project=#{name}",
1922
]).split("\n")
23+
compose_containers.push(*containers)
24+
compose_containers.uniq!
2025
case compose_file['version']
2126
when %r{^2(\.[0-3])?$}, %r{^3(\.[0-6])?$}
22-
compose_services = compose_services.merge(compose_file['services'])
27+
compose_services = compose_services.deep_merge(compose_file['services'])
2328
# in compose v1 "version" parameter is not specified
2429
when nil
25-
compose_services = compose_services.merge(compose_file)
30+
compose_services = compose_services.deep_merge(compose_file)
2631
else
2732
raise(Puppet::Error, "Unsupported docker compose file syntax version \"#{compose_file['version']}\"!")
2833
end
34+
end
2935

30-
if compose_services.count != containers.count
31-
return false
32-
end
36+
if compose_services.count != compose_containers.count
37+
return false
38+
end
3339

34-
counts = Hash[*compose_services.each.map { |key, array|
35-
image = (array['image']) ? array['image'] : get_image(key, compose_services)
36-
Puppet.info("Checking for compose service #{key} #{image}")
37-
["#{key}-#{image}", containers.count("#{key}-#{image}")]
38-
}.flatten]
40+
counts = Hash[*compose_services.each.map { |key, array|
41+
image = (array['image']) ? array['image'] : get_image(key, compose_services)
42+
Puppet.info("Checking for compose service #{key} #{image}")
43+
["#{key}-#{image}", compose_containers.count("#{key}-#{image}")]
44+
}.flatten]
3945

40-
# No containers found for the project
41-
if counts.empty? ||
42-
# Containers described in the compose file are not running
43-
counts.any? { |_k, v| v.zero? } ||
44-
# The scaling factors in the resource do not match the number of running containers
45-
resource[:scale] && counts.merge(resource[:scale]) != counts
46-
false
47-
else
48-
true
49-
end
46+
# No containers found for the project
47+
if counts.empty? ||
48+
# Containers described in the compose file are not running
49+
counts.any? { |_k, v| v.zero? } ||
50+
# The scaling factors in the resource do not match the number of running containers
51+
resource[:scale] && counts.merge(resource[:scale]) != counts
52+
false
53+
else
54+
true
5055
end
5156
end
5257

0 commit comments

Comments
 (0)