存在于 Puppet 上的目录

存在于 Puppet 上的目录

我想用 Puppet 检查“目录是否存在”的情况,这里是如何做到的如何在 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得到true,而 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

更新型多巴胺我不想创造/test!我想创造/test/123 仅有的如果/test 已经存在!

答案1

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

现在,在你的傀儡代码中,你可以使用该函数:

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

答案2

如果您不想创建 /test 本身,我相信您必须同时做两件事exec

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

使用install而不是mkdir可以在同一命令中设置模式等属性。


创建父目录的最简单方法是链接file

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

代码的语义仅仅要求exec“被实例化”(即运行)子目录已创建。这没有任何可选性 -true如果存在则运行/testtrue否则不是跑步。

相关内容