Ajouter ansible-bash-config
This commit is contained in:
340
ansible-bash-config
Normal file
340
ansible-bash-config
Normal file
@@ -0,0 +1,340 @@
|
|||||||
|
---
|
||||||
|
- name: Personnalisation du bash pour toutes les VMs de l'inventaire
|
||||||
|
hosts: all
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
|
||||||
|
vars:
|
||||||
|
bash_config_version: "1.0"
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Afficher les informations de l'hôte
|
||||||
|
debug:
|
||||||
|
msg: "Configuration de {{ ansible_hostname }} ({{ ansible_distribution }} {{ ansible_distribution_version }})"
|
||||||
|
|
||||||
|
- name: Créer le répertoire profile.d si nécessaire
|
||||||
|
file:
|
||||||
|
path: /etc/profile.d
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Déployer la configuration bash personnalisée globale
|
||||||
|
copy:
|
||||||
|
dest: /etc/profile.d/custom_bash.sh
|
||||||
|
mode: '0644'
|
||||||
|
content: |
|
||||||
|
# ============================================
|
||||||
|
# Configuration bash personnalisée - v{{ bash_config_version }}
|
||||||
|
# Déployé par Ansible via Semaphore
|
||||||
|
# Hôte: {{ ansible_hostname }}
|
||||||
|
# Date: {{ ansible_date_time.iso8601 }}
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
# Prompt coloré avec utilisateur, hôte et chemin
|
||||||
|
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
|
||||||
|
|
||||||
|
# Pour root, prompt en rouge
|
||||||
|
if [ "$EUID" -eq 0 ]; then
|
||||||
|
export PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# '
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Configuration de l'historique
|
||||||
|
# ============================================
|
||||||
|
export HISTSIZE=10000
|
||||||
|
export HISTFILESIZE=20000
|
||||||
|
export HISTCONTROL=ignoredups:erasedups
|
||||||
|
export HISTTIMEFORMAT="%d/%m/%Y %H:%M:%S "
|
||||||
|
|
||||||
|
# Ajouter immédiatement les commandes à l'historique
|
||||||
|
shopt -s histappend
|
||||||
|
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias de navigation
|
||||||
|
# ============================================
|
||||||
|
alias ..='cd ..'
|
||||||
|
alias ...='cd ../..'
|
||||||
|
alias ....='cd ../../..'
|
||||||
|
alias .....='cd ../../../..'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias ls avec couleurs
|
||||||
|
# ============================================
|
||||||
|
alias ls='ls --color=auto'
|
||||||
|
alias ll='ls -lah --color=auto'
|
||||||
|
alias la='ls -A --color=auto'
|
||||||
|
alias l='ls -CF --color=auto'
|
||||||
|
alias lsd='ls -d */ --color=auto'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias grep avec couleurs
|
||||||
|
# ============================================
|
||||||
|
alias grep='grep --color=auto'
|
||||||
|
alias fgrep='fgrep --color=auto'
|
||||||
|
alias egrep='egrep --color=auto'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias système
|
||||||
|
# ============================================
|
||||||
|
alias df='df -h'
|
||||||
|
alias du='du -h'
|
||||||
|
alias free='free -h'
|
||||||
|
alias top='htop 2>/dev/null || top'
|
||||||
|
alias ps='ps auxf'
|
||||||
|
alias psg='ps aux | grep -v grep | grep -i -e VSZ -e'
|
||||||
|
alias meminfo='free -h -l -t'
|
||||||
|
alias cpuinfo='lscpu'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias réseau
|
||||||
|
# ============================================
|
||||||
|
alias ports='netstat -tulanp'
|
||||||
|
alias listening='netstat -tulanp | grep LISTEN'
|
||||||
|
alias myip='curl -s ifconfig.me && echo'
|
||||||
|
alias ping='ping -c 5'
|
||||||
|
alias pingg='ping google.com -c 5'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias Git (utile avec Gitea)
|
||||||
|
# ============================================
|
||||||
|
alias gs='git status'
|
||||||
|
alias ga='git add'
|
||||||
|
alias gaa='git add --all'
|
||||||
|
alias gc='git commit'
|
||||||
|
alias gcm='git commit -m'
|
||||||
|
alias gp='git push'
|
||||||
|
alias gpl='git pull'
|
||||||
|
alias gl='git log --oneline --graph --decorate --all'
|
||||||
|
alias gd='git diff'
|
||||||
|
alias gb='git branch'
|
||||||
|
alias gco='git checkout'
|
||||||
|
alias gclone='git clone'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias Docker (si disponible)
|
||||||
|
# ============================================
|
||||||
|
alias dps='docker ps'
|
||||||
|
alias dpsa='docker ps -a'
|
||||||
|
alias di='docker images'
|
||||||
|
alias dex='docker exec -it'
|
||||||
|
alias dlog='docker logs -f'
|
||||||
|
alias dstop='docker stop $(docker ps -q)'
|
||||||
|
alias drm='docker rm $(docker ps -aq)'
|
||||||
|
alias drmi='docker rmi $(docker images -q)'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias de sécurité
|
||||||
|
# ============================================
|
||||||
|
alias rm='rm -i'
|
||||||
|
alias cp='cp -i'
|
||||||
|
alias mv='mv -i'
|
||||||
|
alias ln='ln -i'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias Rsync
|
||||||
|
# ============================================
|
||||||
|
alias rsync-copy='rsync -avz --progress'
|
||||||
|
alias rsync-move='rsync -avz --progress --remove-source-files'
|
||||||
|
alias rsync-update='rsync -avzu --progress'
|
||||||
|
alias rsync-sync='rsync -avzu --delete --progress'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias de date et heure
|
||||||
|
# ============================================
|
||||||
|
alias now='date +"%d-%m-%Y %T"'
|
||||||
|
alias nowdate='date +"%d-%m-%Y"'
|
||||||
|
alias nowtime='date +"%T"'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Alias journalctl (systemd logs)
|
||||||
|
# ============================================
|
||||||
|
alias jctl='journalctl -xe'
|
||||||
|
alias jctlf='journalctl -f'
|
||||||
|
alias jctlu='journalctl -u'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Fonctions utiles
|
||||||
|
# ============================================
|
||||||
|
|
||||||
|
# Créer et entrer dans un répertoire
|
||||||
|
mkcd() {
|
||||||
|
mkdir -p "$1" && cd "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extraction intelligente d'archives
|
||||||
|
extract() {
|
||||||
|
if [ -f "$1" ]; then
|
||||||
|
case "$1" in
|
||||||
|
*.tar.bz2) tar xjf "$1" ;;
|
||||||
|
*.tar.gz) tar xzf "$1" ;;
|
||||||
|
*.tar.xz) tar xJf "$1" ;;
|
||||||
|
*.bz2) bunzip2 "$1" ;;
|
||||||
|
*.rar) unrar x "$1" ;;
|
||||||
|
*.gz) gunzip "$1" ;;
|
||||||
|
*.tar) tar xf "$1" ;;
|
||||||
|
*.tbz2) tar xjf "$1" ;;
|
||||||
|
*.tgz) tar xzf "$1" ;;
|
||||||
|
*.zip) unzip "$1" ;;
|
||||||
|
*.Z) uncompress "$1" ;;
|
||||||
|
*.7z) 7z x "$1" ;;
|
||||||
|
*) echo "'$1' ne peut pas être extrait avec cette fonction" ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo "'$1' n'est pas un fichier valide"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Trouver les fichiers les plus volumineux
|
||||||
|
bigfiles() {
|
||||||
|
du -h "$1" 2>/dev/null | sort -rh | head -n ${2:-10}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Backup rapide d'un fichier
|
||||||
|
backup() {
|
||||||
|
cp "$1" "$1.backup-$(date +%Y%m%d-%H%M%S)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Recherche rapide de fichiers
|
||||||
|
ff() {
|
||||||
|
find . -type f -iname "*$1*"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Recherche rapide de répertoires
|
||||||
|
fd() {
|
||||||
|
find . -type d -iname "*$1*"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Variables d'environnement
|
||||||
|
# ============================================
|
||||||
|
export EDITOR=nano
|
||||||
|
export VISUAL=nano
|
||||||
|
export PAGER=less
|
||||||
|
|
||||||
|
# Configuration de less
|
||||||
|
export LESS='-R -M -i'
|
||||||
|
export LESSHISTFILE=-
|
||||||
|
|
||||||
|
# Couleurs pour man pages
|
||||||
|
export LESS_TERMCAP_mb=$'\e[1;32m'
|
||||||
|
export LESS_TERMCAP_md=$'\e[1;32m'
|
||||||
|
export LESS_TERMCAP_me=$'\e[0m'
|
||||||
|
export LESS_TERMCAP_se=$'\e[0m'
|
||||||
|
export LESS_TERMCAP_so=$'\e[01;33m'
|
||||||
|
export LESS_TERMCAP_ue=$'\e[0m'
|
||||||
|
export LESS_TERMCAP_us=$'\e[1;4;31m'
|
||||||
|
|
||||||
|
# ============================================
|
||||||
|
# Message de bienvenue
|
||||||
|
# ============================================
|
||||||
|
echo "🚀 Configuration bash personnalisée chargée (v{{ bash_config_version }})"
|
||||||
|
echo "📝 Pour voir tous les alias: alias"
|
||||||
|
echo "💡 Fonctions disponibles: mkcd, extract, bigfiles, backup, ff, fd"
|
||||||
|
echo "📦 Rsync shortcuts: rsync-copy, rsync-move, rsync-update, rsync-sync"
|
||||||
|
|
||||||
|
- name: Créer le fichier nanorc personnalisé
|
||||||
|
copy:
|
||||||
|
dest: /etc/nanorc
|
||||||
|
mode: '0644'
|
||||||
|
content: |
|
||||||
|
## Configuration Nano personnalisée
|
||||||
|
set autoindent
|
||||||
|
set tabsize 4
|
||||||
|
set tabstospaces
|
||||||
|
set linenumbers
|
||||||
|
set mouse
|
||||||
|
set smooth
|
||||||
|
set softwrap
|
||||||
|
set constantshow
|
||||||
|
set casesensitive
|
||||||
|
|
||||||
|
## Activer la coloration syntaxique
|
||||||
|
include "/usr/share/nano/*.nanorc"
|
||||||
|
|
||||||
|
## Raccourcis personnalisés
|
||||||
|
bind ^S savefile main
|
||||||
|
bind ^Q exit all
|
||||||
|
bind ^F whereis main
|
||||||
|
bind ^Z undo main
|
||||||
|
bind ^Y redo main
|
||||||
|
|
||||||
|
- name: Appliquer les configurations pour les utilisateurs existants
|
||||||
|
block:
|
||||||
|
- name: Récupérer la liste des utilisateurs avec home directory
|
||||||
|
shell: |
|
||||||
|
getent passwd | awk -F: '$3 >= 1000 && $6 ~ /^\/home/ {print $1":"$6}'
|
||||||
|
register: users_list
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Créer un lien symbolique vers la config globale pour chaque utilisateur
|
||||||
|
file:
|
||||||
|
src: /etc/profile.d/custom_bash.sh
|
||||||
|
dest: "{{ item.split(':')[1] }}/.bash_custom"
|
||||||
|
state: link
|
||||||
|
owner: "{{ item.split(':')[0] }}"
|
||||||
|
group: "{{ item.split(':')[0] }}"
|
||||||
|
force: yes
|
||||||
|
loop: "{{ users_list.stdout_lines }}"
|
||||||
|
when: users_list.stdout_lines | length > 0
|
||||||
|
|
||||||
|
- name: Ajouter le sourcing de la config dans .bashrc des utilisateurs
|
||||||
|
lineinfile:
|
||||||
|
path: "{{ item.split(':')[1] }}/.bashrc"
|
||||||
|
line: "[ -f ~/.bash_custom ] && source ~/.bash_custom"
|
||||||
|
state: present
|
||||||
|
create: yes
|
||||||
|
owner: "{{ item.split(':')[0] }}"
|
||||||
|
group: "{{ item.split(':')[0] }}"
|
||||||
|
mode: '0644'
|
||||||
|
loop: "{{ users_list.stdout_lines }}"
|
||||||
|
when: users_list.stdout_lines | length > 0
|
||||||
|
|
||||||
|
- name: Installer des outils utiles (optionnel)
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- nano
|
||||||
|
- htop
|
||||||
|
- curl
|
||||||
|
- wget
|
||||||
|
- git
|
||||||
|
- tree
|
||||||
|
- ncdu
|
||||||
|
- rsync
|
||||||
|
- sudo
|
||||||
|
state: present
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: Vérifier que la configuration est bien chargée
|
||||||
|
shell: |
|
||||||
|
bash -c 'source /etc/profile.d/custom_bash.sh && echo "Configuration OK"'
|
||||||
|
register: config_check
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: Afficher le résultat de la configuration
|
||||||
|
debug:
|
||||||
|
msg:
|
||||||
|
- "✅ Configuration bash déployée avec succès sur {{ ansible_hostname }}"
|
||||||
|
- "📦 Statut: {{ config_check.stdout }}"
|
||||||
|
- "👤 Nombre d'utilisateurs configurés: {{ users_list.stdout_lines | length }}"
|
||||||
|
|
||||||
|
- name: Créer un fichier de rappel des commandes utiles
|
||||||
|
copy:
|
||||||
|
dest: /etc/motd
|
||||||
|
mode: '0644'
|
||||||
|
content: |
|
||||||
|
╔═══════════════════════════════════════════════════════════╗
|
||||||
|
║ Serveur: {{ ansible_hostname }}
|
||||||
|
║ OS: {{ ansible_distribution }} {{ ansible_distribution_version }}
|
||||||
|
║ Configuration bash personnalisée active ✓
|
||||||
|
╚═══════════════════════════════════════════════════════════╝
|
||||||
|
|
||||||
|
📌 Commandes utiles:
|
||||||
|
• ll, la, l : Lister les fichiers
|
||||||
|
• gs, ga, gc : Raccourcis Git
|
||||||
|
• ports : Voir les ports ouverts
|
||||||
|
• myip : Afficher l'IP publique
|
||||||
|
• extract <file> : Extraire une archive
|
||||||
|
• mkcd <dir> : Créer et entrer dans un dossier
|
||||||
|
|
||||||
|
💡 Tapez 'alias' pour voir tous les alias disponibles
|
||||||
Reference in New Issue
Block a user