Puppet file_line 仅当文件存在时

Puppet file_line only if file exists

我有一个 file_line 我想在任何存在给定文件的系统上执行,但在所有不存在该文件的系统上都被忽略。

file_line {'java_security_random':
  line  => 'securerandom.source=file:/dev/urandom',
  path  => '/etc/alternatives/jre/lib/security/java.security',
  match => /^securerandom.source=.*/,
}

问题是我在所有未安装 java 的主机上都遇到错误。我们不使用 Puppet 来管理或安装 java,所以我不确定如何为此添加基于清单的依赖项。处理这个问题最像 Puppet 的方法是什么?

您可能1 需要创建一个报告此文件存在的自定义事实。

# has_java_security.rb

Facter.add(:has_java_security) do
  setcode do
    File.exist?('/etc/alternatives/jre/lib/security/java.security')
  end
end

在您的清单中:

if $facts['has_java_security'] {
  file_line {'java_security_random':
    line  => 'securerandom.source=file:/dev/urandom',
    path  => '/etc/alternatives/jre/lib/security/java.security',
    match => /^securerandom.source=.*/,
  }
}

有关如何编写自定义事实的更多信息,请参阅 here


1 当然,我假设您有充分的理由使用一种工具来管理 Java 并使用 Puppet 来管理此文件中的行。