Skip to main content

Comment créer et mettre à jour des paquets Medulla en masse à partir d’un fichier CSV ?

S'applique à : Medulla Serveur
Version : Dernière version compatible avec le module pkgs
Environnement : On-Premise / Linux
Catégorie : Administration / Gestion des paquets
Script : medulla_import_csv.py

Le script medulla_import_csv.py permet de créer ou de mettre à jour en masse des paquets logiciels Medulla à partir d'un fichier CSV.

Chaque ligne du CSV correspond à un paquet. Le script utilise la même API que la console d'administration Medulla (mmc-agent, module pkgs).

Medulla prend ainsi en charge :

  • Le rangement des paquets dans les partages appropriés.
  • Leur enregistrement en base de données.
  • La gestion des droits sur les fichiers.
  • Le calcul des empreintes des paquets.
  • La synchronisation vers les relais.

Le script permet notamment :

  • La création de plusieurs paquets en une seule opération.
  • La mise à jour de paquets existants.
  • L'importation de paquets Windows, Linux et macOS.
  • La définition des commandes d'installation et de désinstallation.
  • L'association de fichiers complémentaires.
  • La sélection des organisations et des partages.
  • La vérification complète avant importation.
  • La sauvegarde automatique avant modification.
  • La reprise d'une importation après un échec.
  • La génération d'un rapport détaillé.

Information : Le script ne modifie que les paquets présents dans le CSV. Les autres paquets du serveur ne sont pas modifiés. L'importation ne déclenche aucun déploiement sur les postes et n'active aucune convergence.

1. Quels sont les prérequis ?

Le script doit être exécuté directement sur le serveur Medulla, avec les privilèges root.

Élément Prérequis
Système Serveur Linux hébergeant Medulla.
Python Python 3, sans dépendance Python supplémentaire.
Utilisateur système root.
Compte MMC Compte disposant des droits d'écriture sur les partages concernés.
Service mmc-agent opérationnel et accessible.
Base de données Accès à la base configurée pour le module pkgs.
Sauvegarde mysqldump ou mariadb-dump.
Stockage Espace suffisant pour les paquets, les fichiers temporaires et les sauvegardes.

Le script utilise notamment les emplacements suivants :

Chemin Utilisation
/etc/mmc/agent/config.ini Configuration de mmc-agent.
/etc/mmc/agent/config.ini.local Surcharge locale éventuelle.
/etc/mmc/plugins/pkgs.ini Configuration du module pkgs.
/etc/mmc/plugins/pkgs.ini.local Surcharge locale éventuelle.
/var/lib/pulse2/packages/ Répertoire des paquets Medulla.
/var/lib/pulse2/package-server-tmpdir/ Préparation temporaire des fichiers.
/var/lib/pulse2/sauvegardes_import_csv/ Sauvegardes des importations.

2. Où télécharger le script et le fichier CSV d'exemple ?

Télécharger le script Python

Télécharger medulla_import_csv.py

Depuis le serveur Medulla :

wget https://dl.medulla-tech.io/ma/medulla_import_csv.py

Pour actualiser le script :

wget -N https://dl.medulla-tech.io/ma/medulla_import_csv.py

Télécharger le fichier CSV d'exemple

Un fichier CSV d'exemple est proposé pour faciliter la préparation des paquets.

Télécharger le fichier CSV d'exemple

Il contient trois exemples de paquets :

  • 7-Zip : installation et désinstallation d'un paquet MSI Windows.
  • Notepad++ : utilisation de scripts PowerShell et d'un installateur complémentaire.
  • Agent supervision : installation d'un paquet Linux.

Le fichier CSV d'exemple reste inchangé.

Information : Le nom exact du fichier CSV sur le serveur de téléchargement doit être confirmé. Le script permet également de générer localement le même modèle à partir de ses exemples intégrés.

Générer un modèle CSV

python3 medulla_import_csv.py --modele paquets.csv

Cette commande crée un fichier CSV avec les 21 colonnes reconnues par le script et les trois exemples.

Le script refuse d'écraser un fichier existant.

3. Comment utiliser le script ?

La procédure standard comporte quatre opérations.

Étape 1 : préparer le CSV

Télécharger le fichier d'exemple ou générer un modèle :

python3 medulla_import_csv.py --modele paquets.csv

Modifier les lignes dans un tableur ou un éditeur de texte, en renseignant les paquets à créer ou à mettre à jour.

Étape 2 : consulter les organisations et les partages

sudo python3 medulla_import_csv.py --lister

La commande affiche les partages accessibles au compte MMC, leurs droits, leurs quotas et les organisations associées.

Étape 3 : effectuer une vérification complète

sudo python3 medulla_import_csv.py paquets.csv --verifier

Cette commande effectue tous les contrôles sans modifier les paquets ni le CSV :

  • Format et structure du CSV.
  • Valeurs et fichiers référencés.
  • Organisations et partages Medulla.
  • Droits d'écriture et quotas.
  • UUID et paquets déjà existants.
  • Possibilité de sauvegarder la base de données.
  • Droits d'écriture sur les répertoires.
  • Espace disque disponible.

Important : Dans cette version, --verifier effectue une vérification complète en se connectant à Medulla. Pour vérifier uniquement le CSV et les fichiers sans connexion au serveur, utiliser --verifier --hors-ligne.

Étape 4 : lancer l'importation

sudo python3 medulla_import_csv.py paquets.csv

Le script refait tous les contrôles, présente un résumé et demande confirmation :

Lancer l'import (sauvegarde puis creation / mise a jour) ? [o/N]

Répondre o pour poursuivre.

Si la confirmation est refusée, aucune modification n'est effectuée.

Pour afficher davantage d'informations :

sudo python3 medulla_import_csv.py paquets.csv -v

4. Comment vérifier un CSV sans connexion à Medulla ?

Le mode hors ligne permet de préparer et de vérifier un CSV sur une autre machine.

python3 medulla_import_csv.py paquets.csv --verifier --hors-ligne

Ce mode vérifie :

  • L'encodage et le format CSV.
  • Les colonnes et les valeurs.
  • L'existence et la lisibilité des fichiers.
  • Les extensions et les commandes générées.
  • Les doublons internes au CSV.

Il ne vérifie pas :

  • Les organisations et partages réellement disponibles.
  • Les droits et les quotas Medulla.
  • Les UUID existants sur le serveur.
  • La disponibilité de la sauvegarde.
  • L'espace disque du serveur.

Attention : Une vérification hors ligne réussie ne garantit pas que l'importation sera acceptée sur le serveur. Effectuer une vérification complète sur Medulla avant publication.

5. Comment préparer le fichier CSV ?

Le fichier doit être enregistré en UTF-8.

Les fichiers UTF-8 avec BOM, notamment ceux exportés depuis Excel, sont acceptés.

Les séparateurs reconnus sont :

  • La virgule (,).
  • Le point-virgule (;).

Le séparateur est automatiquement détecté à partir de l'en-tête.

Les colonnes peuvent être placées dans n'importe quel ordre. Seules les colonnes utiles sont nécessaires.

Colonnes obligatoires

Le CSV doit contenir :

  • nom.
  • partage ou organisation.
  • script_installation ou script_desinstallation.

Chaque ligne doit également renseigner un nom, une destination et au moins une opération.

Liste complète des colonnes

Colonne Description Valeur par défaut
nom Nom du paquet (1 024 caractères maximum). Obligatoire
version Version du paquet (50 caractères maximum). 1.0
description Description (255 caractères maximum). Nom du paquet
os win, linux ou mac. win
partage Nom du partage Medulla. —
organisation Organisation dont le partage sera utilisé. —
script_installation Fichier d'installation. —
arguments_installation Arguments supplémentaires. —
timeout_installation Délai maximal en secondes. 3600
script_desinstallation Fichier de désinstallation. —
arguments_desinstallation Arguments supplémentaires. —
timeout_desinstallation Délai maximal en secondes. 3600
fichiers Fichiers complémentaires séparés par |. —
redemarrage 1 pour redémarrer après succès, sinon 0. 0
inventaire_apres noforced, forced ou non. noforced
inventaire_logiciel Logiciel associé à l'inventaire. —
inventaire_version Version du logiciel associé. —
inventaire_editeur Éditeur du logiciel associé. —
licences Nombre de licences, entier positif ou nul. —
editable oui : mode expert ; non : mode manuel. oui
uuid Identifiant du paquet, ajouté après création. Vide

Les champs de version et d'inventaire sont limités à 50 caractères. Le champ licences accepte jusqu'à 20 caractères.

6. Quels paquets contient le fichier d'exemple ?

Le fichier CSV d'exemple contient trois paquets. Ces exemples ne sont pas modifiés.

Exemple 1 : 7-Zip

Paramètre Valeur
Nom 7-Zip
Version 24.08
Description 7-Zip x64 silencieux
Système Windows
Partage global
Installation installeurs/7z2408-x64.msi
Désinstallation installeurs/7z2408-x64.msi
Logiciel inventaire 7-Zip
Version inventaire 24.08
Éditeur Igor Pavlov

Exemple 2 : Notepad++

Paramètre Valeur
Nom Notepad++
Version 8.9.8.1
Système Windows
Partage global
Installation scripts/install_npp.ps1
Arguments -Silent
Désinstallation scripts/uninstall_npp.ps1
Fichier complémentaire installeurs/npp.8.9.8.1.Installer.x64.exe
Timeout installation 1800 secondes

Exemple 3 : Agent supervision

Paramètre Valeur
Nom Agent supervision
Version 2.1
Système Linux
Organisation Client A
Installation scripts/install_agent.sh
Fichier complémentaire installeurs/agent_2.1_amd64.deb
Redémarrage 0
Inventaire après déploiement forced

Information : Les chemins des fichiers d'exemple doivent être adaptés à votre environnement. Les installateurs et scripts référencés doivent être présents et lisibles avant la vérification.

7. Comment fonctionnent les scripts d'installation et de désinstallation ?

Chaque paquet peut comporter deux sections indépendantes :

  • Installation : installe le logiciel ou exécute l'action prévue.
  • Désinstallation : supprime le logiciel ou exécute l'action prévue.

Les deux sections ne s'enchaînent pas automatiquement. L'opération est choisie au moment du déploiement dans Medulla.

Commandes générées selon le système

Système Extension Commande générée
Windows .ps1 powershell.exe -NoProfile -ExecutionPolicy Bypass -File "script.ps1"
Windows .bat / .cmd cmd.exe /c "script.bat"
Windows .vbs cscript.exe //NoLogo "script.vbs"
Windows .msi msiexec.exe.
Windows .exe Exécution directe.
Linux / macOS .sh /bin/bash "script.sh"
Linux / macOS .py python3 "script.py"
macOS .pkg installer -pkg "logiciel.pkg" -target /

Cas particulier des MSI

Sans arguments personnalisés, les commandes suivantes sont générées automatiquement.

Installation :

msiexec.exe /i "logiciel.msi" /qn /norestart

Désinstallation :

msiexec.exe /x "logiciel.msi" /qn /norestart

Si des arguments personnalisés sont renseignés, ils sont ajoutés à la commande et les options silencieuses ne sont plus ajoutées automatiquement.

Cas particulier des EXE

Les programmes EXE sont exécutés directement.

Les options d'installation silencieuse doivent être renseignées dans arguments_installation.

Si aucun argument n'est fourni, le script affiche un avertissement : l'installateur peut attendre une intervention utilisateur jusqu'à expiration du timeout.

Cas particulier des PKG macOS

Les fichiers .pkg sont acceptés uniquement pour l'installation.

Pour désinstaller un paquet macOS, il faut fournir un script .sh ou .py.

Codes retour

Un code retour différent de zéro provoque l'échec de l'opération.

Le délai maximal est défini par les colonnes timeout_installation et timeout_desinstallation.

La valeur par défaut est de 3600 secondes.

8. Comment gérer les fichiers complémentaires ?

Les chemins peuvent être absolus ou relatifs au dossier contenant le CSV.

Exemple de chemin relatif :

scripts/install.ps1

Exemple de chemin absolu :

/opt/medulla/installeurs/setup.exe

La colonne fichiers permet d'ajouter plusieurs fichiers complémentaires, séparés par le caractère |.

installeurs/setup.exe|configuration/settings.ini|scripts/postinstall.ps1

Tous les fichiers sont copiés à la racine du paquet.

Le script refuse :

  • Les fichiers inexistants ou illisibles.
  • Les scripts vides.
  • Les extensions incompatibles avec le système cible.
  • Les entrées vides dans une liste de fichiers.
  • Deux fichiers différents portant le même nom.
  • Les fichiers réservés conf.json et xmppdeploy.json.

Un fichier complémentaire vide produit un avertissement, sans bloquer l'importation.

Corrections automatiques des scripts

Le script peut appliquer certaines corrections sur les copies des fichiers envoyées dans Medulla.

  • Linux / macOS : conversion des fins de ligne Windows CRLF en LF pour les fichiers .sh et .py.
  • PowerShell : ajout d'un BOM UTF-8 pour les scripts .ps1 contenant des caractères non ASCII, lorsque le fichier est en UTF-8 sans BOM.

Ces corrections sont appliquées uniquement aux copies utilisées pour le paquet. Les fichiers d'origine ne sont pas modifiés.

Les corrections concernent les scripts de moins de 10 Mo.

9. Comment fonctionnent les organisations et les partages ?

Chaque paquet est enregistré dans un partage Medulla.

Le partage global est destiné aux paquets partagés entre les organisations autorisées.

Un partage propre à une organisation permet de limiter l'accès aux paquets concernés.

Dans le CSV, il est possible d'indiquer :

  • Le nom du partage dans partage.
  • Le nom de l'organisation dans organisation.

Si les deux champs sont renseignés, ils doivent correspondre au même partage.

Utiliser le nom complet d'une organisation

Pour éviter toute ambiguïté :

Entité racine > Revendeur > Client A

Consulter les partages disponibles

sudo python3 medulla_import_csv.py --lister

Exemple de résultat :

PARTAGE                      DROITS         QUOTA  ORGANISATION
Client A                     rw          0.2/1 Go  Entite racine > Client A
Client B                     r           illimite  Entite racine > Client B
global                       rw          illimite  Partage global

Le script refuse notamment :

  • Une organisation ou un partage inconnu.
  • Un partage sans droit d'écriture.
  • Un quota insuffisant.
  • Une organisation ambiguë.
  • Deux partages portant le même nom.
  • Un changement de partage sur un paquet existant.

Le changement de partage doit être effectué dans la console Medulla.

Information : Le script ne crée ni organisation ni partage. Ils doivent exister avant l'importation.

10. Quels contrôles sont effectués avant l'importation ?

Le script effectue six étapes.

Étape Contrôle ou opération En cas d'erreur
1. Format CSV Encodage, séparateur, colonnes, cellules et guillemets. Arrêt sans modification.
2. Contenu Fichiers, valeurs, organisations, droits, quotas, UUID et doublons. Arrêt sans modification.
3. Serveur Sauvegarde possible, droits d'écriture et espace disque. Arrêt sans modification.
4. Confirmation Présentation du résumé et demande d'autorisation. Refus : arrêt sans modification.
5. Sauvegarde Base de données et fichiers des paquets mis à jour. Arrêt sans modification.
6. Importation Création ou mise à jour de chaque paquet. Échec signalé, traitement poursuivi.

Les cinq premières étapes doivent réussir avant toute modification des paquets Medulla.

Contrôles du format

Le script vérifie :

  • L'encodage UTF-8.
  • La cohérence du séparateur.
  • Les colonnes inconnues, absentes ou en double.
  • Les lignes contenant un nombre incorrect de cellules.
  • Les guillemets non fermés.
  • Les retours à la ligne et tabulations dans les cellules.

Les lignes entièrement vides sont ignorées.

Contrôles du contenu

Le script vérifie notamment :

  • Les champs obligatoires.
  • La validité du système cible.
  • Les scripts et fichiers référencés.
  • Les commandes générées.
  • Les délais d'exécution.
  • Les informations d'inventaire.
  • Les valeurs de redémarrage et de licences.
  • Les longueurs maximales des champs.
  • Les doublons de nom, version et système.
  • Les UUID existants.

Contrôles du serveur

Avant l'importation, le script vérifie également :

  • La disponibilité de mysqldump ou mariadb-dump.
  • Les identifiants d'accès à la base.
  • La possibilité d'effectuer une sauvegarde réelle.
  • Les droits d'écriture sur le CSV.
  • Les droits d'écriture sur les répertoires temporaires et de sauvegarde.
  • L'espace disque disponible.

Pour les fichiers des paquets, l'espace estimé comprend deux fois leur taille totale, plus une marge de 200 Mo.

La sauvegarde est également prise en compte dans les besoins d'espace disque.

11. Comment créer ou mettre à jour un paquet existant ?

Créer un nouveau paquet

Pour créer un paquet, laisser la colonne uuid vide.

Medulla attribue un UUID lors de la création.

Le script inscrit immédiatement cet identifiant dans le CSV dès qu'il est obtenu.

Mettre à jour un paquet

Pour mettre à jour un paquet existant :

  1. Conserver son UUID dans le CSV.
  2. Modifier les informations souhaitées.
  3. Mettre à jour les fichiers nécessaires.
  4. Relancer la vérification et l'importation.
sudo python3 medulla_import_csv.py paquets.csv

Le paquet est mis à jour sans duplication.

Ses anciens fichiers sont remplacés par ceux définis dans le CSV.

La date de création et le créateur d'origine sont conservés.

Adopter un paquet déjà présent dans Medulla

Si un paquet de même nom, version, système et partage existe déjà, mais que son UUID n'est pas renseigné dans le CSV, le script refuse normalement l'importation pour éviter un doublon.

Deux solutions sont possibles :

  • Renseigner manuellement l'UUID indiqué par le script.
  • Utiliser l'option --adopter-existants.
sudo python3 medulla_import_csv.py paquets.csv --adopter-existants

Cette option permet de mettre à jour le paquet existant plutôt que d'en créer un nouveau.

Son UUID est inscrit dans le CSV après la sauvegarde.

Attention : L'option --adopter-existants met à jour les paquets correspondants. Vérifier le résumé du lot avant de confirmer l'importation.

12. Comment fonctionne la sauvegarde automatique ?

Avant la première modification, le script crée un dossier de sauvegarde horodaté :

/var/lib/pulse2/sauvegardes_import_csv/AAAAMMJJ_HHMMSS/

Ce dossier contient :

Fichier Description
pkgs.sql.gz Sauvegarde complète de la base pkgs, lorsque celle-ci porte son nom par défaut.
paquets_avant_mise_a_jour.tar.gz Fichiers des paquets existants concernés par les mises à jour.
Copie du CSV État du fichier avant importation.
RESTAURATION.txt Procédure de restauration adaptée au serveur.

L'archive des anciens fichiers est créée uniquement lorsque le lot comporte des mises à jour.

Le nom de l'archive SQL dépend du nom de la base configurée.

Configuration de la base

Les paramètres sont lus dans :

/etc/mmc/plugins/pkgs.ini
/etc/mmc/plugins/pkgs.ini.local

Le script accepte les mots de passe en clair ou au format {base64}.

Le mot de passe est transmis à l'utilitaire de sauvegarde par un fichier temporaire protégé, et non dans la ligne de commande.

Le script vérifie le code retour de l'utilitaire et la présence de la fin du dump.

Si la sauvegarde échoue, l'importation ne démarre pas.

Changer le dossier de sauvegarde

sudo python3 medulla_import_csv.py paquets.csv --dossier-sauvegarde /backup/medulla

Attention : Les sauvegardes ne sont pas supprimées automatiquement. Il est recommandé de prévoir une politique de conservation et de surveiller l'espace disque.

13. Comment restaurer les paquets après une importation ?

Chaque sauvegarde contient un fichier RESTAURATION.txt avec les commandes adaptées à l'environnement.

La procédure consiste à :

  1. Arrêter mmc-agent.
  2. Restaurer la base de données.
  3. Restaurer les anciens fichiers des paquets mis à jour, si l'archive existe.
  4. Redémarrer mmc-agent.

Exemple indicatif pour une base nommée pkgs :

systemctl stop mmc-agent

zcat /var/lib/pulse2/sauvegardes_import_csv/AAAAMMJJ_HHMMSS/pkgs.sql.gz | mysql -u mmc -p

tar -xzf /var/lib/pulse2/sauvegardes_import_csv/AAAAMMJJ_HHMMSS/paquets_avant_mise_a_jour.tar.gz -C /

systemctl start mmc-agent

La commande de restauration des fichiers ne doit être exécutée que si l'archive existe.

Important : La restauration SQL remet l'ensemble de la base pkgs dans son état antérieur. Les modifications effectuées depuis la sauvegarde peuvent être perdues.

Les répertoires des paquets créés pendant l'importation peuvent rester présents sur le disque.

Leurs UUID figurent dans le CSV et le rapport afin de permettre leur identification et leur suppression depuis la console Medulla.

14. Que se passe-t-il si un paquet échoue pendant l'importation ?

Lorsqu'une erreur survient pendant la publication d'un paquet, le script signale l'échec et poursuit le traitement des paquets suivants.

Le rapport indique le résultat de chaque opération.

Si la création a déjà commencé, l'UUID peut avoir été inscrit dans le CSV avant l'échec.

Une nouvelle exécution du même CSV peut alors reprendre le traitement sous forme de mise à jour plutôt que de créer un doublon.

Il est recommandé de :

  1. Consulter le rapport d'importation.
  2. Identifier et corriger la cause de l'erreur.
  3. Vérifier le CSV et les UUID.
  4. Relancer la vérification complète.
  5. Reprendre l'importation.

Attention : Le script ne réalise pas de restauration automatique en cas d'échec pendant la publication. Une opération interrompue peut laisser un paquet partiellement modifié. La sauvegarde permet un retour arrière manuel.

15. Comment consulter le rapport d'importation ?

À la fin du traitement, le script génère un rapport texte dans le même dossier que le CSV.

Pour un fichier nommé paquets.csv, le rapport est :

paquets_rapport.txt

Le rapport indique :

  • La date de l'importation.
  • Le fichier CSV utilisé.
  • Le compte MMC.
  • Le dossier de sauvegarde.
  • Les paquets créés ou mis à jour.
  • Les UUID correspondants.
  • Les erreurs éventuelles.
  • Le bilan global.
Statut Signification
CREE Le paquet a été créé.
MAJ Le paquet existant a été mis à jour.
ECHEC La publication a échoué.

Pour consulter le rapport :

cat paquets_rapport.txt

Les rapports des exécutions suivantes sont ajoutés au même fichier.

16. Comment utiliser le mode verbeux ?

L'option -v ou --verbeux affiche le détail des contrôles et des opérations.

sudo python3 medulla_import_csv.py paquets.csv --verifier -v

Elle permet notamment de consulter :

  • La connexion au service mmc-agent.
  • Les partages accessibles, leurs droits et leurs quotas.
  • Les commandes construites pour chaque paquet.
  • Les résultats des vérifications.
  • Les contrôles de sauvegarde et d'espace disque.
  • Les fichiers copiés.
  • Les appels à l'API Medulla, leurs durées et leurs réponses.

Les mots de passe ne sont pas affichés dans les traces de diagnostic prévues par le script.

17. Quelles sont les options disponibles ?

Option Description
--modele FICHIER Génère un CSV d'exemple.
--lister Liste les organisations et partages accessibles.
--verifier Effectue tous les contrôles sur le serveur, sans modification.
--verifier --hors-ligne Vérifie le format et les fichiers sans connexion au serveur.
--adopter-existants Met à jour les paquets existants correspondants et inscrit leurs UUID dans le CSV.
--oui Supprime la demande de confirmation.
--utilisateur NOM Utilise un compte MMC différent de root.
-v / --verbeux Affiche le détail des opérations.
--dossier-sauvegarde CHEMIN Personnalise le dossier de sauvegarde.
--help Affiche l'aide du script.

Authentification MMC

Le compte MMC utilisé par défaut est root.

Le mot de passe est demandé au lancement.

Pour utiliser un autre compte :

sudo python3 medulla_import_csv.py paquets.csv --utilisateur NOM

Pour une exécution automatisée, le script accepte la variable d'environnement MMC_PASSWORD.

Sécurité : Évitez de placer des mots de passe en clair dans des scripts ou des commandes conservés dans l'historique du shell. Utilisez un mécanisme de gestion des secrets adapté.

18. Quelles sont les erreurs les plus fréquentes ?

Message Cause probable Solution
fichier introuvable Fichier absent ou chemin incorrect. Vérifier le chemin indiqué dans le CSV.
fichier vide Script de taille nulle. Fournir un script valide.
extension non geree Extension incompatible avec le système. Utiliser une extension prise en charge.
trop long Valeur dépassant la limite du champ. Réduire la longueur du texte.
deux fichiers differents nommes X Collision entre fichiers. Utiliser des noms distincts.
caractere non pris en charge par Windows Caractère incompatible avec cp1252. Adapter les arguments ou le nom du fichier.
meme nom/version/os Doublon dans le CSV. Corriger les lignes concernées.
existe deja dans le partage Paquet existant sans UUID renseigné. Renseigner l'UUID ou utiliser --adopter-existants.
uuid absent de Medulla Identifiant inconnu. Corriger l'UUID ou vider la cellule pour créer.
partage inconnu Partage inexistant ou inaccessible. Consulter les partages avec --lister.
organisation ambigue Plusieurs organisations portent le même nom court. Utiliser le nom complet.
en lecture seule Compte sans droit d'écriture. Utiliser un compte autorisé.
quota Espace insuffisant sur le partage. Libérer de l'espace ou augmenter le quota.
mysqldump introuvable Utilitaire de sauvegarde absent. Installer le client MariaDB ou MySQL.
acces a la base refuse Identifiants ou droits SQL incorrects. Vérifier la configuration du module pkgs.
espace disque insuffisant Stockage insuffisant. Libérer de l'espace ou changer le dossier de sauvegarde.
mmc-agent injoignable Service indisponible ou problème de connexion. Vérifier mmc-agent.

Pour vérifier le service :

systemctl status mmc-agent

19. Questions fréquentes

Peut-on importer plusieurs centaines de paquets ?

Oui. Le script traite les lignes successivement. La durée dépend du nombre de paquets, de la taille des fichiers et des performances du serveur.

Les logiciels sont-ils automatiquement déployés ?

Non. L'importation crée ou met à jour les paquets. Le déploiement et la convergence sont des opérations distinctes.

Peut-on importer des paquets pour plusieurs organisations ?

Oui. Chaque ligne peut désigner un partage ou une organisation différente, selon les droits du compte MMC.

Peut-on créer un paquet contenant uniquement une désinstallation ?

Oui. Le script accepte un paquet comportant uniquement une section de désinstallation.

Peut-on utiliser Excel ?

Oui. Le fichier doit être enregistré au format CSV UTF-8.

Peut-on relancer plusieurs fois le même CSV ?

Oui. Les UUID permettent de mettre à jour les paquets existants sans les dupliquer.

Peut-on reprendre une importation interrompue ?

Oui, après correction de l'erreur. Les UUID inscrits dans le CSV permettent de reprendre les créations déjà commencées.

Les fichiers d'installation sont-ils téléchargés automatiquement ?

Non. Les fichiers doivent être présents sur le serveur ou sur la machine effectuant une vérification hors ligne.

Peut-on déplacer un paquet vers un autre partage ?

Non. Cette opération doit être effectuée dans la console Medulla.

Peut-on créer des organisations depuis le CSV ?

Non. Les organisations et leurs partages doivent déjà exister.

Peut-on automatiser les importations ?

Oui. L'option --oui supprime la demande de confirmation.

sudo python3 medulla_import_csv.py paquets.csv --oui

Les contrôles et la sauvegarde restent effectués avant la publication.

20. Bonnes pratiques

  • Utiliser le fichier CSV d'exemple fourni avec le script.
  • Conserver les CSV après importation afin de préserver les UUID.
  • Effectuer une vérification complète avec --verifier.
  • Utiliser --lister pour vérifier les partages et les droits.
  • Tester les premières importations sur un petit lot.
  • Utiliser le mode verbeux pour les premiers imports et les diagnostics.
  • Tester les installations et désinstallations sur des postes pilotes.
  • Éviter le partage global pour les paquets réservés à une organisation.
  • Vérifier le résumé avant d'utiliser --adopter-existants.
  • Conserver les sauvegardes nécessaires à un retour arrière.
  • Surveiller l'espace disque occupé par les sauvegardes.
  • Consulter le rapport après chaque importation.

21. Récapitulatif des commandes

Télécharger le script :

wget https://dl.medulla-tech.io/ma/medulla_import_csv.py

Actualiser le script :

wget -N https://dl.medulla-tech.io/ma/medulla_import_csv.py

Afficher l'aide :

python3 medulla_import_csv.py --help

Générer un modèle CSV :

python3 medulla_import_csv.py --modele paquets.csv

Lister les partages :

sudo python3 medulla_import_csv.py --lister

Vérifier hors ligne :

python3 medulla_import_csv.py paquets.csv --verifier --hors-ligne

Vérifier complètement sur le serveur :

sudo python3 medulla_import_csv.py paquets.csv --verifier

Vérifier en mode détaillé :

sudo python3 medulla_import_csv.py paquets.csv --verifier -v

Importer les paquets :

sudo python3 medulla_import_csv.py paquets.csv

Importer en mode détaillé :

sudo python3 medulla_import_csv.py paquets.csv -v

Adopter les paquets existants :

sudo python3 medulla_import_csv.py paquets.csv --adopter-existants

Importer sans confirmation :

sudo python3 medulla_import_csv.py paquets.csv --oui

Personnaliser le dossier de sauvegarde :

sudo python3 medulla_import_csv.py paquets.csv --dossier-sauvegarde /backup/medulla

Consulter le rapport :

cat paquets_rapport.txt

Ressources :
Script Python : medulla_import_csv.py
Fichier CSV d'exemple (nom à confirmer sur le serveur) : exemple_paquets.csv
Répertoire de téléchargement : dl.medulla-tech.io/ma/
Documentation Medulla : docs.medulla-tech.io