ver variable restaurar entorno configurar shell ubuntu vagrant puppet

shell - restaurar - Establecer variables de entorno con títeres



variables de entorno ubuntu (7)

Algo así funcionaría al mismo tiempo que se preservan los contenidos existentes del archivo / etc / environment:

/code/environments/{environment}/manifests/environment/variable.pp:

define profile::environment::variable ( $variable_name, $value, $ensure => present, ) { file_line { $variable_name: path => ''/etc/environment'', ensure => $ensure, line => "$variable_name=$value", match => "$variable_name=", } }

Uso (en el cuerpo de un manifiesto de nodo):

profile::environment::variable { ''JAVA_HOME'': variable_name => ''JAVA_HOME'', value => ''/usr/lib/jvm/java-1.8.0'', }

Estoy usando vagrant with puppet para configurar máquinas virtuales para entornos de desarrollo. Me gustaría simplemente establecer algunas variables de entorno en el archivo .pp. Usando virtual box y un vagrant base box para Ubuntu 64 bit.

Tengo esto actualmente.

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

pero cuando aprovisiono recibo un error: No se pudo encontrar el comando ''exportar''.

Esto parece que debería ser lo suficientemente simple ¿me falta algún tipo de requisito o ruta para el tipo de ejecutivo? Noté que en la documentación hay una opción de entorno para configurar variables de entorno, ¿debería estar usando eso?


La forma en que lo manejé es usar también /etc/profile.d:

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

Esto garantiza que cada vez que inicie sesión (ex ssh), la variable $ MYVAR se exporte a su entorno. Después de aplicar a través de títere e iniciar sesión (ex ssh localhost), echo $ Foo devolverá la barra


La forma más sencilla de lograr esto es poner sus variables de entorno en / etc / environment, esto asegura que estén disponibles para todo (o casi todo).

Algo como esto:

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

La razón para tener la clase parametrizada es para que pueda seleccionarla desde hiera con búsqueda automática de variables ( http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup ) ... si está pegar algo en / etc / environment, generalmente es mejor si realmente lo hace específico para el entorno.

nota: solo he probado esto en ubuntu


Puede establecer una variable de entorno definiéndola en una línea en /etc/environment y puede asegurar una línea dentro de un archivo usando file_line en puppet. Combina estos dos en la siguiente solución:

file_line { "foo_env_var": ensure => present, line => "Foo=${bar}", path => "/etc/environment", }


Puedes probar lo siguiente, que establece la variable de entorno para este exec :

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


Sé que esta es una pregunta antigua, pero pude establecer el valor del indicador de PS1 y agregarlo a mi archivo .bashrc esta manera:

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

y dentro de una clase:

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

La -F hace que grep lo interprete como una cadena fija. De lo contrario, no lo encontrará y seguirá agregando al archivo .bashrc .


Si solo necesita las variables disponibles en la ejecución de títeres, ¿qué ocurre con:

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

?