Jak uzyskać dostęp do zmiennej środowiskowej w manifeście marionetkowym?

15

Jak uzyskać dostęp do zmiennej środowiskowej (ze środowiska demona kukiełkowego) w manifeście marionetkowym?

współpracownik
źródło
Czy masz na myśli zmienną generowaną przez facter?
Scott Pack
Mam na myśli zmienne środowiskowe bash, takie jak $ PATH i $ USER.
joeforker

Odpowiedzi:

8

Myślę, że potrzebujemy więcej informacji na temat tego, co próbujesz osiągnąć ... Facter domyślnie udostępnia zmienne środowiskowe 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

Ale dla $ PATH lub $ USER ... Dlaczego nie mówi marionetce jawnie użyć danej ścieżki lub użytkownika (dla exec?)?

jnrg
źródło
Kontrolowanie interpretera za pomocą zmiennych środowiskowych jest bardzo zwyczajne z różnych powodów ... zwłaszcza jeśli myślisz o tym, że czasami uruchomisz lalkę jako interpreter (w linii #!?) Zamiast demona ...
joeforker
Doskonała odpowiedź. Zmarnowałem dużo czasu, nie zauważając, że wszystkie zmienne Facter mają małe litery, nawet jeśli zmienna środowiskowa ma wielką literę. Wszyscy zwracają baczną uwagę na przykład podany przez jnrg.
Russell Silva,
1
zerwany link
kenorb
7

Aby to zrobić, musisz użyć funkcji po stronie serwera. Od faktora dostajesz fakty od klientów.

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

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

Użyj go w manifestach, takich jak:

$blah = env("PATH")
AndrewF
źródło
6

Z tego, co mogę powiedzieć, Puppet działa bez żadnych zmiennych środowiskowych Bash. Wydaje się, że całe swoje środowisko otrzymuje od Facter. Jest tutaj skrypt do importowania twoich zwykłych envvarów jako envvars Facter.

Cawflands
źródło
1
Link już nie działa. Czy mógłbyś odpowiednio zaktualizować odpowiedź?
NA
1

W Puppet Enterprise 2.5.1 można uzyskać do niego dostęp za pośrednictwem / etc / env.

Sprawdź także, czy masz zdefiniowane prawidłowe środowisko /etc/puppetlabs/puppet/puppet.conf- powinno to wyglądać mniej więcej tak:

[production]
  modulepath = /etc/puppetlabs/puppet/environments/production/modules:/opt/puppet/share/puppet/modules
  manifest   = /etc/puppetlabs/puppet/environments/production/manifests/site.pp
Nalinda
źródło
-1

Odpowiedź jest nieco rozczarowująca: nie możesz (chyba że ulepszysz Puppet lub Facter). Niedawno napisałem krótki post na blogu na ten temat: Dostęp do zmiennych środowiskowych w Puppet

Krótkie streszczenie: Facter działa na każdym systemie agentów Puppet. Po prostu ulepsz Facter, aby zebrał wszystkie zmienne środowiskowe, a następnie będziesz mógł uzyskać do nich dostęp w manifestach Lalek.

Mam nadzieję, że to pomaga!

Valentin
źródło