ansible java-home

Cómo establecer variables ambientales utilizando Ansible



java-home (3)

Actualización al enfoque de lineinfile. El valor JAVA_HOME no debe incluir el directorio bin. Lo siguiente funcionó para 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''

Necesito establecer las variables como JAVA_HOME y actualizar PATH . Hay varias maneras de hacer esto. Una forma es actualizar la variable /etc/environment e incluir una línea para JAVA_HOME utilizando el módulo lineinfile y luego ejecutar la fuente de comando /etc/environment directamente en el sistema operativo invitado (CentOS en mi caso).

Otra forma es ejecutar el comando de exportación por ejemplo

export JAVA_HOME=/usr/java/jre1.8.0_51 export PATH=$PATH:$JAVA_HOME

¿Hay una forma más limpia de hacerlo, ya que todo esto requiere manipular archivos y ejecutar comandos directamente en el sistema operativo para actualizar las variables de entorno?


Encontré que una solución para hacer esto era usar el comando lineinfile en Ansible:

- name: Set JAVA_HOME lineinfile: dest=/etc/environment state=present regexp=''^JAVA_HOME'' > line=''JAVA_HOME=/opt/jre1.8.0_51/bin''

Si bien esto no es lo ideal, le permite crear nuevas variables ambientales. Por supuesto, debe usar variables para construir su ruta de directorio. He incluido la ruta explícita para simplificar mi ejemplo.


Sí, hay una manera más limpia. Puede establecer variables de entorno por tarea:

tasks: - shell: echo JAVA_HOME is $JAVA_HOME environment: JAVA_HOME: /usr/java/jre1.8.0_51 register: shellout - debug: var=shellout

Salida:

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 configura la variable de entorno como anteriormente en una tarea, solo está disponible para esta tarea específica. En tareas posteriores no existe a menos que lo defina de nuevo.

Aunque también puedes definir env vars por juego:

- hosts: - localhost gather_facts: no environment: JAVA_HOME: /usr/java/jre1.8.0_51 tasks: ...

Ahora estará disponible para todas las tareas de este juego.

Consulte Configuración del entorno y Preguntas frecuentes: ¿Cómo puedo configurar la RUTA o cualquier otra variable de entorno para una tarea o un libro de jugadas completo? en los docs.

Otro ejemplo con una tarea de script:

tasks: - script: /tmp/script.sh environment: JAVA_HOME: /usr/java/jre1.8.0_51 register: shellout - debug: var=shellout

Donde el script simplemente tiene este contenido:

#!/bin/sh echo JAVA_HOME is $JAVA_HOME