Джамфсинк
Утилита для переноса файлов между файловыми папками, точками распространения файловых ресурсов Jamf Pro и точками распространения Jamf Pro JDCS2, а также обновления пакетов на серверах Jamf Pro.
Инструкции
См. JamfSync/Resources/Jamf Sync User Guide.pdf для получения помощи по запуску Jamf Sync или при запуске «Jamf Sync.app» нажмите «Справка» / «Jamf Sync User Guide».
Функции
- Обслуживает несколько серверов Jamf Pro, позволяя перемещать пакеты с тестового сервера на рабочий сервер и наоборот.
- Можно копировать файлы между Cloud DP, файловым ресурсом DP или локальной папкой файлов.
- При необходимости можно удалить файлы из целевого DP, которых нет в исходном DP.
- При необходимости можно удалить пакеты на сервере Jamf Pro, которых нет на исходном DP.
- Может рассматривать локальную папку с файлами как точку распространения, позволяя загружать и скачивать несколько пакетов.
- Управляет автоматическим созданием контрольных сумм для пакетов.
- Параметры командной строки позволяют синхронизировать сценарии.
Описание
Настройки
- Добавьте серверы и/или папки Jamf Pro.
- Папки рассматриваются как точки распространения, что позволяет синхронизировать их между другими точками распространения или папками.
- Если нажать кнопку «Закрыть», если были внесены изменения, он свяжется с каждым сервером Jamf Pro, чтобы получить точки распространения, и будет использовать их для заполнения списков выбора источника и назначения.
Добавить сервер Jamf Pro
- Пользователь может предоставить URL-адрес сервера Jamf Pro и либо идентификатор пользователя и пароль, либо идентификатор клиента и секрет клиента, в зависимости от того, используется ли стандартная проверка подлинности или OAuth (роли API и клиенты).
- Можно нажать кнопку «Тест», чтобы убедиться, что сервер Jamf Pro доступен с настройками.
- Это автоматически добавит облачный сервер DP и все DP файловых ресурсов, которые находятся на сервере Jamf Pro.
- Настройки хранятся локально. Учетные данные для Jamf Pro и точек распространения файловых ресурсов будут надежно храниться в цепочке ключей.
Добавить локальную папку
- Позволяет добавить локальную папку, которая будет представлена пользователю в качестве варианта использования в качестве источника или места назначения. Папки рассматриваются как точки распространения, что обеспечивает синхронизацию между другими точками распространения или папками. Он будет содержать имя и местоположение каталога. По умолчанию имя будет соответствовать имени каталога.
Редактировать
- Позволяет редактировать любой выбранный элемент. Если ничего не выбрано, кнопка редактирования неактивна.
Удалить
- Позволяет удалить любой выбранный элемент. Перед удалением будет запрошено подтверждение. Если ничего не выбрано, кнопка удаления неактивна.
Главный вид
- Кнопка «Синхронизация» будет неактивна до тех пор, пока не будут выбраны источник и место назначения, а источник и место назначения не станут разными. Это позволит синхронизировать источник с пунктом назначения.
- Флажок «Принудительная синхронизация» приведет к копированию всех исходных элементов, даже если контрольная сумма в месте назначения совпадает. Если этот флажок не установлен, синхронизироваться будут только добавленные или измененные элементы.
- Существует средство выбора источника и места назначения, каждый из которых содержит список всех папок и точек распространения. Первоначально выбирается «--», что означает отсутствие выбора.
- Список файлов в выбранной исходной точке распространения находится слева, а список файлов в целевой точке распространения — справа.
- Если выбраны как исходная, так и целевая точки распространения, в столбце «Синхронизация» отобразится значок, указывающий, что произойдет во время синхронизации. Если значок синхронизации имеет цвет, это означает, что он будет участвовать в синхронизации. Если он черно-белый, то нет. Значок синхронизации будет иметь +, если он будет добавлен, галочку, если он будет обновлен, X, если он будет удален из места назначения (если они захотят это сделать после нажатия кнопки «Синхронизировать») и =, если файл на обоих источник и место назначения совпадают.
- Можно выбирать элементы в списке источников. Если есть выбранные элементы, будут синхронизированы только эти файлы, и никакие файлы не будут удалены из места назначения. Если файлы не выбраны, то при нажатии кнопки Синхронизировать вам будет предложено удалить элементы, которых нет в источнике. Если вы выберете «Да», то все файлы в месте назначения, отмеченные красным символом «x», будут удалены из места назначения и списка пакетов в Jamf Pro.
Параметры командной строки
ПРИМЕЧАНИЕ. Сначала запустите JamfSync без параметров, чтобы добавить серверы и/или папки Jamf Pro. Пароли для серверов 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 targetSourceName --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
Обзор исходного кода
Исходный код расположен в нескольких группах.
- Модель содержит классы, не связанные напрямую с пользовательским интерфейсом.
- Внутри группы «Модель» находятся ViewModels, которые более тесно связаны с пользовательским интерфейсом, но не привязаны к нему конкретно. Обычно при изменении полей в модели представления связанный пользовательский интерфейс автоматически перерисовывается.
- Ресурсы содержат изображения и другие файлы, которые используются программой.
- Пользовательский интерфейс содержит файлы SwiftUI для всех представлений, отображаемых в программе, а также JamfSyncApp, где начинается выполнение программы.
- Утилита содержит классы, выполняющие более общие задачи.
Модель
Файлы в группе «Модель» используются для отслеживания и обработки используемых данных.
DataModel: представляет состояние практически всего и содержит данные и функции, которые действуют на эти данные. Он отвечает за загрузку данных из основного хранилища, а также за загрузку данных для точек распространения. Он опубликовал переменные, которые используются для управления пользовательским интерфейсом.
SavableItem: базовый класс для всего, что можно сохранить (JamfProInstance и FolderInstance). Эти элементы хранятся в Core Data. Пароли не хранятся в основных данных, а хранятся в связке ключей, если это разрешено пользователем. Функция loadDps переопределяется конкретным дочерним классом и отвечает за загрузку всех точек распространения, связанных с этим элементом. Функция getDps возвращает точки распространения, связанные с этим элементом.
- JamfProInstance — представляет экземпляр Jamf Pro и отвечает за загрузку необходимых данных и взаимодействие с API Jamf Pro. Он также создает и загружает данные для точек распространения, связанных с сервером 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 и поля, специфичные для пользовательского интерфейса. * DpFilesViewModel — имеет массив объектов DpFileViewModel и используется для хранения файлов в объекте PackageListViewModel.
пользовательский интерфейс
Файлы в группе 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 .
Утилита
Файлы в группе «Утилиты» представляют собой вспомогательные классы для обработки данных и не имеют прямого подключения к пользовательскому интерфейсу.
- ArgumentParser: анализирует аргументы командной строки, если таковые имеются.
- CloudSessionDelegate: обрабатывает функции URLSessionTaskDelegate и URLSessionDownloadDelegatedelegate при передаче файлов в облако и из облака.
- FileHash: создает хеш-значения файлов. Это класс актера, поэтому функция будет обрабатывать только один файл за раз, чтобы предотвратить конфликты.
- FileShare: управляет подключением и отключением файлового ресурса. Это класс актеров, позволяющий избежать конфликтов.
- FileShares: монтирует общие ресурсы или возвращает уже смонтированный общий файловый ресурс. И отмонтирует все смонтированные файловые ресурсы. Это класс актеров, позволяющий избежать конфликтов.
- KeychainHelper: помогает хранить и извлекать элементы связки ключей.
- View+NSWindow: используется для отображения представления в виде отдельного окна.
- UserSettings: считывает, сохраняет и отслеживает данные, записанные в настройках пользователя.
Расширение типов точек распространения, поддерживаемых JamfSync.
Было бы удобно добавить точки распространения для прямых подключений к облаку, как у Rackspace, Amazon Web Services, Akamai. Для поддержки одного из них необходимо сделать следующее:
- Создайте объект, который наследует SavableItem (например, FolderInstance), и добавьте переменные-члены для каждой части информации, которую необходимо будет предоставить.
- Создайте объект, который наследуется от DistributionPoint. См. пример Jcds2Dp. См. FolderItem, чтобы узнать, как это должно быть создано и возвращено (например, FolderDp).
- Создайте сущность в StoredSettings.xcdatamodeld и установите в качестве родительского объекта SavableItemData.
- Измените SetupView, чтобы иметь возможность создавать, редактировать и удалять новый элемент.
- Добавьте новый объект, например JamfProServerView, чтобы пользователь мог ввести любую необходимую информацию.
- Используйте KeychainHelper, чтобы сохранить учетные данные в связке ключей и при необходимости добавить дополнительные имена служб (например, fileShareServiceName).
- Убедитесь, что существующие модульные тесты пройдены успешно, и добавьте дополнительные модульные тесты, чтобы охватить внесенные вами изменения.
Улучшения еще необходимы
- Создайте поддержку дополнительных облачных точек распространения, таких как Rackspace, Amazon Web Services, Akamai, как описано выше.
- Действие отмены необходимо улучшить. Для FileShareDps и FolderDps он не отменяет текущий передаваемый файл, поэтому отмена может занять довольно много времени.
- Сделайте списки сортируемыми по любому столбцу.
- Сделайте столбцы списка большими.
- Добавьте больше модульных тестов (особенно завершите Jcds2DpTests и добавьте модульные тесты для CommandLineProcessing).
- Можно внести улучшения, чтобы сделать его более доступным.
- Было бы хорошо сделать его локализуемым и начать добавлять некоторые локализации.
Содействие
Чтобы настроить локальную разработку, создайте вилку этого репозитория, создайте ветку в своей ветке, названную в честь проблемы или рабочего процесса, который вы улучшаете, извлеките свою ветку, а затем откройте папку в Xcode.
Этот репозиторий требует проверенных подписанных коммитов. Дополнительную информацию о подписании коммитов можно найти в документации GitHub.
Запросы на вытягивание
Прежде чем отправить запрос на включение, выполните следующие действия:
- Если вы добавляете новые команды или функции, они должны включать модульные тесты. Если вы меняете функциональность, обновите тесты или добавьте новые тесты по мере необходимости.
- Убедитесь, что все модульные тесты пройдены.
- Добавьте в CHANGELOG примечание, описывающее, что вы изменили.
- Если ваш запрос на включение связан с проблемой, добавьте ссылку на проблему в описание.
Авторы