ວິທີການສ້າງແບບ ຈຳ ລອງທີ່ບໍ່ສາມາດສ້າງການຕັ້ງຄ່າໄດ້ຕາມ Nodes ທີ່ຖືກຈັດການ - Part 7


ໃນພາກທີ 7 ຂອງຊຸດ Ansible ນີ້, ທ່ານຈະໄດ້ຮຽນຮູ້ວິທີການສ້າງແລະ ນຳ ໃຊ້ແມ່ແບບໃນ Ansible ເພື່ອສ້າງການ ກຳ ນົດແບບທີ່ ກຳ ນົດເອງໃນຂໍ້ທີ່ຖືກຄຸ້ມຄອງ. Templating in Ansible ແມ່ນວິທີທີ່ງ່າຍແລະເປັນມິດໃນການຊຸກຍູ້ການຕັ້ງຄ່າທີ່ ກຳ ຫນົດເອງໃຫ້ແກ່ nodes ທີ່ມີການຈັດການກັບລະບົບທີ່ແຕກຕ່າງກັນໂດຍມີການແກ້ໄຂເອກະສານ playbook ໜ້ອຍ ທີ່ສຸດ.

ເພື່ອໃຫ້ມີຄວາມຮູ້ດີວ່າແມ່ແບບເປັນແບບໃດ, ໃຫ້ພິຈາລະນາຜູ້ຈັດການດ້ານໄອທີທີ່ ກຳ ລັງຂຽນອີເມວເພື່ອເຊີນພະແນກຂອງລາວເຂົ້າຮ່ວມງານລ້ຽງ cocktail ອີເມວຖືກສົ່ງໄປຫາແຕ່ລະສະມາຊິກພ້ອມທັງເຊື້ອເຊີນພວກເຂົາໃຫ້ຕິດປ້າຍພ້ອມກັບຄູ່ສົມລົດຂອງພວກເຂົາ.

ອີເມວໄດ້ຖືກປັບແຕ່ງເຊັ່ນວ່າຮ່າງກາຍຂອງອີເມວຍັງຄືເກົ່າ, ແຕ່ສິ່ງເສບຕິດແລະຊື່ຂອງຄູ່ສົມລົດຂອງພວກເຂົາຕ່າງກັນ. ອີເມວກາຍເປັນແມ່ແບບ, ໃນຂະນະທີ່ຜູ້ຮັບແລະຄູ່ສົມລົດທີ່ກ່ຽວຂ້ອງແມ່ນຕົວແປ.

ນັ້ນແມ່ນຕົວຢ່າງທົ່ວໄປ. Ansible ໃຊ້ Jinja2 ເຊິ່ງເປັນເຄື່ອງຈັກວັດແບບທັນສະ ໄໝ ສຳ ລັບກອບ Python ທີ່ໃຊ້ເພື່ອສ້າງເນື້ອຫາຫລືການສະແດງອອກແບບເຄື່ອນໄຫວ. ການຕັ້ງ Templating ແມ່ນມີປະໂຫຍດຫຼາຍໃນເວລາສ້າງເອກະສານການຕັ້ງຄ່າທີ່ ກຳ ຫນົດເອງໃຫ້ກັບຫລາຍເຊີບເວີແຕ່ມີເອກະລັກສະເພາະຂອງແຕ່ລະອັນ.

Jinja2 ໃຊ້ເຊືອກຜູກສອງເທົ່າ {{... }} ເພື່ອໃສ່ຕົວແປທີ່ໄດ້ ກຳ ນົດໄວ້. ສຳ ລັບ ຄຳ ຄິດເຫັນ, ໃຫ້ໃຊ້ {{# #} ແລະ ສຳ ລັບຂໍ້ ກຳ ນົດທີ່ມີເງື່ອນໄຂໃຫ້ໃຊ້ {% …%} .

ໃຫ້ສົມມຸດວ່າທ່ານມີຕົວແບບຂໍ້ມູນຂອງ VLAN ໃນເຄືອຂ່າຍຂອງທ່ານດ້ວຍລະບົບໂຮດທີ່ທ່ານຕ້ອງການຍູ້ໃສ່ VLAN ທີ່ກ່ຽວຂ້ອງຂອງພວກເຂົາດັ່ງທີ່ສະແດງ.

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

ເພື່ອສະແດງການຕັ້ງຄ່າດັ່ງກ່າວ, ແມ່ແບບທີ່ສອດຄ້ອງກັນ jinja2 ເອີ້ນວ່າ vlans.j2 ຈະປາກົດຕາມທີ່ສະແດງໄວ້. ດັ່ງທີ່ທ່ານສາມາດເຫັນໄດ້, ຕົວແປຕ່າງໆ 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: ການຕັ້ງຄ່າເຄື່ອງແມ່ຂ່າຍເວັບໄຊຕ໌ໃນ Distros ທີ່ແຕກຕ່າງກັນ

ໃນຕົວຢ່າງນີ້, ພວກເຮົາຈະສ້າງເອກະສານ index.html ເຊິ່ງຈະສະແດງຂໍ້ມູນກ່ຽວກັບ hostname & OS ຂອງ 2 server ທີ່ໃຊ້ CentOS & Ubuntu.

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

Apache webserver ໄດ້ຕິດຕັ້ງຢູ່ໃນເຊີບເວີທັງສອງແລ້ວ.

ສະນັ້ນໃຫ້ສ້າງ playbook test_server.yml ດັ່ງທີ່ສະແດງ:

---

 - hosts: all
   become: yes

   tasks:

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

ແມ່ແບບເອກະສານ Jinja ຂອງພວກເຮົາແມ່ນ index.html.j2 ເຊິ່ງຈະຖືກຍູ້ໄປຫາເອກະສານ index.html ໃນແຕ່ລະ webserver. ຈຳ ໄວ້ສະ ເໝີ ທີ່ຈະໃສ່ນາມສະກຸນ .j2 ຢູ່ປາຍເພື່ອ ໝາຍ ຄວາມວ່າມັນແມ່ນເອກະສານ jinja2.

ຕອນນີ້ໃຫ້ສ້າງເອກະສານແບບ template.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_hostname ແລະ ansible_os_family ແມ່ນຕົວແປທີ່ມີຕົວປ່ຽນແປງເຊິ່ງຈະຖືກແທນດ້ວຍຊື່ໂຮດຕິ້ງແລະລະບົບປະຕິບັດການຂອງແຕ່ລະ webservers ສ່ວນບຸກຄົນໃນ browser.

ດຽວນີ້, ເປີດ ນຳ ໃຊ້ປື້ມຫຼີ້ນ.

# ansible-playbook test_server.yml

ດຽວນີ້ໃຫ້ໂຫຼດ ໜ້າ ເວບໄຊທ໌ ສຳ ລັບທັງ CentOS 7 ແລະ Ubuntu webservers.

ດັ່ງທີ່ທ່ານເຫັນ, ຂໍ້ມູນທີ່ແຕກຕ່າງກັນກ່ຽວກັບ hostname ແລະຄອບຄົວຂອງ OS ໄດ້ຖືກສະແດງຢູ່ໃນແຕ່ລະ server. ແລະນັ້ນແມ່ນວິທີເຮັດໃຫ້ Jinja2 ເຢັນສະບາຍ!

ຕົວ ໜັງ ສື:

ບາງຄັ້ງ, ທ່ານອາດຈະຕັດສິນໃຈປ່ຽນແທນຄ່າຂອງຕົວແປທີ່ມີເຊືອກທີ່ປາກົດໃນລັກສະນະໃດ ໜຶ່ງ.

ຍົກຕົວຢ່າງ, ໃນຕົວຢ່າງທີ່ຜ່ານມາ, ພວກເຮົາສາມາດຕັດສິນໃຈເຮັດໃຫ້ຕົວປ່ຽນແປງຂອງ Ansible ປາກົດຢູ່ໃນ Uppercase. ເພື່ອເຮັດແນວນັ້ນ, ໃຫ້ເພີ່ມມູນຄ່າຂ້າງເທິງຂອງຕົວແປ. ວິທີນີ້ຄ່າໃນຕົວແປຈະຖືກປ່ຽນເປັນຮູບແບບ Uppercase.

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

ເຊັ່ນດຽວກັນນີ້, ທ່ານສາມາດປ່ຽນຜົນຜະລິດສະຕິງເປັນຕົວນ້ອຍໂດຍການເພີ່ມການໂຕ້ຖຽງຕ່ ຳ.

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

ນອກຈາກນັ້ນ, ທ່ານສາມາດປ່ຽນສາຍເຊືອກກັບສາຍອື່ນ.

ຍົກຕົວຢ່າງ:

ຫົວຂໍ້ຮູບເງົາແມ່ນ {{movie_name}} => ຫົວຂໍ້ຮູບເງົາແມ່ນແຫວນ.

ເພື່ອທົດແທນຜົນຜະລິດດ້ວຍສາຍອື່ນ, ໃຊ້ການໂຕ້ຖຽງແທນທີ່ດັ່ງທີ່ສະແດງ:

ຫົວຂໍ້ຮູບເງົາແມ່ນ {{movie_name | ທົດແທນ ("ແຫວນ", "Heist")}} => ຫົວຂໍ້ຮູບເງົາແມ່ນ Heist.

ເພື່ອດຶງເອົາຄ່າທີ່ນ້ອຍທີ່ສຸດໃນຂບວນການ, ໃຊ້ຕົວກອງ min.

{{ [ 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

LOOPS:

ຄືກັນກັບໃນພາສາການຂຽນໂປແກຼມ, ພວກເຮົາມີ loops ໃນ Ansible Jinja2.

ຕົວຢ່າງ, ເພື່ອສ້າງແຟ້ມເອກະສານທີ່ມີບັນຊີຂອງຕົວເລກໃຫ້ໃຊ້ for loop ດັ່ງທີ່ສະແດງຢູ່ໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້:

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

ນອກນັ້ນທ່ານຍັງສາມາດສົມທົບ for for loop ດ້ວຍ if-else ເພື່ອກັ່ນຕອງແລະໄດ້ຮັບຄຸນຄ່າບາງຢ່າງ.

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

ແລະນັ້ນແມ່ນ ສຳ ລັບການບັນຍາຍນີ້. ເຂົ້າຮ່ວມກັບພວກເຮົາໃນຫົວຂໍ້ຕໍ່ໄປເຊິ່ງພວກເຮົາຈະຮ່ວມທຸລະກິດກັບຕົວແປແລະຂໍ້ມູນທີ່ສາມາດຕອບສະ ໜອງ ໄດ້.