diff --git a/manifests/exec.pp b/manifests/exec.pp index acffd8b7d..d226e837a 100644 --- a/manifests/exec.pp +++ b/manifests/exec.pp @@ -8,6 +8,7 @@ $tty = false, $container = undef, $command = undef, + $refreshonly = false, $unless = undef, $sanitise_name = true, ) { @@ -21,6 +22,7 @@ validate_string($unless) validate_bool($detach) validate_bool($interactive) + validate_bool($refreshonly) validate_bool($tty) $docker_exec_flags = docker_exec_flags({ @@ -45,6 +47,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 337644516..2d3eeafa7 100644 --- a/spec/acceptance/docker_full_spec.rb +++ b/spec/acceptance/docker_full_spec.rb @@ -586,6 +586,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