JamfSync
ファイルフォルダー、Jamf Pro ファイル共有配布ポイント、Jamf Pro JDCS2 配布ポイント間でファイルを転送し、Jamf Pro サーバー上のパッケージを更新するためのユーティリティ。
説明書
Jamf Sync の実行に関するヘルプについては、JamfSync/Resources/Jamf Sync User Guide.pdf を参照するか、「Jamf Sync.app」の実行中に、Help / Jamf Sync User Guide をクリックしてください。
特徴
- 複数の Jamf Pro サーバーを処理し、テストサーバーから運用サーバーへ、またはその逆にパッケージを移動できます。
- クラウド DP、ファイル共有 DP、またはローカル ファイル フォルダー間でファイルをコピーできます。
- オプションで、ソース DP にないファイルを宛先 DP から削除できます。
- 必要に応じて、ソース DP にない Jamf Pro サーバー上のパッケージを削除できます。
- ローカル ファイル フォルダーを配布ポイントとして扱うことができ、複数のパッケージのアップロードとダウンロードが可能になります。
- パッケージのチェックサムの自動作成を処理します。
- コマンド ライン パラメータを使用すると、スクリプトの同期が可能になります。
説明
設定
- Jamf Pro サーバーおよび/またはフォルダを追加します。
- フォルダーは配布ポイントとして扱われるため、他の配布ポイントまたはフォルダー間の同期が可能になります。
- [閉じる] をクリックすると、変更が行われた場合は、各 Jamf Pro サーバに接続して配布ポイントを取得し、それを使用してソースと宛先の選択リストを設定します。
Jamf Pro サーバーの追加
- ユーザは、標準認証と OAuth (API ロールとクライアント) のどちらが使用されるかに応じて、Jamf Pro Server URL と、ユーザ ID とパスワード、またはクライアント ID とクライアント シークレットのいずれかを指定できます。
- 「テスト」ボタンを押して、その設定で Jamf Pro サーバーにアクセスできることを確認できます。
- これにより、クラウド DP サーバーと、Jamf Pro Server にあるすべてのファイル共有 DP が自動的に追加されます。
- 設定はローカルに保存されます。 Jamf Pro およびファイル共有配布ポイントの認証情報はキーチェーンに安全に保存されます。
ローカルフォルダーの追加
- ローカル フォルダーを追加できます。これは、ソースまたは宛先として使用するオプションとしてユーザーに表示されます。フォルダーは配布ポイントとして扱われるため、他の配布ポイントまたはフォルダー間の同期が可能になります。これには、名前とディレクトリの場所が含まれます。名前はデフォルトでディレクトリ名になります。
編集
- 選択されている項目を編集できます。何も選択されていない場合、編集ボタンは無効になります。
消去
- 選択されている項目を削除できます。削除する前に確認を求められます。何も選択されていない場合、削除ボタンは無効になります。
メインビュー
- [同期] ボタンは、ソースと宛先の両方が選択され、ソースと宛先が異なるまではグレー表示になります。これにより、ソースから宛先まで同期されます。
- [強制同期] チェックボックスをオンにすると、宛先のチェックサムが一致する場合でも、すべてのソース項目がコピーされます。チェックが入っていない場合は、追加または変更された項目のみが同期されます。
- ソースと宛先のピッカーがあり、それぞれにすべてのフォルダーと配布ポイントのリストが含まれています。最初は「--」が選択されており、選択されていないことを示します。
- 選択したソース配布ポイントのファイルのリストが左側に、宛先配布ポイントのファイルのリストが右側に表示されます。
- ソース配布ポイントと宛先配布ポイントの両方が選択されている場合、[同期] 列には同期中に何が起こるかを示すアイコンが表示されます。同期アイコンに色が付いている場合は、同期に参加していることを意味します。白黒だとそうはなりません。同期アイコンには、追加される場合は +、更新される場合はチェック マーク、宛先から削除される場合 ([同期] をクリックした後に選択した場合) には X、両方の場所にファイルがある場合は = が表示されます。送信元と宛先が一致します。
- ソースリスト内の項目を選択できます。選択した項目がある場合、これらのファイルのみが同期され、宛先からファイルは削除されません。ファイルが選択されていない場合、「同期」ボタンを押すと、ソースにない項目を削除するかどうかを尋ねるメッセージが表示されます。 [はい] を選択すると、宛先上にある赤い x 記号が表示されているすべてのファイルが宛先および Jamf Pro のパッケージのリストから削除されます。
コマンドラインパラメータ
注: Jamf Pro サーバーやフォルダを追加するには、最初にパラメータを指定せずに JamfSync を実行します。コマンドライン引数を介して同期するには、Jamf Pro サーバーと配布ポイントのパスワードをキーチェーンに保存する必要があります。
使用法: JamfSync [(-s | --srcDp) ] [(-d | --dstDp) ] [(-f | --forceSync)] [(-r | --removeFilesNotOnSource)] [(-rp | -- RemovePackagesNotOnSource)] [-p | --progress] JamfSync [-h | --help] JamfSync [-v | --バージョン]
-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.
注: 配布ポイント名が複数の Jamf Pro インスタンスで同じである場合は、名前に「dpName:jamfProName」を使用します。
例: "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -srcDp localSourceName -dstDp destinationSourceName --removeFilesNotOnSource --progress "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s "JCDS :ステージ" -d "JCDS:Prod" -r -rp -p "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s localSourceName -d destinationSourceName
ソースコードの概要
ソース コードはいくつかのグループに分かれています。
- モデルには、UI に直接関係しないクラスが含まれています。
- Model グループ内には ViewModels があります。これは UI と密接に関連していますが、特に関連付けられているわけではありません。通常、View Model 内のフィールドが変更されると、関連する UI が自動的に再描画されます。
- リソースには、プログラムで使用される画像やその他のファイルが含まれます。
- UI には、プログラムに表示されるすべてのビューの SwiftUI ファイルと、プログラムの実行が開始される JamfSyncApp が含まれています。
- ユーティリティには、より一般的なタスクを実行するクラスが含まれています。
モデル
Model グループのファイルは、使用されるデータを追跡し、処理するために使用されます。
DataModel:これはほぼすべての状態を表し、データとそのデータに作用する関数が含まれます。これは、コア ストレージからのデータのロードと、配布ポイントのデータのロードを担当します。 UI の制御に使用される変数が公開されています。
SavableItem:保存できるものすべての基本クラス (JamfProInstance および FolderInstance)。これらのアイテムは Core Data に保存されます。パスワードはコア データには保存されませんが、ユーザーが許可する限りキーチェーンに保存されます。 loadDps 関数は特定の子クラスによってオーバーライドされ、そのアイテムに関連付けられたすべての配布ポイントをロードする役割を果たします。 getDps 関数は、そのアイテムに関連付けられた配布ポイントを返します。
- JamfProInstance - これは Jamf Pro インスタンスを表し、必要なデータのロードと Jamf Pro API との通信を担当します。また、Jamf Pro サーバーに関連付けられた配布ポイントのデータを作成してロードします。また、Jamf Pro サーバーからパッケージ情報をロードして保存します。
- FolderInstance - これはコンピューター上のローカル ディレクトリを表します。同期中に配布ポイントのように機能する単一の FolderDp を作成します。
DistributionPoint:すべての DistributionPoint オブジェクト (FileShareDp、Jcds2Dp、および FolderDp) の基本クラスです。 copyFiles 関数は、同期のための主要な関数です。特定の配布ポイント オブジェクトによってオーバーライドされる他の関数を呼び出します。
- FileShareDp - ファイル共有配布ポイントの特定の配布ポイント オブジェクト。
- Jcds2Dp - クラウド配布ポイントの特定の配布ポイント オブジェクト。
- FolderDp - フォルダー配布ポイントの特定の配布ポイント オブジェクト (ローカル ファイル フォルダーを表す)。
その他のオブジェクト:
- DpFile - 単一ファイルの情報を保存します。また、チェックサムを維持および比較する機能も含まれています。
- DpFiles - ファイルのリストを保存します。特定のファイルの検索、ファイルのチェックサムの更新、ファイルの状態を示す各ファイルの状態の更新を支援する機能があります。
- チェックサム - 任意のタイプのチェックサムを表します (通常は SHA-512)
- チェックサム - チェックサム オブジェクトのリストを保持し、チェックサムのコレクションに使用する関数を持つオブジェクト。
モデルの表示
ViewModels グループのファイルは、使用されるデータを追跡し、処理するために使用されます。パブリッシュされた変数により、関連付けられたビューが再描画されます。 * LogViewModel - ログ ビューと画面の下部に表示されるメッセージに使用されます。 * SetupViewModel - セットアップ ビューに使用されます。 * PackageListViewModel - メイン ビューのソース ファイル リストと宛先ファイル リストに使用されます。 * DpFileViewModel - PackageListViewModel 内の各ファイルに使用されます。これには特定の DpFile インスタンスへのポインターがあり、UI 固有のフィールドがあります。 * DpFilesViewModel - DpFileViewModel オブジェクトの配列を持ち、PackageListViewModel オブジェクトにファイルを格納するために使用されます。
UI
UI グループ内のファイルは、ユーザー インターフェイスの SwiftUI ファイルです。 DataModel のデータはビューを制御するために使用されます。 @Published を持つプロパティが変更されると、それらのフィールドを使用するビューが再描画されます。
- AboutView: バージョンやその他の情報を表示するビュー。
- ChecksumView: ファイルに対して計算されたチェックサムを表示し、カーソルを置くと実際のチェックサムを含む文字列を表示します。
- confirmationView: いろいろ確認するためのビュー
- ContentView: すべてを制御するメイン ビュー。
- FileSharePasswordView: ファイル共有パスワードがキーチェーンに保存されていない場合に、パスワードの入力を求めるために使用されます。
- FolderView: フォルダーを追加または編集するときのビュー
- HeaderView: ContentView の上部には、「同期」ボタンと「強制同期」チェックボックスが含まれています。
- JamfProPasswordView: Jamf Pro パスワードがキーチェーンに保存されていない場合に、Jamf Pro パスワードの入力を求めるために使用されます。
- JamfProServerView: Jamf Pro サーバーを追加または編集するときのビュー
- JamfSyncApp: ContentView を保持するメイン アプリ
- LogMessageView: メイン ビューの下部にログ メッセージを簡単に表示するビュー。
- LogView: ログメッセージを表示するビュー
- PackageAnimationView: 同期中のアニメーションを表示するビュー。
- PackageListView: メイン ビューのパッケージ リストのビュー。
- SavableItemListView: セットアップ ビューのリストのビュー
- SetupView: セットアップのメイン ビュー
- SourceDestinationView: ソースおよび宛先ピッカーとファイル リストを含む MainView の部分。
- SynchronizationProgressView: 進行中の同期の進行状況を示す同期ビュー。これにより、 onAppearでの同期も開始されます。
ユーティリティ
ユーティリティ グループのファイルはデータを処理するためのヘルパー クラスであり、UI に直接接続されていません。
- ArgumentParser: コマンド ライン引数がある場合はそれを解析します。
- CloudSessionDelegate: クラウドとの間でファイルが転送されるときに、URLSessionTaskDelegate および URLSessionDownloadDelegatedelegate 関数を処理します。
- FileHash: ファイルのハッシュ値を作成します。これはアクター クラスであるため、競合を避けるために関数は一度に 1 つのファイルのみを処理します。
- FileShare: ファイル共有のマウントとアンマウントを処理します。これは競合を避けるためのアクター クラスです。
- FileShares: 共有をマウントするか、すでにマウントされているファイル共有を返します。そして、マウントされているすべてのファイル共有をアンマウントします。これは競合を避けるためのアクター クラスです。
- KeychainHelper: キーチェーン アイテムの保管と取得を支援します。
- View+NSWindow: ビューを独自のウィンドウとして表示するために使用されます。
- UserSettings: ユーザー設定に書き込まれたデータを読み取り、保存し、追跡します。
JamfSync でサポートされる配布ポイントの種類の拡大
Rackspace、Amazon Web Services、Akamai などの直接クラウド接続用の配布ポイントを追加すると便利です。これらのいずれかをサポートするには、次のことを行う必要があります。
- SavableItem (FolderInstance など) を継承するオブジェクトを作成し、提供する必要がある情報ごとにメンバー変数を追加します。
- DistributionPoint から継承するオブジェクトを作成します。この例については、「Jcds2Dp」を参照してください。 (FolderDp と同様に) これがどのように作成され返されるかを確認するには、FolderItem を参照してください。
- StoredSettings.xcdatamodeld にエンティティを作成し、親を SavableItemData に設定します。
- 新しい項目を作成、編集、削除できるように SetupView を変更します。
- JamfProServerView のような新しいオブジェクトを追加して、ユーザーが必要な情報を入力できるようにします。
- KeychainHelper を使用して認証情報をキーチェーンに保存し、必要に応じてサービス名 (fileShareServiceName など) を追加します。
- 既存の単体テストが合格することを確認し、加えた変更をカバーするために単体テストを追加します。
まだ改善が必要です
- 前述のように、Rackspace、Amazon Web Services、Akamai などの追加のクラウド配布ポイントのサポートを作成します。
- キャンセルアクションを改善する必要があります。 FileShareDps と FolderDps の場合、転送中の現在のファイルはキャンセルされないため、キャンセルにはかなりの時間がかかることがあります。
- リストを任意の列でソートできるようにします。
- リストの列を大きくします。
- 単体テストのカバレッジをさらに追加します (特に Jcds2DpTests を終了し、CommandLineProcessing の単体テストを追加します)。
- よりアクセスしやすくするために改良が加えられる可能性があります。
- ローカライズ可能にして、いくつかのローカライズを追加し始めると良いでしょう。
貢献する
ローカル開発用にセットアップするには、このリポジトリのフォークを作成し、改善している問題またはワークフローにちなんで名付けられたフォーク上にブランチを作成し、ブランチをチェックアウトして、Xcode でフォルダーを開きます。
このリポジトリには、検証済みの署名付きコミットが必要です。コミットの署名について詳しくは、GitHub ドキュメントをご覧ください。
プルリクエスト
プル リクエストを送信する前に、次のことを行ってください。
- 新しいコマンドや機能を追加する場合は、単体テストを含める必要があります。機能を変更する場合は、必要に応じてテストを更新するか、新しいテストを追加します。
- すべての単体テストに合格することを確認します。
- 変更内容を説明するメモを CHANGELOG に追加します。
- プル リクエストが問題に関連している場合は、説明に問題へのリンクを追加します。
貢献者