blog_tech/docs/projets-openclassrooms/p09-gestion-parc-ansible.md
Tellsanguis 3c18e17224 Ajout dates de dernière modification dans la documentation
- Ajouter champ last_update dans le frontmatter de tous les fichiers de documentation
- Dates extraites de l'historique git (en excluant le commit de modification des tags)
- Résout le problème des dates incorrectes sur Cloudflare Pages (shallow clone)
- Projets OpenClassrooms: 22 novembre 2025
- Homelab actuel: 25-30 novembre 2025
- OpenWRT et autres: 2-3 décembre 2025
2025-12-06 14:59:57 +01:00

6.7 KiB

sidebar_position tags last_update
9
ansible
automatisation
glpi
cross-platform
date
2025-11-22

Gestion de parc avec Ansible

Contexte

Automatisation de la gestion du parc informatique de l'entreprise Barzini : déploiement multi-OS avec Ansible, intégration GLPI et mise en place d'une architecture AGDLP.

Objectifs

  • Automatiser les tâches d'administration avec Ansible
  • Gérer un parc hétérogène (Windows/Linux)
  • Intégrer l'inventaire avec GLPI
  • Implémenter une architecture de permissions AGDLP

Technologies utilisées

  • Ansible : automatisation multi-OS
  • GLPI : gestion de parc et inventaire
  • Active Directory : gestion des identités (AGDLP)
  • PowerShell / Bash : scripts complémentaires

Exemples de playbooks

Mise à jour multi-OS

- name: Mise à jour Linux
  hosts: linux
  become: yes
  tasks:
    - name: Update apt cache and upgrade
      apt:
        update_cache: yes
        upgrade: dist

- name: Mise à jour Windows
  hosts: windows
  tasks:
    - name: Install Windows updates
      win_updates:
        category_names:
          - SecurityUpdates
          - CriticalUpdates

Montage partage CIFS

- name: Monter partage Windows
  ansible.posix.mount:
    path: /mnt/share
    src: "//server/share"
    fstype: cifs
    opts: "credentials=/root/.smbcredentials,uid=1000"
    state: mounted

Livrables

Rapport Ansible (PDF)
Playbooks Ansible (ZIP)

Archive contenant l'ensemble des playbooks Ansible du projet.

Télécharger les playbooks Ansible

Script de montage partages Linux (Bash)
#!/bin/bash

# ============================================================================
# Script     : mount_shares.sh
# Version    : 1.0
# Date       : 14/07/2025
# Auteur     : BENE Maël
# Description: Montage automatique des partages CIFS personnels et de groupe
# ============================================================================

DOMAIN="BARZINI.INTERNAL"
SERVER="SRV-AD"
user="$(id -un)"
uid="$(id -u)"
gid="$(id -g)"
groups="$(id -Gn)"

# Liste fixe des partages de groupe disponibles
share_names=("Admins" "Audio" "Commercial" "Direction" "Developpeurs" "Graphisme" "Responsables" "Tests")

# Montage du partage personnel
home_share="//${SERVER}/${user}\$"
home_mount="${user_home}/Dossier_perso"

echo "Montage du dossier personnel : $home_share"
if [ ! -d "$home_mount" ]; then
    mkdir -p "$home_mount"
    chown "$uid:$gid" "$home_mount"
fi

if ! mountpoint -q "$home_mount"; then
    sudo mount -t cifs -o "sec=krb5,cruid=${user},uid=${uid},gid=${gid},nofail" "$home_share" "$home_mount" && \
        echo "Partage personnel monté sur $home_mount" || \
        echo "Échec du montage du partage personnel"
else
    echo "Déjà monté : $home_mount"
fi

# Montage des partages de groupe
for share in "${share_names[@]}"; do
    for grp in $groups; do
        clean_grp=$(echo "$grp" | tr '[:upper:]' '[:lower:]')
        clean_share=$(echo "$share" | tr '[:upper:]' '[:lower:]')
        if [[ "$clean_grp" == *"$clean_share"* ]]; then
            share_path="//${SERVER}/${share}"
            mount_point="${user_home}/${share}"

            echo "Tentative de montage de $share_path"

            if [ ! -d "$mount_point" ]; then
                mkdir -p "$mount_point"
                chown "$uid:$gid" "$mount_point"
            fi

            if ! mountpoint -q "$mount_point"; then
                sudo mount -t cifs -o "sec=krb5,cruid=${user},uid=${uid},gid=${gid},nofail" "$share_path" "$mount_point" && \
                    echo "Partage monté : $mount_point" || \
                    echo "Échec du montage : $share_path"
            else
                echo "Déjà monté : $mount_point"
            fi

            break
        fi
    done
done
Script de montage partages Windows (PowerShell)
# ============================================================================
# Script     : MapDrives.ps1
# Version    : 1.1
# Date       : 29/07/2025
# Auteur     : BENE Maël
# Description: Montage automatique des partages réseau personnels et de groupe
# ============================================================================

# Fonction pour supprimer les accents (normalisation)
function Remove-Accents($text) {
    $normalized = [System.Text.NormalizationForm]::FormD
    $string = [System.String]::new($text).Normalize($normalized)
    $sb = New-Object System.Text.StringBuilder
    foreach ($c in $string.ToCharArray()) {
        if (-not [Globalization.CharUnicodeInfo]::GetUnicodeCategory($c).ToString().StartsWith("NonSpacingMark")) {
            [void]$sb.Append($c)
        }
    }
    return $sb.ToString().Normalize([System.Text.NormalizationForm]::FormC)
}

# Table de correspondance sans accents dans les clés
$groupShareMap = @{
    "G_Admins"       = "Admins"
    "G_Audio"        = "Audio"
    "G_Commercial"   = "Commercial"
    "G_Direction"    = "Direction"
    "G_Developpeurs" = "Developpeurs"
    "G_Graphisme"    = "Graphisme"
    "G_Responsables" = "Responsables"
    "G_Testeurs"     = "Tests"
}

# Récupération de l'utilisateur et des groupes AD
$user = $env:USERNAME
$userGroupsRaw = ([System.Security.Principal.WindowsIdentity]::GetCurrent()).Groups | ForEach-Object {
    $_.Translate([System.Security.Principal.NTAccount]).Value.Split('\')[-1]
}

# Normalisation des noms de groupes
$userGroups = @()
foreach ($grp in $userGroupsRaw) {
    $grpNorm = Remove-Accents $grp
    $userGroups += $grpNorm
}

# Montage du partage personnel
$homeShare = "\\SRV-AD\$user`$"
Write-Host "Tentative de montage : $homeShare"
net use * $homeShare /persistent:no
if ($LASTEXITCODE -eq 0) {
    Write-Host "Partage personnel monté avec succès."
} else {
    Write-Host "Échec du montage du partage personnel."
}

# Montage des partages de groupe
foreach ($group in $userGroups) {
    if ($groupShareMap.ContainsKey($group)) {
        $shareName = $groupShareMap[$group]
        $sharePath = "\\SRV-AD\$shareName"
        Write-Host "Tentative de montage : $sharePath (via groupe $group)"
        net use * $sharePath /persistent:no
        if ($LASTEXITCODE -eq 0) {
            Write-Host "Partage $shareName monté avec succès."
        } else {
            Write-Host "Échec du montage de $shareName."
        }
    }
}

Compétences acquises

  • Automatisation cross-platform avec Ansible
  • Gestion centralisée de parc informatique
  • Architecture de permissions AGDLP
  • Intégration d'outils de gestion (GLPI)
  • Utilisation d'Ansible Vault pour les secrets