lalek wykonuje się tylko wtedy, gdy plik NIE istnieje

11

Chcę wykonać następujące polecenie tylko wtedy, gdy plik (/ usr / local / bin / papply) nie istnieje. nie jestem pewien, co tam umieścić.

    exec { 'git add url':
        command =>'git remote add origin https://github.com/testing/puppet.git',
        require => Exec['git init'],
        cwd => '/home/vagrant/django',
        user => 'vagrant',
        onlyif => "not sure what to put here"
    }
qinking126
źródło

Odpowiedzi:

22

Próbowałeś tego?

onlyif => "test ! -f /usr/local/bin/papply"

Nie jestem pewien, czy Puppet może użyć „!” postać

Być może lepsza alternatywa:

creates => '/usr/local/bin/papply'

nawet jeśli nie podoba mi się fakt, że polecenie tak naprawdę nie tworzy pliku

sebastien.prudhomme
źródło
nie działa, otrzymałem ten komunikat o błędzie. Nie można ocenić: Nie można znaleźć polecenia „!”
qinking126
I to: onlyif => "test! -F / usr / local / bin / papply"
sebastien.prudhomme
tworzy => '/ usr / local / bin / papply' działa, dziękuję. pozwól mi przetestować twoje aktualizacje, zobacz czy htat one działa.
qinking126
1
onlyif => „test! -f / usr / local / bin / papply” działa, także ten, którego wolę używać. Dziękuję Ci.
qinking126
7

Jeśli korzystasz z systemu Linux, po prostu zrób to

unless => 'ls /somefile'

ls zwróci niezerowy kod powrotu, jeśli plik nie istnieje, i chyba że zezwoli na wykonanie exec, który jest w trakcie wykonywania, jeśli jego test zwróci niezerowy kod powrotu.

Adam Henderson
źródło
1

W systemie Linux i marionecie> 3.8 spróbuj:

exec { 'test':
   command => '/bin/echo HI',
   unless  => 'test -f /a/file.txt',
}

exec nie uruchomi się, jeśli /a/file.txtistnieje.

Felipe Alvarez
źródło
0

Możesz rozważyć użycie kreacji , która istnieje w tym celu:

exec { 'git add url':
  command => 'git remote add origin https://github.com/testing/puppet.git',
  creates => '/usr/local/bin/papply'
}
Philip Kirkbride
źródło