J'utilise vagrant with puppet pour configurer des machines virtuelles pour des environnements de développement. Je voudrais simplement définir quelques variables d'environnement dans le fichier .pp. Utiliser une boîte virtuelle et une boîte de base vagabonde pour Ubuntu 64 bits.
J'ai ceci actuellement.
$bar = 'bar'
class foobar {
exec { 'foobar':
command => "export Foo=${bar}",
}
}
mais lors de la mise en service, j'obtiens une erreur: impossible de trouver la commande "export".
Cela semble être assez simple. Il me manque un type d’exigence ou un chemin pour le type d’exécutif? J'ai remarqué dans la documentation qu'il existe une option d'environnement pour configurer les variables d'environnement, devrais-je l'utiliser?
Si vous avez seulement besoin des variables disponibles dans le cycle de marionnettes, ce qui ne va pas:
Exec { environment => [ "foo=$bar" ] }
?
Le moyen le plus simple d’y parvenir est de placer vos envs dans/etc/environment, afin de s’assurer qu’ils sont disponibles pour tout (ou pratiquement tout).
Quelque chose comme ça:
class example($somevar) {
file { "/etc/environment":
content => inline_template("SOMEVAR=${somevar}")
}
}
La raison pour laquelle la classe est paramétrée est que vous pouvez la cibler à partir de hiera avec la recherche automatique de variable ( http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup ) ... Si vous collez quelque chose dans/etc/environment, il est généralement préférable de le rendre spécifique à l'environnement.
note: je n'ai testé cela que sur ubuntu
La façon dont je l’ai contourné est d’utiliser également /etc/profile.d:
$bar = 'bar'
file { "/etc/profile.d/my_test.sh":
content => "export Foo=${bar}",
mode => 755
}
Cela garantit que chaque fois que vous vous connectez (ex ssh), la variable $ MYVAR est exportée vers votre environnement. Après avoir postulé via marionnette et connecté (ex ssh localhost), echo $ Foo renverrait bar
Vous pouvez définir une variable d'environnement en la définissant sur une ligne dans /etc/environment
et vous pouvez assurer une ligne dans un fichier à l'aide de file_line
dans puppet. Combinez ces deux dans la solution suivante:
file_line { "foo_env_var":
ensure => present,
line => "Foo=${bar}",
path => "/etc/environment",
}
Vous pouvez essayer ce qui suit, qui définit la variable d’environnement pour cette exec
:
class foobar {
exec { 'foobar' :
command => "/bin/bash -c \"export Foo=${bar}\"",
}
}
Je sais que la question est ancienne, mais j’ai pu définir la valeur de l’invite PS1
et l’ajouter à mon fichier .bashrc
comme suit:
$PS1 = '\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \$ '
et dans une classe:
exec {"vagrant-Prompt":
unless => "grep -F 'export PS1=\"${PS1}\"' ${HOME_DIR}/.bashrc",
command => "echo 'export PS1=\"${PS1}\"' >> ${HOME_DIR}/.bashrc",
user => "${APP_USER}",
}
Le -F
fait grep
il l'interprète comme une chaîne fixe. Sinon, il ne le trouvera pas et continue d’ajouter au fichier .bashrc
.
Quelque chose comme cela fonctionnerait tout en préservant le contenu existant du fichier/etc/environment:
/code/environments/{environmentBuch/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=",
}
}
Utilisation (dans le corps d'un manifeste de noeud):
profile::environment::variable { 'Java_HOME':
variable_name => 'Java_HOME',
value => '/usr/lib/jvm/Java-1.8.0',
}