JamfSync
أداة مساعدة لنقل الملفات بين مجلدات الملفات ونقاط توزيع مشاركة ملفات Jamf Pro ونقاط توزيع Jamf Pro JDCS2 وتحديث الحزم على خوادم Jamf Pro.
تعليمات
راجع دليل مستخدم JamfSync/Resources/Jamf Sync.pdf للمساعدة في تشغيل Jamf Sync، أو عند تشغيل "Jamf Sync.app"، انقر فوق "تعليمات" / دليل مستخدم Jamf Sync.
سمات
- يتعامل مع خوادم Jamf Pro المتعددة، مما يسمح بنقل الحزم من خادم اختبار إلى خادم إنتاج أو العكس.
- يمكن نسخ الملفات بين Cloud DP أو مشاركة الملفات DP أو مجلد ملفات محلي.
- يمكن اختياريًا حذف الملفات من DP الوجهة غير الموجودة على DP المصدر.
- يمكن اختياريًا حذف الحزم الموجودة على خادم Jamf Pro غير الموجودة على DP المصدر.
- يمكن التعامل مع مجلد الملفات المحلي كنقطة توزيع، مما يسمح بتحميل وتنزيل حزم متعددة.
- يتعامل تلقائيًا مع إنشاء المجاميع الاختبارية للحزم.
- تسمح معلمات سطر الأوامر بمزامنة البرمجة النصية.
وصف
إعدادات
- أضف خوادم و/أو مجلدات Jamf Pro.
- يتم التعامل مع المجلدات كنقاط توزيع، مما يسمح بالمزامنة بين نقاط التوزيع أو المجلدات الأخرى.
- عند النقر فوق إغلاق، إذا تم إجراء تغييرات، فسوف يتصل بكل خادم Jamf Pro للحصول على نقاط التوزيع وسيستخدمها لملء قوائم تحديد المصدر والوجهة.
أضف خادم Jamf Pro
- يمكن للمستخدم توفير عنوان URL لخادم Jamf Pro وإما معرف المستخدم وكلمة المرور أو معرف العميل وسر العميل، اعتمادًا على ما إذا كان يتم استخدام المصادقة القياسية أو OAuth (أدوار واجهة برمجة التطبيقات وعملاءها).
- يمكن الضغط على زر "اختبار" للتحقق من إمكانية الوصول إلى خادم Jamf Pro من خلال الإعدادات.
- سيؤدي هذا تلقائيًا إلى إضافة خادم DP السحابي وجميع ملفات DPs الموجودة في Jamf Pro Server.
- يتم تخزين الإعدادات محليا. سيتم تخزين بيانات اعتماد Jamf Pro ونقاط توزيع مشاركة الملفات بشكل آمن في سلسلة المفاتيح.
إضافة مجلد محلي
- يسمح بإضافة مجلد محلي، والذي سيتم تقديمه للمستخدم كخيار لاستخدامه كمصدر أو وجهة. يتم التعامل مع المجلدات كنقاط توزيع، مما يسمح بالمزامنة بين نقاط التوزيع أو المجلدات الأخرى. وسوف تحتوي على اسم وموقع الدليل. سيكون الاسم الافتراضي هو اسم الدليل.
يحرر
- يتيح لك تحرير أي عنصر تم تحديده. إذا لم يتم تحديد أي شيء، فسيتم تعطيل زر التحرير.
يمسح
- يتيح لك حذف أي عنصر تم تحديده. وسوف يطلب التأكيد قبل الحذف. إذا لم يتم تحديد أي شيء، فسيتم تعطيل زر الحذف.
العرض الرئيسي
- سيظهر زر المزامنة باللون الرمادي حتى يتم تحديد المصدر والوجهة ويختلف المصدر والوجهة. سيتم مزامنة هذا من المصدر إلى الوجهة.
- سيؤدي مربع الاختيار Force Sync إلى نسخ جميع العناصر المصدر حتى إذا كان المجموع الاختباري الموجود على الوجهة متطابقًا. عندما لا يتم تحديده، ستتم مزامنة العناصر المضافة أو المتغيرة فقط.
- يوجد منتقي للمصدر والوجهة، ويحتوي كل منهما على قائمة بجميع المجلدات ونقاط التوزيع. في البداية تم تحديد "--"، مما يشير إلى عدم التحديد.
- توجد قائمة بالملفات الموجودة على نقطة التوزيع المصدر المحددة على اليسار وقائمة الملفات الموجودة على نقطة التوزيع الوجهة على اليمين.
- عند تحديد نقطة توزيع المصدر والوجهة، سيعرض عمود المزامنة رمزًا يشير إلى ما سيحدث أثناء المزامنة. عندما يكون لأيقونة المزامنة لون، فهذا يعني أنها ستشارك في المزامنة. إذا كان أبيض وأسود، فلن يحدث ذلك. سيحتوي رمز المزامنة على علامة + إذا كان سيتم إضافته، وعلامة اختيار إذا كان سيتم تحديثه، وعلامة X إذا كان سيتم حذفه من الوجهة (إذا اختاروا ذلك بعد النقر فوق مزامنة) و= إذا كان الملف موجودًا على كلا الجهازين. تطابق المصدر والوجهة.
- يمكن تحديد العناصر الموجودة في القائمة المصدر. إذا كانت هناك عناصر محددة، فستتم مزامنة هذه الملفات فقط ولن تتم إزالة أي ملفات من الوجهة. إذا لم يتم تحديد أي ملفات، فعند الضغط على زر المزامنة، سيتم سؤالك عما إذا كنت تريد حذف العناصر غير الموجودة في المصدر أم لا. إذا اخترت نعم، فستتم إزالة أي ملفات على الوجهة تظهر رمز x أحمر من الوجهة وقائمة الحزم في Jamf Pro.
معلمات سطر الأوامر
ملاحظة: قم بتشغيل JamfSync بدون أي معلمات أولاً لإضافة خوادم و/أو مجلدات Jamf Pro. يجب تخزين كلمات المرور الخاصة بخوادم Jamf Pro ونقاط التوزيع في سلسلة المفاتيح من أجل المزامنة عبر وسيطات سطر الأوامر.
الاستخدام: JamfSync [(-s | --srcDp) ] [(-d | --dstDp) ] [(-f | --forceSync)] [(-r | --removeFilesNotOnSource)] [(-rp | -- RemovePackagesNotOnSource)] [-p | --التقدم] JamfSync [-h | --مساعدة] 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 :المرحلة" -د "JCDS:Prod" -r -rp -p "/Applications/Jamf Sync.app/Contents/MacOS/Jamf Sync" -s localSourceName -d الوجهةSourceName
نظرة عامة على كود المصدر
الكود المصدري موجود في عدة مجموعات.
- يحتوي النموذج على فئات لا ترتبط مباشرة بواجهة المستخدم.
- يوجد داخل مجموعة النموذج ViewModels، وهو أكثر ارتباطًا بواجهة المستخدم ولكنه غير مرتبط بها بشكل خاص. عادةً، عندما تتغير الحقول في نموذج العرض، سيتم إعادة رسم واجهة المستخدم المرتبطة تلقائيًا.
- تحتوي الموارد على صور وملفات أخرى يستخدمها البرنامج.
- تحتوي واجهة المستخدم على ملفات SwiftUI لجميع طرق العرض التي تظهر في البرنامج، بالإضافة إلى JamfSyncApp، حيث يبدأ تنفيذ البرنامج.
- تحتوي الأداة المساعدة على فئات تؤدي مهام أكثر عمومية.
نموذج
يتم استخدام الملفات الموجودة في مجموعة النموذج لتتبع البيانات المستخدمة ومعالجتها.
DataModel: يمثل حالة كل شيء تقريبًا ويحتوي على البيانات والوظائف التي تعمل بناءً على تلك البيانات. وهو مسؤول عن تحميل البيانات من التخزين الأساسي وكذلك تحميل البيانات الخاصة بنقاط التوزيع. لقد نشر المتغيرات التي يتم استخدامها للتحكم في واجهة المستخدم.
SavableItem: الفئة الأساسية لأي شيء يمكن حفظه (JamfProInstance وFolderInstance). يتم تخزين هذه العناصر في البيانات الأساسية. لا يتم تخزين كلمات المرور في البيانات الأساسية، بل يتم تخزينها في سلسلة المفاتيح طالما سمح المستخدم بذلك. يتم تجاوز وظيفة LoadDps بواسطة فئة فرعية محددة وتكون مسؤولة عن تحميل جميع نقاط التوزيع المرتبطة بهذا العنصر. تقوم الدالة getDps بإرجاع نقطة (نقاط) التوزيع المرتبطة بهذا العنصر.
- JamfProInstance - يمثل هذا مثيل Jamf Pro وهو مسؤول عن تحميل البيانات الضرورية والتواصل مع واجهات برمجة تطبيقات Jamf Pro. كما يقوم أيضًا بإنشاء وتحميل البيانات لنقاط التوزيع المرتبطة بخادم Jamf Pro. يقوم أيضًا بتحميل وتخزين معلومات الحزمة من خادم Jamf Pro.
- FolderInstance - يمثل هذا الدليل المحلي على الكمبيوتر. يقوم بإنشاء FolderDp واحد يعمل كنقطة توزيع أثناء المزامنة.
DistributionPoint: الفئة الأساسية لجميع كائنات DistributionPoint (FileShareDp وJcds2Dp وFolderDp) وظيفة CopyFiles هي الوظيفة الرئيسية للمزامنة. فهو يستدعي الوظائف الأخرى التي يتم تجاوزها بواسطة كائنات نقطة التوزيع المحددة.
- FileShareDp - كائن نقطة التوزيع المحدد لنقاط توزيع مشاركة الملفات.
- Jcds2Dp - كائن نقطة التوزيع المحدد لنقاط التوزيع السحابية.
- FolderDp - كائن نقطة التوزيع المحدد لنقاط توزيع المجلد (يمثل مجلد ملف محلي).
كائنات أخرى:
- DpFile - يخزن المعلومات لملف واحد. ويحتوي أيضًا على وظائف للحفاظ على المجاميع الاختبارية ومقارنتها.
- DpFiles - يخزن قائمة الملفات. يحتوي على وظائف للمساعدة في العثور على ملف معين، وتحديث المجاميع الاختبارية للملفات، وتحديث حالة كل ملف تشير إلى حالة الملفات.
- المجموع الاختباري - يمثل المجموع الاختباري من أي نوع (عادةً SHA-512)
- المجاميع الاختبارية - كائن يحتوي على قائمة من كائنات المجموع الاختباري وله وظائف لاستخدامها في مجموعة المجاميع الاختبارية.
ViewModels
يتم استخدام الملفات الموجودة في مجموعة ViewModels لتتبع البيانات المستخدمة ومعالجتها. سوف تتسبب المتغيرات المنشورة في إعادة رسم طرق العرض المقترنة. * LogViewModel - يستخدم لعرض السجل والرسالة التي تظهر في أسفل الشاشة. * SetupViewModel - يستخدم لعرض الإعداد. * PackageListViewModel - يستخدم لقوائم الملفات المصدر والوجهة في العرض الرئيسي. * DpFileViewModel - يستخدم لكل ملف في PackageListViewModel. يحتوي على مؤشر لمثيل DpFile محدد ويحتوي على حقول محددة لواجهة المستخدم. * DpFilesViewModel - يحتوي على مجموعة من كائنات DpFileViewModel ويستخدم لتخزين الملفات في كائن PackageListViewModel.
واجهة المستخدم
الملفات الموجودة في مجموعة واجهة المستخدم هي ملفات SwiftUI لواجهة المستخدم. يتم استخدام البيانات الموجودة في DataModel للتحكم في العرض. في أي وقت يتم فيه تغيير خاصية @Published، سيؤدي ذلك إلى إعادة رسم أي طرق عرض تستخدم تلك الحقول.
- AboutView: طريقة عرض تعرض الإصدار والمعلومات الأخرى.
- ChecksumView: يعرض المجاميع الاختبارية التي تم حسابها لملف ويقدم سلسلة تحتوي على المجاميع الاختبارية الفعلية عند المرور فوقها.
- ConfirmationView: العرض المستخدم لتأكيد أشياء مختلفة
- ContentView: العرض الرئيسي الذي يحرك كل شيء.
- FileSharePasswordView: يُستخدم للمطالبة بكلمة مرور مشاركة الملفات عندما لا يتم تخزينها في سلسلة المفاتيح.
- FolderView: طريقة العرض عند إضافة مجلد أو تحريره
- HeaderView: الجزء العلوي من ContentView الذي يحتوي على زر المزامنة ومربع الاختيار Force Sync.
- JamfProPasswordView: يُستخدم للمطالبة بكلمة مرور Jamf Pro عندما لا يتم تخزينها في سلسلة المفاتيح.
- JamfProServerView: العرض عند إضافة أو تحرير خادم Jamf Pro
- JamfSyncApp: التطبيق الرئيسي الذي يحتوي على ContentView
- LogMessageView: العرض الذي يعرض لفترة وجيزة رسالة السجل في الجزء السفلي من العرض الرئيسي.
- LogView: طريقة العرض التي تعرض رسائل السجل
- PackageAnimationView: طريقة العرض التي تعرض الرسوم المتحركة أثناء المزامنة.
- PackageListView: عرض قائمة الحزم في العرض الرئيسي.
- SavableItemListView: طريقة عرض القائمة في طريقة عرض الإعداد
- SetupView: العرض الرئيسي للإعداد
- SourceDestinationView: جزء العرض الرئيسي الذي يحتوي على منتقي المصدر والوجهة وقوائم الملفات.
- SynchronizationProgressView: عرض المزامنة الذي يوضح التقدم المحرز في المزامنة المستمرة. يؤدي هذا أيضًا إلى بدء المزامنة في onAppear .
جدوى
الملفات الموجودة في مجموعة الأدوات المساعدة هي فئات مساعدة لمعالجة البيانات وليس لها اتصال مباشر بواجهة المستخدم.
- ArgumentParser: يوزع وسيطات سطر الأوامر إن وجدت.
- CloudSessionDelegate: يتعامل مع وظائف URLSessionTaskDelegate وURLSessionDownloadDelegateelegate عندما يتم نقل الملفات من وإلى السحابة.
- FileHash: إنشاء قيم تجزئة الملف. هذه فئة ممثل، لذا ستقوم الوظيفة بمعالجة ملف واحد فقط في كل مرة لمنع التعارضات.
- مشاركة الملفات: يتعامل مع تركيب وإلغاء تحميل مشاركة الملفات. هذه فئة الممثل لتجنب الصراعات.
- FileShares: يقوم بتحميل المشاركات أو إرجاع مشاركة ملف مثبتة بالفعل. ويقوم بإلغاء تحميل جميع مشاركات الملفات المثبتة. هذه فئة الممثل لتجنب الصراعات.
- KeychainHelper: يساعد في تخزين واسترجاع عناصر سلسلة المفاتيح.
- View+NSWindow: يُستخدم لعرض العرض كنافذة خاصة به.
- إعدادات المستخدم: قراءة البيانات المكتوبة في إعدادات المستخدم وحفظها وتتبعها.
توسيع أنواع نقاط التوزيع التي يدعمها 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 Docs.
سحب الطلبات
قبل تقديم طلب السحب الخاص بك، يرجى القيام بما يلي:
- إذا كنت تقوم بإضافة أوامر أو ميزات جديدة، فيجب أن تتضمن اختبارات الوحدة. إذا كنت تقوم بتغيير الوظيفة، فقم بتحديث الاختبارات أو أضف اختبارات جديدة حسب الحاجة.
- التحقق من اجتياز جميع اختبارات الوحدة.
- أضف ملاحظة إلى سجل التغيير تصف فيها ما قمت بتغييره.
- إذا كان طلب السحب الخاص بك مرتبطًا بمشكلة ما، فأضف رابطًا للمشكلة في الوصف.
المساهمين