Ansible-এর ইনভেন্টরি ফাইল একটি টেক্সট ফাইল যেখানে আপনি ম্যানেজ করা হোস্ট এবং তাদের গ্রুপের তথ্য সংরক্ষণ করেন। এই ফাইলটি Ansible-এর জন্য একটি গাইড হিসেবে কাজ করে যা নির্দিষ্ট হোস্ট বা হোস্ট গ্রুপে টাস্ক বা প্লেবুক রান করতে ব্যবহার হয়। ডিফল্ট ইনভেন্টরি ফাইলটি সাধারণত /etc/ansible/hosts
এ থাকে, কিন্তু আপনি ইচ্ছা করলে কাস্টম ইনভেন্টরি ফাইলও ব্যবহার করতে পারেন।
Ansible ইনভেন্টরি ফাইল সাধারণত দুই ধরনের হতে পারে:
INI ফরম্যাটের ইনভেন্টরি ফাইল কিছুটা নিচের মতো হতে পারে:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
ব্যাখ্যা:
[webservers]
এবং [dbservers]
হলো গ্রুপ, যেখানে হোস্টগুলো লিস্ট করা হয়েছে।[all:vars]
হলো সমস্ত হোস্টের জন্য কমন ভ্যারিয়েবল।YAML ফরম্যাটে ইনভেন্টরি ফাইল লিখলে এটি অনেক বেশি রিডেবল ও ফ্লেক্সিবল হয়:
all:
hosts:
web1.example.com:
web2.example.com:
db1.example.com:
db2.example.com:
children:
webservers:
hosts:
web1.example.com:
web2.example.com:
dbservers:
hosts:
db1.example.com:
db2.example.com:
vars:
ansible_user: ubuntu
ansible_ssh_private_key_file: ~/.ssh/id_rsa
ব্যাখ্যা:
all:
এর মধ্যে সমস্ত হোস্ট এবং গ্রুপ ডিফাইন করা হয়েছে।children:
এর মধ্যে গ্রুপ ডিফাইন করা হয়েছে এবং তাদের মধ্যে হোস্টগুলো লিস্ট করা হয়েছে।vars:
হলো গ্লোবাল ভ্যারিয়েবল, যা সমস্ত হোস্টের জন্য প্রযোজ্য।আপনি কাস্টম ইনভেন্টরি ফাইল ব্যবহার করতে চাইলে, ansible
বা ansible-playbook
কমান্ডের সাথে -i
ফ্ল্যাগ ব্যবহার করে ফাইলের পথ উল্লেখ করতে হবে:
ansible-playbook -i my_custom_inventory_file.yml playbook.yml
এইভাবে আপনি ইনভেন্টরি ফাইলকে কাস্টমাইজ করে আপনার ইনফ্রাস্ট্রাকচার বা সার্ভার গ্রুপিং করতে পারবেন।
Ansible ইনভেন্টরি ফাইল হলো এমন একটি ফাইল যেখানে ম্যানেজ করা হোস্ট (সার্ভার) এবং তাদের গ্রুপিং সংক্রান্ত তথ্য রাখা হয়। Ansible এই ইনভেন্টরি ফাইলের মাধ্যমে নির্ধারণ করে কোন হোস্টে কমান্ড বা প্লেবুক কার্যকর হবে। এটি ম্যানুয়াল প্রক্রিয়ার তুলনায় অটোমেশন এবং অর্গানাইজেশনের একটি সহজ উপায়। ইনভেন্টরি ফাইলের মধ্যে হোস্ট, গ্রুপ এবং ভ্যারিয়েবল সংরক্ষিত থাকে।
webservers
, dbservers
ইত্যাদি গ্রুপ হতে পারে।ansible_user
, ansible_port
, ansible_ssh_private_key_file
ইত্যাদি।INI ফরম্যাট সহজ এবং সরাসরি; এটি কিছুটা নিচের মতো হতে পারে:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_rsa
ব্যাখ্যা:
[webservers]
এবং [dbservers]
হলো গ্রুপ, যেখানে সংশ্লিষ্ট হোস্টের নাম বা আইপি উল্লেখ করা হয়েছে।[all:vars]
হলো গ্লোবাল ভ্যারিয়েবল সেকশন, যা ইনভেন্টরি ফাইলের সব হোস্টের জন্য সাধারণভাবে প্রযোজ্য হবে।YAML ফরম্যাট আরও স্ট্রাকচারড এবং উন্নত:
all:
hosts:
web1.example.com:
web2.example.com:
db1.example.com:
db2.example.com:
children:
webservers:
hosts:
web1.example.com:
web2.example.com:
dbservers:
hosts:
db1.example.com:
db2.example.com:
vars:
ansible_user: ubuntu
ansible_ssh_private_key_file: ~/.ssh/id_rsa
ব্যাখ্যা:
all:
সেকশনে সমস্ত হোস্ট এবং গ্রুপ ডিফাইন করা হয়েছে।children:
অংশে গ্রুপগুলো এবং তাদের মধ্যে হোস্টগুলো লিস্ট করা হয়েছে।vars:
অংশে গ্লোবাল ভ্যারিয়েবলস উল্লেখ করা হয়েছে যা ইনভেন্টরির সব হোস্টের জন্য প্রযোজ্য।কাস্টম ইনভেন্টরি ফাইল ব্যবহার করতে ansible
বা ansible-playbook
কমান্ডের সাথে -i
ফ্ল্যাগ ব্যবহার করা হয়:
ansible-playbook -i inventory_file.yml playbook.yml
এভাবে Ansible-এর ইনভেন্টরি ফাইল ব্যবহারের মাধ্যমে আপনার ইনফ্রাস্ট্রাকচারকে গ্রুপভিত্তিক ভাবে ম্যানেজ ও কনফিগার করতে পারবেন।
Ansible-এ Static এবং Dynamic ইনভেন্টরি দুটি ভিন্ন পদ্ধতি ব্যবহার করে হোস্টের তালিকা সংরক্ষণ করা হয়। ইনভেন্টরি হলো এমন একটি ফাইল বা সোর্স, যা Ansible-কে বলে দেয় কোন হোস্টগুলোতে কাজ করতে হবে। চলুন, এদের বিস্তারিত ব্যাখ্যা করা যাক।
Static Inventory হলো একটি সাধারণ টেক্সট ফাইল (সাধারণত hosts
নামে), যেখানে সার্ভারের তথ্য স্ট্যাটিক আকারে লেখা থাকে। এই ইনভেন্টরিটি .ini
বা .yaml
ফরম্যাটে থাকতে পারে।
উদাহরণ: (INI ফরম্যাটে hosts
ফাইল)
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
এখানে:
[webservers]
এবং [dbservers]
হলো গ্রুপ, যেগুলোতে একাধিক হোস্ট (যেমন web1.example.com
) যুক্ত করা হয়েছে।Static Inventory-এর সুবিধা:
Static Inventory-এর অসুবিধা:
Dynamic Inventory একটি স্ক্রিপ্ট বা প্রোগ্রাম যা Ansible-কে রিয়েল-টাইমে হোস্টের তথ্য সরবরাহ করে। সাধারণত বড় এবং পরিবর্তনশীল পরিবেশের জন্য এটি ব্যবহার করা হয়, যেমন AWS, GCP, Azure-এর মতো ক্লাউড প্ল্যাটফর্মে যেখানে সার্ভারের সংখ্যা প্রায়ই পরিবর্তিত হয়।
উদাহরণ: (AWS EC2 এর জন্য ডাইনামিক ইনভেন্টরি) ec2.py
নামে একটি স্ক্রিপ্ট ব্যবহার করে Ansible EC2 ইনস্ট্যান্সের তালিকা নিতে পারে। এই স্ক্রিপ্টটি AWS API থেকে তথ্য নিয়ে ইনভেন্টরি তৈরি করে।
Dynamic Inventory-এর সুবিধা:
Dynamic Inventory-এর অসুবিধা:
ansible.cfg
ফাইলের মাধ্যমে কনফিগার করা যায়:
[defaults]
inventory = ./ec2.py
AWS এর Dynamic Inventory প্লাগইন কনফিগার করা উদাহরণ: (YAML ফাইলের মাধ্যমে)
plugin: aws_ec2
regions:
- us-east-1
filters:
tag:Name: webserver
keyed_groups:
- key: tags.Name
prefix: tag
এখানে:
plugin: aws_ec2
ব্যবহার করে AWS-এর ইনভেন্টরি প্লাগইন সক্রিয় করা হয়েছে।যদি কোনো নির্দিষ্ট Dynamic Inventory সেটআপ বা স্ট্যাটিক ইনভেন্টরির কনফিগারেশন নিয়ে আরও বিস্তারিত জানার প্রয়োজন হয়, আমাকে জানাতে পারেন!
Ansible-এ হোস্ট এবং গ্রুপ তৈরি করতে আপনাকে ইনভেন্টরি ফাইল তৈরি করতে হবে যেখানে আপনি আপনার হোস্ট এবং গ্রুপগুলির তথ্য সংরক্ষণ করবেন। এটি সাধারণত একটি INI
, YAML
, বা ডাইনামিক ইনভেন্টরি স্ক্রিপ্টের মাধ্যমে করা যায়। এখানে আমি একটি সহজ INI
এবং YAML
ইনভেন্টরি ফাইল ব্যবহার করে হোস্ট এবং গ্রুপ তৈরি করার উদাহরণ দেব।
hosts.ini
নামে একটি ইনভেন্টরি ফাইল তৈরি করুন:
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com
db2.example.com
[all_servers:children]
webservers
dbservers
[all_servers:vars]
ansible_user=ansible
ansible_ssh_private_key_file=~/.ssh/id_rsa
এখানে:
[webservers]
এবং [dbservers]
আলাদা আলাদা গ্রুপ যা নির্দিষ্ট হোস্ট ধারণ করে।[all_servers:children]
গ্রুপটি [webservers]
এবং [dbservers]
এর কম্বিনেশন।[all_servers:vars]
অংশে গ্রুপভিত্তিক ভ্যারিয়েবল সেট করা হয়েছে।hosts.yml
নামে একটি YAML ইনভেন্টরি ফাইল তৈরি করুন:
all:
children:
webservers:
hosts:
web1.example.com:
web2.example.com:
dbservers:
hosts:
db1.example.com:
db2.example.com:
vars:
ansible_user: ansible
ansible_ssh_private_key_file: ~/.ssh/id_rsa
এখানে:
webservers
এবং dbservers
নামের গ্রুপ তৈরি করা হয়েছে, যেখানে নির্দিষ্ট হোস্টগুলো রয়েছে।vars
সেকশনে গ্রুপভিত্তিক ভ্যারিয়েবল সংযোজন করা হয়েছে।ansible -i hosts.ini all_servers -m ping
অথবা, YAML ফরম্যাট ব্যবহার করলে:
ansible -i hosts.yml all_servers -m ping
এই কমান্ডগুলো ইনভেন্টরি ফাইল থেকে গ্রুপ এবং হোস্টগুলো লোড করে এবং তাদের পিং করে দেখাবে।
এইভাবে Ansible-এ ইনভেন্টরি ফাইল ব্যবহার করে আপনি সহজেই হোস্ট এবং গ্রুপ তৈরি করতে এবং কনফিগারেশন ম্যানেজমেন্ট পরিচালনা করতে পারবেন।
Ansible-এ হোস্ট ভ্যারিয়েবল এবং গ্রুপ ভ্যারিয়েবল ব্যবহার করা হয় হোস্ট ও গ্রুপ অনুযায়ী কনফিগারেশন ব্যবস্থাপনা করতে। এদের মাধ্যমে নির্দিষ্ট হোস্ট বা হোস্টের গ্রুপের জন্য বিভিন্ন কনফিগারেশন ডিফাইন করা যায়।
হোস্ট ভ্যারিয়েবল নির্দিষ্ট হোস্টের জন্য কনফিগারেশন ডিফাইন করতে ব্যবহার করা হয়। এই ভ্যারিয়েবলগুলি একটি নির্দিষ্ট হোস্টের জন্য প্রযোজ্য হয়, এবং অন্যান্য হোস্টের সাথে শেয়ার হয় না। সাধারণত, এ গুলো ইনভেন্টরি ফাইলে, ইনভেন্টরি ডিরেক্টরির host_vars/
ডিরেক্টরিতে ফাইল হিসেবে সংরক্ষণ করা হয়।
ইনভেন্টরি ফাইলে হোস্ট ডিফাইন করা:
[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
host_vars/
ডিরেক্টরির মধ্যে একটি ফাইল তৈরি করা web1
নামে:
# host_vars/web1
apache_port: 8080
এই কনফিগারেশন অনুযায়ী web1
হোস্টের জন্য apache_port
ভ্যারিয়েবল ৮০৮০ সেট করা হয়েছে। অন্য হোস্টের জন্য এই ভ্যারিয়েবল প্রযোজ্য নয়।
গ্রুপ ভ্যারিয়েবল একাধিক হোস্টের জন্য একই ধরনের কনফিগারেশন ডিফাইন করতে ব্যবহার করা হয়। যদি একই ধরনের কনফিগারেশন বা সেটিংস একাধিক হোস্টের ক্ষেত্রে প্রযোজ্য হয়, তখন গ্রুপ ভ্যারিয়েবল ব্যবহার করা সুবিধাজনক। এগুলো ইনভেন্টরি ডিরেক্টরির group_vars/
ডিরেক্টরিতে ফাইল হিসেবে সংরক্ষণ করা হয়।
ইনভেন্টরি ফাইলে গ্রুপ ডিফাইন করা:
[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
[databases]
db1 ansible_host=192.168.1.12
db2 ansible_host=192.168.1.13
group_vars/
ডিরেক্টরির মধ্যে একটি ফাইল তৈরি করা webservers
নামে:
# group_vars/webservers
apache_port: 80
document_root: /var/www/html
এই ক্ষেত্রে, webservers
গ্রুপে অন্তর্ভুক্ত সকল হোস্টের জন্য apache_port
ভ্যারিয়েবল ৮০ এবং document_root
/var/www/html
হবে।
এইভাবে হোস্ট এবং গ্রুপ ভ্যারিয়েবল ব্যবহারের মাধ্যমে Ansible-এ ডাইনামিক ও স্কেলেবল কনফিগারেশন ম্যানেজমেন্ট করা সম্ভব।