پرو ہوسٹر > بلاگ > انتظامیہ > ہدایات: جوابدہ کرداروں کی جانچ کیسے کریں اور پیداوار سے پہلے مسائل کے بارے میں معلوم کریں۔
ہدایات: جوابدہ کرداروں کی جانچ کیسے کریں اور پیداوار سے پہلے مسائل کے بارے میں معلوم کریں۔
ہر کسی کو خوش!
میں ہوٹل بکنگ سروس میں ڈی او اوپس انجینئر کے طور پر کام کرتا ہوں۔ Ostrovok.ru. اس مضمون میں، میں جوابدہ کرداروں کی جانچ کرنے کے اپنے تجربے کے بارے میں بات کرنا چاہتا ہوں۔
Ostrovok.ru پر ہم کنفیگریشن مینیجر کے بطور جوابی استعمال کرتے ہیں۔ حال ہی میں ہمیں کرداروں کی جانچ کرنے کی ضرورت پیش آئی، لیکن جیسا کہ معلوم ہوا، اس کے لیے زیادہ ٹولز نہیں ہیں - سب سے زیادہ مقبول، شاید، مالیکیول فریم ورک ہے، اس لیے ہم نے اسے استعمال کرنے کا فیصلہ کیا۔ لیکن یہ پتہ چلا کہ اس کی دستاویزات بہت سے نقصانات کے بارے میں خاموش ہیں۔ ہمیں روسی میں کافی تفصیلی گائیڈ نہیں مل سکا، اس لیے ہم نے یہ مضمون لکھنے کا فیصلہ کیا۔
انو
انو - جوابدہ کرداروں کی جانچ میں مدد کے لیے ایک فریم ورک۔
آسان وضاحت: مالیکیول آپ کے بیان کردہ پلیٹ فارم پر ایک مثال بناتا ہے (کلاؤڈ، ورچوئل مشین، کنٹینر؛ مزید تفصیلات کے لیے، سیکشن دیکھیں ڈرائیور) اس پر اپنا کردار چلاتا ہے، پھر ٹیسٹ چلاتا ہے اور مثال کو حذف کرتا ہے۔ کسی ایک مرحلے میں ناکامی کی صورت میں، مالیکیول آپ کو اس کے بارے میں مطلع کرے گا۔
اب مزید تفصیل سے۔
تھوڑا سا اصول
آئیے مالیکیول کی دو اہم ہستیوں پر غور کریں: منظر نامہ اور ڈرائیور۔
منظر نامے
اسکرپٹ میں اس بات کی تفصیل موجود ہے کہ کیا، کہاں، کیسے اور کس ترتیب میں کیا جائے گا۔ ایک کردار میں کئی اسکرپٹ ہو سکتے ہیں، اور ہر ایک راستے کے ساتھ ایک ڈائرکٹری ہے۔ <role>/molecule/<scenario>، جس میں ٹیسٹ کے لیے درکار کارروائیوں کی تفصیل ہوتی ہے۔ اسکرپٹ کو شامل کرنا ضروری ہے۔ default، جو خود بخود بن جائے گا اگر آپ ایک مالیکیول کے ساتھ کردار کو شروع کرتے ہیں۔ درج ذیل اسکرپٹ کے نام آپ پر منحصر ہیں۔
اسکرپٹ میں جانچ کی کارروائیوں کی ترتیب کو کہا جاتا ہے۔ میٹرکس، اور بطور ڈیفالٹ یہ ہے:
(اقدامات کا لیبل لگا ہوا ہے۔ ?، اگر صارف کے ذریعہ متعین نہ کیا گیا ہو تو بطور ڈیفالٹ چھوڑ دیا جاتا ہے)
lint - لنٹر چل رہا ہے. بطور ڈیفالٹ استعمال ہوتے ہیں۔ yamllint и flake8,
destroy - مالیکیول کے آخری لانچ سے مثالوں کو حذف کرنا (اگر کوئی باقی ہے)
dependency? - آزمائشی کردار کے قابل انحصار کو انسٹال کرنا،
syntax - استعمال کرتے ہوئے کردار کے نحو کی جانچ کرنا ansible-playbook --syntax-check,
create - ایک مثال بنانا،
prepare? - مثال کی تیاری؛ مثال کے طور پر python2 کی جانچ/انسٹال کرنا
converge - آزمائشی پلے بک کا اجراء،
idempotence - آئیڈیمپوٹینسی ٹیسٹ کے لیے پلے بک کو دوبارہ شروع کرنا،
side_effect? - اعمال کا براہ راست تعلق کردار سے نہیں، لیکن ٹیسٹ کے لیے ضروری ہے،
verify - استعمال کرتے ہوئے نتیجے میں ترتیب کے ٹیسٹ چل رہا ہے۔ testinfra(پہلے سے طے شدہ)goss/inspec,
cleanup? - (نئے ورژن میں) - موٹے طور پر، مالیکیول سے متاثر بیرونی انفراسٹرکچر کی "صفائی"،
destroy - ایک مثال کو حذف کرنا۔
یہ ترتیب زیادہ تر معاملات کا احاطہ کرتی ہے، لیکن اگر ضروری ہو تو اسے تبدیل کیا جا سکتا ہے۔
مندرجہ بالا اقدامات میں سے ہر ایک کو الگ سے چلایا جا سکتا ہے۔ molecule <command>. لیکن یہ سمجھ لینا چاہیے کہ اس طرح کے ہر کلی کمانڈ کے لیے اعمال کی اپنی ترتیب ہو سکتی ہے، جس پر عمل کر کے آپ معلوم کر سکتے ہیں۔ molecule matrix <command>. مثال کے طور پر، کمانڈ چلاتے وقت converge (پلے بک کو ٹیسٹ کے تحت چلانا)، درج ذیل اعمال انجام دیے جائیں گے:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
ان اعمال کی ترتیب میں ترمیم کی جا سکتی ہے۔ اگر فہرست میں سے کچھ پہلے ہی کر دیا گیا ہے، تو اسے چھوڑ دیا جائے گا۔ موجودہ حالت کے ساتھ ساتھ مثالوں کی تشکیل، مالیکیول ڈائرکٹری میں اسٹور کرتا ہے۔ $TMPDIR/molecule/<role>/<scenario>.
کے ساتھ اقدامات شامل کریں۔ ? آپ مطلوبہ اعمال کو جوابی پلے بک فارمیٹ میں بیان کر سکتے ہیں، اور فائل کا نام مرحلہ کے مطابق بنا سکتے ہیں: prepare.yml/side_effect.yml. ان فائلوں کی توقع کریں مالیکیول اسکرپٹ فولڈر میں ہوگا۔
ڈرائیور
ڈرائیور ایک ایسی ہستی ہے جہاں ٹیسٹ کے نمونے بنائے جاتے ہیں۔
معیاری ڈرائیوروں کی فہرست جن کے لیے مالیکیول کے ٹیمپلیٹس تیار ہیں درج ذیل ہیں: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
زیادہ تر معاملات میں، ٹیمپلیٹس فائلیں ہیں۔ create.yml и destroy.yml اسکرپٹ فولڈر میں جو بالترتیب کسی مثال کی تخلیق اور حذف کرنے کی وضاحت کرتا ہے۔
مستثنیات Docker اور Vagrant ہیں، کیونکہ ان کے ماڈیولز کے ساتھ تعامل مذکورہ فائلوں کے بغیر ہو سکتا ہے۔
یہ ڈیلیگیٹڈ ڈرائیور کو نمایاں کرنے کے قابل ہے، کیونکہ اگر اسے استعمال کیا جاتا ہے تو، مثال کی تشکیل اور فائلوں کو حذف کرنے میں صرف مثال کی ترتیب کے ساتھ کام بیان کیا جاتا ہے؛ باقی انجینئر کو بیان کرنا چاہئے۔
پہلے سے طے شدہ ڈرائیور ڈوکر ہے۔
اب آئیے مشق کی طرف بڑھیں اور وہاں مزید خصوصیات پر غور کریں۔
شروع کریں
"ہیلو ورلڈ" کے طور پر، آئیے ایک سادہ nginx انسٹالیشن رول کی جانچ کریں۔ ہم ڈوکر کو ڈرائیور کے طور پر منتخب کریں گے - میرے خیال میں آپ میں سے اکثر نے اسے انسٹال کر لیا ہے (اور یاد رکھیں کہ ڈوکر ڈیفالٹ ڈرائیور ہے)۔
آئیے تیاری کریں۔ virtualenv اور اس میں انسٹال کریں molecule:
اگلا مرحلہ نئے کردار کو شروع کرنا ہے۔
کمانڈ کا استعمال کرتے ہوئے ایک نئے کردار کے ساتھ ساتھ ایک نئے اسکرپٹ کی شروعات کی جاتی ہے۔ molecule init <params>:
> molecule init role -r nginx
--> Initializing new role nginx...
Initialized role in <path>/nginx successfully.
> cd nginx
> tree -L 1
.
├── README.md
├── defaults
├── handlers
├── meta
├── molecule
├── tasks
└── vars
6 directories, 1 file
نتیجہ ایک عام جوابدہ کردار ہے۔ مزید یہ کہ مالیکیولز CLI کے ساتھ تمام تعاملات رول جڑ سے کیے جاتے ہیں۔
آئیے دیکھتے ہیں کہ رول ڈائرکٹری میں کیا ہے:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
آئیے تشکیل کا تجزیہ کرتے ہیں۔ molecule/default/molecule.yml (صرف ڈاکر کی تصویر کو تبدیل کریں):
مثالوں کی ترتیب کو بیان کرتا ہے۔
ایک ڈرائیور کے طور پر ڈاکر کے معاملے میں، مالیکیول کو اس حصے پر دہرایا جاتا ہے، اور فہرست کا ہر عنصر اس میں دستیاب ہے۔ Dockerfile.j2 ایک متغیر کے طور پر item.
ڈرائیور کی صورت میں جس کی ضرورت ہے۔ create.yml и destroy.yml، سیکشن ان میں بطور دستیاب ہے۔ molecule_yml.platforms، اور اس پر تکرار پہلے ہی ان فائلوں میں بیان کی گئی ہے۔
چونکہ مالیکیول جوابدہ ماڈیولز کو مثالوں کا کنٹرول فراہم کرتا ہے، اس لیے ممکنہ ترتیبات کی فہرست بھی وہاں تلاش کی جانی چاہیے۔ ڈوکر کے لیے، مثال کے طور پر، ماڈیول استعمال کیا جاتا ہے۔ docker_container_module. دوسرے ڈرائیوروں میں کون سے ماڈیولز استعمال ہوتے ہیں اس میں پایا جا سکتا ہے۔ دستاویزات.
اس کے ساتھ ساتھ مختلف ڈرائیوروں کے استعمال کی مثالیں بھی مل سکتی ہیں۔ خود مالیکیول کے ٹیسٹ میں.
یہاں بدل دیں۔ سینٹوس:7 پر اوبنٹو.
رزق دینے والا
"سپلائر" - ایک ایسا ادارہ جو مثالوں کا انتظام کرتا ہے۔ مالیکیول کے معاملے میں، یہ قابل قبول ہے، دوسروں کے لیے سپورٹ کا منصوبہ نہیں بنایا گیا ہے، اس لیے اس سیکشن کو انتباہ کے ساتھ قابل قبول توسیعی ترتیب کہا جا سکتا ہے۔
یہاں آپ بہت سی چیزوں کی وضاحت کر سکتے ہیں، میں اپنی رائے میں اہم نکات پر روشنی ڈالوں گا:
پلے بکس: آپ یہ بتا سکتے ہیں کہ مخصوص مراحل میں کون سی پلے بکس استعمال کی جانی چاہئیں۔
اسکرپٹ کی ترتیب کا نام اور تفصیل۔
آپ کلید کو شامل کر کے کسی بھی کمانڈ کا ڈیفالٹ ایکشن میٹرکس تبدیل کر سکتے ہیں۔ <command>_sequence اور ہمیں درکار اقدامات کی فہرست کی وضاحت کرکے اس کی قدر کے طور پر۔
ہم کہتے ہیں کہ ہم پلے بک رن کمانڈ چلاتے وقت اعمال کی ترتیب کو تبدیل کرنا چاہتے ہیں: molecule converge
ہمارے سادہ کردار کو بغیر کسی پریشانی کے آزمایا گیا۔
یہ یاد رکھنے کے قابل ہے کہ اگر کام کے دوران مسائل ہیں molecule test، پھر اگر آپ نے پہلے سے طے شدہ ترتیب کو تبدیل نہیں کیا تو، مالیکیول مثال کو حذف کردے گا۔
ڈیبگنگ کے لیے درج ذیل کمانڈز کارآمد ہیں:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
موجودہ کردار
موجودہ کردار میں ایک نیا اسکرپٹ شامل کرنا ہے۔ رول ڈائرکٹری سے مندرجہ ذیل احکامات کے ساتھ:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
اگر یہ کردار میں پہلا منظر نامہ ہے، تو پیرامیٹر -s کو چھوڑا جا سکتا ہے کیونکہ یہ اسکرپٹ بنائے گا۔ default.
حاصل يہ ہوا
جیسا کہ آپ دیکھ سکتے ہیں، مالیکیول بہت پیچیدہ نہیں ہے، اور آپ کے اپنے ٹیمپلیٹس کا استعمال کرتے ہوئے، ایک نئی اسکرپٹ کی تعیناتی کو مثال کے طور پر تخلیق اور پلے بکس کو حذف کرنے میں متغیرات میں ترمیم کرنے کے لیے کم کیا جا سکتا ہے۔ مالیکیول بغیر کسی رکاوٹ کے CI سسٹمز کے ساتھ ضم ہوجاتا ہے، جو آپ کو پلے بکس کی دستی جانچ کے لیے وقت کو کم کرکے ترقی کی رفتار کو بڑھانے کی اجازت دیتا ہے۔
آپکی توجہ کا شکریہ. اگر آپ کو جوابدہ کرداروں کی جانچ کرنے کا تجربہ ہے، اور اس کا تعلق مالیکیول سے نہیں ہے، تو تبصرے میں ہمیں اس کے بارے میں بتائیں!