
@sylvain_metayer
Objectif | État |
Gérer mes fichiers de configuration | ? |
Gérer les logiciels installés | ? |
Versionnable | ? |
Facilement maintenable | ? |
Gérer mon poste de travail pro et perso | ? |
Gestion de secrets | ? |
User-specific application configuration is traditionally stored in so called dotfiles (files whose filename starts with a dot).
#!/usr/bin/env bash
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export SSH_AUTH_SOCK=/run/user/1000/ssh-agent.socket
# ...Et d’autres : vimrc, gitconfig, …

Objectif | État |
Gérer mes fichiers de configuration | ✅ |
Gérer les logiciels installés | ❌ |
Versionnable | 😐 |
Facilement maintenable | ❌ |
Gérer mon poste de travail pro et perso | ❌ |
Gestion de secrets | ❌ |
Du shell, du python, du C, du PHP… Venez comme vous êtes, on va coder !
Objectif | État |
Gérer mes fichiers de configuration | ✅ |
Gérer les logiciels installés | ✅ |
Versionnable | ✅ |
Facilement maintenable | 😐 |
Gérer mon poste de travail pro et perso | ✅ |
Gestion de secrets | ✅ |
GNU Stow is a symlink farm manager which takes distinct sets of software and/or data located in separate directories on the filesystem, and makes them all appear to be installed in a single directory tree.
Objectif | État |
Gérer mes fichiers de configuration | ✅ |
Gérer les logiciels installés | ❌ |
Versionnable | ✅ |
Facilement maintenable | ✅ |
Gérer mon poste de travail pro et perso | 😐 |
Gestion de secrets | ❌ |

├── playbooks
│ ├── demo
│ ├── work
│ ├── ├── main.yaml
├── roles
│ ├── jetbrains_toolbox
│ │ ├── defaults
│ │ ├── tasks
│ │── git_config
│ │ ├── tasks
│ └── [...]- hosts: localhost
tasks:
- name: "Simple task"
debug:
msg: |-
Hello DevoxxFR ! :)
roles:
- role: geerlingguy.docker
become: true
- role: git_config$ cat scripts/setup.sh
python3 -m pip install --user -r "requirements.txt"
ansible-galaxy role install -r "requirements.yml"
$ cat requirements.txt
ansible==7.0.0
$ cat requirements.yml
roles:
- src: geerlingguy.docker
version: 6.1.0$ ansible-playbook playbooks/demo/main.yaml -K
BECOME password:PLAY [localhost] ************************************
TASK [git_config : Ensure Git config file exists] ************************************
ok: [localhost]
TASK [git_config : Render Git config Template] ************************************
changed: [localhost]
PLAY RECAP ************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Playbook run took 0 days, 0 hours, 0 minutes, 1 secondspackages_to_install:
- vim
- firefox
- code- name: Install packages
become: true
ansible.builtin.package:
name: "{{ packages_to_install }}"
state: present- hosts: localhost
roles:
- role: commons
vars:
packages_to_install: [vim]roles/symlink
├── files
│ ├── .config
│ │ ├── htop
│ │ │ └── htoprc
│ └── .vimrc---
# item = .vimrc
# [...] Create folders
# [...] Ensure file does not exists
- name: "{{ item }} : Update dotfile symlink"
file:
src: "{{ role_path }}/files/{{ item }}"
dest: ~/{{ item }}
state: link- name: Template gitconfig
ansible.builtin.template:
src: templates/gitconfig.j2
dest: "~/.gitconfig"[user]
{% if git_config_user is defined %}
name = {{ git_config_user }}
{% endif %}
{% if git_config_email is defined %}
email = {{ git_config_email }}
{% endif %}- name: "Copy secret file"
copy:
src: "secret_data.txt"
dest: ~/secret_data.txt
mode: "0600"$ANSIBLE_VAULT;1.1;AES256
36643862643964363163333161643539653566386330666363323531306239393830633438373132
6366366637663132376463333763383234306262626233320a656538336633653936303236643038
65633861346437346661346464353536663063646237333931313537383966643033326131623637
3265386338396337350a353066343734383865376236376566363636303864313264643364376663
65393931343435306133386564373966613836353738383735373365626566633464ansible-vault create secret_data.txt
$ ansible-vault view secret_data.txt
Vault password:
Hello DevoxxFR ! :)
$ ansible-playbook playbooks/demo/main.yaml --ask-vault-pass├── demo
│ ├── main.yaml
└── work
└── main.yaml
- name: Display battery percentage
dconf:
key: "/org/gnome/desktop/interface/show-battery-percentage"
value: "true"
state: present
Windows (regedit) : win_regedit_module
Objectif | État |
Gérer mes fichiers de configuration | ✅ |
Gérer les logiciels installés | ✅ |
Versionnable | ✅ |
Facilement maintenable | ✅ |
Gérer mon poste de travail pro et perso | ✅ |
Gestion de secrets | ✅ |