Salut, j'essaie de savoir comment définir la variable d'environnement avec Ansible.
quelque chose qu'une simple commande shell comme celle-ci:
EXPORT LC_ALL=C
essayé en tant que commande shell et obtenu une erreur essayé en utilisant le module d'environnement et rien ne s'est passé.
Qu'est-ce que je rate
Réponses:
Il y a plusieurs façons de le faire et d'après votre question, ce dont vous avez besoin n'est pas clair.
1. Si vous avez besoin que la variable d'environnement soit définie UNIQUEMENT PAR TÂCHE, procédez comme suit:
Notez qu'il
MY_ENV_VARIABLE
est disponible UNIQUEMENT pour la première tâche,environment
ne le définit pas de manière permanente sur votre système.Espérons que bientôt l'utilisation
environment
sera également possible au niveau du jeu , pas seulement au niveau des tâches comme ci-dessus. Une pull request est actuellement ouverte pour cette fonctionnalité sur le GitHub d'Ansible: https://github.com/ansible/ansible/pull/8651MISE À JOUR: Il a maintenant fusionné le 2 janvier 2015.
2. Si vous voulez une variable d'environnement permanente + à l'échelle du système / uniquement pour certains utilisateurs
Vous devriez regarder comment vous le faites dans votre distribution / shell Linux, il y a plusieurs endroits pour cela. Par exemple dans Ubuntu vous définissez cela dans des fichiers comme par exemple:
~/.profile
/etc/environment
/etc/profile.d
annuaireVous trouverez la documentation Ubuntu à ce sujet ici: https://help.ubuntu.com/community/EnvironmentVariables
Après tout pour définir la variable d'environnement dans ex. Ubuntu vous pouvez simplement utiliser le
lineinfile
module d'Ansible et ajouter la ligne souhaitée à certains fichiers. Consultez la documentation de votre système d'exploitation pour savoir où l'ajouter pour le rendre permanent.la source
Je n'avais pas assez de réputation pour commenter et j'ajoute donc une nouvelle réponse.
La réponse de Gasek est tout à fait correcte. Juste une chose: si vous mettez à jour le
.bash_profile
fichier ou le/etc/profile
, ces modifications ne seront reflétées qu'après une nouvelle connexion. Si vous souhaitez définir la variable env, puis l'utiliser dans les tâches suivantes du même playbook, pensez à ajouter ces variables d'environnement dans le.bashrc
fichier.Je suppose que la raison derrière cela est la connexion et les shells sans connexion.
Ansible, lors de l'exécution de différentes tâches, lit les paramètres à partir d'un
.bashrc
fichier au lieu du.bash_profile
ou du/etc/profile
.Par exemple, si j'ai mis à jour ma variable de chemin pour inclure le binaire personnalisé dans le
.bash_profile
fichier de l'utilisateur respectif, puis que j'ai fait une source du fichier. Les prochaines tâches suivantes ne reconnaîtront pas ma commande. Cependant, si vous mettez à jour dans le.bashrc
fichier, la commande fonctionnera.Cela fonctionnerait , mais si je l'avais fait en utilisant des fichiers de profil,
mysql -e "show databases"
cela aurait donné une erreur.Celui - ci ne fonctionnera pas , si nous avons toutes ces tâches dans le même livre de jeux.
la source
source file
faire. file
Voici une tâche locale rapide sur laquelle définir de manière permanente les clés / valeurs
/etc/environment
(à l'échelle du système, tous les utilisateurs):et les vars pour cela:
et, oui, si vous sortez et rentrez,
env
affiche les nouvelles variables d'environnement.la source
dest
a été remplacé parpath
, mais selon la documentation devrait toujours fonctionner. Si ce n'est pas le cas, passez àpath
.Pour définir de manière persistante les variables d'environnement, vous pouvez utiliser l'un des rôles existants sur Ansible Galaxy. Je recommande weareinteractive.environment .
Utilisation d'ansible-galaxy:
Utilisation de requirements.yml:
Puis dans votre playbook:
la source
C'est la meilleure solution. Comme l'a dit Michal Gasek (première réponse), depuis la fusion de la pull request ( https://github.com/ansible/ansible/pull/8651 ), nous sommes en mesure de définir facilement des variables d'environnement permanentes par niveau de jeu.
la source