روتر میزبان ابری، CHR

    • روتر میزبان ابری، CHR

       

Cloud Hosted Router (CHR) یک نسخه RouterOS است که برای اجرا به عنوان یک ماشین مجازی در نظر گرفته شده است. این معماری 64 بیتی x86 را پشتیبانی می کند و می تواند بر روی اکثر هایپروایزرهای محبوب مانند VMWare، Hyper-V، VirtualBox، KVM و غیره استفاده شود. CHR دارای ویژگی‌های RouterOS کامل است که به طور پیش‌فرض فعال هستند، اما مدل مجوز متفاوتی نسبت به سایر نسخه‌های RouterOS دارد.

سیستم مورد نیاز

  • نسخه بسته: RouterOS نسخه 6.34 یا جدیدتر
  • CPU میزبان: 64 بیتی با پشتیبانی از مجازی سازی
  • رم: 128 مگابایت یا بیشتر (حداکثر: 128 گیگابایت)
  • دیسک: 128 مگابایت فضای دیسک برای هارد درایو مجازی CHR (حداکثر: 16 گیگابایت)

حداقل RAM مورد نیاز به تعداد رابط و تعداد CPU بستگی دارد. با استفاده از فرمول زیر می توانید یک عدد تقریبی بدست آورید:

  • RouterOS نسخه 6 – RAM = 128 + [ 8 × (CPU_COUNT) × (INTERFACE_COUNT – 1)]
  • RouterOS نسخه 7 – RAM = 256 + [ 8 × (CPU_COUNT) × (INTERFACE_COUNT – 1)]

توجه: توصیه می کنیم حداقل 1024 مگابایت RAM برای نمونه های CHR اختصاص دهید.

CHR بر روی پلتفرم های زیر آزمایش شده است:

  • VirtualBox 6 در لینوکس و OS X
  • VMWare Fusion 7 و 8 در OS X
  • VMWare ESXi 6.5
  • Qemu 2.4.0.1 در لینوکس و OS X
  • Hyper-V در ویندوز سرور 2008r2، 2012 و ویندوز 10 (در حال حاضر فقط ماشین مجازی Hyper-V نسل 1 پشتیبانی می شود)
  • سرور Xen 7.1

هشدار: هایپروایزرهایی که مجازی سازی را ارائه می دهند پشتیبانی نمی شوند.

رابط های شبکه و دیسک قابل استفاده در هایپروایزرهای مختلف:

  • ESX:
    • شبکه: vmxnet3, E1000
    • دیسک: IDE، VMware Paravirtual SCSI، LSI Logic SAS، LSI Logic Parallel
  • Hyper-V:
    • شبکه: آداپتور شبکه، آداپتور شبکه قدیمی
    • دیسک: IDE، SCSI
  • Qemu/KVM:
    • شبکه: Virtio، E1000، vmxnet3 (اختیاری)
    • دیسک: IDE، Sata، Virtio
  • VirtualBox
    • شبکه: E1000, rtl8193
    • دیسک: IDE، Sata، SCSI، SAS

توجه: کنترلر SCSI Hyper-V و ESX فقط برای دیسک های ثانویه قابل استفاده است، تصویر سیستم باید با کنترلر IDE استفاده شود!

هشدار: اگر گزینه‌های رابط مصنوعی بهتری در Hypervisor خاصی موجود است، استفاده از رابط شبکه E1000 را توصیه نمی‌کنیم!

نحوه نصب یک سیستم RouterOS مجازی با تصاویر CHR

ما 4 تصویر مختلف دیسک مجازی را برای انتخاب ارائه می دهیم. توجه داشته باشید که آنها فقط تصاویر دیسک هستند و نمی توانید آنها را به سادگی اجرا کنید.

  • تصویر دیسک RAW (فایل img.)
  • تصویر دیسک VMWare (فایل vmdk.)
  • تصویر دیسک Hyper-V (فایل vhdx.)
  • تصویر دیسک VirtualBox (فایل vdi.)

مراحل نصب CHR

  1. تصویر دیسک مجازی را برای هایپروایزر خود دانلود کنید
  2. یک ماشین مجازی مهمان ایجاد کنید
  3. از فایل تصویری دانلود شده قبلی به عنوان درایو دیسک مجازی استفاده کنید
  4. ماشین مجازی مهمان CHR را راه اندازی کنید
  5. به CHR جدید خود وارد شوید. کاربر پیش فرض “admin” بدون رمز عبور است

لطفاً توجه داشته باشید که سیستم‌های CHR در حال اجرا را می‌توان شبیه‌سازی و کپی کرد، اما کپی از دوره آزمایشی قبلی آگاه است، بنابراین نمی‌توانید با تهیه یک کپی از CHR، زمان آزمایشی خود را افزایش دهید. با این حال، شما مجاز به صدور مجوز برای هر دو سیستم به صورت جداگانه هستید. برای ایجاد یک سیستم تریل جدید، باید یک نصب جدید انجام دهید و RouterOS را مجددا پیکربندی کنید.

نصب راهنماهای CHR

مجوز CHR

CHR دارای 4 سطح مجوز است:

  • رایگان
  • p1 perpetual-1 (45 دلار)
  • p10 perpetual-10 (95 دلار)
  • p-unlimited perpetual-unlimited (250 دلار)

مجوز آزمایشی رایگان 60 روزه برای تمام سطوح مجوز پولی در دسترس است. برای دریافت مجوز آزمایشی رایگان، باید یک حساب کاربری در MikroTik.com داشته باشید زیرا تمام مدیریت مجوز در آنجا انجام می شود.

Perpetual یک مجوز مادام العمر است (یک بار بخرید، برای همیشه استفاده کنید). امکان انتقال مجوز دائمی به نمونه دیگری از CHR وجود دارد. یک نمونه در حال اجرا CHR زمانی را نشان می دهد که باید به سرور حساب برای تمدید مجوز خود دسترسی داشته باشد. اگر نمونه CHR نتواند مجوز را تمدید کند، طوری رفتار می کند که گویی دوره آزمایشی تمام شده است و اجازه ارتقای RouterOS به نسخه جدیدتر را نمی دهد.

پس از صدور مجوز یک سیستم آزمایشی در حال اجرا، باید تابع تمدید مجوز /system را به صورت دستی از CHR اجرا کنید تا فعال شود. در غیر این صورت، سیستم متوجه نخواهد شد که شما آن را در حساب خود مجوز داده اید. اگر این کار را قبل از زمان ضرب‌الاجل سیستم انجام ندهید، دوره آزمایشی به پایان می‌رسد و شما باید یک نصب کامل CHR را انجام دهید، درخواست آزمایشی جدید کنید و سپس با مجوزی که دریافت کرده‌اید مجوز آن را دریافت کنید.

مجوز محدودیت سرعت قیمت
رایگان 1 مگابیت رایگان
P1 1 گیگابیت 45 دلار
P10 10 گیگابیت 95 دلار
P-نامحدود نامحدود 250 دلار

مجوزهای پرداخت شده

p1

سطح مجوز p1 (perpetual-1) به CHR اجازه می دهد تا به طور نامحدود اجرا شود. این به 1 گیگابیت در ثانیه آپلود در هر رابط محدود است. بقیه ویژگی های ارائه شده توسط CHR بدون محدودیت در دسترس هستند. امکان ارتقاء p1 به p10 یا p-unlimited وجود دارد (سطح مجوز جدید را می توان با قیمت استاندارد خریداری کرد).  پس از خرید ارتقا، مجوز قبلی برای استفاده بعدی در حساب شما در دسترس خواهد بود.

p10

سطح مجوز p10 (perpetual-10) به CHR اجازه می دهد تا به طور نامحدود اجرا شود. این به 10 گیگابیت در ثانیه آپلود در هر رابط محدود است. بقیه ویژگی های ارائه شده توسط CHR بدون محدودیت در دسترس هستند. امکان ارتقاء p10 به p-unlimited پس از خرید ارتقاء، مجوز قبلی برای استفاده بعدی در حساب شما در دسترس خواهد بود.

p-نامحدود

سطح مجوز p -unlimited (همیشگی-نامحدود) به CHR اجازه می دهد تا به طور نامحدود اجرا شود. این بالاترین سطح مجوز است و هیچ محدودیت اجباری ندارد.

مجوزهای رایگان

چندین گزینه برای استفاده و امتحان رایگان CHR وجود دارد.

رایگان

سطح مجوز رایگان به CHR اجازه می دهد تا به طور نامحدود اجرا شود. این به 1 مگابیت در ثانیه آپلود در هر رابط محدود است. بقیه ویژگی های ارائه شده توسط CHR بدون محدودیت در دسترس هستند. برای استفاده از این، تنها کاری که باید انجام دهید این است که فایل تصویر دیسک را از صفحه دانلود ما دانلود کرده و یک مهمان مجازی ایجاد کنید.

آزمایشی 60 روزه

علاوه بر نصب رایگان محدود، می‌توانید سرعت افزایش یافته مجوزهای P1/P10/PU را با 60 آزمایشی نیز آزمایش کنید.

شما باید یک حساب کاربری ثبت شده در MikroTik.com داشته باشید . سپس می توانید سطح مجوز مورد نظر را برای آزمایشی از روتر خود درخواست کنید که شناسه روتر شما را به حساب شما اختصاص می دهد و امکان خرید مجوز از حساب شما را فراهم می کند. همه معادل های مجوز پولی برای آزمایش در دسترس هستند. یک دوره آزمایشی 60 روز از روز دریافت است، پس از گذشت این زمان، منوی مجوز شما شروع به نمایش “به روز رسانی محدود” می کند، به این معنی که RouterOS دیگر قابل ارتقا نیست.

اگر قصد خرید مجوز انتخابی را دارید، باید این کار را ظرف 60 روز از تاریخ پایان آزمایشی انجام دهید. اگر دوره آزمایشی شما به پایان برسد و تا 2 ماه پس از پایان آن هیچ خریدی وجود نداشته باشد، دستگاه دیگر در حساب MikroTik شما ظاهر نمی شود. برای خرید در بازه زمانی لازم، باید یک نصب CHR جدید انجام دهید.

برای درخواست مجوز آزمایشی، باید دستور ” /system License renew ” را از خط فرمان دستگاه CHR اجرا کنید. نام کاربری و رمز عبور اکانت mikrotik.com از شما خواسته می شود .

اگر قصد دارید از چندین سیستم مجازی از یک نوع استفاده کنید، ممکن است دستگاه بعدی همان شناسه سیستم را با دستگاه اصلی داشته باشد. این ممکن است در برخی از ارائه دهندگان ابری مانند Linode رخ دهد. برای جلوگیری از این امر، پس از اولین بوت، دستور “/system License generate-new-id” را قبل از درخواست مجوز آزمایشی اجرا کنید. توجه داشته باشید که این ویژگی باید فقط زمانی استفاده شود که CHR در یک نوع رایگان مجوز RouterOS در حال اجرا است. اگر قبلاً مجوز پولی یا آزمایشی دریافت کرده اید، از ویژگی بازسازی استفاده نکنید زیرا دیگر نمی توانید کلید فعلی خود را به روز کنید.

گرفتن مجوز

پس از راه اندازی اولیه، یک نمونه CHR دارای مجوز رایگان اختصاص داده می شود. از آنجا می توان مجوز را به سطح بالاتر ارتقا داد. هنگامی که مجوز آزمایشی دارید، تمام کار با مجوز روی سرور حساب انجام می شود ، جایی که امکان ارتقاء مجوز به سطح بالاتر وجود دارد، مگر اینکه قبلاً p-unlimited باشد.

از Free به سطح مجوز p1 یا بالاتر ارتقا دهید

ارتقای اولیه از سطح رایگان به هر چیزی بالاتر از آن باعث ثبت نمونه CHR در سرور حساب می شود . برای انجام این کار، باید نام کاربری و رمز عبور MikroTik.com و سطح مجوز مورد نظر خود را وارد کنید. در نتیجه، یک شماره شناسه CHR به حساب شما در سرور حساب اختصاص داده می شود و یک آزمایش 60 روزه برای آن شناسه ایجاد می شود. 2 راه برای دریافت مجوز وجود دارد – با استفاده از رابط خط فرمان WinBox یا RouterOS:

سطح مجوز را با استفاده از WinBox ارتقا دهید

(سیستم -> منوی مجوز):

سطح مجوز را با استفاده از  رابط خط فرمان ارتقا دهید:

				
					[admin@MikroTik] > /system license print 
  system-id: 6lR1ZP/utuJ
      level: free

[admin@MikroTik] > /system license renew 
account: mymikrotikcomaccount
password: *********************
level: p1 
  status: done
  
[admin@MikroTik] > /system license print 
        system-id: 6lR1ZP/utuJ
            level: p1
  next-renewal-at: jan/10/2016 21:59:59
      deadline-at: feb/09/2016 21:59:59
				
			

پرداخت:

برای به دست آوردن آزمایشی سطح بالاتر، یک نمونه CHR جدید راه اندازی کنید، مجوز را تمدید کنید و سطح مورد نظر را انتخاب کنید.

برای ارتقاء از مجوز آزمایشی به پولی به سرور حساب MikroTik.com بروید و «همه کلیدها» را در بخش Cloud Hosted Router (CHR) انتخاب کنید:

لیستی از ماشین آلات و مجوزهای CHR به شما ارائه می شود:

برای ارتقاء از یک مجوز آزمایشی به یک مجوز پولی، روی «ارتقا» کلیک کنید، سطح مجوز مورد نظر را انتخاب کنید (ممکن است با سطح مجوز آزمایشی متفاوت باشد)، و روی «کلید ارتقا» کلیک کنید:

اگر کلیدهای پیش پرداخت موجود باشد، می توان از آن برای CHR استفاده کرد – “پرداخت با استفاده از کلید پیش پرداخت” را فشار دهید. اگر کلیدهای پیش‌پرداختی وجود ندارد یا نمی‌خواهید از آن‌ها استفاده کنید، «ادامه به پرداخت» را فشار دهید.

روش پرداخت را انتخاب کنید: امکان پرداخت با استفاده از کارت اعتباری (CC) یا PayPal وجود دارد.

به روز رسانی مجوز

در منوی ‘/system License’ روتر زمان تمدید بعدی را نشان می دهد که در آن تلاش می کند با سرور واقع در licence.mikrotik.com تماس بگیرد . تلاش‌های ارتباطی ساعتی یک‌بار پس از تاریخ تمدید بعدی انجام می‌شود و تا زمانی که سرور با خطا پاسخ ندهد متوقف نخواهد شد. اگر بدون تماس موفقیت آمیز با سرور حساب به موعد مقرر برسد، روتر در نظر می گیرد که مجوز منقضی شده است و به روز رسانی نرم افزار بیشتر را ممنوع می کند. با این حال، روتر با همان لایسنس قبلی به کار خود ادامه خواهد داد.

اگر می‌خواهید مجوز دائمی را به سطح بالاتر ارتقا دهید، لطفاً مجوز دائمی قبلی را به CHR دیگری منتقل کنید تا شرایطی که مجوز دائمی قبلی در هنگام ارتقا از بین می‌رود حذف شود.

آداپتورهای شبکه مجازی

مسیر سریع از RouterOS نسخه 7 برای آداپتورهای “vmxnet3” و “virtio-net” پشتیبانی می شود.

RouterOS v6 از مسیر سریع پشتیبانی نمی کند.

عیب یابی

در حال اجرا بر روی VMware ESXi

تغییر MTU

VMware ESXi از MTU تا 9000 بایت پشتیبانی می کند. برای بهره مندی از آن، باید نصب ESXi خود را طوری تنظیم کنید که امکان MTU بالاتر را فراهم کند. رابط اترنت مجازی اضافه شده پس از تغییر MTU به درستی توسط سرور ESXi اجازه عبور فریم های جامبو را خواهد داشت. رابط های اضافه شده قبل از تغییر MTU در سرور ESXi توسط سرور ESXi مسدود می شوند (همچنان MTU قدیمی را به عنوان حداکثر اندازه ممکن گزارش می دهد). اگر این را دارید، باید دوباره رابط‌ها را به مهمان‌های مجازی اضافه کنید.

مثال. 2 اینترفیس به مهمان ESXi اضافه شده است، MTU با شناسایی خودکار روی اینترفیس ها اندازه MTU را همانطور که در زمان اضافه شدن رابط بود نشان می دهد:

				
					[admin@chr-vm] > interface ethernet print 
Flags: X - disabled, R - running, S - slave 
 #    NAME           MTU MAC-ADDRESS       ARP       
 0 R  ether1        9000 00:0C:29:35:37:5C enabled   
 1 R  ether2        1500 00:0C:29:35:37:66 enabled
				
			

استفاده از بریج در لینوکس

اگر پل لینوکس از IGMP snooping پشتیبانی می‌کند، و مشکلاتی در ترافیک IPv6 وجود دارد، باید آن ویژگی را غیرفعال کنید زیرا با بسته‌های MLD (چند پخش‌کننده) تعامل دارد و از آنها عبور نمی‌کند.

				
					echo -n 0 > /sys/class/net/vmbr0/bridge/multicast_snooping
				
			

بسته هایی که از مهمانان عبور نمی کنند

مشکل: پس از پیکربندی یک رابط نرم افزاری (VLAN، EoIP، بریج، و غیره) در CHR مهمان، انتقال داده ها به دنیای خارج فراتر از روتر را متوقف می کند.

راه حل: تنظیمات امنیتی VMS (سیستم مدیریت مجازی سازی) خود را بررسی کنید، در صورتی که اگر بسته هایی با برچسب های VLAN اجازه عبور داده شود، آدرس های MAC دیگر مجاز به عبور هستند. تنظیمات امنیتی را بر اساس نیازهای خود تنظیم کنید، مانند اجازه دادن به جعل MAC یا محدوده آدرس MAC خاص. برای رابط های VLAN، معمولاً می توان تگ های مجاز VLAN یا محدوده تگ VLAN را تعریف کرد.

استفاده از VLAN در CHR در Hypervisor های مختلف

در برخی از Hypervisor ها قبل از اینکه VLAN در VM ها استفاده شود، ابتدا باید روی خود Hypervisor پیکربندی شوند.

ESXI

حالت Promiscuous را در یک گروه پورت یا سوئیچ مجازی که برای VM خاصی استفاده خواهید کرد، فعال کنید.

اسناد ESX:

Hyper-V

مستندات Hyper-V:

هایپروایزر bhyve

اجرای CHR در این هایپروایزر امکان پذیر نخواهد بود. CHR را نمی توان به عنوان یک پلتفرم نیمه مجازی اجرا کرد.

لینود

هنگام ایجاد چندین Linode با اندازه دیسک یکسان، Linodes جدید سیستم ID یکسانی خواهند داشت. این باعث می شود که برای دریافت مجوز آزمایشی/پرداخت مشکلاتی ایجاد شود. برای جلوگیری از این امر، دستور را /system license generate-new-idپس از اولین بوت و قبل از درخواست مجوز آزمایشی یا پولی اجرا کنید. با این کار مطمئن شوید که شناسه منحصر به فرد است.

چند مقاله مفید:

VLAN خاص توسط رابط NIC برچسب گذاری نشده است:

اجازه عبور VLAN های دیگر:

ابزار مهمان

VMWare

همگام سازی زمان

باید از رابط کاربری گرافیکی (“همگام سازی زمان مهمان با میزبان”) فعال شود. همگام سازی به عقب به طور پیش فرض غیرفعال است – اگر مهمان بیش از ~ 5 ثانیه از میزبان جلوتر باشد، همگام سازی انجام نمی شود.

عملیات برق

  • اسکریپت های poweron و resume (در صورت وجود و فعال بودن) به ترتیب پس از روشن شدن و از سرگیری عملیات اجرا می شوند.
  • اسکریپت های poweroff و suspend به ترتیب قبل از عملیات خاموش و تعلیق اجرا می شوند.
  • اگر اسکریپت ها بیش از 30 ثانیه طول بکشد یا حاوی خطا باشد، عملیات با شکست مواجه می شود
  • در صورت عدم موفقیت، تکرار مجدد همان عملیات، خطاها را نادیده گرفته و با موفقیت تکمیل می‌شود
  • خروجی اسکریپت ناموفق در فایل ذخیره می شود (به عنوان مثال ‘poweroff-script.log’، ‘resume-script.log’ و غیره)
  • اسکریپت ها را می توان از رابط کاربری گرافیکی Hypervisor (‘run VMware Tools Scripts’) فعال/غیرفعال کرد یا با انبال کردن/غیرفعال کردن اسکریپت ها از کنسول

Quiescing/پشتیبان گیری

خاموش کردن سیستم فایل مهمان فقط در صورت درخواست انجام می شود.

  • اسکریپت freeze قبل از فریز کردن فایل سیستم اجرا می شود
  • اسکریپت انجماد شکست در صورتی اجرا می شود که هایپروایزر نتواند برای یک عکس فوری آماده شود یا اگر فریز اسکریپت شکست بخورد
  • اسکریپت برفک پس از گرفتن عکس فوری اجرا می شود
  • زمان اجرای اسکریپت به 60 ثانیه محدود شده است
  • وقفه های زمانی فریز اسکریپت و خطاها منجر به لغو عملیات پشتیبان می شود
  • دیسک های FAT32 خاموش نمی شوند
  • خروجی اسکریپت ناموفق در فایل ذخیره می شود (به عنوان مثال “freeze-script.log”، “freeze-fail-script.log”، “thaw-script.log”)

اطلاعات مهمان

اطلاعات شبکه، دیسک و سیستم عامل هر 30 ثانیه به هایپروایزر گزارش می شود (GuestStats (حافظه) به طور پیش فرض غیرفعال است، می توان با تنظیم ‘guestinfo.disable-perfmon = “FALSE” در پیکربندی VM فعال شود).

  • ترتیبی که در آن رابط‌های شبکه گزارش می‌شوند، با تنظیم گزینه‌های «guestinfo.exclude-nics»، «guestinfo.primary-nics» و «guestinfo.low-priority-nics» قابل کنترل است. می توان از الگوهای عام استاندارد استفاده کرد.

تامین

می توانید از ProcessManager از vim API برای اجرای اسکریپت ها استفاده کنید. پیوندهای پایتون در دسترس هستند

  • ساختار داده اصلی: GuestProgramSpec
    • اعضای workDirectory و envVariables نادیده گرفته می شوند
    • programPath باید روی “inline” یا “import” تنظیم شود
    • اگر programPathinline’ باشد ، آرگومان ها به عنوان متن اسکریپت تفسیر می شوند
    • اگر programPathimport’ باشد ، آرگومان ها به عنوان مسیر فایل تفسیر می شوند

پس از استفاده از GuestProgramSpec به همراه نمونه ای از GuestAuthentication به عنوان آرگومان های StartProgramInGuest JobID یکتا به دست می آید.

پیشرفت اسکریپت را می توان با استفاده از دستور ListProcessesInGuest ردیابی کرد . ListProcessesInGuest آرایه ای از شناسه های شغلی را می پذیرد. ارسال یک آرایه خالی همه کارهایی را که از API شروع شده اند گزارش می دهد

  • ListProcessesInGuest آرایه ای از نمونه های GuestProcessInfo را برمی گرداند :
    • فیلد pid روی JobID تنظیم شده است
    • endTime فقط پس از اتمام تنظیم می شود
    • exitCode در صورت موفقیت روی 0 و در صورت خطا -1 تنظیم می شود
    • نام روی “inline” یا “import” تنظیم شده است (همان برنامه Path در GuestProgramSpec )

اطلاعات مربوط به کارهای تکمیل شده به مدت 1 دقیقه یا تا زمانی که ListProcessesInGuest (با JobID مربوطه ) فراخوانی شود، نگهداری می شود. اگر اسکریپت ناموفق باشد، فایلی با نام “vix_job_$JobID$ .txt” حاوی خروجی اسکریپت ایجاد می شود. زمان اجرای اسکریپت به 120 ثانیه محدود شده است و خروجی اسکریپت در زمان پایان ذخیره نمی شود.

  • از دستور vmrun runScriptInGuest نیز می توان استفاده کرد
  • PowerCLI cmdlet Invoke-VMScript پشتیبانی نمی شود
  • انتقال فایل میزبان/مهمان پشتیبانی نمی شود
مثال پایتون
				
					#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys,time
from pyVim import connect
from pyVmomi import vmodl,vim


def runInline(content,vm,creds,source):
    ''' Execute script source on vm '''
    if isinstance(source, list):
        source = '\n'.join(source)
    ps = vim.vm.guest.ProcessManager.ProgramSpec(
                programPath = 'console',
                arguments = source
        )
    return content.guestOperationsManager.processManager.StartProgramInGuest(vm,creds,ps)

def runFromFile(content,vm,creds,fileName):
    ''' Execute script file located on CHR '''
    ps = vim.vm.guest.ProcessManager.ProgramSpec(
                programPath = 'import',
                arguments = fileName
    )
    return content.guestOperationsManager.processManager.StartProgramInGuest(vm,creds,ps)


def findDatastore(content,name):
    sessionManager = content.sessionManager

    dcenterObjView = content.viewManager.CreateContainerView(content.rootFolder, [vim.Datacenter], True)

    datacenter = None
    datastore = None
    for dc in dcenterObjView.view:
        dstoreObjView = content.viewManager.CreateContainerView(dc, [vim.Datastore], True)
        for ds in dstoreObjView:
            if ds.info.name == name:
                datacenter = dc
                datastore = ds
                break
        dstoreObjView.Destroy()

    dcenterObjView.Destroy()

    return datacenter,datastore

def _FAILURE(s,*a):
    print(s.format(*a))
    sys.exit(-1)

#------------------------------------------------------------------------------#

if __name__ == '__main__':
    host = sys.argv[1] # ip or something
    user = 'root'
    pwd = 'MikroTik'
    vmName = 'chr-test'
    dataStoreName = 'datastore1'



    service = connect.SmartConnectNoSSL(host=host,user=user,pwd=pwd)
    if not service:
        _FAILURE("Could not connect to the specified host using specified username and password")

    content = service.RetrieveContent()


    #---------------------------------------------------------------------------
    # Find datacenter and datastore


    datacenter,datastore = findDatastore(content,dataStoreName)

    if not datacenter or not datastore:
        connect.Disconnect(service)
        _FAILURE('Could not find datastore \'{}\'',dataStorename)


    #---------------------------------------------------------------------------
    # Locate vm


    vmxPath = '[{0}] {1}/{1}.vmx'.format(dataStoreName, vmName)
    vm = content.searchIndex.FindByDatastorePath(datacenter, vmxPath)

    if not vm:
        connect.Disconnect(service)
        _FAILURE("Could not locate vm")


    #---------------------------------------------------------------------------
    # Setup credentials from user name and pasword

    creds = vim.vm.guest.NamePasswordAuthentication(username = 'admin', password = '')


    #---------------------------------------------------------------------------
    # Run script

    pm = content.guestOperationsManager.processManager

    try:
        # Run script
        src = [':ip address add address=192.168.0.1/24 interface=ether1;']
        jobID = runInline(content, vm, creds, src)

        # Or run file (from FTP root)
        # jobID = runFromFile(content,vm,creds, 'scripts/provision.rsc')


        #---------------------------------------------------------------------------
        # Wait for job to finish

        pm = content.guestOperationsManager.processManager
        jobInfo = pm.ListProcessesInGuest(vm, creds, [jobID])[0]
        while jobInfo.endTime is None:
            time.sleep(1.0)
            jobInfo = pm.ListProcessesInGuest(vm, creds, [jobID])[0]

        if jobInfo.exitCode != 0:
            _FAILURE('Script failed!')
    except:
        raise
    else:
        connect.Disconnect(service)
				
			

KVM

نماینده مهمان QEMU در دسترس است. دستورات عامل پشتیبانی شده را می توان با استفاده از دستور guest-info بازیابی کرد. انتقال فایل میزبان-میهمان را می توان با استفاده از دستورات guest-file-* انجام داد. اطلاعات شبکه مهمان را می توان با استفاده از دستور guest-network-get-interfaces بازیابی کرد.

  • اسکریپت ها را می توان با استفاده از دستور guest-exec همراه با ساختار داده GuestExec اجرا کرد:
    • اگر عضو مسیر ارائه شده باشد، فایل مربوطه اجرا می شود
    • اگر عضو مسیر تنظیم نشده باشد و عضو داده ورودی ارائه شده باشد، مقدار ورودی-داده به عنوان ورودی اسکریپت استفاده می شود.
    • اگر خروجی ضبط تنظیم شده باشد، خروجی اسکریپت گزارش داده می شود
    • از اعضای args و env استفاده نمی شود
  • پیشرفت کار اسکریپت را می توان با دستور guest-exec-status کنترل کرد. ساختار داده GuestExecStatus به صورت زیر پر می شود:
    • در صورت موفقیت عضو کد خروجی روی 0 تنظیم شده است
    • اگر زمان اسکریپت تمام شد، کد خروج روی 1 تنظیم می شود
    • اگر اسکریپت حاوی خطا باشد ، کد خروجی روی -1 تنظیم می شود
    • عضو سیگنال تنظیم نشده است
    • عضو err-data استفاده نمی شود
    • اگر خروجی ضبط درست بود، خروجی اسکریپت کدگذاری شده Base64 در داده‌های خارج ذخیره می‌شود.
  • یک کانال عامل اضافی (‘chr.provision_channel’) نیز در دسترس است