我想检查“如果目录存在”条件与木偶如何做到这里如何做一个文件/目录存在条件在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不运行。