diff --git a/manifests/exec.pp b/manifests/exec.pp index 1e70c59a7..fa402675f 100644 --- a/manifests/exec.pp +++ b/manifests/exec.pp @@ -10,6 +10,7 @@ Optional[String] $command = undef, Optional[String] $unless = undef, Optional[Boolean] $sanitise_name = true, + Optional[Boolean] $refreshonly = false, ) { include docker::params @@ -37,6 +38,7 @@ exec { $exec: environment => 'HOME=/root', path => ['/bin', '/usr/bin'], + refreshonly => $refreshonly, timeout => 0, unless => $unless_command, } diff --git a/spec/acceptance/docker_full_spec.rb b/spec/acceptance/docker_full_spec.rb index c1de13acc..0e3258c21 100644 --- a/spec/acceptance/docker_full_spec.rb +++ b/spec/acceptance/docker_full_spec.rb @@ -662,6 +662,55 @@ class { 'docker':} expect(r.stdout).to match(/test_command_file.txt/) end end + + it 'should only run if notified when refreshonly is true' do + container_name = 'container_4_2' + pp=<<-EOS + class { 'docker': } + + docker::image { 'ubuntu': } + + docker::run { '#{container_name}': + image => 'ubuntu', + command => 'init', + } + + docker::exec { 'test_command': + container => '#{container_name}', + command => 'touch /root/test_command_file.txt', + refreshonly => true, + } + EOS + + apply_manifest(pp, :catch_failures => true) + apply_manifest(pp, :catch_changes => true) unless fact('selinux') == 'true' + + # A sleep to give docker time to execute properly + sleep 4 + + shell("docker exec #{container_name} ls /root") do |r| + expect(r.stdout).to_not match(/test_command_file.txt/) + end + + pp_extra=<<-EOS + file { '/tmp/dummy_file': + ensure => 'present', + notify => Docker::Exec['test_command'], + } + EOS + + pp2 = pp + pp_extra + + apply_manifest(pp2, :catch_failures => true) + apply_manifest(pp2, :catch_changes => true) unless fact('selinux') == 'true' + + # A sleep to give docker time to execute properly + sleep 4 + + shell("docker exec #{container_name} ls /root") do |r| + expect(r.stdout).to match(/test_command_file.txt/) + end + end end end end