Je dois définir les variables comme Java_HOME
et mettez à jour PATH
. Il existe plusieurs façons de procéder. Une façon consiste à mettre à jour le /etc/environment
variable et inclure une ligne pour Java_HOME
en utilisant le module lineinfile puis exécutez la commande source /etc/environment
directement sur l'OS invité (CentOS dans mon cas).
Une autre façon consiste à exécuter la commande d'exportation, par ex.
export Java_HOME=/usr/Java/jre1.8.0_51
export PATH=$PATH:$Java_HOME
Existe-t-il un moyen plus propre de le faire, car tout cela nécessite de manipuler des fichiers et d'exécuter des commandes directement sur le système d'exploitation pour mettre à jour les variables d'environnement?
Oui, il existe un moyen plus propre. Vous pouvez définir des variables d'environnement par tâche:
tasks:
- Shell: echo Java_HOME is $Java_HOME
environment:
Java_HOME: /usr/Java/jre1.8.0_51
register: shellout
- debug: var=shellout
Sortie:
TASK: [Shell echo Java_HOME is $Java_HOME] **********************************
changed: [localhost]
TASK: [debug var=shellout] ****************************************************
ok: [localhost] => {
"var": {
"shellout": {
"changed": true,
"cmd": "echo Java_HOME is \"$Java_HOME\"",
"delta": "0:00:00.005797",
"end": "2015-08-07 06:32:47.295061",
"invocation": {
"module_args": "echo Java_HOME is \"$Java_HOME\"",
"module_name": "Shell"
},
"rc": 0,
"start": "2015-08-07 06:32:47.289264",
"stderr": "",
"stdout": "Java_HOME is /usr/Java/jre1.8.0_51",
"stdout_lines": [
"Java_HOME is /usr/Java/jre1.8.0_51"
],
"warnings": []
}
}
}
Si vous définissez la variable d'environnement comme ci-dessus dans une tâche, elle n'est disponible que pour cette tâche spécifique. Dans les tâches suivantes, il n'existe que si vous le redéfinissez.
Bien que vous puissiez également définir des vars env par jeu:
- hosts:
- localhost
gather_facts: no
environment:
Java_HOME: /usr/Java/jre1.8.0_51
tasks:
...
Maintenant, il sera disponible pour toutes les tâches de ce jeu.
Voir Configuration de l'environnement et FAQ: Comment puis-je définir le PATH ou toute autre variable d'environnement pour une tâche ou un playbook entier? dans les documents.
Un autre exemple avec une tâche de script:
tasks:
- script: /tmp/script.sh
environment:
Java_HOME: /usr/Java/jre1.8.0_51
register: shellout
- debug: var=shellout
Où le script a simplement ce contenu:
#!/bin/sh
echo Java_HOME is $Java_HOME
J'ai trouvé qu'une solution de contournement pour ce faire était d'utiliser la commande lineinfile dans Ansible:
- name: Set Java_HOME
lineinfile: dest=/etc/environment state=present regexp='^Java_HOME' >
line='Java_HOME=/opt/jre1.8.0_51/bin'
Bien que ce ne soit pas idéal, cela vous permet de créer de nouvelles variables environnementales. Bien sûr, vous devez utiliser des variables pour construire votre chemin de répertoire. J'ai inclus le chemin explicite pour simplifier mon exemple.
Mise à jour de l'approche lineinfile. La valeur Java_HOME ne doit pas inclure le répertoire bin. Les personnes suivantes ont travaillé pour les centos:
- name: Set Java_HOME
lineinfile:
dest: /etc/environment
state: present
regexp: '^Java_HOME'
line: 'Java_HOME=/usr/lib/jvm/Java-1.8.0-openjdk'