2013-08-23 11 views
16

Sto usando vagabondo con puppet per configurare macchine virtuali per ambienti di sviluppo. Vorrei semplicemente impostare alcune variabili d'ambiente nel file .pp. Usando la scatola virtuale e una scatola di base vagabonda per Ubuntu 64 bit.Imposta variabili d'ambiente con Puppet

Ho questo al momento.

$bar = 'bar' 

class foobar { 
    exec { 'foobar': 
    command => "export Foo=${bar}", 
    } 
} 

ma durante il provisioning viene visualizzato un errore: Impossibile trovare il comando 'export'.

Sembra che dovrebbe essere abbastanza semplice mi manca una sorta di richiesta o percorso per il tipo exec? Ho notato nella documentazione c'è un'opzione di ambiente per impostare le variabili di ambiente, dovrei usarlo?

risposta

3

Si potrebbe provare:

class foobar { 
    exec { 'foobar' : 
    command => "/bin/bash -c \"export Foo=${bar}\"", 
    } 
} 
+0

Grazie per la risposta ho effettivamente trovato quella soluzione. Mentre rimuove l'errore relativo al mancato rilevamento del comando, sfortunatamente non produce il risultato atteso. La variabile di ambiente Foo non viene impostata quando eseguo l'ssh nella macchina virtuale. – bgrantdev

+3

Questo è un noop. Modifica l'ambiente di una shell che è stata biforcuta appositamente per questa risorsa 'exec'. Questa shell termina immediatamente. L'esportazione non ha alcun effetto. –

15

modo più semplice per compire questo è di mettere il vostro ENV vars in/etc/ambiente, questo assicura che sono disponibili a tutto (o quasi tutto).

Qualcosa di simile a questo:

class example($somevar) { 
    file { "/etc/environment": 
     content => inline_template("SOMEVAR=${somevar}") 
    } 
} 

ragione per avere la classe parametrizzata è così è possibile destinare da hiera con la ricerca variabile automatica (http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup) ... se stai attaccando qualcosa in/etc/environment , di solito è meglio se lo rendi effettivamente specifico per l'ambiente.

nota: ho solo provato questo su ubuntu

+0

Mi piace la correzione semplice e concisa molto più di quanto non mi piaccia che questo inquini il mio '/ etc/environment'. Grazie. Le istruzioni exec – 7yl4r

17

Se avete solo bisogno le variabili disponibili nel periodo fantoccio, cosa è sbagliato con:

Exec { environment => [ "foo=$bar" ] } 

?

+1

non esportano la variabile per quando accede al server. – ptierno

+6

Lo so - questo è il motivo per cui ho detto "se hai solo bisogno delle variabili disponibili nella marionetta". La domanda non afferma che le variabili devono essere impostate nelle shell utente – John

4

Il modo in cui ho ottenuto intorno ad esso è quello di utilizzare anche /etc/profile.d:

$bar = 'bar' 
file { "/etc/profile.d/my_test.sh": 
    content => "export Foo=${bar}", 
    mode => 755 
} 

Questo assicura che ogni volta che si effettua il login (ex SSH), il $ variabile myVar viene esportato per l'ambiente. Dopo aver applicato tramite puppet e accesso (ex ssh localhost), echo $ Foo restituisce la barra

0

So che questa è una vecchia domanda, ma sono stato in grado di impostare il valore di prompt PS1 e aggiungerlo al mio file .bashrc come questo :

$PS1 = '\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \$ ' 

e all'interno di una classe:

exec {"vagrant-prompt": 
    unless => "grep -F 'export PS1=\"${PS1}\"' ${HOME_DIR}/.bashrc", 
    command => "echo 'export PS1=\"${PS1}\"' >> ${HOME_DIR}/.bashrc", 
    user => "${APP_USER}", 
} 

Il -F rende grep si interpretano come una stringa fissa. Altrimenti non lo troverà e continuerà ad aggiungere al file .bashrc.

Problemi correlati