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?


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


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

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.


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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.