Permanently Set Remote System Wide Environment Variables on Linux - /etc/environment - Ansible module lineinfile
How to automate the customization of System-Wide Environment Variables on Linux editing /etc/environment file using Ansible module lineinfile.


How to permanently set system-wide environment variables on remote Linux with Ansible?
I’m going to show you a live demo with some simple Ansible code. I’m Luca Berton and welcome to today’s episode of Ansible Pilot.
Permanently Set System-Wide Environment Variables on Remote Linux
- /etc/environment
- /etc/profile.d directory
There are principally two ways to configure System-Wide Environment Variables on Linux:
/etc/environment
is a system-wide configuration file, which means it is used by all users. It is owned by root so you need admin user privilege or sudo to modify it. Specifically, this file stores the system-wide locale and path settings./etc/profile
and/etc/profile.d/*.sh
are the global initialization scripts. This file gets executed whenever a bash login shell is entered via console, terminal, ssh, or graphical user interface. The global scripts get executed before the user-specific scripts though, and the main/etc/profile
executes all the*.sh
scripts in/etc/profile.d/
just before it exits. Each user could customize their~/.profile
, the user’s personal shell initialization scripts. Every user has one and can edit their file without affecting others. This is the equivalent to/etc/profile
for each user.
Links
The Best Resources For Ansible
Video Course
Printed Book
eBooks
- Ansible by Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps
- Ansible For Windows By Examples: 50+ Automation Examples For Windows System Administrator And DevOps
- Ansible For Linux by Examples: 100+ Automation Examples For Linux System Administrator and DevOps
- Ansible Linux Filesystem By Examples: 40+ Automation Examples on Linux File and Directory Operation for Modern IT Infrastructure
- Ansible For Containers and Kubernetes By Examples: 20+ Automation Examples To Automate Containers, Kubernetes and OpenShift
- Ansible For Security by Examples: 100+ Automation Examples to Automate Security and Verify Compliance for IT Modern Infrastructure
- Ansible Tips and Tricks: 10+ Ansible Examples to Save Time and Automate More Tasks
- Ansible Linux Users & Groups By Examples: 20+ Automation Examples on Linux Users and Groups Operation for Modern IT Infrastructure
- Ansible For PostgreSQL by Examples: 10+ Examples To Automate Your PostgreSQL database
- Ansible For Amazon Web Services AWS By Examples: 10+ Examples To Automate Your AWS Modern Infrastructure
demo
How to permanently set System-Wide Environment variables on Remote Linux with Ansible Playbook.
code
---
- name: set environment demo
hosts: all
gather_facts: false
become: true
vars:
os_environment:
- key: EDITOR
value: vi
- key: MY_ENV_VARIABLE
value: ansiblepilot
tasks:
- name: customize /etc/environment
ansible.builtin.lineinfile:
dest: "/etc/environment"
state: present
regexp: "^{{ item.key }}="
line: "{{ item.key }}={{ item.value }}"
with_items: "{{ os_environment }}"
execution
ansible-pilot $ ansible-playbook -i virtualmachines/demo/inventory ansible\ statements/set-environment.yml
PLAY [set environment demo] ***********************************************************************
TASK [customize /etc/environment] *****************************************************************
changed: [demo.example.com] => (item={'key': 'EDITOR', 'value': 'vi'})
changed: [demo.example.com] => (item={'key': 'MY_ENV_VARIABLE', 'value': 'ansiblepilot'})
PLAY RECAP ****************************************************************************************
demo.example.com : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansible-pilot $
idempotency
ansible-pilot $ ansible-playbook -i virtualmachines/demo/inventory ansible\ statements/set-environment.yml
PLAY [set environment demo] ***********************************************************************
TASK [customize /etc/environment] *****************************************************************
ok: [demo.example.com] => (item={'key': 'EDITOR', 'value': 'vi'})
ok: [demo.example.com] => (item={'key': 'MY_ENV_VARIABLE', 'value': 'ansiblepilot'})
PLAY RECAP ****************************************************************************************
demo.example.com : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ansible-pilot $
before execution
ansible-pilot $ ssh [email protected]
Last login: Tue Feb 22 18:45:12 2022 from 192.168.131.111
[[email protected] ~]$ sudo su
[[email protected] devops]# printenv | grep EDITOR
[[email protected] devops]# printenv | grep MY_ENV_VARIABLE
[[email protected] devops]# cat /etc/environment
[[email protected] devops]#
after execution
ansible-pilot $ ssh [email protected]
Last login: Tue Feb 22 18:48:46 2022 from 192.168.131.111
[[email protected] ~]$ sudo su
[[email protected] devops]# printenv | grep EDITOR
EDITOR=vi
[[email protected] devops]# printenv | grep MY_ENV_VARIABLE
MY_ENV_VARIABLE=ansiblepilot
[[email protected] devops]# cat /etc/environment
EDITOR=vi
MY_ENV_VARIABLE=ansiblepilot
[[email protected] devops]#
Recap
Now you know how to Permanently Set System-Wide Environment Variables on Remote Linux with Ansible. Subscribe to the YouTube channel, Medium, Website, Twitter, and Substack to not miss the next episode of the Ansible Pilot.
Academy
Learn the Ansible automation technology with some real-life examples in my
My book Ansible By Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps
Donate
Want to keep this project going? Please donate