我正在尝试找出使用puppet设置一些环境变量的最佳方法。
我可以使用exec而只是export VAR=blah
。但是,这只会持续到本届会议。我还想过将它添加到文件的末尾,比如bashrc。然而,我不认为有一种可靠的方法可以检查它是否已经准备就绪;因此,每次木偶运动都会增加它。
答案 0 :(得分:20)
*.sh
中的 /etc/profile.d
脚本在用户登录时读取(正如帖子所说,同时/etc/profile
来源)
export
中的任何脚本中的变量/etc/profile.d
因此可供您的用户使用。
然后,您可以使用file
资源来确保此操作为idempotent。例如:
file { "/etc/profile.d/my_test.sh":
content => 'export MYVAR="123"'
}
答案 1 :(得分:1)
或者是无效结果的替代方法:
示例强>
if [[ ! grep PINTO_HOME /root/.bashrc | wc -l > 0 ]] ; then
echo "export PINTO_HOME=/opt/local/pinto" >> /root/.bashrc ;
fi
此选项允许在存在时设置此环境变量
pinto应用程序让它变得谨慎,而不是必须组成用户
.bash_profile
无论哪种应用程序都可能出现在盒子上。
答案 2 :(得分:0)
如果你把它添加到你的bashrc,你可以通过
检查它是否在ENV哈希中ENV[VAR]
将返回=> “嗒嗒”
答案 3 :(得分:0)
如果您查看Github's Boxen,他们会从〜/ .profile中获取脚本(/opt/boxen/env.sh)。这个脚本运行了很多东西,包括:
for f in $BOXEN_HOME/env.d/*.sh ; do
if [ -f $f ] ; then
source $f
fi
done
这些脚本反过来为各自的模块设置环境变量。
答案 4 :(得分:0)
如果您希望变量影响所有用户,则必须使用/etc/profile.d。
但是,如果您希望将它们用于特定用户,则.bashrc之类的名称更有意义。
针对“我不认为有一种可靠的方法来检查是否已经准备就绪;因此最终每次运行木偶时它都会被添加”,现在{ {3}}:
“确保给定行包含在文件中。实现与完整行匹配,包括开头和结尾的空格。如果该行不包含在给定文件中,则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',
}