パペットマニフェストの環境変数にアクセスするにはどうすればよいですか?


15

パペットマニフェストで(パペットデーモンの環境から)環境変数にアクセスするにはどうすればよいですか?


ファクトによって生成された変数を意味しますか?
スコットパック

$ PATHや$ USERなどのbash環境変数を意味します。
joeforker

回答:


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の場合...指定されたパスまたはユーザー(execの場合)を明示的に使用するようにpuppetに指示しないのはなぜですか?


さまざまな理由から、環境変数を使用してインタープリターを制御することは非常に普通です...特に、デーモンの代わりに(#!行で)インタープリターとしてパペットを実行することを考える場合は特にそうです...
joeforker

素晴らしい答え。環境変数の名前が大文字であっても、すべてのFacter変数が小文字の名前を持っていることに気付かずに多くの時間を無駄にしました。誰もがjnrgの例に細心の注意を払っています。
ラッセルシルバ

1
リンクが壊れている
ケノーブ14年

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

Bash環境変数なしでPuppetが実行されることを私が知ることができることから。すべての環境をFacterから取得しているようです。ここに、通常のenvvarをFacter envvarとしてインポートするスクリプトがあります。


リンクはもう機能しません。それに応じて回答を更新していただけますか?
-NA

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マニフェスト内でそれらにアクセスできます。

お役に立てば幸いです!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.