Como acesso uma variável de ambiente em um manifesto de fantoche?

15

Como acesso uma variável de ambiente (do ambiente do daemon de fantoches) em um manifesto de fantoches?

joeforker
fonte
Você quer dizer uma variável gerada por facter?
Scott Pack
Quero dizer as variáveis ​​de ambiente bash como $ PATH e $ USER.
joeforker

Respostas:

8

Acho que precisamos de mais informações sobre o que você está tentando alcançar ... O Facter expõe por padrão as variáveis ​​de ambiente 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

Mas para $ PATH ou $ USER ... Por que não diz ao puppet para usar um determinado caminho ou usuário (para um executivo?) Explicitamente?

jnrg
fonte
É muito comum controlar um intérprete com variáveis ​​de ambiente, por várias razões ... especialmente se você pensar em executar fantoches às vezes como intérprete (na linha #!?) Em vez de um daemon ...
joeforker
Excelente resposta. Eu perdi muito tempo sem perceber que todas as variáveis ​​do Facter têm nomes em minúsculas, mesmo que a variável de ambiente tenha um nome em maiúsculas. Todos prestem muita atenção ao exemplo que o jnrg fornece.
Russell Silva
1
existe link quebrado
kenorb
7

Você precisaria usar uma função do lado do servidor para isso, se quiser o ambiente do puppetmaster. Desde facter você recebe fatos do cliente.

$ RUBYLIB / fantoche / analisador / funções / env.rb:

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

Use-o em seus manifestos, como:

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

Pelo que posso dizer, o Puppet é executado sem nenhuma variável de ambiente Bash. Parece obter todo o seu ambiente do Facter. Há um script aqui para importar seus envios regulares como envios do Facter.

Cawflands
fonte
O link não funciona mais. Você poderia atualizar a resposta de acordo?
NA
1

No Puppet enterprise 2.5.1, você pode acessá-lo via / etc / env.

Verifique também se você tem o ambiente correto definido no seu /etc/puppetlabs/puppet/puppet.conf- ele deve ser algo como isto:

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

A resposta é um pouco decepcionante: você não pode (a menos que aprimore o Puppet ou o Facter). Recentemente, escrevi um pequeno post sobre este tópico: Acessando variáveis ​​de ambiente no Puppet

Um breve resumo: o Facter está sendo executado em todos os sistemas de agentes Puppet. Simplesmente aprimore o Facter para coletar todas as variáveis ​​de ambiente e, em seguida, você pode acessá-las nos manifestos do Puppet.

Espero que ajude!

Valentin
fonte