Ansible এ block এবং rescue ব্যবহার করে ত্রুটি নিয়ন্ত্রণ (Error Handling) খুব সহজ এবং কার্যকরী হয়। block এবং rescue কিওয়ার্ডগুলোর মাধ্যমে আপনি প্লেবুকে এমনভাবে টাস্ক লিখতে পারেন, যাতে কোনো টাস্ক ব্যর্থ হলেও আপনি সেগুলোর উপর নিয়ন্ত্রণ রাখতে পারেন এবং ব্যর্থতার পরবর্তী অ্যাকশন নির্ধারণ করতে পারেন। এটি প্রায় প্রোগ্রামিং ভাষার try-catch মেকানিজমের মতো।
Block, Rescue, এবং Always এর কাজ
Ansible এ block একটি ব্লক তৈরি করে যার মধ্যে একাধিক টাস্ক গ্রুপ করা যায়। এর সাথে rescue এবং always ব্যবহার করে ত্রুটি বা ব্যতিক্রম নিয়ন্ত্রণ করা যায়।
- block: একটি টাস্ক বা টাস্কের গ্রুপ যা একত্রে রান করবে। যদি এই ব্লকের কোনো টাস্ক ব্যর্থ হয়, তখন
rescueচালানো হবে। - rescue: যখন
blockএর কোনো টাস্ক ব্যর্থ হয়, তখনrescueব্লকটি চালানো হয়। এটি সাধারণত ব্যাকআপ প্ল্যান বা এরর হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। - always:
alwaysব্লক সবসময় চালানো হয়, এটিblockবাrescueসফল বা ব্যর্থ যাই হোক না কেন। এটি পরিষ্কার করার কাজ বা ফাইনাল টাস্কের জন্য ব্যবহার করা হয়।
উদাহরণ: Block এবং Rescue ব্যবহার করা
---
- name: Example of block and rescue
hosts: localhost
tasks:
- name: Main block
block:
- name: Try to create a file
file:
path: /tmp/example.txt
state: touch
- name: Simulate a failure
command: /bin/false
rescue:
- name: Handle the failure by creating a different file
file:
path: /tmp/rescue_file.txt
state: touch
always:
- name: Always clean up
file:
path: /tmp/temp_cleanup.txt
state: touch
ব্যাখ্যা:
Main block:
blockএর মধ্যে দুটি টাস্ক আছে। প্রথম টাস্কটি/tmp/example.txtফাইল তৈরি করছে।- দ্বিতীয় টাস্কটি
/bin/falseকমান্ড চালাচ্ছে, যা ইচ্ছাকৃতভাবে ব্যর্থ হবে।
Rescue block:
- যখন
blockএর কোনো টাস্ক ব্যর্থ হবে, তখনrescueব্লকটি চালু হবে। এখানেrescueব্লকে/tmp/rescue_file.txtনামে একটি ফাইল তৈরি করা হয়েছে।
Always block:
alwaysব্লক সবসময় চালানো হবে, চূড়ান্ত কাজ বা ক্লিনআপ কাজ করার জন্য। এখানে/tmp/temp_cleanup.txtফাইলটি তৈরি করা হয়েছে।
ব্লক, রেসকিউ, এবং অলওয়েজের ব্যবহার কৌশল:
- Block: যখন আপনি একসাথে একাধিক টাস্ক চালাতে চান যা পরস্পরের উপর নির্ভরশীল, তখন ব্লক ব্যবহার করা হয়।
- Rescue: কোনো টাস্ক ব্যর্থ হলে আপনি তৎক্ষণাৎ বিকল্প ব্যবস্থা নিতে চান, তখন রেসকিউ ব্লক ব্যবহার করেন।
- Always: প্লেবুক বা টাস্কের শেষে ক্লিনআপ বা চূড়ান্ত পদক্ষেপ নিতে Always ব্লক ব্যবহার করা হয়। এটি একটি ব্লকের শেষ পদক্ষেপ হিসেবে ব্যবহৃত হয়।
একটি বাস্তব উদাহরণ: প্যাকেজ ইনস্টলেশন
---
- name: Install a package with error handling
hosts: localhost
tasks:
- name: Install nginx package
block:
- name: Try to install nginx
apt:
name: nginx
state: present
register: install_result
ignore_errors: yes
- name: Verify if nginx was installed
command: nginx -v
register: verify_result
rescue:
- name: Log installation failure
debug:
msg: "Nginx installation failed. Attempting to fix or clean up."
- name: Remove partially installed nginx
apt:
name: nginx
state: absent
always:
- name: Clean up temporary files if any
file:
path: /tmp/nginx_install.log
state: absent
ব্যাখ্যা:
- Block: এই ব্লকে
nginxপ্যাকেজ ইনস্টল করা হয়েছে এবং ইনস্টলেশন যাচাই করা হয়েছে।ignore_errors: yesদিয়ে ইনস্টলেশনের ত্রুটি উপেক্ষা করা হয়েছে যাতে ব্লকের পরবর্তী টাস্ক চালানো যায়। - Rescue: যদি ইনস্টলেশন ব্যর্থ হয়, তাহলে
rescueব্লক চালানো হবে যেখানে ইনস্টলেশনের ব্যর্থতার কারণে কিছু পরিষ্কার বা ফিক্স করার ব্যবস্থা করা হয়েছে। - Always: শেষে,
/tmp/nginx_install.logফাইল (যদি কোনো লোগ সংরক্ষণ করা হয়) ক্লিনআপ করা হয়েছে।
সংক্ষেপে:
| বৈশিষ্ট্য | বর্ণনা |
|---|---|
| Block | টাস্কগুলিকে গ্রুপ করে একসাথে চালায়। |
| Rescue | Block ব্যর্থ হলে বিকল্প টাস্ক চালায়। |
| Always | Block এবং Rescue সফল বা ব্যর্থ যাই হোক, সবসময় চালায়। |
Ansible এ block, rescue, এবং always ব্যবহার করে প্লেবুকগুলোকে আরও ফ্লেক্সিবল এবং রেসিলিয়েন্ট করা যায়, যাতে টাস্ক ব্যর্থ হলেও উপযুক্তভাবে হ্যান্ডেল করা সম্ভব হয়।