кукольный только exec, когда файл не существует

11

Я хочу выполнить следующую команду, только когда файл (/ usr / local / bin / papply) не существует. не уверен что туда поставить.

    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
источник

Ответы:

22

Вы пробовали это?

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

Не уверен, что Puppet может использовать '!' персонаж

Возможно, лучший alterntive:

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

даже если мне не нравится тот факт, что команда на самом деле не создает файл

sebastien.prudhomme
источник
не работает, получил это сообщение об ошибке. Не удалось оценить: не удалось найти команду '!'
qinking126
И это: onlyif => "test! -F / usr / local / bin / papply"
sebastien.prudhomme
create => '/ usr / local / bin / papply' работает, спасибо. позвольте мне проверить ваши обновления, посмотреть, работает ли htat one.
qinking126
1
onlyif => "test! -f / usr / local / bin / papply" работает, также тот, который я предпочитаю использовать. Спасибо.
qinking126
7

Если вы на Linux, просто сделайте

unless => 'ls /somefile'

ls вернется с ненулевым кодом возврата, если файл не существует, и если только он не разрешит исполняемому файлу, на котором он выполняется, если его тест вернет ненулевой код возврата.

Адам Хендерсон
источник
1

На Linux и Puppet> 3,8 попробуйте:

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

exec не будет работать, если /a/file.txtсуществует.

Фелипе Альварес
источник
0

Вы можете рассмотреть возможность использования create , который существует для этой цели:

exec { 'git add url':
  command => 'git remote add origin https://github.com/testing/puppet.git',
  creates => '/usr/local/bin/papply'
}
Филип Киркбрайд
источник