diff --git a/lib/puppet/provider/docker_compose/ruby.rb b/lib/puppet/provider/docker_compose/ruby.rb index 02c8792e..0fef7f3f 100644 --- a/lib/puppet/provider/docker_compose/ruby.rb +++ b/lib/puppet/provider/docker_compose/ruby.rb @@ -13,6 +13,11 @@ environment(HOME: '/root') end + has_command(:docker_compose, command(:dockercompose)) do + Dir.mkdir('/tmp_docker') unless Dir.exist?('/tmp_docker') + ENV.store('TMPDIR', '/tmp_docker') + end + def exists? Puppet.info("Checking for compose project #{name}") compose_services = {} @@ -31,18 +36,17 @@ def exists? "label=com.docker.compose.project=#{name}", ]).split("\n") compose_containers.push(*containers) - compose_containers.uniq! compose_services = compose_output['services'] - if compose_services.count != compose_containers.count + if compose_services.count != compose_containers.uniq.count return false end counts = Hash[*compose_services.each.map { |key, array| image = (array['image']) ? array['image'] : get_image(key, compose_services) Puppet.info("Checking for compose service #{key} #{image}") - ["#{key}-#{image}", compose_containers.count("#{key}-#{image}")] + [key, compose_containers.count("#{key}-#{image}")] }.flatten] # No containers found for the project diff --git a/manifests/init.pp b/manifests/init.pp index ee15a03c..647637ca 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -660,6 +660,7 @@ -> Docker::Registry <||> -> Docker::Image <||> -> Docker::Run <||> + -> Docker_compose <||> } else { contain 'docker::repos' contain 'docker::install' diff --git a/spec/acceptance/compose_v3_spec.rb b/spec/acceptance/compose_v3_spec.rb index 2c681352..90181183 100644 --- a/spec/acceptance/compose_v3_spec.rb +++ b/spec/acceptance/compose_v3_spec.rb @@ -41,8 +41,11 @@ class { 'docker::compose': let(:install_pp) do <<-MANIFEST docker_compose { 'web': - compose_files => ['#{tmp_path}/docker-compose-v3.yml'], - ensure => present, + compose_files => ['#{tmp_path}/docker-compose-v3.yml'], + ensure => present, + scale => { + compose_test => 2 + } } MANIFEST end @@ -66,6 +69,9 @@ class { 'docker::compose': docker_compose { 'web1': compose_files => ['#{tmp_path}/docker-compose-v3.yml', '#{tmp_path}/docker-compose-override-v3.yml'], ensure => present, + scale => { + compose_test => 2 + } } MANIFEST diff --git a/spec/classes/init_spec.rb b/spec/classes/init_spec.rb index 0e4ab609..c2a4af4c 100644 --- a/spec/classes/init_spec.rb +++ b/spec/classes/init_spec.rb @@ -196,6 +196,12 @@ } else it { + # Stub /tmp_docker dir to prevent shelling out during spec test + allow(Dir).to receive(:exist?).and_wrap_original do |original_method, a| + original_method.call(a) + end + allow(Dir).to receive(:exist?).with('/tmp_docker').and_return(true) + is_expected.to contain_class('docker::repos').that_comes_before('Class[docker::install]') is_expected.to contain_class('docker::install').that_comes_before('Class[docker::config]') is_expected.to contain_class('docker::config').that_comes_before('Class[docker::service]') diff --git a/spec/defines/registry_spec.rb b/spec/defines/registry_spec.rb index bae0e0d8..de89b70d 100644 --- a/spec/defines/registry_spec.rb +++ b/spec/defines/registry_spec.rb @@ -2,6 +2,15 @@ require 'spec_helper' +# Stub /tmp_docker dir to prevent shelling out during spec test +class Dir + class << self + def exist?(var) + return true if var == '/tmp_docker' + end + end +end + tests = { 'with ensure => absent' => { 'ensure' => 'absent', diff --git a/spec/unit/lib/puppet/type/docker_compose_spec.rb b/spec/unit/lib/puppet/type/docker_compose_spec.rb index 9b310ffb..b0f36d8f 100644 --- a/spec/unit/lib/puppet/type/docker_compose_spec.rb +++ b/spec/unit/lib/puppet/type/docker_compose_spec.rb @@ -2,6 +2,15 @@ require 'spec_helper' +# Stub /tmp_docker dir to prevent shelling out during spec test +class Dir + class << self + def exist?(var) + return true if var == '/tmp_docker' + end + end +end + compose = Puppet::Type.type(:docker_compose) describe compose do