当文件不存在时,puppet 才会执行

当文件不存在时,puppet 才会执行

我只想在文件(/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"
    }

答案1

你尝试过这个吗?

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

不确定 Puppet 是否可以使用“!”字符

也许有一个更好的选择:

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

即使我不喜欢这个命令并没有真正创建文件

答案2

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

unless => 'ls /somefile'

如果文件不存在,ls 将返回一个非零返回码,并且仅当其测试返回非零返回码时,才会让其正在执行的 exec 执行。

答案3

在 Linux 和 Puppet >3.8 上尝试:

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

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

答案4

您可能需要考虑使用创建,其存在就是为了这个目的:

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

相关内容