当文件不存在时,仅执行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"
    }

Answers:


22

你有尝试过吗?

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

不知道Puppet是否可以使用'!' 字符

也许更好的替代方法:

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

即使我不喜欢命令并没有真正创建文件的事实


无法正常工作,收到此错误消息。无法评估:找不到命令'!'
qinking126

而这个:onlyif => “!测试-f在/ usr / local / bin目录/ papply”
sebastien.prudhomme

创建=>'/ usr / local / bin / papply'工作,谢谢。让我测试您的更新,看看它是否有效。
qinking126

1
onlyif =>“ test!-f / usr / local / bin / papply”也可以,我也喜欢使用。谢谢。
qinking126

7

如果您使用的是Linux,请执行

unless => 'ls /somefile'

如果文件不存在,ls将以非零返回码返回,除非该文件的测试返回非零返回码,否则仅让执行中的exec执行。


1

在linux和puppet> 3.8上尝试:

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

exec将不会运行(如果/a/file.txt存在)。


0

您可能要考虑使用创建,它存在于这个目的:

exec { 'git add url':
  command => 'git remote add origin https://github.com/testing/puppet.git',
  creates => '/usr/local/bin/papply'
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.