কীভাবে উত্তরযোগ্য নাটক এবং প্লেবুক তৈরি করবেন - পার্ট 5
উত্তরীয় সিরিজের এই পঞ্চম অংশে, আমরা কীভাবে উত্তরযোগ্য মডিউলগুলি ব্যবহার করে উত্তরযোগ্য নাটক এবং প্লেবুক তৈরি করব তা ব্যাখ্যা করব।
দূরবর্তী নোডগুলিতে বিশেষকৃত কার্য সম্পাদনের জন্য প্লেবুকগুলিতে ব্যবহৃত মডিউল নামে পরিচিত স্ট্যান্ডলোন স্ক্রিপ্টগুলির সাথে উপযুক্ত জাহাজ।
মডিউলগুলি প্যাকেজ পরিচালনা, সংরক্ষণাগার এবং ফাইলগুলি অনুলিপি করার মতো কয়েকটি স্বয়ংক্রিয়করণের কাজগুলিতে কেবল কয়েকটি উল্লেখ করার জন্য কাজে আসে। তারা আপনাকে কনফিগারেশন ফাইলগুলিতে টুইট করতে এবং রাউটার, সুইচ, লোড ব্যালেন্সার, ফায়ারওয়াল এবং অন্যান্য ডিভাইসের হোস্টের মতো ডিভাইসগুলি পরিচালনা করতে অনুমতি দেয়।
এই সাবটোপিকের উদ্দেশ্য হ'ল আপনাকে উত্তরীয় মডিউলগুলি দ্বারা সম্পাদিত হতে পারে এমন বিভিন্ন কার্যের ওভারভিউ দেওয়া give
লিনাক্সে প্যাকেজ পরিচালনা
প্যাকেজ পরিচালনা হ'ল সিস্টেম অ্যাডমিনিস্ট্রেটররা বহনকারী এক অতি প্রয়োজনীয় এবং ঘন ঘন কাজ quent মডিউলগুলির সাথে উপযুক্ত জাহাজ যা আপনাকে রেডহ্যাট এবং ডেবিয়ান ভিত্তিক সিস্টেমে উভয়ই প্যাকেজ পরিচালনার কাজ সম্পাদন করতে সহায়তা করে।
তারা অনুমান করা তুলনামূলকভাবে সহজ। YUM প্যাকেজ পরিচালনার জন্য উপযুক্ত মডিউল এবং নতুন আরএইচএল বিতরণের সাথে যুক্ত ডিএনএফ মডিউল রয়েছে।
মডিউলগুলি প্লেবুকে কীভাবে ব্যবহার করা যায় তার কয়েকটি উদাহরণ নীচে:
--- - name: install Apache webserver hosts: webservers tasks: - name: install httpd dnf: name: httpd State: latest
--- - name: install Apache webserver hosts: databases tasks: - name: install Apache webserver apt: name: apache2 State: latest
পরিষেবা মডিউল
পরিষেবা মডিউল সিস্টেম প্রশাসকদের সিস্টেমে পরিষেবা শুরু, থামাতে, আপডেট করতে, আপগ্রেড করতে এবং পুনরায় লোড করতে দেয়।
--- - name: Start service httpd, if not started service: name: httpd state: started
--- - name: Stop service httpd service: name: httpd state: stopped
--- - name: Restart network service for interface eth0 service: name: network state: restarted args: enp2s0
মডিউল অনুলিপি করুন
নাম অনুসারে, মডিউল অনুলিপি মেশিনের এক অবস্থান থেকে একই মেশিনের একটি পৃথক স্থানে ফাইলগুলি অনুলিপি করে।
--- - name: Copy file with owner and permissions copy: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf owner: tecmint group: tecmint mode: '0644'
প্লেবুকটি tecmint.conf কনফিগারেশন ফাইলটি/etc/ফাইল/ডিরেক্টরি থেকে/srv/ডিরেক্টরিতে টেকমিন্ট ব্যবহারকারী হিসাবে 0644 অনুমতি সহ অনুলিপি করে।
শেষ লাইনে প্রদর্শিত হিসাবে প্রতীকী উপস্থাপনা ব্যবহার করে অনুমতিগুলিও উপস্থাপন করা যেতে পারে।
--- - name: Copy file with owner and permissions copy: src: /etc/files/tecmint.conf dest: /srv/tecmint.conf owner: tecmint group: tecmint mode: u=rw, g=r, o=r
পূর্ববর্তী উদাহরণের অনুমতিগুলি শেষ লাইনে প্রদর্শিত হিসাবে প্রতিনিধিত্ব করা যেতে পারে, ব্যবহারকারীকে পড়ার এবং লেখার অনুমতি নির্ধারিত করা হয়, গোষ্ঠীটি লেখার অনুমতি বরাদ্দ করা হয়, এবং বিশ্বের অন্যান্য অংশে পড়ার অনুমতি বরাদ্দ করা হয়।
ফাইল মডিউল
ফাইল মডিউলটি ফাইল এবং ডিরেক্টরি তৈরি, ফাইল অনুমতি নির্ধারণ এবং সিমলিংক স্থাপন সহ অনেকগুলি ফাইল ক্রিয়াকলাপ বহন করতে ব্যবহৃত হয়।
--- - name: Change file ownership, group, and permissions file: path: /etc/tecmint.conf owner: tecmint group: tecmint mode: '0644'
উপরের প্লেটি 0644 এ/ইত্যাদি ডিরেক্টরি নির্ধারণের অনুমতিতে tecmint.conf নামে একটি ফাইল তৈরি করে।
--- - name: Remove file (delete file) file: path: /etc/tecmint.conf state: absent
এটি tecmint.conf ফাইলটি সরিয়ে দেয় বা মুছে দেয়।
--- - name: create a directory if it doesn’t exist file: path: /etc/mydirectory State: directory mode: '0777'
এটি 0777 এ/etc ডিরেক্টরি সেটিংসের অনুমতিগুলিতে একটি ডিরেক্টরি তৈরি করবে।
--- - name: Recursively deleting a directory file: path: /etc/tecmint.conf state: absent
উপরের নাটকটি পুনরাবৃত্তভাবে একটি ডিরেক্টরি মুছে দেয়।
লাইনফাইন মডিউল
লাইন ইনফাইল মডিউলটি সহায়ক যখন আপনি কোনও ফাইলে একটি লাইন পরিবর্তন করতে চান। এটি একটি বিদ্যমান লাইন প্রতিস্থাপন করতে পারে।
--- - name: Ensure SELinux is set to enforcing mode lineinfile: path: /etc/selinux/config regexp: '^SELINUX=' line: SELINUX=disabled
উপরের প্লেটি সেলিনাক্স মানকে অক্ষম করে।
SELINUX=disabled
--- - name: Add a line to a file if the file does not exist, without passing regexp lineinfile: path: /etc/hosts line: 10.200.50.51 linux-console.net create: yes
এটি/ইত্যাদি/হোস্ট ফাইলে 10.200.50.51 linux-console.net এ এন্ট্রি যুক্ত করে।
সংরক্ষণাগার মডিউল
একটি আর্কাইভ মডিউলটি একক বা একাধিক ফাইলের সংকুচিত সংরক্ষণাগার তৈরির জন্য ব্যবহৃত হয়। এটি ধরে নিয়েছে যে সংকোচনের উত্স বিদ্যমান গন্তব্যটিতে উপস্থিত রয়েছে। সংরক্ষণাগার হওয়ার পরে, উত্স ফাইলটি অপসারণ = সত্য বিবৃতিটি ব্যবহার করে মুছতে বা মুছতে পারে।
- name: Compress directory /path/to/tecmint_dir/ into /path/to/tecmint.tgz archive: path: /path/to/tecmint_dir dest: /path/to/tecmint.tgz This compresses the /path/to/tecmint_dir directory to /path/to/tecmint.tgz
- name: Compress regular file /path/to/tecmint into /path/to/foo.gz and remove it archive: path: /path/to/tecmint dest: /path/to/tecmint.tgz remove: yes
উপরের প্লেতে, সংরক্ষণাগারটি সম্পূর্ণ হওয়ার পরে উত্স ফাইল/পাথ/টু/টেকমিন্ট মোছা হবে।
- name: Create a bz2 archive of /path/to/tecmint archive: path: /path/to/tecmint format: bz2
এটি/পাথ/টু/টেকমিন্ট ফাইল থেকে bz2 ফর্ম্যাটে একটি সংকুচিত ফাইল তৈরি করে।
গিট মডিউল
মডিউলটি সফ্টওয়্যার সংগ্রহস্থলের গিট চেকআউট পরিচালনা করে।
- git: repo: 'https://foosball.example.org/path/to/repo.git' dest: /srv/checkout version: release-0.22
কমান্ড মডিউল
সর্বাধিক ব্যবহৃত মডিউলগুলির মধ্যে একটি, কমান্ড মডিউল কমান্ডের নাম নেয় এবং পরে আর্গুমেন্টের একটি তালিকা অনুসরণ করে। লিনাক্স শেল আপনি যেভাবে টাইপ করবেন ঠিক তেমনই কমান্ডটি পাস করা হবে।
- name: Executing a command using the command module command: cat helloworld.txt
--- - name: Check the remote host uptime hosts: servers tasks: - name: Execute the Uptime command over Command module register: uptimeoutput command: "uptime" - debug: var: uptimeoutput.stdout_lines
কমান্ড মডিউলটি দূরবর্তী সার্ভারগুলির আপটাইম পুনরুদ্ধার করে।
চলমান কমান্ডগুলির ফলাফল পুনরুদ্ধার করতে পরিবর্তনীয়
সাধারণত, আদেশযোগ্য প্লেবুকগুলি কমান্ড লাইনে আউটপুট প্রদর্শন না করে পরিচালিত হোস্টগুলিতে কার্য সম্পাদন করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনার আউটপুট বা ফলাফল ক্যাপচার প্রয়োজন হতে পারে। এই বিভাগে, আমরা কীভাবে আপনি কোনও ভেরিয়েবলে কোনও প্লেবুকের আউটপুট ক্যাপচার করতে পারেন এবং এটি পরে প্রদর্শন করতে পারি তার মধ্য দিয়ে আমরা আপনাকে চলব।
একটি কার্যক্ষম আউটপুট ক্যাপচার এবং এটিকে একটি পরিবর্তনশীল সংরক্ষণের জন্য একটি উত্তরযোগ্য রেজিস্টার ব্যবহার করা হয়। ভেরিয়েবল এর পরে কার্যটির stdout অন্তর্ভুক্ত করবে contain
উদাহরণস্বরূপ, আমাদের ধরে নেওয়া যাক আপনি df -Th/
কমান্ডটি ব্যবহার করে সংশ্লিষ্ট রুট ডিরেক্টরিগুলিতে পরিচালিত নোডগুলির ডিস্ক ব্যবহার পরীক্ষা করতে চান। আপনি ভেরিয়েবলের মধ্যে স্ট্যান্ড আউটপুট সংরক্ষণ করতে কমান্ডটি সংজ্ঞায়িত করতে ‘কমান্ড’
মডিউল এবং ‘নিবন্ধন’
ব্যবহার করতে যাচ্ছেন।
কমান্ডটি প্রদর্শনের জন্য, আপনি স্টডআউট রিটার্ন মানের পাশাপাশি ‘ডিবাগ’
মডিউলটি ব্যবহার করবেন।
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout
এখন, প্লেবুক চালানো যাক। এই ক্ষেত্রে, আমরা আমাদের প্লেবুকটির নাম_পরিষ্কার_স্পেস.আইএমএল রেখেছি।
# ansible-playbook check_disk_space.yml
যেমনটি আপনি দেখেছেন, আউটপুটটি সমস্ত ঝাঁপিয়ে পড়েছে এবং এটি অনুসরণ করা কঠিন করে তোলে।
আউটপুট প্রান্তিককরণ এবং পড়া সহজ করে তুলতে stdout_lines সঙ্গে stdout রিটার্ন মান পরিবর্তন করুন।
--- - hosts: all become: yes tasks: - name: Execute /boot usage on Hosts command: 'df -Th /' register: df - debug: var=df.stdout_lines
প্লে এক্সিকিউশন নিয়ন্ত্রণ করতে শর্তাদি ব্যবহার করুন
প্রোগ্রামিং ভাষার ক্ষেত্রে যেমন শর্তসাপূর্ণ বিবৃতি ব্যবহৃত হয় যখন একাধিক ফলাফল সম্ভব হয়। আসুন জবাব দেওয়া প্লেবুকগুলিতে কিছু ব্যবহৃত সাধারণ শর্তাধীন বিবৃতি একবার দেখে নেওয়া যাক।
কখনও কখনও, আপনি নির্দিষ্ট নোডগুলিতে অন্যদের নয় বরং কাজ সম্পাদন করতে চাইতে পারেন। যখন
শর্তসাপূর্ণ বিবৃতি প্লেবুকে ব্যবহার এবং প্রয়োগ করা বেশ সহজ। ব্যবহার করার সময় কোডটি শৃঙ্খলা সংলগ্ন শর্তটি কেবল প্রদর্শিত হিসাবে দেখানো হয়েছে:
when: condition
শর্তটি সন্তুষ্ট হলে, দূরবর্তী সিস্টেমে কাজটি সম্পন্ন করা হয়।
আসুন কয়েকটি উদাহরণ পরীক্ষা করে দেখুন:
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian”
উপরের প্লেটি ডিগ্রোসের পরিবারকে চালিত হোস্টগুলিতে এনগিনেক্স ওয়েবসভারটি ইনস্টল করে।
শর্তসাপেক্ষ বিবৃতিটি আপনি পাশাপাশি OR
এবং এবং
অপারেটরটিও ব্যবহার করতে পারেন।
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” and ansible_distribution_version == “18.04”
এবং
অপারেটর ব্যবহার করার সময়, উভয় বিবৃতি অবশ্যই কার্য সম্পাদনের জন্য সন্তুষ্ট থাকতে হবে।
উপরের প্লেটি নোডসে এনগিনেক্স ইনস্টল করে ওএসের ডেবিয়ান পরিবার পরিচালনা করছে যা সংস্করণ 18.04। স্পষ্টতই, এটি উবুন্টু হবে 18.04।
বা
অপারেটরের সাথে, শর্তগুলির কোনও একটি পূরণ হলে টাস্ক কার্যকর করা হয়।
--- - hosts: all tasks: - name: Install Nginx on Debian apt: name=nginx state=present when: ansible_os_family == “Debian” or Ansible_os_family == “SUSE”
উপরের নাটকটি ডিবিয়ান বা ওএস এর সুস পরিবার বা উভয়কেই এনগিনেক্স ওয়েবসার্স ইনস্টল করে।
দ্রষ্টব্য: সর্বদা শর্ত পরীক্ষা করার সময় ডাবল সমতা চিহ্ন ==
ব্যবহার নিশ্চিত করুন।
লুপগুলিতে শর্তসাপেক্ষ
শর্তগুলি লুপেও ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ বলুন আপনার কাছে একাধিক প্যাকেজগুলির একটি তালিকা রয়েছে যা দূরবর্তী নোডগুলিতে ইনস্টল করা প্রয়োজন।
নীচের প্লেবুকে, আমাদের কাছে একটি অ্যারে নামক প্যাকেজ রয়েছে যা প্যাকেজগুলির একটি তালিকা রয়েছে যা ইনস্টল করা দরকার। প্রয়োজনীয় ধারাটি সত্য হিসাবে সেট করা থাকলে এই কাজগুলি একের পর এক করা হবে।
--- - name: Install Software packages hosts: all vars: packages: • name: nginx required: True • name: mysql required: True • name: apache required: False tasks: • name: Install “{{ item.name }}”on Debian apt: name: “{{ item.name }}” state: present When: item.required == True loop: “{{ packages }}”
ত্রুটি পরিচালনার কনফিগার করুন
কখনও কখনও, প্লেবুক চালানোর সময় টাস্কগুলি ব্যর্থ হয়। আসুন ধরে নেওয়া যাক আপনি নীচের প্লেবুকে দেখানো হিসাবে 3 টি সার্ভারে 5 টি কাজ চালাচ্ছেন। সার্ভার 2 তে টাস্ক 3 (মাইএসকিউএল শুরু করা) এ ত্রুটি দেখা দিলে, উত্তরীয় সার্ভার 2 এ থাকা অবশিষ্ট কাজগুলি সম্পাদন করা বন্ধ করে দেবে এবং বাকী সার্ভারগুলিতে অবশিষ্ট কাজগুলি সম্পন্ন করার চেষ্টা করবে।
--- - name: Install Software packages hosts: server1, server2, server3 tasks: - name: Install dependencies << some code >> - name: Install MySQL database << some code >> - name: Start MySQL << some code >> - name: Install Nginx << some code >> - name: Start Nginx << some code >>
আপনি যদি প্লেবুকের প্রয়োগের ক্ষেত্রে ধারাবাহিকতা চান, উদাহরণস্বরূপ, কোনও প্লেবুকের সম্পাদনা বন্ধ করুন, সার্ভারগুলির মধ্যে একটির যদি ব্যর্থ হয় তবে বিকল্পটি যুক্ত করুন।
--- - name: Install Software packages hosts: server1, server2, server3 any_errors_fatal: true tasks:
এইভাবে, যদি একটি সার্ভারে একটি কাজ ব্যর্থ হয়, তবে উত্তরী সমস্ত সার্ভারে পুরো প্লেবুকের সম্পাদন বন্ধ করে প্রস্থান করবে।
আপনি যদি প্লেবুকটি ত্রুটিগুলি উপেক্ষা করতে এবং অবশিষ্ট কাজগুলির সেটটি চালিয়ে যেতে চান, তবে অযত্ন_ত্যাগ: সত্য বিকল্পটি ব্যবহার করুন।
--- - name: Install Software packages hosts: server1, server2, server3 tasks: - name: Install dependencies << some code >> ignore_errors: True
একটি নির্দিষ্ট রাজ্যে সিস্টেমগুলি কনফিগার করতে প্লেবুকগুলি তৈরি করুন
এই বিভাগে, আমরা কিছু অতিরিক্ত বিকল্পগুলি দেখি যা প্লেবুক চালানোর সময় উপলব্ধ।
চেক মোড বা ড্রাই ড্রাই অপশন দিয়ে শুরু করা যাক। ড্রাইব রান বা চেক মোড অপশনটি কোনও প্লেবুক চালানোর সময় ব্যবহার করা হয় যা কোনও ত্রুটির মুখোমুখি হবে কিনা তা পরীক্ষা করতে এবং পরিচালিত হোস্টগুলিতে কোনও পরিবর্তন রয়েছে কিনা তা পরীক্ষা করতে ব্যবহৃত হয়। এটি অবশ্য দূরবর্তী নোডগুলিতে কোনও পরিবর্তন করে না।
উদাহরণস্বরূপ, httpd.yml
নামে একটি প্লেবুক চালানো শুকানোর জন্য যা অ্যাপাচি ওয়েবসার্ভার রান ইনস্টল করে এবং শুরু করে:
# ansible-playbook httpd.yml --check
অন্য বিকল্পটি আমাদের দেখতে হবে is - স্টার্ট-এ-টাস্ক
বিকল্প। প্লেবুকটি শুরু হওয়া বা শুরু হওয়া টাস্কটির নাম নির্দিষ্ট করার সময় এটি ব্যবহৃত হয়।
আসুন একটি উদাহরণ নেওয়া যাক: নীচের প্লেবুকটি 2 টি কাজ করে: প্রথম প্লেটি অ্যাপাচি ওয়েব সার্ভারটি ইনস্টল করে এবং দ্বিতীয়টি এইচটিপি ইউটিলিটি ইনস্টল করে।
--- - name: Install httpd hosts: all tasks: yum: name: httpd state: Installed - name: Install htop yum: name: htop state: started
আপনি যদি অ্যাপাচি ওয়েবসারভার ইনস্টল করতে এবং তার পরিবর্তে এইচটিপি ইউটিলিটি রানটি ইনস্টল করতে চান:
# ansible-playbook playbook.yml --start-at-task “Install htop”
শেষ অবধি, আপনি যেমন দেখানো হয়েছে তেমন আপনার প্লেবুকে ট্যাগ বিকল্প যুক্ত করে আপনার কাজ বা নাটকগুলি ট্যাগ করতে পারেন। এটি কার্যকর হয় যখন আপনার কাছে বেশ বড় একটি প্লেবুক থাকে এবং আপনি পুরো প্লেবুক থেকে নির্দিষ্ট কাজগুলি চালাতে চান।
--- - name: Install httpd tags: Install and start hosts: all tasks: yum: name: httpd state: Installed tags: Install • service: name: httpd state: started
# ansible-playbook playbook.yml -tags "Install"
ট্যাগগুলি বাদ দিতে --স্কিপ ট্যাগগুলি
বিকল্প হিসাবে দেখানো হয়েছে হিসাবে ব্যবহার করুন।
# ansible-playbook playbook.yml --skip-tags "Install"
এই বিষয়টিতে, আমরা আপনাকে জবাবদিহি করার সাধারণভাবে ব্যবহৃত মডিউলগুলি দিয়েছিলাম, কীভাবে বিশ্লেষণের জন্য কোনও প্লেবুকের সম্পাদন থেকে স্টডআউট পুনরুদ্ধার করতে, প্লেবুকের শর্তসাপেক্ষ ব্যবহার করে এবং কীভাবে চলমান কাজগুলি চলাকালীন ঘটতে পারে এমন ত্রুটিগুলি পরিচালনা করার পদ্ধতি। শেষ পর্যন্ত, আমরা প্লেবুকগুলির কনফিগারেশনটি পুনরায় প্রয়োগ করেছি এবং আপনি পুরো প্লেবুকটি চালানোর ইচ্ছা না রাখলে কোন কাজগুলি চালাবেন তা সিদ্ধান্ত নিতে আপনি কীভাবে অতিরিক্ত বিকল্প ব্যবহার করতে পারেন।