JamfSync
Utilidad para transferir archivos entre carpetas de archivos, puntos de distribución de archivos compartidos de Jamf Pro y puntos de distribución JDCS2 de Jamf Pro y actualizar los paquetes en los servidores de Jamf Pro.
Instrucciones
Consulta JamfSync/Resources/Jamf Sync User Guide.pdf para obtener ayuda para ejecutar Jamf Sync, o cuando ejecutes "Jamf Sync.app", haz clic en Ayuda/Guía del usuario de Jamf Sync.
Características
- Maneja múltiples servidores Jamf Pro, lo que permite mover paquetes de un servidor de prueba a un servidor de producción o viceversa.
- Puede copiar archivos entre un Cloud DP, un DP compartido de archivos o una carpeta de archivos local.
- Opcionalmente, puede eliminar archivos del DP de destino que no están en el DP de origen.
- Opcionalmente, puede eliminar paquetes en el servidor Jamf Pro que no están en el DP de origen.
- Puede tratar una carpeta de archivos local como un punto de distribución, permitiendo la carga y descarga de múltiples paquetes.
- Se encarga de crear automáticamente sumas de verificación para paquetes.
- Los parámetros de la línea de comando permiten sincronizaciones de scripts.
Descripción
Ajustes
- Añade servidores y/o carpetas de Jamf Pro.
- Las carpetas se tratan como puntos de distribución, lo que permite la sincronización entre otros puntos de distribución o carpetas.
- Cuando se hace clic en cerrar, si se realizaron cambios, se comunicará con cada servidor de Jamf Pro para obtener los puntos de distribución y los utilizará para completar las listas de selección de origen y destino.
Añadir servidor Jamf Pro
- El usuario puede proporcionar la URL del servidor de Jamf Pro y el ID de usuario y la contraseña o el ID del cliente y el secreto del cliente, dependiendo de si se utiliza la autenticación estándar u OAuth (roles de API y clientes).
- Puede presionar el botón "Probar" para verificar que se puede acceder al servidor Jamf Pro con la configuración.
- Esto agregará automáticamente un servidor DP en la nube y todos los DP de archivos compartidos que se encuentran en Jamf Pro Server.
- La configuración se almacena localmente. Las credenciales de Jamf Pro y los puntos de distribución de archivos compartidos se almacenarán de forma segura en el llavero.
Agregar carpeta local
- Permite agregar una carpeta local, que se presentará al usuario como una opción para usar como origen o destino. Las carpetas se tratan como puntos de distribución, lo que permite la sincronización entre otros puntos o carpetas de distribución. Contendrá un nombre y una ubicación de directorio. El nombre predeterminado será el nombre del directorio.
Editar
- Le permite editar cualquier elemento seleccionado. Si no se selecciona nada, el botón de edición está deshabilitado.
Borrar
- Le permite eliminar cualquier elemento seleccionado. Solicitará confirmación antes de eliminar. Si no se selecciona nada, el botón eliminar está deshabilitado.
Vista principal
- El botón Sincronización aparecerá atenuado hasta que se seleccionen tanto el origen como el destino y el origen y el destino sean diferentes. Esto se sincronizará desde el origen hasta el destino.
- La casilla de verificación Forzar sincronización hará que todos los elementos de origen se copien incluso si la suma de verificación del destino coincide. Cuando no está marcado, solo se sincronizarán los elementos agregados o modificados.
- Hay un selector para el origen y el destino, cada uno de los cuales contiene una lista de todas las carpetas y puntos de distribución. Inicialmente se selecciona "--", lo que indica que no hay selección.
- Una lista de archivos en el punto de distribución de origen seleccionado está a la izquierda y la lista de archivos en el punto de distribución de destino está a la derecha.
- Cuando se seleccionan un punto de distribución de origen y de destino, la columna Sincronización mostrará un icono que indica lo que sucederá durante una sincronización. Cuando el ícono de Sincronización tiene un color, significa que participará en una sincronización. Si es blanco y negro, no lo será. El ícono de sincronización tendrá un + si se agregará, una marca de verificación si se actualizará, una X si se eliminará del destino (si así lo deciden después de hacer clic en Sincronizar) y un = si el archivo en ambos coincidencia de origen y destino.
- Se pueden seleccionar elementos de la lista de fuentes. Si hay elementos seleccionados, solo se sincronizarán estos archivos y no se eliminará ningún archivo del destino. Si no se selecciona ningún archivo, cuando se presiona el botón Sincronizar, se le preguntará si desea eliminar elementos que no están en la fuente. Si eliges Sí, todos los archivos del destino que muestren un símbolo x rojo se eliminarán del destino y de la lista de paquetes en Jamf Pro.
Parámetros de la línea de comando
NOTA: Primero ejecuta JamfSync sin parámetros para agregar servidores y/o carpetas de Jamf Pro. Las contraseñas de los servidores y puntos de distribución de Jamf Pro deben almacenarse en el llavero para poder sincronizarlas mediante argumentos de línea de comando.
Uso: JamfSync [(-s | --srcDp) ] [(-d | --dstDp) ] [(-f | --forceSync)] [(-r | --removeFilesNotOnSource)] [(-rp | -- eliminarPaquetesNotOnSource)] [-p | --progreso] JamfSync [-h | --ayuda] JamfSync [-v | --versión]
-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.
NOTA: Si el nombre de un punto de distribución es el mismo en varias instancias de Jamf Pro, utilice "dpName:jamfProName" como nombre.
Ejemplos: "/Aplicaciones/Jamf Sync.app/Contents/MacOS/Jamf Sync" -srcDp localSourceName -dstDp destinoSourceName --removeFilesNotOnSource --progress "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s "JCDS :Etapa" -d "JCDS:Prod" -r -rp -p "/Aplicaciones/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s nombreFuentelocal -d nombreFuenteDestino
Descripción general del código fuente
El código fuente se encuentra en varios grupos.
- El modelo contiene clases que no están directamente relacionadas con la interfaz de usuario.
- Dentro del grupo Modelo se encuentra ViewModels, que está más estrechamente relacionado con la interfaz de usuario pero no está vinculado específicamente a ella. Por lo general, cuando cambian los campos en un modelo de vista, la interfaz de usuario asociada se volverá a dibujar automáticamente.
- Recursos contiene imágenes y otros archivos que utiliza el programa.
- La interfaz de usuario contiene los archivos SwiftUI para todas las vistas que aparecen en el programa, así como JamfSyncApp, que es donde comienza la ejecución del programa.
- La utilidad contiene clases que realizan tareas más generales.
Modelo
Los archivos del grupo Modelo se utilizan para realizar un seguimiento y procesar los datos que se utilizan.
Modelo de datos: representa el estado de casi todo y contiene datos y funciones que actúan sobre esos datos. Es responsable de cargar datos desde el almacenamiento central y también de cargar datos para los puntos de distribución. Ha publicado variables que se utilizan para controlar la interfaz de usuario.
SavableItem: la clase base para cualquier cosa que se pueda guardar (JamfProInstance y FolderInstance). Estos elementos se almacenan en Core Data. Las contraseñas no se almacenan en los datos centrales, sino que se almacenan en el llavero siempre que el usuario lo permita. La función loadDps es anulada por la clase secundaria específica y es responsable de cargar todos los puntos de distribución asociados con ese artículo. La función getDps devuelve los puntos de distribución asociados con ese artículo.
- JamfProInstance: representa una instancia de Jamf Pro y es responsable de cargar los datos necesarios y comunicarse con las API de Jamf Pro. También crea y carga datos para los puntos de distribución asociados con el servidor Jamf Pro. También carga y almacena información de paquetes desde el servidor Jamf Pro.
- FolderInstance: representa un directorio local en la computadora. Crea un único FolderDp que actúa como un punto de distribución durante la sincronización.
DistributionPoint: la clase base para todos los objetos DistributionPoint (FileShareDp, Jcds2Dp y FolderDp). La función copyFiles es la función principal para la sincronización. Llama a otras funciones que son anuladas por los objetos de punto de distribución específicos.
- FileShareDp: el objeto de punto de distribución específico para los puntos de distribución de archivos compartidos.
- Jcds2Dp: el objeto de punto de distribución específico para los puntos de distribución de la nube.
- FolderDp: el objeto de punto de distribución específico para los puntos de distribución de carpetas (que representa una carpeta de archivos local).
Otros objetos:
- DpFile: almacena información para un solo archivo. También contiene funciones para mantener y comparar sus sumas de verificación.
- DpFiles: almacena una lista de archivos. Tiene funciones para ayudar a encontrar un archivo en particular, actualizar sumas de verificación de los archivos y actualizar el estado de cada archivo que indica el estado de los archivos.
- Suma de comprobación: representa una suma de comprobación de cualquier tipo (normalmente SHA-512).
- Sumas de verificación: un objeto que contiene una lista de objetos de suma de verificación y tiene funciones para usar en la colección de sumas de verificación.
Ver modelos
Los archivos del grupo ViewModels se utilizan para realizar un seguimiento y procesar los datos que se utilizan. Las variables publicadas harán que las vistas asociadas se vuelvan a dibujar. * LogViewModel: se utiliza para la vista de registro y el mensaje que se muestra en la parte inferior de la pantalla. * SetupViewModel: se utiliza para la vista de configuración. * PackageListViewModel: se utiliza para las listas de archivos de origen y destino en la vista principal. * DpFileViewModel: se utiliza para cada archivo en PackageListViewModel. Tiene un puntero a una instancia de DpFile específica y tiene campos específicos de la interfaz de usuario. * DpFilesViewModel: tiene una matriz de objetos DpFileViewModel y se utiliza para almacenar los archivos en un objeto PackageListViewModel.
interfaz de usuario
Los archivos del grupo UI son los archivos SwiftUI para la interfaz de usuario. Los datos en DataModel se utilizan para controlar la vista. Cada vez que se cambia una propiedad con @Published, se volverá a dibujar cualquier vista que use esos campos.
- AboutView: una vista que muestra la versión y otra información.
- ChecksumView: muestra qué sumas de verificación se han calculado para un archivo y presenta una cadena con las sumas de verificación reales cuando se coloca el cursor sobre él.
- ConfirmationView: la vista que se utiliza para confirmar varias cosas.
- ContentView: la vista principal que controla todo.
- FileSharePasswordView: se utiliza para solicitar una contraseña para compartir archivos cuando no se ha almacenado en el llavero.
- FolderView: la vista al agregar o editar una carpeta
- HeaderView: la parte superior de ContentView que contiene el botón Sincronización y la casilla de verificación Forzar sincronización.
- JamfProPasswordView: se utiliza para solicitar la contraseña de Jamf Pro cuando no se ha almacenado en el llavero.
- JamfProServerView: la vista al agregar o editar un servidor Jamf Pro
- JamfSyncApp: aplicación principal que contiene ContentView
- LogMessageView: la vista que muestra brevemente el mensaje de registro en la parte inferior de la vista principal.
- LogView: la vista que muestra los mensajes de registro
- PackageAnimationView: la vista que muestra la animación durante la sincronización.
- PackageListView: la vista de la lista de paquetes en la vista principal.
- SavableItemListView: la vista de la lista en la vista Configuración
- SetupView: la vista principal para la configuración
- SourceDestinationView: la parte de MainView con los selectores de origen y destino y las listas de archivos.
- SynchronizationProgressView: la vista de sincronización que muestra el progreso de una sincronización en curso. Esto también inicia la sincronización en onAppear .
Utilidad
Los archivos del grupo Utilidad son clases auxiliares para procesar datos y no tienen una conexión directa con la interfaz de usuario.
- ArgumentParser: analiza los argumentos de la línea de comando, si los hay.
- CloudSessionDelegate: maneja las funciones URLSessionTaskDelegate y URLSessionDownloadDelegatedelegate cuando los archivos se transfieren hacia y desde la nube.
- FileHash: crea valores hash de archivos. Esta es una clase de actor, por lo que una función solo procesará un archivo a la vez para evitar conflictos.
- FileShare: maneja el montaje y desmontaje de un archivo compartido. Esta es una clase de actor para evitar conflictos.
- FileShares: monta recursos compartidos o devuelve un recurso compartido de archivos ya montado. Y desmonta todos los archivos compartidos montados. Esta es una clase de actor para evitar conflictos.
- KeychainHelper: ayuda con el almacenamiento y recuperación de artículos de llavero.
- Ver+NSWindow: se utiliza para mostrar una vista como su propia ventana.
- UserSettings: lee, guarda y realiza un seguimiento de los datos que se escriben en la configuración del usuario.
Ampliar los tipos de puntos de distribución admitidos por JamfSync
Sería útil agregar puntos de distribución para conexiones directas a la nube, como Rackspace, Amazon Web Services, Akamai. Sería necesario hacer lo siguiente para admitir uno de estos:
- Cree un objeto que herede SavableItem (como FolderInstance) y agregue variables miembro para cada pieza de información que deba proporcionarse.
- Cree un objeto que herede de DistributionPoint. Consulte Jcds2Dp para ver un ejemplo de esto. Consulte FolderItem para ver cómo se debe crear y devolver (como lo es FolderDp).
- Cree una entidad en StoredSettings.xcdatamodeld y establezca el padre en SavableItemData.
- Modifique SetupView para poder crear, editar y eliminar el nuevo elemento.
- Agregue un nuevo objeto como JamfProServerView para que el usuario pueda ingresar la información necesaria.
- Utilice KeychainHelper para guardar las credenciales en el llavero y agregue nombres de servicios adicionales (como fileShareServiceName) si es necesario.
- Asegúrese de que las pruebas unitarias existentes pasen y agregue pruebas unitarias adicionales para cubrir los cambios que realice.
Aún se necesitan mejoras
- Cree soporte para puntos de distribución de nube adicionales como Rackspace, Amazon Web Services, Akamai, como se describe anteriormente.
- Es necesario mejorar la acción de cancelación. Para FileShareDps y FolderDps, no cancela el archivo actual que se está transfiriendo, por lo que la cancelación puede tardar bastante.
- Haga que las listas se puedan ordenar por cualquier columna.
- Haga que las columnas de la lista sean considerables.
- Agregue más cobertura de pruebas unitarias (especialmente finalice Jcds2DpTests y agregue pruebas unitarias para CommandLineProcessing).
- Se podrían hacer mejoras para hacerlo más accesible.
- Sería bueno hacerlo localizable y comenzar a agregar algunas localizaciones.
Contribuyendo
Para configurar el desarrollo local, cree una bifurcación de este repositorio, cree una rama en su bifurcación con el nombre del problema o flujo de trabajo que está mejorando, consulte su rama y luego abra la carpeta en Xcode.
Este repositorio requiere confirmaciones firmadas verificadas. Puede obtener más información sobre cómo firmar confirmaciones en GitHub Docs.
Solicitudes de extracción
Antes de enviar su solicitud de extracción, haga lo siguiente:
- Si agrega nuevos comandos o funciones, deben incluir pruebas unitarias. Si está cambiando la funcionalidad, actualice las pruebas o agregue nuevas pruebas según sea necesario.
- Verifique que todas las pruebas unitarias pasen.
- Agregue una nota al CHANGELOG que describa lo que cambió.
- Si su solicitud de extracción está relacionada con un problema, agregue un enlace al problema en la descripción.
Colaboradores
- Harry Strand
- Leslie Helou