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?


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?


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")

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.


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

-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!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.