Wie greife ich auf eine Umgebungsvariable in einem Puppenmanifest zu?

15

Wie greife ich in einem Puppet-Manifest auf eine Umgebungsvariable (aus der Umgebung des Puppet-Daemons) zu?

joeforker
quelle
Meinen Sie eine von facter generierte Variable?
Scott Pack
Ich meine die bash Umgebungsvariablen wie $ PATH und $ USER.
Joeforker

Antworten:

8

Ich denke, wir brauchen mehr Informationen darüber, was Sie erreichen wollen ... Facter legt standardmäßig die Umgebungsvariablen FACTER_ offen:

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

Aber für $ PATH oder $ USER ... Warum weist Puppet nicht an, einen bestimmten Pfad oder einen Benutzer (für einen Exec?) Explizit zu verwenden?

jnrg
quelle
Es ist aus verschiedenen Gründen üblich, einen Interpreter mit Umgebungsvariablen zu steuern ... insbesondere, wenn Sie manchmal daran denken, Puppet als Interpreter (in der #!
-Zeile
Hervorragende Antwort. Ich habe viel Zeit verschwendet, ohne zu bemerken, dass alle Facter-Variablen Kleinbuchstaben haben, auch wenn die Umgebungsvariable einen Großbuchstaben hat. Alle achten genau auf das Beispiel, das jnrg gibt.
Russell Silva
1
Es gibt einen defekten Link
Kenorb
7

Dazu müssten Sie eine serverseitige Funktion verwenden, wenn Sie die Umgebung des Puppenmeisters verwenden möchten. Da facter Ihnen Kundendaten liefert.

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

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

Verwenden Sie es in Ihren Manifesten wie:

$blah = env("PATH")
AndrewF
quelle
6

Soweit ich weiß, läuft Puppet ohne Bash-Umgebungsvariablen. Es scheint seine gesamte Umgebung von Facter zu beziehen. Hier gibt es ein Skript , mit dem Sie Ihre regulären Envvars als Facter-Envvars importieren können.

Cawflands
quelle
Der Link funktioniert nicht mehr. Könnten Sie bitte die Antwort entsprechend aktualisieren?
NA
1

In Puppet Enterprise 2.5.1 können Sie über / etc / env darauf zugreifen.

Überprüfen Sie auch, ob in Ihrer Umgebung die richtige Umgebung definiert ist /etc/puppetlabs/puppet/puppet.conf- sie sollte ungefähr so ​​aussehen:

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

Die Antwort ist ein bisschen enttäuschend: Sie können nicht (es sei denn, Sie verbessern Puppet oder Facter). Ich habe kürzlich einen kurzen Blog-Beitrag zu diesem Thema geschrieben: Zugriff auf Umgebungsvariablen in Puppet

Eine kurze Zusammenfassung: Facter läuft auf jedem Puppet-Agentensystem. Erweitern Sie Facter einfach, um alle Umgebungsvariablen zu erfassen, und greifen Sie dann in Puppet-Manifesten darauf zu.

Ich hoffe, das hilft!

Valentin
quelle