JamfSync
파일 폴더, Jamf Pro 파일 공유 배포 지점 및 Jamf Pro JDCS2 배포 지점 간에 파일을 전송하고 Jamf Pro 서버에서 패키지를 업데이트하기 위한 유틸리티입니다.
지침
Jamf Sync 실행에 대한 도움말은 JamfSync/Resources/Jamf Sync User Guide.pdf를 참조하거나 "Jamf Sync.app"을 실행할 때 도움말/Jamf Sync 사용자 가이드를 클릭하세요.
특징
- 여러 Jamf Pro 서버를 처리하여 패키지를 테스트 서버에서 프로덕션 서버로 또는 그 반대로 이동할 수 있습니다.
- Cloud DP, 파일 공유 DP 또는 로컬 파일 폴더 간에 파일을 복사할 수 있습니다.
- 선택적으로 원본 DP에 없는 대상 DP의 파일을 삭제할 수 있습니다.
- 선택적으로 원본 DP에 없는 Jamf Pro 서버의 패키지를 삭제할 수 있습니다.
- 로컬 파일 폴더를 배포 지점으로 처리하여 여러 패키지를 업로드하고 다운로드할 수 있습니다.
- 패키지에 대한 체크섬 자동 생성을 처리합니다.
- 명령줄 매개변수를 사용하면 스크립팅 동기화가 가능합니다.
설명
설정
- Jamf Pro 서버 및/또는 폴더를 추가합니다.
- 폴더는 배포 지점으로 처리되므로 다른 배포 지점이나 폴더 간의 동기화가 가능합니다.
- 닫기를 클릭하면 변경 사항이 발생한 경우 각 Jamf Pro 서버에 연결하여 배포 지점을 얻고 이를 사용하여 소스 및 대상 선택 목록을 채웁니다.
Jamf Pro 서버 추가
- 사용자는 표준 인증 또는 OAuth(API 역할 및 클라이언트) 사용 여부에 따라 Jamf Pro 서버 URL과 사용자 ID 및 비밀번호 또는 클라이언트 ID 및 클라이언트 비밀번호를 제공할 수 있습니다.
- 설정을 통해 Jamf Pro 서버에 액세스할 수 있는지 확인하기 위해 "테스트" 버튼을 누를 수 있습니다.
- 이렇게 하면 클라우드 DP 서버와 Jamf Pro 서버에 있는 모든 파일 공유 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 대상소스 이름
소스 코드 개요
소스 코드는 여러 그룹에 있습니다.
- 모델에는 UI와 직접 관련되지 않은 클래스가 포함되어 있습니다.
- Model 그룹 내부에는 UI와 더 밀접하게 관련되어 있지만 구체적으로 연결되어 있지는 않은 ViewModel이 있습니다. 일반적으로 뷰 모델의 필드가 변경되면 관련 UI가 자동으로 다시 그려집니다.
- 리소스에는 프로그램에서 사용하는 이미지와 기타 파일이 포함되어 있습니다.
- UI에는 프로그램에 표시되는 모든 보기에 대한 SwiftUI 파일과 프로그램 실행이 시작되는 JamfSyncApp이 포함되어 있습니다.
- 유틸리티에는 보다 일반적인 작업을 수행하는 클래스가 포함되어 있습니다.
모델
모델 그룹의 파일은 사용되는 데이터를 추적하고 처리하는 데 사용됩니다.
DataModel: 거의 모든 것의 상태를 나타내며 해당 데이터에 대해 작동하는 데이터와 함수를 포함합니다. 핵심 저장소에서 데이터를 로드하고 배포 지점에 대한 데이터를 로드하는 역할도 담당합니다. UI를 제어하는 데 사용되는 변수를 게시했습니다.
SavableItem: 저장할 수 있는 모든 것(JamfProInstance 및 FolderInstance)에 대한 기본 클래스입니다. 이러한 항목은 핵심 데이터에 저장됩니다. 비밀번호는 핵심 데이터에 저장되지 않고 대신 사용자가 허용하는 한 키체인에 저장됩니다. 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 암호가 키체인에 저장되지 않은 경우 프롬프트를 표시하는 데 사용됩니다.
- JamfProServerView: Jamf Pro 서버를 추가하거나 편집할 때의 보기
- JamfSyncApp: ContentView를 보유하는 기본 앱
- LogMessageView: 메인 뷰 하단에 로그 메시지를 간략하게 보여주는 뷰입니다.
- LogView: 로그 메시지를 보여주는 뷰
- PackageAnimationView: 동기화 중에 애니메이션을 표시하는 보기입니다.
- PackageListView: 기본 보기의 패키지 목록에 대한 보기입니다.
- SavableItemListView: 설정 보기의 목록에 대한 보기입니다.
- SetupView: 설치를 위한 기본 보기
- SourceDestinationView: 소스 및 대상 선택기와 파일 목록이 있는 MainView의 일부입니다.
- SynchronizationProgressView: 진행 중인 동기화의 진행 상황을 표시하는 동기화 보기입니다. 이는 또한 onAppear 에서 동기화를 시작합니다.
공익사업
유틸리티 그룹의 파일은 데이터 처리를 위한 도우미 클래스이며 UI에 직접 연결되지 않습니다.
- ArgumentParser: 명령줄 인수가 있는 경우 구문 분석합니다.
- CloudSessionDelegate: 파일이 클라우드와 주고받을 때 URLSessionTaskDelegate 및 URLSessionDownloadDelegatedelegate 기능을 처리합니다.
- FileHash: 파일 해시 값을 생성합니다. 이는 행위자 클래스이므로 충돌을 방지하기 위해 함수는 한 번에 하나의 파일만 처리합니다.
- FileShare: 파일 공유 마운트 및 마운트 해제를 처리합니다. 충돌을 피하기 위한 액터 클래스입니다.
- FileShares: 공유를 마운트하거나 이미 마운트된 파일 공유를 반환합니다. 그리고 마운트된 모든 파일 공유를 마운트 해제합니다. 충돌을 피하기 위한 액터 클래스입니다.
- KeychainHelper: 키체인 항목의 저장 및 검색을 지원합니다.
- View+NSWindow: 뷰를 자체 창으로 표시하는 데 사용됩니다.
- UserSettings: 사용자 설정에 기록된 데이터를 읽고 저장하고 추적합니다.
JamfSync에서 지원하는 배포 지점 유형 확장
Rackspace, Amazon Web Services, Akamai와 같은 직접 클라우드 연결을 위한 배포 지점을 추가하는 것이 편리할 것입니다. 다음 중 하나를 지원하려면 다음을 수행해야 합니다.
- FolderInstance와 같은 SavableItem을 상속하는 개체를 만들고 제공해야 할 각 정보에 대해 멤버 변수를 추가합니다.
- DistributionPoint에서 상속되는 개체를 만듭니다. 이에 대한 예는 Jcds2Dp를 참조하세요. 이것이 어떻게 생성되고 반환되어야 하는지 보려면 FolderItem을 참조하세요(FolderDp와 마찬가지로).
- StoredSettings.xcdatamodeld에 엔터티를 생성하고 상위 항목을 SavableItemData로 설정합니다.
- 새 항목을 생성, 편집 및 삭제할 수 있도록 SetupView를 수정합니다.
- 사용자가 필요한 정보를 입력할 수 있도록 JamfProServerView와 같은 새 개체를 추가합니다.
- KeychainHelper를 사용하여 자격 증명을 키체인에 저장하고 필요한 경우 추가 서비스 이름(예: fileShareServiceName)을 추가합니다.
- 기존 단위 테스트를 통과했는지 확인하고 추가 단위 테스트를 추가하여 변경 사항을 적용하세요.
아직 개선이 필요함
- 위에서 설명한 대로 Rackspace, Amazon Web Services, Akamai와 같은 추가 클라우드 배포 지점에 대한 지원을 만듭니다.
- 취소 작업을 개선해야 합니다. FileShareDps 및 FolderDps의 경우 현재 전송 중인 파일을 취소하지 않으므로 취소하는 데 시간이 꽤 걸릴 수 있습니다.
- 모든 열을 기준으로 목록을 정렬할 수 있도록 만듭니다.
- 목록 열을 크기 조정 가능하게 만듭니다.
- 더 많은 단위 테스트 적용 범위를 추가합니다(특히 Jcds2DpTests를 완료하고 CommandLineProcessing에 대한 단위 테스트를 추가합니다).
- 더 쉽게 접근할 수 있도록 개선이 이루어질 수 있습니다.
- 현지화 가능하게 만들고 일부 현지화를 추가하는 것이 좋을 것입니다.
기여
로컬 개발을 설정하려면 이 저장소의 포크를 만들고 개선 중인 문제 또는 워크플로의 이름을 딴 분기를 만들고 분기를 체크아웃한 다음 Xcode에서 폴더를 엽니다.
이 저장소에는 확인되고 서명된 커밋이 필요합니다. GitHub Docs에서 커밋 서명에 대해 자세히 알아볼 수 있습니다.
풀 요청
풀 요청을 제출하기 전에 다음을 수행하십시오.
- 새로운 명령이나 기능을 추가하는 경우 단위 테스트를 포함해야 합니다. 기능을 변경하는 경우 필요에 따라 테스트를 업데이트하거나 새 테스트를 추가하십시오.
- 모든 단위 테스트가 통과되었는지 확인합니다.
- 변경한 내용을 설명하는 메모를 CHANGELOG에 추가합니다.
- 풀 요청이 문제와 관련된 경우 설명에 문제에 대한 링크를 추가하세요.
기여자