قدمت Cisco ZTP على نظام التشغيل IOS XE 16.5.1 وما بعده لمنح الجهاز القدرة على تنزيل وتشغيل برنامج Python النصي في Linux Guest Shell لأداء مهام ترقية البرامج وتكوينها على الجهاز.
إذا كان جهازك (على سبيل المثال 9200L) و/أو البرنامج لا يدعم ZTP، فيمكنك استخدام تطبيق التثبيت التلقائي البديل.
الخطوة الأولى هي التحقق من وجود تكوين بدء التشغيل، وإذا لم يكن الأمر كذلك، فإن الخطوة الثانية هي تنفيذ طلب DHCP. الخطوة الثالثة هي تنزيل البرنامج النصي المحدد في رد DHCP. الخطوة الرابعة والأخيرة هي تشغيل البرنامج النصي Python في بيئة Guest Shell. يظل Guest Shell ممكنًا بعد تنفيذ البرنامج النصي.
افتراضيًا، يتمتع Guest Shell بإمكانية الوصول إلى الشبكة عبر منفذ إدارة RP. عندما يكون الجهاز متصلاً بالشبكة من خلال منافذ اللوحة الأمامية، لا يكون لدى Guest Shell أي اتصال بالشبكة. يستخدم script.py أوامر CLI مثل copy
more
للوصول إلى الشبكة.
يحتوي script.py على الوظائف التالية المضمنة:
يحتاج script.py إلى 4 متغيرات ليملأها المستخدم:
SYSLOG عبارة عن سلسلة عنوان IP لخادم سجل النظام، والسلسلة الفارغة تعمل على تعطيل سجل النظام
LOGAPI عبارة عن سلسلة تحتوي على عنوان URL لتسجيل واجهة برمجة التطبيقات (API)، وتعمل السلسلة الفارغة على تعطيل رسائل الحالة
JSON عبارة عن سلسلة تحتوي على عنوان URL لكائن DATA المشفر بـ JSON كما هو محدد أدناه. تعمل السلسلة الفارغة على تعطيل تنزيل بيانات الجهاز الخارجي.
البيانات هي قائمة من الإملاءات التي تحدد بيانات الجهاز. تعمل القائمة الفارغة على تعطيل البيانات الداخلية للبرنامج النصي. لتحديد الإعدادات الافتراضية للجهاز، قم بحذف المفتاح المسمى المكدس من إملاء واحد. المفاتيح والقيم الصالحة هي:
مفتاح | قيمة |
---|---|
كومة | إملاء مع رقم التبديل الهدف كمفتاح والرقم التسلسلي كقيمة |
إصدار | سلسلة مع الإصدار المستهدف المستخدم لتحديد ما إذا كانت الترقية مطلوبة |
base_url | سلسلة تحتوي على عنوان URL الأساسي للانضمام اختياريًا إلى عنوان URL للتثبيت/التكوين |
ثَبَّتَ | سلسلة تحتوي على عنوان URL لـ IOS المستهدف للتنزيل |
التكوين | سلسلة تحتوي على عنوان URL لقالب التكوين للتنزيل |
بديل | الإملاء باستخدام المفاتيح التي تطابق العناصر النائبة في القالب |
cli | سلسلة أوامر IOS النهائية، أو Python إذا كان ضمن {{...}} |
يحفظ | منطقي للإشارة إلى حفظ التكوين عند اكتمال البرنامج النصي |
نموذج | قالب تكوين يحتوي على سلسلة مع عناصر نائبة تعتمد على $ |
يتم توارث الإعدادات الافتراضية من خلال جميع الأكوام، لكن إعدادات المكدس لها الأفضلية. على سبيل المثال: إذا كان الإصدار الافتراضي هو 16.6.5 وإصدار المكدس هو 16.9.2، فسيتم استخدام الأخير. عند ملء المتغير DATA، يمكن تقديم البرنامج النصي وصور وتكوينات IOS XE بواسطة أي خادم HTTP. لا يدعم قالب التكوين الشعارات متعددة الأسطر، وهذا يعد قيدًا على ZTP. يمكن استخدام تعبيرات Python في سلسلة أوامر cli النهائية. على سبيل المثال لاستخدام الرقم التسلسلي في اسم الملف:
copy run http://10.0.0.1:8080/file/{{ztp['serial']}}.conf
أو لإيقاف تنفيذ الأمر مؤقتًا للحظة:
{{time.sleep(10)}}
مثال لتكوين script.py للاستخدام المستقل بدون تطبيق واجهة المستخدم الرسومية:
SYSLOG = '10.0.0.1'
LOGAPI = ''
JSON = ''
DATA = [{
'version' : '16.6.5' ,
'install' : 'http://10.0.0.1/cat9k_iosxe.16.06.05.SPA.bin' ,
'save' : True ,
'template' : '''hostname $name
ip domain name lab
ip name-server 8.8.8.8
interface range $uplink1 , $uplink2
description uplink'''
}, {
'stack' : { 1 : 'FCW0000D0LR' , 2 : 'FCW0000G0L7' , 3 : 'FOC0000X0DW' },
'subst' : { 'name' : 'switch1' , 'uplink1' : 'Gi1/0/1' , 'uplink2' : 'Gi2/0/1' }
}, {
'stack' : { 1 : 'FCW0000D0LT' },
'subst' : { 'name' : 'switch2' , 'uplink1' : 'Gi1/0/1' , 'uplink2' : 'Gi1/0/2' },
'version' : '16.9.2' ,
'install' : 'http://10.0.0.1/cat9k_iosxe.16.09.02.SPA.bin' ,
'cli' : 'license smart register idtoken ****'
}
]
بدلاً من إدخال البيانات مباشرة في script.py ، يمكن استخدام تطبيق واجهة المستخدم الرسومية لإدخال البيانات وخدمة الملفات. يتم عرض نفس أسماء المفاتيح لقائمة الإملاءات التي تحدد بيانات الجهاز في تطبيق واجهة المستخدم الرسومية. مثال لتكوين script.py لاستخدام تطبيق واجهة المستخدم الرسومية:
SYSLOG = '10.0.0.1'
LOGAPI = 'http://10.0.0.1:8080/log'
JSON = 'http://10.0.0.1:8080/data'
DATA = []
يتكون تطبيق واجهة المستخدم الرسومية من عنصرين:
ببساطة، يقوم عميل الويب باسترداد بيانات التعليمات من الخادم ويخزن بيانات التعليمات الجديدة على الخادم الذي أدخله المستخدم. ثم يقوم script.py باسترداد بيانات التعليمات وتنفيذها وتخزين المخرجات على الخادم:
واجهات برمجة تطبيقات REST التي يوفرها app.py هي:
يتصل | وصف |
---|---|
الحصول على /ملف/ | يُستخدم لخدمة الملفات والأدلة الفرعية، مثل صور أو تكوينات IOS XE |
حذف /ملف/ | يقوم الطلب بإزالة الملف المحدد من القرص |
وضع /ملف/ | يمكن استخدامه لتحميل الملفات من IOS إلى الخادم |
مشاركة / ملف | يستخدمه نموذج عميل AJAX لتحميل ملف إلى الخادم |
الحصول على / القائمة | يرسل الخادم قائمة نصية JSON بجميع الملفات الموجودة في دليل البرنامج النصي والأدلة الفرعية |
الحصول على / البيانات | عند تلقي الطلب، يرسل الخادم مجموعة البيانات كنص JSON إلى العميل/المحول |
ما بعد / البيانات | يرسل العميل مجموعة البيانات كنص JSON إلى الخادم باستخدام طريقة HTML POST |
الحصول على /csv | عند تلقي الطلب، يقوم الخادم بتسوية مجموعة البيانات وتصديرها كملف CSV |
بوست /csv | يرسل العميل ملف CSV مع مجموعة البيانات المسطحة إلى الخادم لاستيرادها |
الحصول على / سجل | عند تلقي الطلب، يرسل الخادم إدخالات السجل كنص JSON إلى العميل |
وضع / سجل | يستخدمه script.py لإرسال مخرجات سير عمل ZTP كنص JSON إلى الخادم |
يتحقق app.py من صحة تنسيق البيانات لكل استدعاء لواجهة برمجة التطبيقات. يتم عرض رسائل الخطأ من استدعاءات API الفاشلة في واجهة المستخدم الرسومية عن طريق إرجاع استجابة HTTP 500 بسلسلة رسائل. يتم تقديم الملفات والدلائل من دليل العمل الحالي. تقوم واجهة برمجة تطبيقات سرد الدليل بإرجاع الدلائل الفرعية فقط. يتم وضع الملفات التي تم تحميلها في الدليل الذي تم تحميله بشكل افتراضي.
في علامة التبويب الصفحة الرئيسية، تسرد واجهة المستخدم الرسومية جميع عمليات التشغيل المسجلة لـ script.py . تعرض واجهة المستخدم الرسومية مربعات نصية لكل قيمة مفتاح في قائمة DATA للإملاءات في علامة التبويب الإعدادات. مربعات نص التثبيت والتكوين عبارة عن قوائم منسدلة تحتوي على الملفات الموجودة في الدلائل الفرعية. يتم ملء مربع نص الإصدار تلقائيًا إذا كان من الممكن استخراج إصدار IOS XE من اسم الملف. تدعم واجهة المستخدم الرسومية أيضًا تحميل عدة ملفات محددة في علامة التبويب "الملفات":
قم بتكوين خادم DHCP ليخدم نطاقًا مع تعيين الخيار 67 على: http://xxxx:8080/file/script.py
، حيث xxxx هو عنوان IP الخاص بالجهاز الذي يستضيف app.py. نموذج التكوين على جهاز Cisco:
ip dhcp excluded-address 10.0.0.1
ip dhcp pool ztp_pool
network 10.0.0.0 255.255.255.0
default-router 10.0.0.1
option 67 ascii http://10.0.0.1:8080/file/script.py
تثبيت الزجاجة والنادلة باستخدام PIP:
pip install bottle waitress
أو على Ubuntu كالتالي:
sudo apt-get install python-bottle python-waitress
ضع app.py و index.html و main.js و style.css و script.py في دليل وابدأ تشغيل الواجهة الخلفية للخادم على Linux كما يلي:
nohup python app.py &
يمكن تشغيل التطبيق على نظام التشغيل Windows أيضًا. بايثون 2.7+ و 3.4+ مدعومة.
وكبديل، يمكن أيضًا استخدام التطبيق في حاوية Docker عن طريق تشغيل الأوامر التالية:
docker build -t ztp .
docker run --rm -e ZTP_IP=192.168.0.4 -e ZTP_PORT=8080 -p 8080:8080 --name ztp ztp
تم اختبار البرنامج النصي بنجاح على الأنظمة الأساسية التالية التي تعمل بالإصدار 16.6.x والبرامج الأحدث:
تم اختبار البرنامج النصي بنجاح على الأنظمة الأساسية التالية التي تعمل بالإصدار 16.8.x والبرامج الأحدث:
يجب أن يدعم البرنامج النصي الأنظمة الأساسية التالية التي تعمل بالإصدار 16.12.x والبرامج الأحدث:
تواجه الأنظمة الأساسية التي تعمل بالإصدار 16.12.4 مشكلة معروفة وهي CSCvw63161 ويمكنك استخدام تطبيق AutoInstall البديل كحل بديل.
يستخدم هذا البرنامج النصي برنامج EEM لتثبيت البرنامج، والذي يتطلب ترخيص DNA Essentials.