Adrian در متن ویرایششدهٔ یک ارائه در دورهمی DevOps، ابزار pyinfra را معرفی میکند؛ ابزاری عمدتاً command-line که کد Python را به دستورهای shell تبدیل میکند و آنها را از طریق SSH، بهصورت موازی روی چند server اجرا میکند. سناریوی ارائه، deploy یک landing page و یک web app مبتنی بر Python است؛ ابتدا روی یک virtual machine محلی و سپس روی دو server جداگانه.
pyinfra مانند Ansible رویکرد declarative دارد: وضعیت مطلوب server توصیف میشود و ابزار آن را ایجاد میکند. همچنین idempotent است؛ یعنی اگر وضعیت موجود از قبل مطابق خواسته باشد، تغییری انجام نمیشود. تفاوت برجسته در این معرفی، نوشتن deployment با Python بهجای YAML است. در نتیجه، استفاده از for، if، import، code completion و Type Checking در همین فایلها ممکن است.
آموزش با دو مفهوم operation و fact پیش میرود. operation وضعیت server را تغییر میدهد و بیشتر operationها declarative و idempotent هستند. fact اطلاعاتی دربارهٔ host مقصد جمع میکند تا تصمیمگیری دربارهٔ operation ممکن شود. برای نمونه، با خواندن نام توزیع Linux میتوان مشخص کرد package مربوط به Apache باید با نام apache2 نصب شود یا httpd. فایل Python حاوی operationها نیز در اصطلاح pyinfra یک deploy نام دارد.
در مثال ساخت فایل، pyinfra ابتدا نشان میدهد کدام operation روی کدام host تغییر ایجاد خواهد کرد و تأیید میخواهد. اجرای دوبارهٔ همان deploy، وقتی فایل موجود است، تغییری ایجاد نمیکند. نمونهٔ سادهشدهٔ پیادهسازی هم همین منطق را نشان میدهد: وضعیت فعلی با fact خوانده میشود، با وضعیت مطلوب مقایسه میشود و فقط در صورت تفاوت، دستور لازم تولید میشود. گزینهٔ --debug نیز دستورهای اجراشده در مرحلههای مختلف را نمایش میدهد.
نویسنده pyinfra را برای پیکربندی server از طریق SSH، self-hosting و اجرای دستورهای ad-hoc روی مجموعهای از serverها مناسب میداند. در عین حال، محدودیتها را هم ذکر میکند: تعداد operationهای آماده و ecosystem آن از Ansible کوچکتر است، pipeline کاملاً خودکار کار اضافه میخواهد و اجرای همزمان deployment توسط چند نفر به مراقبت نیاز دارد. او به وجود Python API برای ساخت ابزار روی pyinfra نیز اشاره میکند.





