اعمال تغییر: تغییر کانفیگ را با خیال راحت انجام دهید
تغییر کانفیگ را روی خود دستگاهها انجام دهید، روی شبکهٔ زنده بررسیاش کنید، و اگر شبکه پایدار نماند خودبهخود برگردانده شود. فرمانهای دقیق در هر دو جهت، نظر دوقلو، تأیید دونفره، موجها با قناری، safe mode میکروتیک و کلید مرد مرده روی دستگاه، و ثبت همهٔ فرمانها و پاسخها.
بیشتر قطعیها از تغییرها میآیند، و بیشتر تغییرهای بد دیر پیدا میشوند: بعد از اینکه کسی ساعت ۲ بامداد آنها را در روتر تایپ کرد و تلفنها زنگ خوردند. **اعمال تغییر** (rollout) تغییری در کانفیگ است که Zaryn با دقت روی دستگاههای یک [سایت](/docs/fa/network-sites) انجام میدهد:
1. **برنامهریزی** بهصورت همان فرمانهایی که به هر دستگاه داده میشود، و فرمانهایی که برش میگردانند، از روی کانفیگی که الان اجرا میکند.
2. **بررسی با [دوقلوی دیجیتال](/docs/fa/network-twin)**: کدام ترافیک قطع میشود، برقرار میشود یا از راه دیگری میرود، و هر دستگاه بعد از آن چه مسیرهایی باید داشته باشد.
3. **تأیید** توسط مدیر سایت. با تأیید دونفره، توسط کسی جز کسی که برنامهریزیاش کرده.
4. **اعمال توسط جمعآوریکنندهٔ سایت**، موج به موج، و **بررسی روی شبکهٔ زنده**. وقتی همهچیز پایدار ماند نگه داشته میشود، و وقتی نماند خودبهخود برمیگردد.
همهچیز ثبت میشود: چه کسی برنامهریزی و تأیید کرد، هر فرمانی که تایپ شد، هر پاسخی که دستگاه داد، هر بررسی.
## پیش از اولین اعمال: به جمعآوریکننده اجازهٔ تغییر بدهید
جمعآوریکننده در حالت پیشفرض فقط دستگاهها را میخواند. فقط کسی روی خود ماشین جمعآوریکننده میتواند اجازهٔ تغییر بدهد:
```bash
sudo zev site changes on
```
هیچ دستوری از Zaryn نمیتواند این را روشن کند. `zev site changes off` دوباره خاموشش میکند و `zev site changes status` آخرین سطرهای گزارشش را نشان میدهد. هر گام هر تغییر در `changes.log` کنار اطلاعات ورود جمعآوریکننده هم نوشته میشود.
با `--max-devices 5` جمعآوریکننده موجهای بیش از پنج دستگاه را نمیپذیرد، هرچه تأیید شده باشد.
حساب ورودی که جمعآوریکننده برای هر دستگاه به کار میبرد باید اجازهٔ تغییر کانفیگ داشته باشد: privilege 15 یا enable secret در سیسکو، گروه write در میکروتیک، و `frrvty` یا sudo برای `vtysh` در FRRouting.
## برنامهریزی
سایت را باز کنید و به **آزمودن یک تغییر** بروید. کانفیگ یک یا چند دستگاه را ویرایش کنید و **ببین چه میکند** را بزنید. زیر پاسخ دوقلو، **اعمالش کن**:
- **تغییر چیست**، و اگر خواستید، چرا.
- **صبر برای آرامگرفتن شبکه** (پیشفرض ۶۰ ثانیه)، **بعد بررسی** تا حداکثر ۱۸۰ ثانیه پیش از دست کشیدن. زمان آرامگرفتن را بیشتر از تایمرهای پروتکلهای مسیریابیتان بگذارید: OSPF همسایهٔ ازدسترفته را فقط بعد از dead interval میفهمد (پیشفرض ۴۰ ثانیه)، و BGP بعد از hold time (۹۰ یا ۱۸۰ ثانیه).
- **این تغییر عمداً لینک یا همسایهای را حذف میکند:** وقتی از دست رفتن همسایه هدف تغییر است تیکش بزنید تا بررسی به این دلیل برنگرداندش.
- **موجها و پنجره (Premium):** قناری، تعداد دستگاه در هر موج، مکث بین موجها، پنجرهٔ نگهداری.
صفحهٔ آن اعمال باز میشود. هر دستگاه فرمانهایی که داده میشود و، زیر **برگرداندن**، فرمانهایی که برشان میگرداند را نشان میدهد:
```text
r1 FRRouting +2 −0
interface eth3
ip ospf cost 100
exit
```
خطهایی که نمیشود با اطمینان تایپ کرد بهعنوان مشکل فهرست میشوند، و تا کانفیگ عوض نشود اعمال تأییدشدنی نیست. مثلاً: رمزی که جمعآوریکننده نمیشناسد، تنظیمی در RouterOS که فقط دستی پاک میشود، یا access list شمارهداری که از وسط تغییر کرده.
از درخواست ادغام: وقتی درخواستی روی [مخزن کانفیگ](/docs/fa/network-twin#درخواستهای-ادغام-روی-مخزن-کانفیگ) سایت ادغام شد، کارت دوقلوی شبکهاش **اعمالش روی دستگاههای …** را پیشنهاد میدهد. این اعمال هر دستگاهی را که فایلش در آن شاخه با آنچه اجرا میکند فرق دارد مطابق فایل میکند.
## دستورالعملها: یک تغییر، همهٔ دستگاهها
بعضی تغییرها روی همهٔ دستگاهها یکیاند: سرور NTP تازه، سرور syslog، عوض کردن community در SNMP، کاربری که رفته. **دستورالعمل** چنین تغییری را یک بار، برای هر سازنده، توصیف میکند و آن را بهصورت یک اعمال روی همهٔ دستگاههایی که لازمش دارند اجرا میکند.
در زبانهٔ **اعمال تغییرها**، زیر **دستورالعملها**، **از کتابخانه** شروع کنید (سرور NTP، سرور syslog، سرورهای DNS، عوض کردن community در SNMP، حذف یک کاربر محلی، فقط SSH روی خطهای VTY) یا **دستورالعمل تازه** بنویسید. برای هر سازنده، هر خط یکی:
```text
+ ntp server {{ntp}}
- ntp server *
[line vty 0 4] + transport input ssh
? show ntp associations => {{ntp}}
```
- `+` خطی که کانفیگ باید داشته باشد. فقط جایی که نیست اضافه میشود.
- `-` خطی که نباید داشته باشد. `*` در انتها با هر ادامهای جور است: `ntp server *` همهٔ سرورهای NTP را برمیدارد.
- `[section]` در ابتدا خط را داخل یک بخش میگذارد (`interface Vlan10`، `line vty 0 4`، `aaa` در هواوی). بخشی که هنوز نیست اضافه میشود.
- `?` فرمانی فقطخواندنی (`show`، `display`، `print` در RouterOS) که پس از تغییر، خروجیاش باید متن بعد از `=>` را نشان دهد. همراه بقیه بررسی میشود و اگر نشان ندهد تغییر برمیگردد.
- `{{name}}` یک پارامتر است که هنگام اجرای دستورالعمل پر میشود.
دستورالعمل را میشود به دستگاههایی با برچسبهای خاص محدود کرد (`core`، `branch`). **اجرا** پارامترها را میپرسد، بعد **پیشنمایش** هر دستگاه را نشان میدهد: چه فرمانهایی میگیرد، یا چرا کنار گذاشته میشود (از قبل همانطور است، خطی برای سازندهاش نیست، هنوز خوانده نشده). **برنامهریزی اعمال** از همهٔ دستگاههایی که تغییر را لازم دارند یک اعمال میسازد. مثل هر اعمال دیگری تأیید، موج به موج انجام، بررسی و در صورت لزوم برگردانده میشود.
مقدار هر پارامتر فقط یک خط است، پس هیچ مقداری نمیتواند فرمان اضافهای جا بدهد. ارتقای فرمور که دستگاه را ریاستارت میکند کار دستورالعملها نیست: جمعآوریکنندهها عمداً reload را نمیپذیرند.
## تأیید
مدیر سایت در صفحهٔ اعمال تأیید میکند. سه چیز ممکن است جلوی تأیید را بگیرد:
- **تأیید دونفره.** در **جمعآوریکننده و تنظیمات**، زیر **اعمال تغییر و دسترسی**، سایت میتواند نفر دوم بخواهد. آنوقت نویسنده نمیتواند تغییر خودش را تأیید کند.
- **دوقلو میگوید ترافیک قطع میشود.** تأیید یک تیک لازم دارد: *عمداً است*. با نام شما ثبت میشود.
- **دستگاهی بعد از برنامهریزی تغییر کرده.** کسی در این فاصله کانفیگش را عوض کرده و برنامه دیگر جور نیست. دوباره برنامهریزی کنید.
## جمعآوریکننده چه میکند
جمعآوریکننده موجهای تأییدشده را در نوبت بعدی پرسوجویش (هر ۳۰ ثانیه) برمیدارد. برای هر موج:
```diagram
type: sequence
title: یک موج، از تأیید تا تثبیت
lanes: مهندس | Zaryn | جمعآوریکننده | دستگاه
alt: مهندس موج برنامهریزیشده را تأیید میکند؛ جمعآوریکننده دستگاه را میخواند، با راه بازگشت داخلی تغییر را اعمال میکند، شبکه را میسنجد و تغییر را نگه میدارد یا برمیگرداند
---
== برنامهریزی ==
مهندس -> Zaryn : برنامهریزی و تأیید
Zaryn -> Zaryn : دوقلو ترافیک را پیشبینی میکند
== در سایت، هر ۳۰ ثانیه ==
جمعآوریکننده -> Zaryn : موج تأییدشدهای هست؟
Zaryn --> جمعآوریکننده : بله: موج
جمعآوریکننده -> دستگاه : کانفیگ را دوباره بخوان
note جمعآوریکننده..دستگاه : با آنچه برنامه از آن شروع شد فرق دارد؟ موج رد میشود، چیزی تایپ نمیشود | warn
جمعآوریکننده -> دستگاه : تغییر را با safe mode یا dead man's switch اعمال کن
دستگاه --> جمعآوریکننده : مسیرها، همسایهها، probeها
note جمعآوریکننده..دستگاه : همهچیز دو بار برقرار است؟ نگهش دار. وگرنه برش گردان، آخرین دستگاه اول. | good
جمعآوریکننده -> Zaryn : نتیجه، پیش و پس
Zaryn --> مهندس : انجام شد، یا برگشت و چرا
```
1. **همهٔ دستگاهها را دوباره میخواند.** کانفیگ هر کدام باید دقیقاً همانی باشد که تغییر از رویش برنامهریزی شد: اگر کسی در این فاصله عوضش کرده باشد، موج رد میشود و چیزی تایپ نمیشود. رمزهایی که برنامه بهصورت برچسب `<secret:…>` نشان میدهد از کانفیگ خود دستگاه برگردانده میشوند. هیچوقت از سایت بیرون نمیروند.
2. **آنچه باید کار کند را اندازه میگیرد:** همسایههای هر دستگاه (CDP، LLDP، OSPF و BGP)، پاسخ SSH همهٔ دستگاههای دیگر سایت، و [پروبهای](/docs/fa/network-paths) سالم سایت.
3. **تغییر را اعمال میکند**، دستگاه به دستگاه، به امنترین روش خود دستگاه:
| دستگاه | تغییر چطور برمیگردد |
|---|---|
| MikroTik RouterOS | **Safe mode**: نشست تغییر را تا پایان بررسیها نگه میدارد. اگر جمعآوریکننده روتر را از دست بدهد یا از کار بیفتد، خود RouterOS همهچیز را برمیگرداند. |
| FRRouting | **کلید مرد مرده روی دستگاه**: فرمانهای برگرداندن در فایلی منتظر میمانند و اگر تغییر بهموقع تأیید نشود خودشان اجرا میشوند. |
| VyOS | همین: کانفیگ قبلی ذخیره میشود و اگر تأیید نشود دوباره بارگذاری میشود. |
| Cisco IOS / IOS-XE، Huawei VRP | جمعآوریکننده فرمانهای برگرداندن را تایپ میکند. کانفیگ اجرایی فقط بعد از تأیید تغییر ذخیره میشود، پس ریلود هم کانفیگ قبلی را برمیگرداند. |
4. **شبکه را بررسی میکند**، بعد از زمان آرامگرفتن، بارها، تا همهچیز پایدار شود یا زمان تمام شود، و پیش از نگهداشتن یک بار دیگر ۱۵ ثانیه بعد:
- هر دستگاه هنوز **پاسخ میدهد**؛
- **کانفیگش** تغییر کرده؛
- **مسیرهایی** که دوقلو پیشبینی کرد هستند، و آنهایی که گفت میروند رفتهاند؛
- هیچ **همسایهای** از دست نرفته؛
- **دستگاههای دیگری** که پاسخ میدادند هنوز پاسخ میدهند؛
- **پروبهایی** که سالم بودند هنوز سالماند. پروبهایی که به گفتهٔ دوقلو تغییر عمداً قطعشان میکند بررسی نمیشوند.
5. **نگهش میدارد** (safe mode آزاد، کلید خاموش، کانفیگ با `write memory` یا `save` ذخیره)، یا روی همهٔ دستگاههای موج **برش میگرداند**، از آخر به اول. بعد یک بار دیگر میخواندشان تا بگوید کانفیگ هر کدام دقیقاً مثل قبل است یا نه.
جمعآوریکننده فرمانهایی را که تغییر کانفیگ نیستند، هرچه Zaryn بفرستد، نمیپذیرد: reload، erase، کار با فایل، اسکریپت، `do …`، فرمانهای `/system` و `/file` در RouterOS، و task scheduler در VyOS.
## تماشای اعمال
وقتی موجی در جریان است، صفحهاش زنده دنبالش میکند: **خواندن دستگاهها ← اعمال تغییر ← بررسی شبکه ← نگهداشتن و ذخیره**، یا **در حال برگرداندن**. هر دستگاه بررسیهایش را همانطور که میرسند نشان میدهد (✓ پاسخ میدهد، ✓ مسیرها، ✗ همسایهها…) با دلیل هر کدام که ناموفق شد. **متن کامل جلسه** همهٔ نشست است، هر فرمانی که تایپ شد و هر پاسخی، با زمان:
```text
0.0s wave of "Costly link r1-r3": 1 device(s)
1.9s before: 2 neighbor(s), 3/3 device(s) answering, 2/2 probe(s) passing
2.0s r1: changing 3 line(s) through vtysh; undone by the device itself in 540s unless confirmed
2.0s r1> interface eth3
2.0s r1> ip ospf cost 100
2.0s r1> exit
62.4s checks pass; checking again in 15s before keeping it
77.6s checks pass
78.1s r1: confirmed and saved
```
**تغییرهای** سایت هر اعمالی را که برنامهریزی، تأیید، انجام، برگردانده یا ناموفق شد فهرست میکند.
## برگرداندن، لغو
- **برگرداندن** اعمال تازهای برنامهریزی میکند که دستگاهها را به کانفیگ قبلی برمیگرداند. مثل هر اعمال دیگری بازبینی و تأیید میشود.
- **لغو** اعمال را پیش از شروع متوقف میکند. اگر در جریان باشد، موجی که در حال اعمال است تمام میشود (بررسی میشود، میماند یا برمیگردد) و موج دیگری شروع نمیشود.
- وقتی محافظ خود دستگاه تغییری را برگرداند یا موجی برگردانده شد، کانفیگ دستگاه به همان کانفیگ تأییدشده برگشته و بهعنوان انحراف نشان داده نمیشود.
## موجها، قناری و پنجرهٔ نگهداری (Premium)
- **قناری:** اول فقط یک دستگاه. بقیه فقط وقتی دنبالش میآیند که پایدار بماند.
- **دستگاه در هر موج:** بقیه، N تا N تا. هر موج پیش از شروع موج بعد بررسی میشود، و موجی که برگردانده شود اعمال را متوقف میکند. موجهای قبلی میمانند؛ **برگرداندن** برشان میگرداند.
- **مکث بین موجها:** فرصتی برای نگاه به داشبوردها و کاربران پیش از ادامه.
- **نه پیش از** و **پایان پنجره:** پنجرهٔ نگهداری. پیش از آن چیزی شروع نمیشود. اگر پیش از انجام همهٔ موجها تمام شود، بقیه متوقف میشود.
دوقلو مسیرهای مورد انتظار بعد از هر موج را برای شبکه در همان نقطه حساب میکند، پس قناری با آنچه خودش بهتنهایی باید بکند سنجیده میشود.
## اگر جمعآوریکننده وسط کار بایستد
- در میکروتیک، نشست قطعشده تغییر را برمیگرداند. در FRRouting و VyOS، کلید خود دستگاه.
- در سیسکو و هواوی، تغییر اجرا میماند ولی ذخیره نمیشود، پس ریلود هم کانفیگ قبلی را برمیگرداند. به دستگاه سر بزنید.
- وقتی جمعآوریکننده به اندازهٔ زمان آرامگرفتن، زمان بررسی و ۱۵ دقیقه ساکت بماند، Zaryn آن موج را گمشده علامت میزند. اعمال ناموفق میشود و همین را میگوید.
## پلنها
- **رایگان:** تا ۱۰ دستگاه در هر اعمال، همه در یک موج، با همهٔ بررسیها و برگشت خودکار.
- **Premium:** دستگاههای بیشتر، قناری، موجها، مکثها و پنجرههای نگهداری.
## خوب است بدانید
- اعمال تغییر روی دستگاههایی کار میکند که zev میتواند بخواند و تغییر دهد: Cisco IOS و IOS-XE، Huawei VRP، MikroTik RouterOS، FRRouting (از طریق `vtysh`) و VyOS. دستگاههای لینوکس ساده تغییر نمیکنند.
- حداکثر ۳۰۰۰ فرمان برای هر دستگاه در هر اعمال. تغییرهای بزرگتر بهتر است بههرحال تقسیم شوند.
- رمزی که در کانفیگ جدید بهصورت آشکار تایپ میکنید (رمز تازه) همانطور که تایپ شده به جمعآوریکننده فرستاده میشود. رمزهایی که از قبل روی دستگاه هستند برچسب میمانند و هیچوقت از آن بیرون نمیروند.
- پشتیبانی سیسکو، هواوی و میکروتیک روی دستگاههای شبیهسازیشده آزموده شده و VyOS فقط در آزمونهای واحد: اولین اعمال را روی دستگاه آزمایشگاهی یا در پنجرهٔ نگهداری امتحان کنید.
بیشتر قطعیها از تغییرها میآیند، و بیشتر تغییرهای بد دیر پیدا میشوند: بعد از اینکه کسی ساعت ۲ بامداد آنها را در روتر تایپ کرد و تلفنها زنگ خوردند. اعمال تغییر (rollout) تغییری در کانفیگ است که Zaryn با دقت روی دستگاههای یک سایت انجام میدهد:
برنامهریزی بهصورت همان فرمانهایی که به هر دستگاه داده میشود، و فرمانهایی که برش میگردانند، از روی کانفیگی که الان اجرا میکند.
بررسی با دوقلوی دیجیتال: کدام ترافیک قطع میشود، برقرار میشود یا از راه دیگری میرود، و هر دستگاه بعد از آن چه مسیرهایی باید داشته باشد.
تأیید توسط مدیر سایت. با تأیید دونفره، توسط کسی جز کسی که برنامهریزیاش کرده.
اعمال توسط جمعآوریکنندهٔ سایت، موج به موج، و بررسی روی شبکهٔ زنده. وقتی همهچیز پایدار ماند نگه داشته میشود، و وقتی نماند خودبهخود برمیگردد.
همهچیز ثبت میشود: چه کسی برنامهریزی و تأیید کرد، هر فرمانی که تایپ شد، هر پاسخی که دستگاه داد، هر بررسی.
جمعآوریکننده در حالت پیشفرض فقط دستگاهها را میخواند. فقط کسی روی خود ماشین جمعآوریکننده میتواند اجازهٔ تغییر بدهد:
Terminal
sudo zev site changes on
هیچ دستوری از Zaryn نمیتواند این را روشن کند. zev site changes off دوباره خاموشش میکند و zev site changes status آخرین سطرهای گزارشش را نشان میدهد. هر گام هر تغییر در changes.log کنار اطلاعات ورود جمعآوریکننده هم نوشته میشود.
با --max-devices 5 جمعآوریکننده موجهای بیش از پنج دستگاه را نمیپذیرد، هرچه تأیید شده باشد.
حساب ورودی که جمعآوریکننده برای هر دستگاه به کار میبرد باید اجازهٔ تغییر کانفیگ داشته باشد: privilege 15 یا enable secret در سیسکو، گروه write در میکروتیک، و frrvty یا sudo برای vtysh در FRRouting.
سایت را باز کنید و به آزمودن یک تغییر بروید. کانفیگ یک یا چند دستگاه را ویرایش کنید و ببین چه میکند را بزنید. زیر پاسخ دوقلو، اعمالش کن:
تغییر چیست، و اگر خواستید، چرا.
صبر برای آرامگرفتن شبکه (پیشفرض ۶۰ ثانیه)، بعد بررسی تا حداکثر ۱۸۰ ثانیه پیش از دست کشیدن. زمان آرامگرفتن را بیشتر از تایمرهای پروتکلهای مسیریابیتان بگذارید: OSPF همسایهٔ ازدسترفته را فقط بعد از dead interval میفهمد (پیشفرض ۴۰ ثانیه)، و BGP بعد از hold time (۹۰ یا ۱۸۰ ثانیه).
این تغییر عمداً لینک یا همسایهای را حذف میکند: وقتی از دست رفتن همسایه هدف تغییر است تیکش بزنید تا بررسی به این دلیل برنگرداندش.
موجها و پنجره (Premium): قناری، تعداد دستگاه در هر موج، مکث بین موجها، پنجرهٔ نگهداری.
صفحهٔ آن اعمال باز میشود. هر دستگاه فرمانهایی که داده میشود و، زیر برگرداندن، فرمانهایی که برشان میگرداند را نشان میدهد:
خطهایی که نمیشود با اطمینان تایپ کرد بهعنوان مشکل فهرست میشوند، و تا کانفیگ عوض نشود اعمال تأییدشدنی نیست. مثلاً: رمزی که جمعآوریکننده نمیشناسد، تنظیمی در RouterOS که فقط دستی پاک میشود، یا access list شمارهداری که از وسط تغییر کرده.
از درخواست ادغام: وقتی درخواستی روی مخزن کانفیگ سایت ادغام شد، کارت دوقلوی شبکهاش اعمالش روی دستگاههای … را پیشنهاد میدهد. این اعمال هر دستگاهی را که فایلش در آن شاخه با آنچه اجرا میکند فرق دارد مطابق فایل میکند.
بعضی تغییرها روی همهٔ دستگاهها یکیاند: سرور NTP تازه، سرور syslog، عوض کردن community در SNMP، کاربری که رفته. دستورالعمل چنین تغییری را یک بار، برای هر سازنده، توصیف میکند و آن را بهصورت یک اعمال روی همهٔ دستگاههایی که لازمش دارند اجرا میکند.
در زبانهٔ اعمال تغییرها، زیر دستورالعملها، از کتابخانه شروع کنید (سرور NTP، سرور syslog، سرورهای DNS، عوض کردن community در SNMP، حذف یک کاربر محلی، فقط SSH روی خطهای VTY) یا دستورالعمل تازه بنویسید. برای هر سازنده، هر خط یکی:
Text
+ ntp server {{ntp}}- ntp server *[line vty 0 4] + transport input ssh? show ntp associations => {{ntp}}
+ خطی که کانفیگ باید داشته باشد. فقط جایی که نیست اضافه میشود.
- خطی که نباید داشته باشد. * در انتها با هر ادامهای جور است: ntp server * همهٔ سرورهای NTP را برمیدارد.
[section] در ابتدا خط را داخل یک بخش میگذارد (interface Vlan10، line vty 0 4، aaa در هواوی). بخشی که هنوز نیست اضافه میشود.
? فرمانی فقطخواندنی (show، display، print در RouterOS) که پس از تغییر، خروجیاش باید متن بعد از => را نشان دهد. همراه بقیه بررسی میشود و اگر نشان ندهد تغییر برمیگردد.
{{name}} یک پارامتر است که هنگام اجرای دستورالعمل پر میشود.
دستورالعمل را میشود به دستگاههایی با برچسبهای خاص محدود کرد (core، branch). اجرا پارامترها را میپرسد، بعد پیشنمایش هر دستگاه را نشان میدهد: چه فرمانهایی میگیرد، یا چرا کنار گذاشته میشود (از قبل همانطور است، خطی برای سازندهاش نیست، هنوز خوانده نشده). برنامهریزی اعمال از همهٔ دستگاههایی که تغییر را لازم دارند یک اعمال میسازد. مثل هر اعمال دیگری تأیید، موج به موج انجام، بررسی و در صورت لزوم برگردانده میشود.
مقدار هر پارامتر فقط یک خط است، پس هیچ مقداری نمیتواند فرمان اضافهای جا بدهد. ارتقای فرمور که دستگاه را ریاستارت میکند کار دستورالعملها نیست: جمعآوریکنندهها عمداً reload را نمیپذیرند.
جمعآوریکننده موجهای تأییدشده را در نوبت بعدی پرسوجویش (هر ۳۰ ثانیه) برمیدارد. برای هر موج:
یک موج، از تأیید تا تثبیت
مهندس
Zaryn
جمعآوریکننده
دستگاه
برنامهریزی
برنامهریزی و تأیید
↺ دوقلو ترافیک را پیشبینی میکند
در سایت، هر ۳۰ ثانیه
موج تأییدشدهای هست؟
بله: موج
کانفیگ را دوباره بخوان
با آنچه برنامه از آن شروع شد فرق دارد؟ موج رد میشود، چیزی تایپ نمیشود
تغییر را با safe mode یا dead man's switch اعمال کن
مسیرها، همسایهها، probeها
همهچیز دو بار برقرار است؟ نگهش دار. وگرنه برش گردان، آخرین دستگاه اول.
نتیجه، پیش و پس
انجام شد، یا برگشت و چرا
همهٔ دستگاهها را دوباره میخواند. کانفیگ هر کدام باید دقیقاً همانی باشد که تغییر از رویش برنامهریزی شد: اگر کسی در این فاصله عوضش کرده باشد، موج رد میشود و چیزی تایپ نمیشود. رمزهایی که برنامه بهصورت برچسب <secret:…> نشان میدهد از کانفیگ خود دستگاه برگردانده میشوند. هیچوقت از سایت بیرون نمیروند.
آنچه باید کار کند را اندازه میگیرد: همسایههای هر دستگاه (CDP، LLDP، OSPF و BGP)، پاسخ SSH همهٔ دستگاههای دیگر سایت، و پروبهای سالم سایت.
تغییر را اعمال میکند، دستگاه به دستگاه، به امنترین روش خود دستگاه:
دستگاه
تغییر چطور برمیگردد
MikroTik RouterOS
Safe mode: نشست تغییر را تا پایان بررسیها نگه میدارد. اگر جمعآوریکننده روتر را از دست بدهد یا از کار بیفتد، خود RouterOS همهچیز را برمیگرداند.
FRRouting
کلید مرد مرده روی دستگاه: فرمانهای برگرداندن در فایلی منتظر میمانند و اگر تغییر بهموقع تأیید نشود خودشان اجرا میشوند.
VyOS
همین: کانفیگ قبلی ذخیره میشود و اگر تأیید نشود دوباره بارگذاری میشود.
Cisco IOS / IOS-XE، Huawei VRP
جمعآوریکننده فرمانهای برگرداندن را تایپ میکند. کانفیگ اجرایی فقط بعد از تأیید تغییر ذخیره میشود، پس ریلود هم کانفیگ قبلی را برمیگرداند.
شبکه را بررسی میکند، بعد از زمان آرامگرفتن، بارها، تا همهچیز پایدار شود یا زمان تمام شود، و پیش از نگهداشتن یک بار دیگر ۱۵ ثانیه بعد:
هر دستگاه هنوز پاسخ میدهد؛
کانفیگش تغییر کرده؛
مسیرهایی که دوقلو پیشبینی کرد هستند، و آنهایی که گفت میروند رفتهاند؛
هیچ همسایهای از دست نرفته؛
دستگاههای دیگری که پاسخ میدادند هنوز پاسخ میدهند؛
پروبهایی که سالم بودند هنوز سالماند. پروبهایی که به گفتهٔ دوقلو تغییر عمداً قطعشان میکند بررسی نمیشوند.
نگهش میدارد (safe mode آزاد، کلید خاموش، کانفیگ با write memory یا save ذخیره)، یا روی همهٔ دستگاههای موج برش میگرداند، از آخر به اول. بعد یک بار دیگر میخواندشان تا بگوید کانفیگ هر کدام دقیقاً مثل قبل است یا نه.
جمعآوریکننده فرمانهایی را که تغییر کانفیگ نیستند، هرچه Zaryn بفرستد، نمیپذیرد: reload، erase، کار با فایل، اسکریپت، do …، فرمانهای /system و /file در RouterOS، و task scheduler در VyOS.
وقتی موجی در جریان است، صفحهاش زنده دنبالش میکند: خواندن دستگاهها ← اعمال تغییر ← بررسی شبکه ← نگهداشتن و ذخیره، یا در حال برگرداندن. هر دستگاه بررسیهایش را همانطور که میرسند نشان میدهد (✓ پاسخ میدهد، ✓ مسیرها، ✗ همسایهها…) با دلیل هر کدام که ناموفق شد. متن کامل جلسه همهٔ نشست است، هر فرمانی که تایپ شد و هر پاسخی، با زمان:
Text
0.0s wave of "Costly link r1-r3": 1 device(s) 1.9s before: 2 neighbor(s), 3/3 device(s) answering, 2/2 probe(s) passing 2.0s r1: changing 3 line(s) through vtysh; undone by the device itself in 540s unless confirmed 2.0s r1> interface eth3 2.0s r1> ip ospf cost 100 2.0s r1> exit 62.4s checks pass; checking again in 15s before keeping it 77.6s checks pass 78.1s r1: confirmed and saved
تغییرهای سایت هر اعمالی را که برنامهریزی، تأیید، انجام، برگردانده یا ناموفق شد فهرست میکند.
برگرداندن اعمال تازهای برنامهریزی میکند که دستگاهها را به کانفیگ قبلی برمیگرداند. مثل هر اعمال دیگری بازبینی و تأیید میشود.
لغو اعمال را پیش از شروع متوقف میکند. اگر در جریان باشد، موجی که در حال اعمال است تمام میشود (بررسی میشود، میماند یا برمیگردد) و موج دیگری شروع نمیشود.
وقتی محافظ خود دستگاه تغییری را برگرداند یا موجی برگردانده شد، کانفیگ دستگاه به همان کانفیگ تأییدشده برگشته و بهعنوان انحراف نشان داده نمیشود.
قناری: اول فقط یک دستگاه. بقیه فقط وقتی دنبالش میآیند که پایدار بماند.
دستگاه در هر موج: بقیه، N تا N تا. هر موج پیش از شروع موج بعد بررسی میشود، و موجی که برگردانده شود اعمال را متوقف میکند. موجهای قبلی میمانند؛ برگرداندن برشان میگرداند.
مکث بین موجها: فرصتی برای نگاه به داشبوردها و کاربران پیش از ادامه.
نه پیش از و پایان پنجره: پنجرهٔ نگهداری. پیش از آن چیزی شروع نمیشود. اگر پیش از انجام همهٔ موجها تمام شود، بقیه متوقف میشود.
دوقلو مسیرهای مورد انتظار بعد از هر موج را برای شبکه در همان نقطه حساب میکند، پس قناری با آنچه خودش بهتنهایی باید بکند سنجیده میشود.
در میکروتیک، نشست قطعشده تغییر را برمیگرداند. در FRRouting و VyOS، کلید خود دستگاه.
در سیسکو و هواوی، تغییر اجرا میماند ولی ذخیره نمیشود، پس ریلود هم کانفیگ قبلی را برمیگرداند. به دستگاه سر بزنید.
وقتی جمعآوریکننده به اندازهٔ زمان آرامگرفتن، زمان بررسی و ۱۵ دقیقه ساکت بماند، Zaryn آن موج را گمشده علامت میزند. اعمال ناموفق میشود و همین را میگوید.
اعمال تغییر روی دستگاههایی کار میکند که zev میتواند بخواند و تغییر دهد: Cisco IOS و IOS-XE، Huawei VRP، MikroTik RouterOS، FRRouting (از طریق vtysh) و VyOS. دستگاههای لینوکس ساده تغییر نمیکنند.
حداکثر ۳۰۰۰ فرمان برای هر دستگاه در هر اعمال. تغییرهای بزرگتر بهتر است بههرحال تقسیم شوند.
رمزی که در کانفیگ جدید بهصورت آشکار تایپ میکنید (رمز تازه) همانطور که تایپ شده به جمعآوریکننده فرستاده میشود. رمزهایی که از قبل روی دستگاه هستند برچسب میمانند و هیچوقت از آن بیرون نمیروند.
پشتیبانی سیسکو، هواوی و میکروتیک روی دستگاههای شبیهسازیشده آزموده شده و VyOS فقط در آزمونهای واحد: اولین اعمال را روی دستگاه آزمایشگاهی یا در پنجرهٔ نگهداری امتحان کنید.