JamfSync
Utilitaire pour transférer des fichiers entre des dossiers de fichiers, des points de distribution de partage de fichiers Jamf Pro et des points de distribution Jamf Pro JDCS2 et mettre à jour les packages sur les serveurs Jamf Pro.
Instructions
Consultez JamfSync/Resources/Jamf Sync User Guide.pdf pour obtenir de l’aide sur l’exécution de Jamf Sync, ou lors de l’exécution de « Jamf Sync.app », cliquez sur Aide / Jamf Sync User Guide.
Caractéristiques
- Gère plusieurs serveurs Jamf Pro, permettant de déplacer des packages d'un serveur de test vers un serveur de production ou vice versa.
- Peut copier des fichiers entre un Cloud DP, un partage de fichiers DP ou un dossier de fichiers local.
- Peut éventuellement supprimer des fichiers du DP de destination qui ne se trouvent pas sur le DP source.
- Peut éventuellement supprimer des packages sur le serveur Jamf Pro qui ne se trouvent pas sur le DP source.
- Peut traiter un dossier de fichiers local comme un point de distribution, permettant le téléchargement et le téléchargement de plusieurs packages.
- Gère la création automatique de sommes de contrôle pour les packages.
- Les paramètres de ligne de commande permettent les synchronisations de scripts.
Description
Paramètres
- Ajoutez des serveurs et/ou des dossiers Jamf Pro.
- Les dossiers sont traités comme des points de distribution, permettant la synchronisation entre d'autres points de distribution ou dossiers.
- Lorsque vous cliquez sur Fermer, si des modifications ont été apportées, il contactera chaque serveur Jamf Pro pour obtenir les points de distribution et les utilisera pour remplir les listes de sélection de source et de destination.
Ajouter le serveur Jamf Pro
- L'utilisateur peut fournir l'URL du serveur Jamf Pro ainsi que l'identifiant utilisateur et le mot de passe ou l'identifiant client et le secret client, selon que l'authentification standard ou OAuth (rôles API et clients) est utilisé.
- Peut appuyer sur un bouton « Test » afin de vérifier que le serveur Jamf Pro est accessible avec les paramètres.
- Cela ajoutera automatiquement un serveur Cloud DP et tous les DP de partage de fichiers qui se trouvent dans le serveur Jamf Pro.
- Les paramètres sont stockés localement. Les informations d’identification de Jamf Pro et des points de distribution de partage de fichiers seront stockées en toute sécurité dans le trousseau.
Ajouter un dossier local
- Permet d'ajouter un dossier local, qui sera présenté à l'utilisateur comme une option à utiliser comme source ou destination. Les dossiers sont traités comme des points de distribution, permettant la synchronisation entre d'autres points de distribution ou dossiers. Il contiendra un nom et un emplacement de répertoire. Le nom sera par défaut le nom du répertoire.
Modifier
- Vous permet de modifier n'importe quel élément sélectionné. Si rien n'est sélectionné, le bouton d'édition est désactivé.
Supprimer
- Vous permet de supprimer tout élément sélectionné. Il vous demandera une confirmation avant de supprimer. Si rien n'est sélectionné, le bouton Supprimer est désactivé.
Vue principale
- Le bouton Synchronisation sera grisé jusqu'à ce qu'une source et une destination soient sélectionnées et que la source et la destination soient différentes. Cela synchronisera de la source vers la destination.
- La case à cocher Forcer la synchronisation entraînera la copie de tous les éléments source même si la somme de contrôle sur la destination correspond. Lorsqu'elle n'est pas cochée, seuls les éléments ajoutés ou modifiés seront synchronisés.
- Il existe un sélecteur pour la source et pour la destination, chacun contenant une liste de tous les dossiers et points de distribution. Initialement, "--" est sélectionné, ce qui indique qu'il n'y a pas de sélection.
- Une liste de fichiers sur le point de distribution source sélectionné se trouve à gauche et la liste des fichiers sur le point de distribution de destination se trouve à droite.
- Lorsqu'un point de distribution source et un point de distribution de destination sont sélectionnés, la colonne Sync affichera une icône indiquant ce qui se passera lors d'une synchronisation. Lorsque l'icône Sync a une couleur, cela signifie qu'elle participera à une synchronisation. Si c'est noir et blanc, ce ne sera pas le cas. L'icône de synchronisation aura un + s'il sera ajouté, une coche s'il sera mis à jour, un X s'il sera supprimé de la destination (s'il le souhaite après avoir cliqué sur Synchroniser) et un = si le fichier sur les deux correspondance source-destination.
- Les éléments de la liste source peuvent être sélectionnés. S'il y a des éléments sélectionnés, seuls ces fichiers seront synchronisés et aucun fichier ne sera supprimé de la destination. Si aucun fichier n'est sélectionné, lorsque vous appuyez sur le bouton Synchroniser, vous serez invité à indiquer si vous souhaitez supprimer les éléments qui ne figurent pas sur la source. Si vous choisissez Oui, tous les fichiers de la destination qui affichent un symbole x rouge seront supprimés de la destination et de la liste des packages dans Jamf Pro.
Paramètres de ligne de commande
REMARQUE : Exécutez d’abord JamfSync sans paramètres pour ajouter des serveurs et/ou des dossiers Jamf Pro. Les mots de passe des serveurs Jamf Pro et des points de distribution doivent être stockés dans le trousseau afin de pouvoir être synchronisés via des arguments de ligne de commande.
Utilisation : JamfSync [(-s | --srcDp) ] [(-d | --dstDp) ] [(-f | --forceSync)] [(-r | --removeFilesNotOnSource)] [(-rp | -- RemovePackagesNotOnSource)] [-p | --progress] JamfSync [-h | --help] JamfSync [-v | --version]
-s --srcDp: The name of the source distribution point or folder.
-d --dstDp: The name of the destination distribution point or folder.
-f --forceSync: Force synchronization of all files even if they appear to match on both the source and destination.
-r --removeFilesNotOnSource: Delete files on the destination that are not on the source. No delete is done if ommitted.
-rp --removePackagesNotOnSource: Delete packages on the destination's Jamf Pro instance that are not on the source. No delete is done if ommitted.
-p --progress: Show the progress of files being copied.
-v --version: Display the version number and build number.
-h --help: Shows this help text.
REMARQUE : Si le nom d’un point de distribution est le même sur plusieurs instances Jamf Pro, utilisez « dpName:jamfProName » pour le nom.
Exemples : "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -srcDp localSourceName -dstDp destinationSourceName --removeFilesNotOnSource --progress "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s "JCDS :Stage" -d "JCDS:Prod" -r -rp -p "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s localSourceName -d destinationSourceName
Présentation du code source
Le code source est réparti en plusieurs groupes.
- Le modèle contient des classes qui ne sont pas directement liées à l'interface utilisateur.
- À l'intérieur du groupe Modèle se trouve ViewModels, qui est plus étroitement lié à l'interface utilisateur mais qui n'y est pas spécifiquement lié. Habituellement, lorsque les champs d'un modèle de vue changent, l'interface utilisateur associée est automatiquement redessinée.
- Les ressources contiennent des images et d'autres fichiers utilisés par le programme.
- L'interface utilisateur contient les fichiers SwiftUI pour toutes les vues qui apparaissent dans le programme, ainsi que JamfSyncApp, où commence l'exécution du programme.
- L'utilitaire contient des classes qui effectuent des tâches plus générales.
Modèle
Les fichiers du groupe Modèle sont utilisés pour suivre et traiter les données utilisées.
DataModel : représente l'état de presque tout et contient des données et des fonctions qui agissent sur ces données. Il est responsable du chargement des données à partir du stockage principal ainsi que du chargement des données pour les points de distribution. Il a publié des variables utilisées pour contrôler l'interface utilisateur.
SavableItem : classe de base pour tout ce qui peut être enregistré (JamfProInstance et FolderInstance). Ces éléments sont stockés dans Core Data. Les mots de passe ne sont pas stockés dans les données de base mais sont plutôt stockés dans le trousseau tant que l'utilisateur le permet. La fonction loadDps est remplacée par la classe enfant spécifique et est responsable du chargement de tous les points de distribution associés à cet élément. La fonction getDps renvoie le(s) point(s) de distribution associé(s) à cet élément.
- JamfProInstance - Cela représente une instance Jamf Pro et est responsable du chargement des données nécessaires et de la communication avec les API Jamf Pro. Il crée et charge également des données pour les points de distribution associés au serveur Jamf Pro. Il charge et stocke également les informations sur les packages à partir du serveur Jamf Pro.
- FolderInstance - Ceci représente un répertoire local sur l'ordinateur. Il crée un seul FolderDp qui agit comme un point de distribution lors de la synchronisation.
DistributionPoint : La classe de base pour tous les objets DistributionPoint (FileShareDp, Jcds2Dp & FolderDp) La fonction copyFiles est la fonction principale de synchronisation. Il appelle d'autres fonctions qui sont remplacées par les objets de point de distribution spécifiques.
- FileShareDp : objet de point de distribution spécifique pour les points de distribution de partage de fichiers.
- Jcds2Dp - L'objet de point de distribution spécifique pour les points de distribution Cloud.
- FolderDp - L'objet de point de distribution spécifique pour les points de distribution de dossiers (représentant un dossier de fichiers local).
Autres objets :
- DpFile - Stocke les informations pour un seul fichier. Il contient également des fonctions pour maintenir et comparer ses sommes de contrôle.
- DpFiles - Stocke une liste de fichiers. Il a des fonctions pour aider à trouver un fichier particulier, mettre à jour les sommes de contrôle des fichiers et mettre à jour l'état de chaque fichier qui indique l'état des fichiers.
- Somme de contrôle - Représente une somme de contrôle de n'importe quel type (généralement SHA-512)
- Sommes de contrôle - Un objet qui contient une liste d'objets de somme de contrôle et possède des fonctions à utiliser sur la collection de sommes de contrôle.
Afficher les modèles
Les fichiers du groupe ViewModels sont utilisés pour suivre et traiter les données utilisées. Les variables publiées entraîneront le redessin des vues associées. * LogViewModel - Utilisé pour la vue du journal et le message qui s'affiche en bas de l'écran. * SetupViewModel - Utilisé pour la vue de configuration. * PackageListViewModel - Utilisé pour les listes de fichiers source et de destination sur la vue principale. * DpFileViewModel - Utilisé pour chaque fichier du PackageListViewModel. Il possède un pointeur vers une instance DpFile spécifique et des champs spécifiques à l'interface utilisateur. * DpFilesViewModel - Possède un tableau d'objets DpFileViewModel et est utilisé pour stocker les fichiers dans un objet PackageListViewModel.
Interface utilisateur
Les fichiers du groupe UI sont les fichiers SwiftUI pour l'interface utilisateur. Les données de DataModel sont utilisées pour contrôler la vue. Chaque fois qu'une propriété avec @Published est modifiée, toutes les vues qui utilisent ces champs seront redessinées.
- AboutView : une vue qui affiche la version et d’autres informations.
- ChecksumView : affiche les sommes de contrôle qui ont été calculées pour un fichier et présente une chaîne avec les sommes de contrôle réelles lorsque vous les survolez.
- ConfirmationView : la vue utilisée pour confirmer diverses choses
- ContentView : la vue principale qui pilote tout.
- FileSharePasswordView : utilisé pour demander un mot de passe de partage de fichiers lorsqu'il n'a pas été stocké dans le trousseau.
- FolderView : la vue lors de l'ajout ou de la modification d'un dossier
- HeaderView : partie supérieure de ContentView qui contient le bouton Synchronisation et la case à cocher Forcer la synchronisation.
- JamfProPasswordView : utilisé pour demander le mot de passe Jamf Pro lorsqu’il n’a pas été stocké dans le trousseau.
- JamfProServerView : la vue lors de l'ajout ou de la modification d'un serveur Jamf Pro
- JamfSyncApp : application principale contenant ContentView
- LogMessageView : vue qui affiche brièvement le message du journal en bas de la vue principale.
- LogView : la vue qui affiche les messages du journal
- PackageAnimationView : vue qui affiche l'animation pendant la synchronisation.
- PackageListView : la vue de la liste des packages sur la vue principale.
- SavableItemListView : vue de la liste dans la vue Configuration
- SetupView : la vue principale de l'installation
- SourceDestinationView : partie de MainView contenant les sélecteurs de source et de destination et les listes de fichiers.
- SynchronizationProgressView : vue de synchronisation qui affiche la progression d'une synchronisation en cours. Cela démarre également la synchronisation dans onAppear .
Utilitaire
Les fichiers du groupe Utilitaire sont des classes d'assistance pour le traitement des données et n'ont pas de connexion directe à l'interface utilisateur.
- ArgumentParser : analyse les arguments de la ligne de commande s'il y en a.
- CloudSessionDelegate : gère les fonctions URLSessionTaskDelegate et URLSessionDownloadDelegatedelegate lorsque les fichiers sont transférés vers et depuis le cloud.
- FileHash : crée des valeurs de hachage de fichier. Il s'agit d'une classe d'acteur, donc une fonction ne traitera qu'un seul fichier à la fois afin d'éviter les conflits.
- FileShare : gère le montage et le démontage d'un partage de fichiers. Il s'agit d'une classe d'acteur afin d'éviter les conflits.
- FileShares : monte les partages ou renvoie un partage de fichiers déjà monté. Et démonte tous les partages de fichiers montés. Il s'agit d'une classe d'acteur afin d'éviter les conflits.
- TrousseauHelper : aide au stockage et à la récupération des éléments du trousseau.
- View+NSWindow : utilisé pour afficher une vue comme sa propre fenêtre.
- UserSettings : lit, enregistre et assure le suivi des données écrites dans les paramètres utilisateur.
Extension des types de points de distribution pris en charge par JamfSync
Il serait pratique d'ajouter des points de distribution pour les connexions cloud directes, comme pour Rackspace, Amazon Web Services, Akamai. Les opérations suivantes devraient être effectuées afin de prendre en charge l'un d'entre eux :
- Créez un objet qui hérite de SavableItem (comme FolderInstance) et ajoutez des variables membres pour chaque information qui devra être fournie.
- Créez un objet qui hérite de DistributionPoint. Voir Jcds2Dp pour un exemple. Voir FolderItem pour voir comment cela doit être créé et renvoyé (comme FolderDp).
- Créez une entité dans StoredSettings.xcdatamodeld et définissez le parent sur SavableItemData.
- Modifiez SetupView pour pouvoir créer, modifier et supprimer le nouvel élément.
- Ajoutez un nouvel objet comme JamfProServerView afin que l'utilisateur puisse saisir toutes les informations nécessaires.
- Utilisez TrousseauHelper pour enregistrer les informations d'identification dans le trousseau et ajouter des noms de service supplémentaires (comme fileShareServiceName) si nécessaire.
- Assurez-vous que les tests unitaires existants réussissent et ajoutez des tests unitaires supplémentaires pour couvrir les modifications que vous apportez.
Des améliorations sont encore nécessaires
- Créez la prise en charge de points de distribution cloud supplémentaires tels que Rackspace, Amazon Web Services, Akamai, comme décrit ci-dessus.
- L'action d'annulation doit être améliorée. Pour FileShareDps et FolderDps, il n'annule pas le fichier en cours de transfert, l'annulation peut donc prendre un certain temps.
- Rendre les listes triables par n'importe quelle colonne.
- Rendre les colonnes de la liste importantes.
- Ajoutez plus de couverture de tests unitaires (en particulier terminez Jcds2DpTests et ajoutez des tests unitaires pour CommandLineProcessing).
- Des améliorations pourraient être apportées pour le rendre plus accessible.
- Ce serait bien de le rendre localisable et de commencer à ajouter quelques localisations.
Contribuer
Pour configurer le développement local, créez un fork de ce dépôt, créez une branche sur votre fork nommée d'après le problème ou le flux de travail que vous améliorez, extrayez votre branche, puis ouvrez le dossier dans Xcode.
Ce référentiel nécessite des commits signés vérifiés. Vous pouvez en savoir plus sur la signature des commits sur GitHub Docs.
Demandes de tirage
Avant de soumettre votre pull request, veuillez procéder comme suit :
- Si vous ajoutez de nouvelles commandes ou fonctionnalités, elles doivent inclure des tests unitaires. Si vous modifiez une fonctionnalité, mettez à jour les tests ou ajoutez de nouveaux tests si nécessaire.
- Vérifiez que tous les tests unitaires réussissent.
- Ajoutez une note au CHANGELOG décrivant ce que vous avez modifié.
- Si votre demande d'extraction est liée à un problème, ajoutez un lien vers le problème dans la description.
Contributeurs
- Harry Strand
- Leslie Hélou