exec hanya boneka ketika file TIDAK ada

11

Saya hanya ingin mengeksekusi perintah berikut ketika file (/ usr / local / bin / papply) tidak ada. tidak yakin harus meletakkan apa di sana.

    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
sumber

Jawaban:

22

Sudahkah Anda mencoba ini?

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

Tidak yakin apakah Wayang dapat menggunakan '!' karakter

Mungkin alternatif yang lebih baik:

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

bahkan jika saya tidak suka fakta bahwa perintahnya tidak benar-benar membuat file

sebastien.prudhomme
sumber
tidak berfungsi, mendapat pesan kesalahan ini. Tidak dapat mengevaluasi: Tidak dapat menemukan perintah '!'
qinking126
Dan ini: onlyif => "test! -F / usr / local / bin / papply"
sebastien.prudhomme
menciptakan => '/ usr / local / bin / papply' bekerja, terima kasih. biarkan saya menguji pembaruan Anda, lihat apakah htat satu berfungsi.
qinking126
1
onlyif => "test! -f / usr / local / bin / papply" berfungsi, juga yang saya suka gunakan. Terima kasih.
qinking126
7

Jika Anda menggunakan linux, lakukan saja

unless => 'ls /somefile'

ls akan kembali dengan kode pengembalian tidak nol jika file tidak ada dan kecuali hanya akan membiarkan eksekutif itu dieksekusi jika pengujiannya mengembalikan kode pengembalian tidak nol.

Adam Henderson
sumber
1

Di linux dan boneka> 3,8 coba:

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

exec tidak akan berjalan jika /a/file.txtada.

Felipe Alvarez
sumber
0

Anda mungkin ingin mempertimbangkan untuk menggunakan create , yang ada untuk tujuan ini:

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