Comment accéder à une variable d'environnement dans un manifeste de marionnettes?

15

Comment accéder à une variable d'environnement (à partir de l'environnement du démon marionnette) dans un manifeste de marionnette?

joeforker
la source
Voulez-vous dire une variable générée par facter?
Scott Pack
Je veux dire les variables d'environnement bash comme $ PATH et $ USER.
joeforker

Réponses:

8

Je pense que nous avons besoin de plus d'informations sur ce que vous essayez de réaliser ... Facter expose par défaut les variables d'environnement 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

Mais pour $ PATH ou $ USER ... Pourquoi ne pas dire à la marionnette d'utiliser explicitement un chemin donné ou un utilisateur (pour un exec?)?

jnrg
la source
Il est très ordinaire de contrôler un interprète avec des variables d'environnement, pour diverses raisons ... surtout si vous pensez parfois à exécuter marionnette en tant qu'interprète (dans la ligne #!?) Au lieu d'un démon ...
joeforker
Excellente réponse. J'ai perdu beaucoup de temps à ne pas remarquer que toutes les variables Facter ont des noms en minuscules même si la variable d'environnement a un nom en majuscules. Tout le monde prête une attention particulière à l'exemple que jnrg donne.
Russell Silva du
1
il y a un lien cassé
kenorb
7

Vous auriez besoin d'utiliser une fonction côté serveur pour cela si vous voulez l'environnement du marionnettiste. Depuis facter, vous obtenez des informations sur les clients.

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

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

Utilisez-le dans vos manifestes comme:

$blah = env("PATH")
AndrewF
la source
6

D'après ce que je peux dire, Puppet fonctionne sans aucune variable d'environnement Bash. Il semble tirer tout son environnement de Facter. Il y a un script ici pour importer vos envvars réguliers en tant qu'envars Facter.

Cawflands
la source
Le lien ne fonctionne plus. Pourriez-vous mettre à jour la réponse en conséquence?
NA
1

Dans Puppet enterprise 2.5.1, vous pouvez y accéder via / etc / env.

Vérifiez également si l'environnement correct est défini dans votre /etc/puppetlabs/puppet/puppet.conf- il devrait ressembler à ceci:

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

La réponse est un peu décevante: vous ne pouvez pas (sauf si vous améliorez Puppet ou Facter). J'ai récemment écrit un court article de blog sur ce sujet: Accéder aux variables d'environnement dans Puppet

Un bref résumé: Facter s'exécute sur chaque système d'agent Puppet. Améliorez simplement Facter pour collecter toutes les variables d'environnement et ensuite vous pouvez y accéder dans les manifestes Puppet.

J'espère que cela pourra aider!

Valentin
la source