2013-03-15 14 views
11

Sto cercando di elaborare il modo migliore per impostare alcune variabili di ambiente con puppet.Impostazione delle variabili di ambiente con puppet

Potrei usare exec e basta fare export VAR=blah. Tuttavia, sarebbe durato solo per la sessione corrente. Ho anche pensato di aggiungerlo alla fine di un file come bashrc. Tuttavia, non credo che esista un metodo affidabile per verificare se è tutto pronto lì; quindi finirà per essere aggiunto ad ogni corsa di burattini.

+1

Non è "l'impostazione di una variabile" un altro modo di dire "modificare un file rc"? Quindi vuoi davvero distribuire il contenuto in un file? –

+0

È anche possibile definire variabili di ambiente di sistema mediante la creazione di file/etc/environment con KEY = VALUE lista di variabili. – izi

risposta

20

vorrei dare un'occhiata a this related question.

*.sh script in /etc/profile.d vengono letti in fase di user-login (come il post dice, allo stesso tempo /etc/profile è di provenienza)

variabili export -ed in qualsiasi script posto in /etc/profile.d sarà quindi disponibile per gli utenti .

È quindi possibile utilizzare una risorsa file per garantire che questa azione sia idempotent. Ad esempio:

file { "/etc/profile.d/my_test.sh": 
    content => 'export MYVAR="123"' 
} 
0

Se si aggiunge al tuo bashrc è possibile verificare che è in hash ENV facendo

ENV[VAR] 

che restituirà => "blah"

+0

Grazie, e come potrei dire a puppet di eseguire il comando solo se non si trova all'interno dell'hash ENV? – Jake232

+0

Dovrebbe essere ENV ['VAR'] per accedere alla variabile di ambiente VAR – Spooner

+0

'a meno che ENV [VAR];' 'inserisce" Questo è il tuo codice ";' 'fine;' –

1

Oppure un mezzo alternativo per un risultato indempotent:

Esempio

if [[ ! grep PINTO_HOME /root/.bashrc | wc -l > 0 ]] ; then 
     echo "export PINTO_HOME=/opt/local/pinto" >> /root/.bashrc ; 
fi 

Questa opzione permette questa variabile ambientale da impostare quando la presenza della domanda pinto lo rende warrented piuttosto che dover comporre un utente .bash_profile indipendentemente da quali applicazioni potrebbero finire sulla scatola.

0

Se si dà un'occhiata a Github's Boxen, viene generato uno script (/opt/boxen/env.sh) da ~/.profile. Questo script esegue un mucchio di roba tra cui:

for f in $BOXEN_HOME/env.d/*.sh ; do 
    if [ -f $f ] ; then 
    source $f 
    fi 
done 

Questi script, a loro volta, le variabili di ambiente impostate per i rispettivi moduli.