我正在试图编写的模块,如果目录存在,否则它不应该做任何事情,它创build文件。
class puppetmodule{ exec { 'chk_dir_exists': command => 'test -d /usr/dir1', path => ["/usr/bin","/usr/sbin", "/bin"], } -> file {'usr/dir1/test.txt': ensure => 'file', owner => 'root', group => 'root', mode => '0750', } }
下面是它正在抛出的错误。 请在这方面给我build议。
错误:testing-d / usr / dir1返回1而不是[0]之一
像这样的东西将工作:
$dir = "/usr/dir1" exec { "chk_${dir}_exist": command => "true", path => ["/usr/bin","/usr/sbin", "/bin"], onlyif => "test -d ${dir}" } file {"${dir}/test.txt": ensure => file, owner => 'root', group => 'root', mode => '0750', require => Exec["chk_${dir}_exist"], }
说明:
onlyif => "test -d ${dir}"
意味着只有当test -d的输出为真时,才会创buildExec资源。
require => Exec["chk_${dir}_exist"]
意味着仅当Exec资源存在时才创build文件资源。
如果该目录不存在,则puppet运行将生成一个错误,指出由于Exec资源不存在而无法创build文件资源。 这是预料之中,可以安全地忽略,因为木偶目录的其余部分仍然得到应用。
如果该目录存在,则创build并应用文件资源。
木偶是关于最终状态。 您可以确保文件存在您指定的状态或不存在。 如果你需要做一些分支( 如果 )的逻辑,Puppet也支持。 请参阅文档中的条件 – https://docs.puppet.com/puppet/latest/reference/lang_conditional.html
$directory_exists = <insert logic here> if $directory_exists { file {'usr/dir1/test.txt': ensure => 'file', owner => 'root', group => 'root', mode => '0750', } }