পরিচালিত নোডগুলিতে কনফিগারেশন তৈরির জন্য টেম্পলেটগুলি কীভাবে তৈরি করবেন - পার্ট 7


জবাবদিহিত সিরিজের এই অংশ 7 এ, আপনি কীভাবে ম্যানেজড নোডগুলিতে কাস্টমাইজড কনফিগারেশন তৈরি করতে উত্তরীয়তে টেমপ্লেট তৈরি এবং ব্যবহার করবেন তা শিখবেন। জবাবদিহি তে টেম্প্লেটিং প্লেবুক ফাইলগুলির ন্যূনতম সম্পাদনা সহ বিভিন্ন সিস্টেমে পরিচালিত পরিচালিত নোডগুলিতে কাস্টম কনফিগারেশনগুলিকে ঠেলে দেওয়ার একটি সহজ এবং বন্ধুত্বপূর্ণ উপায়।

টেমপ্লেট কী তা সম্পর্কে আরও ভাল ধারণা পেতে, একটি আইটি ম্যানেজারকে একটি ককটেল পার্টির জন্য তার বিভাগকে আমন্ত্রণ জানাতে একটি ইমেল খসড়া বিবেচনা করি। ইমেলটি প্রত্যেক সদস্যকে প্রেরণ করা হয় এবং তাদের স্বামী বা স্ত্রী সহ ট্যাগ করার জন্য তাদের আমন্ত্রণ জানায়।

ইমেলটি এমনভাবে কাস্টমাইজ করা হয়েছে যাতে ইমেলের বডি একই থাকে, তবে ঠিকানা এবং তাদের স্বামী/স্ত্রীদের নাম আলাদা হয় of ইমেলটি টেমপ্লেটে পরিণত হয়, যখন প্রাপক এবং স্ব স্বামী বা স্ত্রী পরিবর্তনশীল।

এটি একটি সাধারণ উদাহরণ ছিল। উত্তরযোগ্য জিনজা 2 ব্যবহার করে যা গতিশীল সামগ্রী বা এক্সপ্রেশন তৈরি করতে ব্যবহৃত পাইথন ফ্রেমওয়ার্কগুলির জন্য একটি আধুনিক টেম্প্লেটিং ইঞ্জিন। একাধিক সার্ভারের জন্য কাস্টম কনফিগারেশন ফাইল তৈরি করার সময় টেম্প্লেটিং অত্যন্ত দরকারী them

জিনজা 2 একটি পরিবর্তনশীল সংজ্ঞায়িত করার জন্য ডাবল কোঁকড়া ধনুর্বন্ধনী {{...}} ব্যবহার করে। মন্তব্যের জন্য {{# #} ব্যবহার করুন এবং শর্তাধীন বিবৃতিগুলির জন্য {% ...%} ব্যবহার করুন।

আসুন ধরে নেওয়া যাক যে আপনার হোস্ট সিস্টেমগুলির সাথে আপনার নেটওয়ার্কে VLANs এর একটি ডেটা মডেল রয়েছে যা আপনি তাদের নিজ নিজ ভিএলএএন-তে প্রদর্শিত হিসাবে দেখাতে চান।

vlans:
  - id: 10
    name: LB
  - id: 20
    name: WB_01
  - id: 30
    name: WB_02
  - id: 40
    name: DB

এই কনফিগারেশনটি রেন্ডার করতে, vlans.j2 নামক সংশ্লিষ্ট jinja2 টেমপ্লেট প্রদর্শিত হবে। যেমন আপনি দেখতে পাচ্ছেন, vlan.id এবং vlan.name ভেরিয়েবলগুলি কোঁকড়া ধনুর্বন্ধনী দ্বারা আবদ্ধ হয়েছে।

vlan {{ vlan.id }}
  name {{ vlan.name }}

এটি সমস্ত প্লেবুকে একসাথে রাখা যা বিভিন্ন হোস্ট মেশিন রাখে, এটি প্রদর্শিত হিসাবে প্রদর্শিত হবে:

    - hosts
  tasks:
    - name: Rendering VLAN configuration
      template:
         src: vlans.j2
         dest: "vlan_configs/{{ inventory_hostname }}.conf"

উদাহরণ 1: বিভিন্ন ডিস্ট্রোতে ওয়েব সার্ভারগুলি কনফিগার করা

এই উদাহরণে, আমরা সূচিপত্র HTML ফাইল তৈরি করব যা সেন্টোস এবং উবুন্টুতে চলমান 2 ওয়েব সার্ভারের হোস্টনাম এবং ওএস সম্পর্কে তথ্য প্রদর্শন করবে।

Ubuntu 18 - IP address: 173.82.202.239
CentOS 7 -  IP address: 173.82.115.165

উভয় সার্ভারে ইতিমধ্যে অ্যাপাচি ওয়েবসারভার ইনস্টল করা হয়েছে।

সুতরাং প্রদর্শিত হিসাবে একটি প্লেবুক টেস্ট_সেরা.আইএমএল তৈরি করা যাক:

---

 - hosts: all
   become: yes

   tasks:

    - name: Install index.html
      template:
        src: index.html.j2
        dest: /var/www/html/index.html
        mode: 0777

আমাদের জিনজা ফাইল টেমপ্লেট হল index.html.j2 যা প্রতিটি ওয়েবসারভারের সূচক। সর্বদা মনে রাখবেন এক্সটেনশনটি .j2 শেষে একটি জিনজা 2 ফাইল sign

আসুন এখন টেমপ্লেট ফাইল index.html.j2 তৈরি করি।

<html>
<center>
   <h1> The hostname of this webserver is {{ ansible_hostname }}</h1>
   <h3> It is running on {{ ansible_os_family}}system </h3>
</center>
</html>

এই টেমপ্লেটটি একটি প্রাথমিক HTML ফাইল যেখানে উত্তরযোগ্য-হোস্টনাম এবং উত্তরযোগ্য_স_ফ্যামিলি অন্তর্নির্মিত ভেরিয়েবলগুলি ব্রাউজারে স্বতন্ত্র ওয়েবসার্ভারগুলির সম্পর্কিত হোস্টনাম এবং অপারেটিং সিস্টেমের সাথে প্রতিস্থাপিত হবে।

এখন, চলুন প্লেবুক চালাও।

# ansible-playbook test_server.yml

এখন আসুন CentOS 7 এবং উবুন্টু ওয়েব সার্ভার উভয়ের জন্য ওয়েবপৃষ্ঠাগুলি পুনরায় লোড করা যাক।

আপনি দেখতে পাচ্ছেন, হোস্টের নাম এবং ওএসের পরিবার সম্পর্কে বিভিন্ন তথ্য প্রতিটি সার্ভারে প্রদর্শিত হয়েছে। এবং এটাই জিনজা 2 টেম্পলটিংয়ের মতো দুর্দান্ত!

ফিল্টারগুলি:

কখনও কখনও, আপনি কোনও স্ট্রিংয়ের সাথে কোনও ভেরিয়েবলের মানটি নির্দিষ্ট পদ্ধতিতে উপস্থিত করার সিদ্ধান্ত নিতে পারেন।

উদাহরণস্বরূপ, পূর্ববর্তী উদাহরণে, আমরা উত্তর ভেরিয়েবলগুলি বড় হাতের অক্ষরে উপস্থিত করার সিদ্ধান্ত নিতে পারি। এটি করতে ভেরিয়েবলের উপরের মানটি যুক্ত করুন। এইভাবে ভেরিয়েবলের মানটি বড় হাতের আকারে রূপান্তরিত হয়।

{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT

একইভাবে, আপনি নিম্ন যুক্তি যুক্ত করে স্ট্রিং আউটপুটটিকে ছোট হাতের কাছে রূপান্তর করতে পারেন।

{{ ansible_hostname | lower }}  => centos 7
{{ ansible_os_family | lower }} => redhat

অতিরিক্তভাবে, আপনি অন্যটির সাথে একটি স্ট্রিং প্রতিস্থাপন করতে পারেন।

উদাহরণ স্বরূপ:

সিনেমার শিরোনামটি হ'ল {{মুভি_নাম}} => সিনেমার শিরোনামটি রিং।

অন্য স্ট্রিংয়ের সাথে আউটপুট প্রতিস্থাপন করতে, প্রতিস্থাপন যুক্তিটি প্রদর্শিত হিসাবে ব্যবহার করুন:

সিনেমার শিরোনাম {_ মুভি_নাম | ("রিং", "হিস্ট") প্রতিস্থাপন করুন}} => সিনেমার শিরোনাম হিস্ট।

একটি অ্যারের মধ্যে ক্ষুদ্রতম মানটি পুনরুদ্ধার করতে, মিনিট ফিল্টারটি ব্যবহার করুন।

{{ [ 2, 3, 4, 5, 6, 7 ] | min }}	=>	2

একইভাবে, বৃহত্তম সংখ্যাটি পুনরুদ্ধার করতে সর্বোচ্চ ফিল্টারটি ব্যবহার করুন।

{{ [ 2, 3, 4, 5, 6, 7 ] | max }}	=>	7

অনন্য মানগুলি প্রদর্শন করতে, অনন্য ফিল্টারটি ব্যবহার করুন।

{{ [ 2, 3, 3, 2, 6, 7 ] | unique }} =>	2, 3

0 এবং মানের মধ্যে একটি এলোমেলো সংখ্যা পেতে র্যান্ডম ফিল্টারটি ব্যবহার করুন।

{{ 50 | random }} =>  Some random number

লুপস:

প্রোগ্রামিং ভাষাগুলির মতোই, আমাদের উত্তরীয় জিনজা 2 এ লুপ রয়েছে।

উদাহরণস্বরূপ, সংখ্যার একটি তালিকাযুক্ত একটি ফাইল তৈরি করতে নীচের উদাহরণে প্রদর্শিত লুপের জন্য ব্যবহার করুন:

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{{ number }}
{% end for %}

আপনি যদি অন্য-এর বিবৃতিগুলি ফিল্টার করতে এবং নির্দিষ্ট মান অর্জনের জন্য for লুপটি একত্রিত করতে পারেন।

{% for number in [0, 1, 2, 3, 4, 5, 6, 7]  %}
{% if number == 5 %}
         {{ number }}
{% endif%}
{% endfor %}

এবং এই এই বক্তৃতা জন্য এটি। পরবর্তী বিষয়টিতে আমাদের সাথে যোগ দিন যেখানে আমরা উত্তরযোগ্য ভেরিয়েবল এবং তথ্যগুলির সাথে কাজ করার উদ্যোগ নেব।