使用puppet设置环境变量

时间:2013-03-15 19:49:41

标签: ruby deployment environment-variables environment puppet

我正在尝试找出使用puppet设置一些环境变量的最佳方法。

我可以使用exec而只是export VAR=blah。但是,这只会持续到本届会议。我还想过将它添加到文件的末尾,比如bashrc。然而,我不认为有一种可靠的方法可以检查它是否已经准备就绪;因此,每次木偶运动都会增加它。

5 个答案:

答案 0 :(得分:20)

我会看看this related question

*.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',
}