11

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

我可以使用 exec 而只是做export VAR=blah. 但是,这只会持续到当前会议。我还考虑过将它添加到 bashrc 等文件的末尾。但是,我认为没有可靠的方法来检查那里是否一切就绪;所以它最终会随着木偶的每一次运行而被添加。

4

5 回答 5

20

我会看看这个相关的问题

*.sh在用户登录时读取脚本/etc/profile.d(正如帖子所说,同时/etc/profile来源)

export因此,放置在任何脚本中的变量-ed/etc/profile.d将可供您的用户使用。

然后,您可以使用file资源来确保此操作是幂等的。例如:

file { "/etc/profile.d/my_test.sh":
  content => 'export MYVAR="123"'
}
于 2013-03-15T22:48:15.020 回答
1

或者替代方法来获得一个不等的结果:

例子

if [[ ! grep PINTO_HOME /root/.bashrc | wc -l > 0 ]] ; then
        echo "export PINTO_HOME=/opt/local/pinto" >> /root/.bashrc ;
fi

此选项允许在 pinto 应用程序的存在使其受到警告时设置此环境变量,而不必编写用户的环境变量,而 .bash_profile不管盒子上可能会出现什么应用程序。

于 2013-05-07T05:07:50.243 回答
0

如果你将它添加到你的 bashrc 中,你可以检查它是否在 ENV 哈希中

ENV[VAR]

哪个会返回 => "blah"

于 2013-03-15T20:22:59.850 回答
0

如果你看一下Github 的 Boxen,他们会从 ~/.profile 获取一个脚本 (/opt/boxen/env.sh)。这个脚本运行了一堆东西,包括:

for f in $BOXEN_HOME/env.d/*.sh ; do
  if [ -f $f ] ; then
    source $f
  fi
done

反过来,这些脚本为其各自的模块设置环境变量。

于 2013-07-03T17:10:04.587 回答
0

如果您希望变量影响所有用户 /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',
}
于 2019-01-25T16:09:26.087 回答