Saltar al contenido

Cómo configurar las variables de entorno de Linux con Ansible

Este dilema se puede tratar de diversas maneras, por lo tanto te mostramos la que en nuestra opinión es la solución más completa.

Solución:

Hay varias formas de hacer esto y, según su pregunta, no está claro lo que necesita.

1. Si necesita definir la variable de entorno SOLO POR TAREA, haga esto:

- hosts: dev
  tasks:
    - name: Echo my_env_var
      shell: "echo $MY_ENV_VARIABLE"
      environment:
        MY_ENV_VARIABLE: whatever_value

    - name: Echo my_env_var again
      shell: "echo $MY_ENV_VARIABLE"

Tenga en cuenta que MY_ENV_VARIABLE está disponible SOLO para la primera tarea, environment no lo establece de forma permanente en su sistema.

TASK: [Echo my_env_var] ******************************************************* 
changed: [192.168.111.222] => "changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": "whatever_value"

TASK: [Echo my_env_var again] ************************************************* 
changed: [192.168.111.222] => "changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": ""

Esperemos que pronto use environment también será posible en nivel de juego, no solo el nivel de tarea como el anterior. Actualmente hay una solicitud de extracción abierta para esta función en GitHub de Ansible: https://github.com/ansible/ansible/pull/8651

ACTUALIZACIÓN: ahora se fusionó a partir del 2 de enero de 2015.

2. Si desea una variable de entorno permanente + todo el sistema / solo para ciertos usuarios

Debería ver cómo lo hace en su distribución / shell de Linux, hay varios lugares para eso. Por ejemplo en Ubuntu lo defines en archivos como por ejemplo:

  • ~/.profile
  • /etc/environment
  • /etc/profile.d directorio

Encontrará documentos de Ubuntu al respecto aquí: https://help.ubuntu.com/community/EnvironmentVariables

Después de todo, para establecer la variable de entorno en ej. Ubuntu solo puedes usar lineinfile módulo de Ansible y agregue la línea deseada a cierto archivo. Consulte los documentos de su sistema operativo para saber dónde agregarlo para que sea permanente.

No tenía suficiente reputación para comentar y, por lo tanto, estoy agregando una nueva respuesta.
La respuesta de Gasek es bastante correcta. Sólo una cosa: si está actualizando el .bash_profile archivo o el /etc/profile, esos cambios se reflejarán solo después de realizar un nuevo inicio de sesión. En caso de que desee configurar la variable env y luego usarla en tareas posteriores en el mismo libro de jugadas, considere agregar esas variables de entorno en el .bashrc expediente.
Supongo que la razón detrás de esto es el inicio de sesión y los shells de no inicio de sesión.
Ansible, mientras ejecuta diferentes tareas, lee los parámetros de un .bashrc archivo en lugar del .bash_profile o el /etc/profile.

Como ejemplo, si actualicé mi variable de ruta para incluir el binario personalizado en el .bash_profile archivo del usuario respectivo y luego hizo una fuente del archivo. Las siguientes tareas posteriores no reconocerán mi comando. Sin embargo, si actualiza en el .bashrc archivo, el comando funcionaría.

 - name: Adding the path in the bashrc files
   lineinfile: dest=/root/.bashrc line='export PATH=$PATH:path-to-mysql/bin' insertafter='EOF' regexp='export PATH=$PATH:path-to-mysql/bin' state=present
 
-  - name: Source the bashrc file
   shell: source /root/.bashrc

 - name: Start the mysql client
   shell: mysql -e "show databases";

esto funcionaria, pero si lo hubiera hecho usando archivos de perfil, el mysql -e "show databases" hubiera dado un error.

- name: Adding the path in the Profile files
   lineinfile: dest=/root/.bash_profile line='export PATH=$PATH:install_path/mysql_folder_name/bin' insertafter='EOF' regexp='export PATH=$PATH:install_path/mysql_folder_name/bin' state=present

 - name: Source the bash_profile file
   shell: source /root/.bash_profile

 - name: Start the mysql client
   shell: mysql -e "show databases";

Este no funcionará, si tenemos todas estas tareas en el mismo libro de jugadas.

Aquí hay una tarea local rápida para configurar permanentemente key/valores en /etc/environment (que es para todo el sistema, todos los usuarios):

- name: populate /etc/environment
  lineinfile:
    dest: "/etc/environment"
    state: present
    regexp: "^ item.key ="
    line: " item.key = item.value"
  with_items: " os_environment "

y los vars para ello:

os_environment:
  - key: DJANGO_SETTINGS_MODULE 
    value : websec.prod_settings  
  - key: DJANGO_SUPER_USER 
    value : admin

y, sí, si sales y vuelves a entrar, env muestra las nuevas variables de entorno.

Tienes la posibilidad comunicar esta noticia si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *