在傀儡存在迪尔

我想检查“如果目录存在”条件与木偶如何做到这里如何做一个文件/目录存在条件在Puppet? 但是,如果我写

exec { 'check_presence': command => "true", path => ["/usr/bin","/usr/sbin", "/bin"], onlyif => "test -d /test" } file { '/test/123': ensure => directory, mode => '0644', require => Exec['check_presence'] } 

exec我得到alwyas true傀儡总是试图创build/testing/ 123

 Debug: Exec[check_presence](provider=posix): Executing check 'test -e /test' Debug: Executing 'test -e /test' Error: Cannot create /test/123; parent directory /test does not exist Error: /Stage[main]/tst::test/File[/test]/ensure: change from absent to directory failed: Cannot create /test/123; parent directory /test does not exist 

他为什么这样做?! 而我该如何检查父目录存在?

我的木偶是3.8

UPD我不想创build/test ! 我想创build/test/123 只有 / test已经存在!

木偶没有一个本地的function,唯一的解决方法:

mkdir -p your_module_path/lib/puppet/parser/functions/现在你需要用下面的代码创build这个文件directory_exists.rb

 require 'puppet' module Puppet::Parser::Functions newfunction(:directory_exists, :type => :rvalue) do |args| if File.directory?(args[0]) return true else return false end end end 

现在在你的木偶代码中,你可以使用这个函数:

 if directory_exists('/test') { file { '/test/123': ensure => directory, mode => '0644', owner => 'root', group => 'root', } } 

如果你不想创build/testing自己,我相信你将不得不在exec做这两件事:

 exec { '/usr/bin/install /test/123': onlyif => "/usr/bin/test -d /test" } 

使用install而不是mkdir可以在同一个命令中设置像模式这样的属性。


创build父目录最简单的方法是链file s:

 file { '/test': ensure => directory, mode => '0644', } -> file { '/test/123': ensure => directory, mode => '0644', } 

你的代码的语义只需要exec在创build子目录之前被“实例化”(即运行)。 这里没有select性 – 如果/test存在,将会运行true ,否则true不运行。