ວິທີການສ້າງແບບ ຈຳ ລອງທີ່ບໍ່ສາມາດສ້າງການຕັ້ງຄ່າໄດ້ຕາມ 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 %}
ແລະນັ້ນແມ່ນ ສຳ ລັບການບັນຍາຍນີ້. ເຂົ້າຮ່ວມກັບພວກເຮົາໃນຫົວຂໍ້ຕໍ່ໄປເຊິ່ງພວກເຮົາຈະຮ່ວມທຸລະກິດກັບຕົວແປແລະຂໍ້ມູນທີ່ສາມາດຕອບສະ ໜອງ ໄດ້.