我正在尝试找出使用 puppet 设置一些环境变量的最佳方法。
我可以使用 exec 而只是做export VAR=blah
. 但是,这只会持续到当前会议。我还考虑过将它添加到 bashrc 等文件的末尾。但是,我认为没有可靠的方法来检查那里是否一切就绪;所以它最终会随着木偶的每一次运行而被添加。
我正在尝试找出使用 puppet 设置一些环境变量的最佳方法。
我可以使用 exec 而只是做export VAR=blah
. 但是,这只会持续到当前会议。我还考虑过将它添加到 bashrc 等文件的末尾。但是,我认为没有可靠的方法来检查那里是否一切就绪;所以它最终会随着木偶的每一次运行而被添加。
或者替代方法来获得一个不等的结果:
例子
if [[ ! grep PINTO_HOME /root/.bashrc | wc -l > 0 ]] ; then
echo "export PINTO_HOME=/opt/local/pinto" >> /root/.bashrc ;
fi
此选项允许在 pinto 应用程序的存在使其受到警告时设置此环境变量,而不必编写用户的环境变量,而
.bash_profile
不管盒子上可能会出现什么应用程序。
如果你将它添加到你的 bashrc 中,你可以检查它是否在 ENV 哈希中
ENV[VAR]
哪个会返回 => "blah"
如果你看一下Github 的 Boxen,他们会从 ~/.profile 获取一个脚本 (/opt/boxen/env.sh)。这个脚本运行了一堆东西,包括:
for f in $BOXEN_HOME/env.d/*.sh ; do
if [ -f $f ] ; then
source $f
fi
done
反过来,这些脚本为其各自的模块设置环境变量。
如果您希望变量影响所有用户 /etc/profile.d 是要走的路。
但是,如果您希望它们用于特定用户,则 .bashrc 之类的东西更有意义。
为了回应“我认为没有可靠的方法来检查它是否在那里准备就绪;所以它最终会随着 puppet 的每次运行而被添加”,现在 puppetlabs标准库模块提供了一个 file_line 资源:
“确保给定的行包含在文件中。实现匹配整行,包括开头和结尾的空格。如果给定文件中不包含该行,Puppet 将该行附加到文件末尾以确保所需的状态。可以声明多个资源以管理同一文件中的多行。
例子:
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',
}