如何访问人偶清单中的环境变量?


15

如何在人偶清单中访问环境变量(从人偶守护程序的环境)?


您是指由事实产生的变量吗?
Scott Pack 2010年

我的意思是bash环境变量,例如$ PATH和$ USER。
joeforker 2010年

Answers:


8

我认为我们需要有关您要实现的目标的更多信息。Facter默认情况下公开FACTER_环境变量:

https://docs.puppetlabs.com/guides/faq.html#can-i-access-environment-variables-with-facter

 $ FACTER_FOO="bar" 
 $ export FACTER_FOO
 $ facter | grep 'foo'
   foo => bar

但是对于$ PATH或$ USER ...为什么不告诉puppet显式使用给定路径或用户(对于exec?)?


由于多种原因,用环境变量控制解释器是很平常的……尤其是当您考虑有时将木偶作为解释器(在#!行中)而不是守护程序运行时……
joeforker

极好的答案。我浪费了很多时间,甚至没有注意到所有Facter变量都使用小写字母,即使环境变量使用大写字母也是如此。大家都密切注意jnrg给出的示例。
罗素·席尔瓦

1
链接断开
kenorb 2014年

7

如果要使用puppetmaster的环境,则需要使用服务器端功能。因为事实者会为您提供客户事实。

$ RUBYLIB / puppet / parser / functions / env.rb:

module Puppet::Parser::Functions
  newfunction(:env) do |args|
    variable = args[0]
    ENV[variable]
  end
end

在清单中使用它,例如:

$blah = env("PATH")

6

据我所知,Puppet运行时没有任何Bash环境变量。它似乎从Facter获得了所有环境。有一个脚本这里导入您经常envvars中为Facter envvars中。


链接不再起作用。您能否相应地更新答案?
适用

1

在Puppet Enterprise 2.5.1中,您可以通过/ etc / env访问它。

还要检查您是否定义了正确的环境/etc/puppetlabs/puppet/puppet.conf-它应该看起来像这样:

[production]
  modulepath = /etc/puppetlabs/puppet/environments/production/modules:/opt/puppet/share/puppet/modules
  manifest   = /etc/puppetlabs/puppet/environments/production/manifests/site.pp

-1

答案有点令人失望:您不能(除非您增强Puppet或Facter)。我最近写了一篇有关该主题的简短博客文章: 在Puppet中访问环境变量

简短摘要:Facter正在每个Puppet代理系统上运行。只需增强Facter来收集所有环境变量,然后就可以在Puppet清单中访问它们。

希望有帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.