Linux

木偶上存在目錄

  • July 4, 2017

我想用 puppet 檢查“如果 dir 存在”條件是如何在這裡完成的 如何在 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我得到 alwyastrue和 puppet 總是嘗試創建 /test/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我不想創建/test!我只想在 /test 已經存在的情況下/test/123 創建

puppet 對此沒有一個本機功能,唯一的解決方法是:

mkdir -p your_module_path/lib/puppet/parser/functions/現在您需要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

現在在您的 puppet 程式碼中,您可以使用以下功能:

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

引用自:https://serverfault.com/questions/859112