我使用 puppet 安装当前的 JDK 和 tomcat。
package {
[ "openjdk-6-jdk", "openjdk-6-doc", "openjdk-6-jre",
"tomcat6", "tomcat6-admin", "tomcat6-common", "tomcat6-docs",
"tomcat6-user" ]:
ensure => present,
}
现在我想补充一下
JAVA_HOME="/usr/lib/java"
export JAVA_HOME
,/etc/profile
只是为了解决这个问题。我还没有在文档中找到一个直接的答案。有没有推荐的方法来做到这一点?
一般来说,我该如何告诉 puppet 将此文件放在那里或修改该文件?我正在为单个节点(在独立模式下)使用 puppet,只是为了尝试一下并保持服务器设置日志。
答案1
/etc/profile.d/
添加一个后缀为 的文件.sh
。它将作为 Red Hat 和 Debian 及其衍生产品中的 /etc/profile 的一部分,其他发行版则无法确定。一般来说,如果可能的话,最好添加代码片段而不是替换分布式文件,因为这样对未来更安全。
因此在 Puppet 中可以执行以下操作:
file { "/etc/profile.d/set_java_home.sh":
ensure => present,
source => ...[whatever's appropriate for your setup]...,
...
}
这是您正在寻找的还是您需要更多详细信息?
答案2
mark 的解决方案最适合将内容添加到每个人的个人资料中,但如果你需要确保文件中有几行内容,Puppet Labs 有一个很棒的模块,名为标准库其中包括 file_line,它将执行您需要的操作。以前,我使用 exec 类型中的 echo 和 grep 来执行此操作,但 file_line 更简单、更简洁。
以下是它的帮助:
Ensures that a given line is contained within a file. The implementation
matches the full line, including whitespace at the beginning and end. If
the line is not contained in the given file, Puppet will add the line to
ensure the desired state. Multiple resources may be declared to manage
multiple lines in the same file.
Example:
file_line { 'sudo_rule':
path => '/etc/sudoers',
line => '%sudo ALL=(ALL) ALL',
}
file_line { 'sudo_rule_nopw':
path => '/etc/sudoers',
line => '%sudonopw ALL=(ALL) NOPASSWD: ALL',
}
In this example, Puppet will ensure both of the specified lines are
contained in the file /etc/sudoers.