JamfSync
Dienstprogramm zum Übertragen von Dateien zwischen Dateiordnern, Jamf Pro-Dateifreigabeverteilungspunkten und Jamf Pro JDCS2-Verteilungspunkten sowie zum Aktualisieren der Pakete auf Jamf Pro-Servern.
Anweisungen
Hilfe zum Ausführen von Jamf Sync finden Sie unter JamfSync/Resources/Jamf Sync User Guide.pdf. Wenn Sie „Jamf Sync.app“ ausführen, klicken Sie auf Hilfe/Jamf Sync User Guide.
Merkmale
- Verwaltet mehrere Jamf Pro-Server und ermöglicht das Verschieben von Paketen von einem Testserver auf einen Produktionsserver oder umgekehrt.
- Kann Dateien zwischen einem Cloud-DP, einem Dateifreigabe-DP oder einem lokalen Dateiordner kopieren.
- Kann optional Dateien vom Ziel-DP löschen, die sich nicht auf dem Quell-DP befinden.
- Kann optional Pakete auf dem Jamf Pro-Server löschen, die sich nicht auf dem Quell-DP befinden.
- Kann einen lokalen Dateiordner als Verteilungspunkt behandeln und so das Hoch- und Herunterladen mehrerer Pakete ermöglichen.
- Behandelt die automatische Erstellung von Prüfsummen für Pakete.
- Befehlszeilenparameter ermöglichen Skriptsynchronisierungen.
Beschreibung
Einstellungen
- Fügen Sie Jamf Pro-Server und/oder -Ordner hinzu.
- Ordner werden als Verteilungspunkte behandelt und ermöglichen die Synchronisierung zwischen anderen Verteilungspunkten oder Ordnern.
- Wenn Sie auf „Schließen“ klicken und Änderungen vorgenommen wurden, wird jeder Jamf Pro-Server kontaktiert, um die Verteilungspunkte abzurufen, und diese zum Auffüllen der Quell- und Zielauswahllisten verwenden.
Jamf Pro Server hinzufügen
- Der Benutzer kann die Jamf Pro Server-URL und entweder die Benutzer-ID und das Kennwort oder die Client-ID und das Client-Geheimnis angeben, je nachdem, ob die Standardauthentifizierung oder OAuth (API-Rollen und Clients) verwendet wird.
- Sie können auf die Schaltfläche „Testen“ klicken, um zu überprüfen, ob mit den Einstellungen auf den Jamf Pro-Server zugegriffen werden kann.
- Dadurch werden automatisch ein Cloud-DP-Server und alle Dateifreigabe-DPs hinzugefügt, die sich im Jamf Pro Server befinden.
- Einstellungen werden lokal gespeichert. Die Anmeldeinformationen für Jamf Pro und Dateifreigabe-Verteilungspunkte werden sicher im Schlüsselbund gespeichert.
Lokalen Ordner hinzufügen
- Ermöglicht das Hinzufügen eines lokalen Ordners, der dem Benutzer als Option zur Verwendung als Quelle oder Ziel angezeigt wird. Ordner werden als Verteilungspunkte behandelt und ermöglichen die Synchronisierung zwischen anderen Verteilungspunkten oder Ordnern. Es enthält einen Namen und einen Verzeichnisspeicherort. Als Name wird standardmäßig der Verzeichnisname verwendet.
Bearbeiten
- Ermöglicht die Bearbeitung des ausgewählten Elements. Wenn nichts ausgewählt ist, ist die Schaltfläche „Bearbeiten“ deaktiviert.
Löschen
- Ermöglicht das Löschen aller ausgewählten Elemente. Vor dem Löschen werden Sie zur Bestätigung aufgefordert. Wenn nichts ausgewählt ist, ist die Schaltfläche „Löschen“ deaktiviert.
Hauptansicht
- Die Schaltfläche „Synchronisierung“ bleibt ausgegraut, bis sowohl eine Quelle als auch ein Ziel ausgewählt sind und Quelle und Ziel unterschiedlich sind. Dadurch wird die Synchronisierung von der Quelle zum Ziel durchgeführt.
- Das Kontrollkästchen „Synchronisierung erzwingen“ bewirkt, dass alle Quellelemente kopiert werden, auch wenn die Prüfsumme am Ziel übereinstimmt. Wenn es nicht aktiviert ist, werden nur hinzugefügte oder geänderte Elemente synchronisiert.
- Es gibt eine Auswahl für die Quelle und für das Ziel, die jeweils eine Liste aller Ordner und Verteilungspunkte enthalten. Zunächst ist „--“ ausgewählt, was bedeutet, dass keine Auswahl erfolgt ist.
- Auf der linken Seite befindet sich eine Liste der Dateien auf dem ausgewählten Quellverteilungspunkt und auf der rechten Seite die Liste der Dateien auf dem Zielverteilungspunkt.
- Wenn sowohl ein Quell- als auch ein Zielverteilungspunkt ausgewählt sind, wird in der Spalte „Synchronisierung“ ein Symbol angezeigt, das angibt, was während einer Synchronisierung geschieht. Wenn das Synchronisierungssymbol eine Farbe hat, bedeutet dies, dass es an einer Synchronisierung teilnimmt. Wenn es schwarz-weiß ist, ist es nicht so. Das Synchronisierungssymbol hat ein +, wenn es hinzugefügt wird, ein Häkchen, wenn es aktualisiert wird, ein Quelle und Ziel stimmen überein.
- Elemente in der Quellliste können ausgewählt werden. Wenn ausgewählte Elemente vorhanden sind, werden nur diese Dateien synchronisiert und es werden keine Dateien vom Ziel entfernt. Wenn keine Dateien ausgewählt sind und Sie auf die Schaltfläche „Synchronisieren“ klicken, werden Sie gefragt, ob Elemente gelöscht werden sollen, die sich nicht in der Quelle befinden. Wenn Sie „Ja“ wählen, werden alle Dateien am Ziel, die ein rotes x-Symbol aufweisen, aus dem Ziel und der Liste der Pakete in Jamf Pro entfernt.
Befehlszeilenparameter
HINWEIS: Führen Sie JamfSync zunächst ohne Parameter aus, um Jamf Pro-Server und/oder -Ordner hinzuzufügen. Passwörter für Jamf Pro-Server und Verteilungspunkte müssen im Schlüsselbund gespeichert werden, um über Befehlszeilenargumente synchronisieren zu können.
Verwendung: 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.
HINWEIS: Wenn der Name eines Verteilungspunkts auf mehreren Jamf Pro-Instanzen gleich ist, verwenden Sie „dpName:jamfProName“ als Namen.
Beispiele: „/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 lokaler Quellenname -d Zielquellenname
Übersicht über den Quellcode
Der Quellcode befindet sich in mehreren Gruppen.
- Das Modell enthält Klassen, die nicht direkt mit der Benutzeroberfläche zusammenhängen.
- Innerhalb der Model-Gruppe befindet sich ViewModels, das enger mit der Benutzeroberfläche zusammenhängt, aber nicht speziell an diese gebunden ist. Wenn sich Felder in einem Ansichtsmodell ändern, wird normalerweise die zugehörige Benutzeroberfläche automatisch neu gezeichnet.
- Ressourcen enthalten Bilder und andere Dateien, die vom Programm verwendet werden.
- Die Benutzeroberfläche enthält die SwiftUI-Dateien für alle Ansichten, die im Programm angezeigt werden, sowie JamfSyncApp, wo die Programmausführung beginnt.
- Das Dienstprogramm enthält Klassen, die allgemeinere Aufgaben ausführen.
Modell
Die Dateien in der Modellgruppe werden verwendet, um die verwendeten Daten zu verfolgen und zu verarbeiten.
Datenmodell: Dies stellt den Zustand von fast allem dar und enthält Daten und Funktionen, die auf diese Daten reagieren. Es ist für das Laden von Daten aus dem Kernspeicher und auch für das Laden von Daten für die Verteilungspunkte verantwortlich. Es wurden Variablen veröffentlicht, die zur Steuerung der Benutzeroberfläche verwendet werden.
SavableItem: Die Basisklasse für alles, was gespeichert werden kann (JamfProInstance und FolderInstance). Diese Elemente werden in Core Data gespeichert. Passwörter werden nicht in den Stammdaten gespeichert, sondern im Schlüsselbund, solange der Benutzer dies zulässt. Die Funktion „loadDps“ wird von der jeweiligen untergeordneten Klasse überschrieben und ist für das Laden aller mit diesem Element verknüpften Verteilungspunkte verantwortlich. Die getDps-Funktion gibt die mit diesem Element verknüpften Verteilungspunkte zurück.
- JamfProInstance – Dies stellt eine Jamf Pro-Instanz dar und ist für das Laden der erforderlichen Daten und die Kommunikation mit den Jamf Pro-APIs verantwortlich. Außerdem werden Daten für die mit dem Jamf Pro-Server verknüpften Verteilungspunkte erstellt und geladen. Außerdem werden Paketinformationen vom Jamf Pro-Server geladen und gespeichert.
- FolderInstance – Dies stellt ein lokales Verzeichnis auf dem Computer dar. Es erstellt einen einzelnen FolderDp, der während der Synchronisierung wie ein Verteilungspunkt fungiert.
DistributionPoint: Die Basisklasse für alle DistributionPoint-Objekte (FileShareDp, Jcds2Dp & FolderDp). Die copyFiles-Funktion ist die Hauptfunktion für die Synchronisierung. Es ruft andere Funktionen auf, die von den spezifischen Verteilungspunktobjekten überschrieben werden.
- FileShareDp – Das spezifische Verteilungspunktobjekt für Dateifreigabeverteilungspunkte.
- Jcds2Dp – Das spezifische Verteilungspunktobjekt für Cloud-Verteilungspunkte.
- FolderDp – Das spezifische Verteilungspunktobjekt für Ordnerverteilungspunkte (das einen lokalen Dateiordner darstellt).
Andere Objekte:
- DpFile – Speichert Informationen für eine einzelne Datei. Es enthält auch Funktionen zum Verwalten und Vergleichen seiner Prüfsummen.
- DpFiles – Speichert eine Liste von Dateien. Es verfügt über Funktionen, die dabei helfen, eine bestimmte Datei zu finden, Prüfsummen für die Dateien zu aktualisieren und den Status jeder Datei zu aktualisieren, der den Status der Dateien anzeigt.
- Prüfsumme – Stellt eine Prüfsumme jeglichen Typs dar (normalerweise SHA-512)
- Prüfsummen – Ein Objekt, das eine Liste von Prüfsummenobjekten enthält und über Funktionen zur Verwendung bei der Sammlung von Prüfsummen verfügt.
ViewModels
Die Dateien in der ViewModels-Gruppe werden verwendet, um die verwendeten Daten zu verfolgen und zu verarbeiten. Veröffentlichte Variablen führen dazu, dass die zugeordneten Ansichten neu gezeichnet werden. * LogViewModel – Wird für die Protokollansicht und die Meldung verwendet, die am unteren Bildschirmrand angezeigt wird. * SetupViewModel – Wird für die Setup-Ansicht verwendet. * PackageListViewModel – Wird für die Quell- und Zieldateilisten in der Hauptansicht verwendet. * DpFileViewModel – Wird für jede Datei im PackageListViewModel verwendet. Es verfügt über einen Zeiger auf eine bestimmte DpFile-Instanz und über UI-spezifische Felder. * DpFilesViewModel – Verfügt über ein Array von DpFileViewModel-Objekten und wird zum Speichern der Dateien in einem PackageListViewModel-Objekt verwendet.
Benutzeroberfläche
Die Dateien in der UI-Gruppe sind die SwiftUI-Dateien für die Benutzeroberfläche. Die Daten in DataModel werden zur Steuerung der Ansicht verwendet. Jedes Mal, wenn eine Eigenschaft mit @Published geändert wird, werden alle Ansichten, die diese Felder verwenden, neu gezeichnet.
- AboutView: Eine Ansicht, die die Version und andere Informationen anzeigt.
- ChecksumView: Zeigt an, welche Prüfsummen für eine Datei berechnet wurden, und zeigt eine Zeichenfolge mit den tatsächlichen Prüfsummen an, wenn Sie mit der Maus darüber fahren.
- Bestätigungsansicht: Die Ansicht, die zum Bestätigen verschiedener Dinge verwendet wird
- ContentView: Die Hauptansicht, die alles steuert.
- FileSharePasswordView: Wird zur Eingabe eines Dateifreigabekennworts verwendet, wenn dieses nicht im Schlüsselbund gespeichert wurde.
- FolderView: Die Ansicht beim Hinzufügen oder Bearbeiten eines Ordners
- HeaderView: Der obere Teil der ContentView, der die Schaltfläche „Synchronisierung“ und das Kontrollkästchen „Synchronisierung erzwingen“ enthält.
- JamfProPasswordView: Wird zur Eingabe des Jamf Pro-Passworts verwendet, wenn es nicht im Schlüsselbund gespeichert wurde.
- JamfProServerView: Die Ansicht beim Hinzufügen oder Bearbeiten eines Jamf Pro-Servers
- JamfSyncApp: Haupt-App, die die ContentView enthält
- LogMessageView: Die Ansicht, die unten in der Hauptansicht kurz die Protokollnachricht anzeigt.
- LogView: Die Ansicht, die Protokollmeldungen anzeigt
- PackageAnimationView: Die Ansicht, die die Animation während der Synchronisierung anzeigt.
- PackageListView: Die Ansicht für die Paketliste in der Hauptansicht.
- SavableItemListView: Die Ansicht für die Liste in der Setup-Ansicht
- SetupView: Die Hauptansicht für Setup
- SourceDestinationView: Der Teil der MainView mit den Quell- und Zielauswahlmöglichkeiten und Dateilisten.
- SynchronizationProgressView: Die Synchronisierungsansicht, die den Fortschritt einer laufenden Synchronisierung anzeigt. Dadurch wird auch die Synchronisierung in onAppear gestartet.
Dienstprogramm
Die Dateien in der Gruppe „Dienstprogramm“ sind Hilfsklassen zur Datenverarbeitung und haben keine direkte Verbindung zur Benutzeroberfläche.
- ArgumentParser: Analysiert die Befehlszeilenargumente, falls vorhanden.
- CloudSessionDelegate: Verarbeitet die Funktionen URLSessionTaskDelegate und URLSessionDownloadDelegatedelegate, wenn Dateien in die und aus der Cloud übertragen werden.
- FileHash: Erstellt Datei-Hash-Werte. Da es sich um eine Akteurklasse handelt, verarbeitet eine Funktion jeweils nur eine Datei, um Konflikte zu vermeiden.
- FileShare: Behandelt das Ein- und Aushängen einer Dateifreigabe. Dies ist eine Akteurklasse, um Konflikte zu vermeiden.
- FileShares: Mountet Freigaben oder gibt eine bereits gemountete Dateifreigabe zurück. Und hebt die Bereitstellung aller bereitgestellten Dateifreigaben auf. Dies ist eine Akteurklasse, um Konflikte zu vermeiden.
- KeychainHelper: Hilft beim Aufbewahren und Abrufen von Schlüsselbundgegenständen.
- Ansicht+NSWindow: Wird verwendet, um eine Ansicht als eigenes Fenster anzuzeigen.
- Benutzereinstellungen: Liest, speichert und verfolgt Daten, die in Benutzereinstellungen geschrieben werden.
Erweiterung der von JamfSync unterstützten Arten von Verteilungspunkten
Es wäre praktisch, Verteilungspunkte für direkte Cloud-Verbindungen hinzuzufügen, z. B. für Rackspace, Amazon Web Services und Akamai. Um eines davon zu unterstützen, müsste Folgendes getan werden:
- Erstellen Sie ein Objekt, das SavableItem erbt (z. B. FolderInstance), und fügen Sie Mitgliedsvariablen für jede Information hinzu, die bereitgestellt werden muss.
- Erstellen Sie ein Objekt, das von DistributionPoint erbt. Ein Beispiel hierfür finden Sie unter Jcds2Dp. Sehen Sie sich FolderItem an, um zu sehen, wie dies erstellt und zurückgegeben werden soll (wie FolderDp).
- Erstellen Sie eine Entität in StoredSettings.xcdatamodeld und legen Sie das übergeordnete Element auf SavableItemData fest.
- Ändern Sie SetupView, um das neue Element erstellen, bearbeiten und löschen zu können.
- Fügen Sie ein neues Objekt wie JamfProServerView hinzu, damit der Benutzer alle erforderlichen Informationen eingeben kann.
- Verwenden Sie KeychainHelper, um Anmeldeinformationen im Schlüsselbund zu speichern und bei Bedarf zusätzliche Dienstnamen (z. B. fileShareServiceName) hinzuzufügen.
- Stellen Sie sicher, dass vorhandene Komponententests erfolgreich sind, und fügen Sie zusätzliche Komponententests hinzu, um die von Ihnen vorgenommenen Änderungen abzudecken.
Es sind noch Verbesserungen erforderlich
- Schaffen Sie Unterstützung für zusätzliche Cloud-Verteilungspunkte wie Rackspace, Amazon Web Services, Akamai, wie oben beschrieben.
- Die Abbruchaktion muss verbessert werden. Bei FileShareDps und FolderDps wird die aktuell übertragene Datei nicht abgebrochen, sodass der Abbruch eine ganze Weile dauern kann.
- Machen Sie die Listen nach jeder Spalte sortierbar.
- Passen Sie die Größe der Listenspalten an.
- Fügen Sie mehr Unit-Test-Abdeckung hinzu (beenden Sie insbesondere Jcds2DpTests und fügen Sie Unit-Tests für CommandLineProcessing hinzu).
- Es könnten Verbesserungen vorgenommen werden, um den Zugang zu erleichtern.
- Es wäre gut, es lokalisierbar zu machen und einige Lokalisierungen hinzuzufügen.
Mitwirken
Um die lokale Entwicklung einzurichten, erstellen Sie einen Fork dieses Repos, erstellen Sie einen Zweig auf Ihrem Fork, der nach dem Problem oder Workflow benannt ist, den Sie verbessern, checken Sie Ihren Branch aus und öffnen Sie dann den Ordner in Xcode.
Für dieses Repository sind verifizierte signierte Commits erforderlich. Weitere Informationen zum Signieren von Commits finden Sie in den GitHub-Dokumenten.
Pull-Anfragen
Bevor Sie Ihre Pull-Anfrage einreichen, gehen Sie bitte wie folgt vor:
- Wenn Sie neue Befehle oder Funktionen hinzufügen, sollten diese Komponententests beinhalten. Wenn Sie die Funktionalität ändern, aktualisieren Sie die Tests oder fügen Sie nach Bedarf neue Tests hinzu.
- Überprüfen Sie, ob alle Komponententests erfolgreich sind.
- Fügen Sie dem CHANGELOG eine Notiz hinzu, in der beschrieben wird, was Sie geändert haben.
- Wenn sich Ihr Pull-Request auf ein Problem bezieht, fügen Sie in der Beschreibung einen Link zum Problem hinzu.
Mitwirkende
- Harry Strand
- Leslie Helou