ວິທີການເຮັດວຽກກັບຕົວແປແລະຂໍ້ເທັດຈິງທີ່ບໍ່ຖືກຕ້ອງ - ພາກທີ 8


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

ສິ່ງທີ່ປະກອບມີຊື່ຕົວແປທີ່ຖືກຕ້ອງ?

ຊື່ຕົວແປປະກອບມີຕົວອັກສອນ, ຕົວເລກ, ຂີດ ໝາຍ ຫລືເຄື່ອງ ໝາຍ ລວມຂອງທັງສອງຫລືທັງ ໝົດ ຂອງມັນ. ເຖິງຢ່າງໃດກໍ່ຕາມ, ຈົ່ງຈື່ໄວ້ວ່າຊື່ຕົວແປຕ້ອງເລີ່ມຕົ້ນດ້ວຍຕົວອັກສອນສະ ເໝີ ແລະບໍ່ຄວນມີຊ່ອງຫວ່າງ.

ລອງເບິ່ງບາງຕົວຢ່າງຂອງຊື່ຕົວແປທີ່ຖືກຕ້ອງແລະຍອມຮັບບໍ່ໄດ້:

football 
foot_ball
football20 
foot_ball20
foot ball
20 
foot-ball

ໃຫ້ສົນທະນາກ່ຽວກັບປະເພດຕົວແປ:

1. ຕົວປ່ຽນແປງ Playbook

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

ເພື່ອເຂົ້າຫາມູນຄ່າຂອງຕົວແປ, ວາງມັນລະຫວ່າງສາຍເຊືອກຄູ່ທີ່ຕິດກັບເຄື່ອງ ໝາຍ ວົງຢືມ.

ນີ້ແມ່ນຕົວຢ່າງປື້ມຫຼິ້ນງ່າຍໆ:

- hosts: all
  vars:
    greeting: Hello world! 

  tasks:
  - name: Ansible Basic Variable Example
    debug:
      msg: "{{ greeting }}"

ໃນປື້ມຫຼີ້ນຂ້າງເທິງ, ຕົວປ່ຽນທັກທາຍແມ່ນປ່ຽນແທນໂດຍຄຸນຄ່າຂອງສະບາຍດີໂລກ! ໃນເວລາທີ່ playbook ແມ່ນດໍາເນີນການ. ປື້ມຫຼິ້ນພຽງແຕ່ພິມຂໍ້ຄວາມສະບາຍດີໂລກ! ເມື່ອຖືກປະຫານຊີວິດ.

ນອກຈາກນັ້ນ, ທ່ານສາມາດມີບັນຊີລາຍຊື່ຫຼືແຖວຂອງຕົວແປຕ່າງໆດັ່ງທີ່ສະແດງ:

ປື້ມຫຼີ້ນຂ້າງລຸ່ມນີ້ສະແດງຕົວແປທີ່ເອີ້ນວ່າທະວີບ. ຕົວແປມີ 5 ຄ່າທີ່ແຕກຕ່າງກັນ - ຊື່ທະວີບ. ແຕ່ລະຄ່າເຫຼົ່ານີ້ສາມາດເຂົ້າເຖິງໄດ້ງ່າຍໂດຍໃຊ້ດັດນີ 0 ເປັນຕົວແປ ທຳ ອິດ.

ຕົວຢ່າງຂອງປື້ມຫຼີ້ນຂ້າງລຸ່ມນີ້ດຶງຂໍ້ມູນແລະສະແດງອາຊີ (ດັດຊະນີ 1).

- hosts: all
  vars:
    continents:
      - Africa
      - Asia
      - South America
      - North America
      - Europe
      
  tasks:
  - name: Ansible List variable Example
    debug:
      msg: "{{ continents [1] }}"

ບັນຊີລາຍຊື່ຕົວແປສາມາດມີໂຄງສ້າງທີ່ຄ້າຍຄືກັນດັ່ງທີ່ສະແດງ:

vars:
    Continents: [Africa, Asia, South America, North America, Europe]

ເພື່ອບອກລາຍການທັງ ໝົດ ໃນລາຍການ, ໃຫ້ ນຳ ໃຊ້ໂມດູນ with_items. ສິ່ງດັ່ງກ່າວຈະເຊື່ອມຕໍ່ມູນຄ່າທັງ ໝົດ ໃນອາເລ.

- hosts: all
  vars:
    continents: [Africa, Asia, South America, North America, Europe]

  tasks:
  - name: Ansible array variables example
    debug: 
      msg: "{{ item }}"
    with_items:
      - "{{ continents }}"

ຕົວປ່ຽນຂອງ Ansible ອີກປະເພດ ໜຶ່ງ ແມ່ນຕົວແປວັດຈະນານຸກົມ.

ຕົວແປວັດຈະນານຸກົມກໍ່ໄດ້ຮັບການສະ ໜັບ ສະ ໜູນ ເພີ່ມເຕີມໃນ playbook. ເພື່ອ ກຳ ນົດຕົວແປພົດຈະນານຸກົມ, ພຽງແຕ່ ກຳ ນົດຄູ່ທີ່ມີຄ່າ ສຳ ຄັນຢູ່ທາງລຸ່ມຊື່ຕົວແປຂອງພົດຈະນານຸກົມ.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 10.200.50.1
   vlans:
       id: 10
       port: 2

ໃນຕົວຢ່າງຂ້າງເທິງ, vlans ແມ່ນຕົວແປວັດຈະນານຸກົມໃນຂະນະທີ່ id ແລະ port ແມ່ນຄູ່ ສຳ ຄັນ.

hosts: switch_f01

vars:
   http_port: 8080
   default_gateway: 
   vlans:
      id: 10
      port: 20

 tasks:
   name: Configure default gateway
   system_configs:
   default_gateway_ip: “{{ default_gateway  }}“


   name: Label port on vlan 10
   vlan_config:
	vlan_id: “{{ vlans[‘id’]  }}“
     port_id: 1/1/ {{ vlans[‘port’]  }}

ສຳ ລັບ port_id, ເນື່ອງຈາກວ່າພວກເຮົາ ກຳ ລັງເລີ່ມຕົ້ນຄ່າກັບຕົວ ໜັງ ສືແລະບໍ່ແມ່ນຕົວແປ, ເຄື່ອງ ໝາຍ ວົງຢືມບໍ່ ຈຳ ເປັນທີ່ຈະອ້ອມຮອບວົງແຫວນ curly.

2. ຕົວແປພິເສດ

Ansible ໃຫ້ບັນຊີລາຍຊື່ຂອງຕົວແປທີ່ໄດ້ ກຳ ນົດໄວ້ເຊິ່ງສາມາດອ້າງອີງໄດ້ໃນແມ່ແບບ Jinja2 ແລະປື້ມຫຼີ້ນແຕ່ບໍ່ສາມາດປ່ຽນແປງຫຼື ກຳ ນົດໂດຍຜູ້ໃຊ້.

ລວບລວມ, ບັນຊີລາຍຊື່ຂອງຕົວປ່ຽນແປງທີ່ຖືກກໍານົດໄວ້ລ່ວງຫນ້າຂອງ Ansible ແມ່ນຖືກກ່າວເຖິງເປັນຂໍ້ເທັດຈິງທີ່ Ansible ແລະສິ່ງເຫລົ່ານີ້ຖືກລວບລວມເມື່ອປື້ມຫຼີ້ນໄດ້ຖືກປະຕິບັດ.

ເພື່ອຈະໄດ້ຮັບບັນຊີລາຍຊື່ຂອງຕົວປ່ຽນແປງຂອງ Ansible ທັງ ໝົດ, ໃຫ້ໃຊ້ໂມດູນການຕັ້ງຄ່າໃນ ຄຳ ສັ່ງ ad-hoc Ansible ດັ່ງທີ່ສະແດງຢູ່ດ້ານລຸ່ມ:

# ansible -m setup hostname

ນີ້ສະແດງຜົນຜະລິດໃນຮູບແບບ JSON ດັ່ງທີ່ສະແດງ:

# ansible -m setup localhost

ຈາກຜົນໄດ້ຮັບ, ພວກເຮົາສາມາດເຫັນໄດ້ວ່າບາງຕົວຢ່າງຂອງຕົວແປພິເສດຂອງ Ansible ລວມມີ:

ansible_architecture
ansible_bios_date
ansible_bios_version
ansible_date_time
ansible_machine
ansible_memefree_mb
ansible_os_family
ansible_selinux

ມັນມີຕົວແປພິເສດ Ansible ອື່ນໆອີກຫຼາຍຢ່າງນີ້ແມ່ນພຽງແຕ່ສອງສາມຕົວຢ່າງເທົ່ານັ້ນ.

ຕົວແປເຫລົ່ານີ້ສາມາດຖືກ ນຳ ໃຊ້ໃນແມ່ແບບ Jinja2 ດັ່ງທີ່ສະແດງ:

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

3. ຕົວແປສິນຄ້າຄົງຄັງ

ສຸດທ້າຍ, ໃນບັນຊີລາຍຊື່, ພວກເຮົາມີຕົວປ່ຽນແປງສາງ Ansible. ສິນຄ້າຄົງຄັງແມ່ນເອກະສານໃນຮູບແບບ INI ເຊິ່ງປະກອບມີເຈົ້າພາບທັງ ໝົດ ທີ່ຕ້ອງໄດ້ຮັບການຄຸ້ມຄອງໂດຍ Ansible.

ໃນສາງ, ທ່ານສາມາດ ກຳ ນົດຕົວແປໃຫ້ກັບລະບົບເຈົ້າພາບແລະຕໍ່ມາໃຊ້ມັນຢູ່ໃນປື້ມຫຼີ້ນ.

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=ubuntu http_port=8080

ຂ້າງເທິງນີ້ສາມາດເປັນຕົວແທນໃນເອກະສານ YAML ຂອງ playbook ດັ່ງທີ່ສະແດງ:

---
   web_servers:
     web_server_1:
        ansible_user=centos
	   http_port=80

web_server_2:
        ansible_user=ubuntu
	   http_port=8080

ຖ້າລະບົບໂຮດຕ່າງໆແບ່ງປັນຕົວແປດຽວກັນ, ທ່ານສາມາດ ກຳ ນົດກຸ່ມອື່ນໃນເອກະສານສາງເພື່ອເຮັດໃຫ້ມັນບໍ່ມີຄວາມຫຍຸ້ງຍາກແລະຫລີກລ້ຽງການຄ້າງຫ້ອງທີ່ບໍ່ ຈຳ ເປັນ.

ຍົກຕົວຢ່າງ:

[web_servers]

web_server_1 ansible_user=centos http_port=80
web_server_2 ansible_user=centos http_port=80

ຂ້າງເທິງນີ້ສາມາດມີໂຄງສ້າງເປັນ:

[web_servers]
web_server_1
web_server_2


[web_servers:vars]
ansible_user=centos
http_port=80

ແລະໃນໄຟລ໌ YAML ຂອງ playbook, ສິ່ງນີ້ຈະຖືກ ກຳ ນົດດັ່ງທີ່ສະແດງ:

---
   web_servers:
    
     hosts: 
       web_server_1:
	  web_server_2:

     vars: 
        ansible_user=centos
   http_port=80

ຂໍ້ເທັດຈິງທີ່ສາມາດຕອບໄດ້

ໃນເວລາທີ່ແລ່ນປື້ມຫຼິ້ນ, ວຽກທໍາອິດທີ່ Ansible ເຮັດແມ່ນການປະຕິບັດວຽກງານການຕັ້ງຄ່າ. ຂ້າພະເຈົ້າແນ່ໃຈວ່າທ່ານຕ້ອງເຂົ້າເບິ່ງຜົນຜະລິດ:

TASK:  [Gathering facts] *********

ຂໍ້ເທັດຈິງທີ່ບໍ່ສາມາດຕອບສະ ໜອງ ໄດ້ແມ່ນບໍ່ມີຫຍັງນອກ ເໜືອ ຈາກຄຸນສົມບັດຂອງລະບົບຫລືຂໍ້ມູນກ່ຽວກັບຂໍ້ມູນຈາກໄລຍະໄກທີ່ທ່ານໄດ້ເຊື່ອມຕໍ່ເຂົ້າມາ. ຂໍ້ມູນນີ້ປະກອບມີສະຖາປັດຕະຍະ ກຳ ຂອງລະບົບ, ເວີຊັນ OS, ຂໍ້ມູນ BIOS, ເວລາແລະລະບົບວັນ, ເວລາລະບົບ, ທີ່ຢູ່ IP, ແລະຂໍ້ມູນກ່ຽວກັບຮາດແວເພື່ອກ່າວເຖິງສອງສາມຂໍ້.

ເພື່ອໃຫ້ໄດ້ຂໍ້ເທັດຈິງກ່ຽວກັບລະບົບໃດ ໜຶ່ງ ພຽງແຕ່ໃຊ້ໂມດູນການຕັ້ງຄ່າດັ່ງທີ່ສະແດງຢູ່ໃນ ຄຳ ສັ່ງຂ້າງລຸ່ມນີ້:

# ansible -m setup hostname

ຍົກຕົວຢ່າງ:

# ansible -m setup database_server

ນີ້ພິມອອກຊຸດຂໍ້ມູນໃຫຍ່ເປັນຮູບແບບ JSON ດັ່ງທີ່ສະແດງ:

ຂໍ້ເທັດຈິງທີ່ສາມາດຕອບສະ ໜອງ ໄດ້ງ່າຍໃນການຊ່ວຍຜູ້ເບິ່ງແຍງລະບົບທີ່ ດຳ ເນີນການເພື່ອປະຕິບັດຕົວຢ່າງ, ອີງຕາມລະບົບປະຕິບັດການ, ພວກເຂົາສາມາດຮູ້ໄດ້ວ່າຕ້ອງມີການຕິດຕັ້ງໂປແກຼມໂປແກຼມໃດ, ແລະມີການ ກຳ ນົດຄ່າແນວໃດ, ແລະອື່ນໆ.

ຂໍ້ເທັດຈິງຂອງລູກຄ້າ

ທ່ານຍັງບໍ່ໄດ້ຮູ້ບໍ່ວ່າທ່ານສາມາດສ້າງຂໍ້ເທັດຈິງຕາມປະເພນີຂອງທ່ານເອງທີ່ສາມາດລວບລວມໂດຍ Ansible? ແມ່ນແລ້ວ, ເຈົ້າສາມາດ. ດັ່ງນັ້ນທ່ານຈະເຮັດແນວໃດກ່ຽວກັບມັນ? ລອງປ່ຽນເກຍແລະເບິ່ງວິທີການ.

ຂັ້ນຕອນ ທຳ ອິດແມ່ນການສ້າງໄດເລກະທໍລີ /etc/ansible/facts.d ເທິງ node ທີ່ຖືກຈັດການຫລືຫ່າງໄກ.

ພາຍໃນໄດເລກະທໍລີນີ້, ສ້າງແຟ້ມເອກະສານດ້ວຍການຂະຫຍາຍ .fact . ເອກະສານນີ້ຈະສົ່ງຄືນຂໍ້ມູນ JSON ເມື່ອເຄື່ອງຫຼີ້ນຫຼີ້ນຢູ່ node ຄວບຄຸມ Ansible ເຊິ່ງລວມມີຂໍ້ເທັດຈິງອື່ນໆທີ່ Ansible ດຶງອອກມາຫຼັງຈາກ playbook ແລ່ນ.

ນີ້ແມ່ນຕົວຢ່າງຂອງແຟ້ມຂໍ້ມູນຄວາມຈິງທີ່ມີຊື່ວ່າ date_time.fact ທີ່ດຶງວັນທີແລະເວລາ.

# mkdir -p /etc/ansible/facts.d
# vim /etc/ansible/facts.d/date_time.fact

ຕື່ມສາຍຕໍ່ໄປນີ້ໃນມັນ.

#!/bin/bash
DATE=`date`
echo "{\"date\" : \"${DATE}\"}"

ບັນທຶກແລະອອກຈາກແຟ້ມ.

ໃນປັດຈຸບັນກໍາຫນົດອະນຸຍາດປະຕິບັດ:

# chmod +x /etc/ansible/facts.d/date_time.fact

ຕອນນີ້, ຂ້ອຍໄດ້ສ້າງປື້ມຫຼີ້ນກ່ຽວກັບ node ການຄວບຄຸມ Ansible ທີ່ເອີ້ນວ່າ check_date.yml.

---

- hosts: webservers

  tasks:
   - name: Get custom facts
     debug:
      msg: The custom fact is {{ansible_local.date_time}}

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

ດຽວນີ້ ດຳ ເນີນການຫຼີ້ນຫຼີ້ນແລະສັງເກດເບິ່ງການດຶງເອົາຂໍ້ມູນທີ່ຖືກບັນທຶກໄວ້ໃນແຟ້ມຂໍ້ມູນຄວາມຈິງ:

# ansible_playbook check_date.yml

ນີ້ເຮັດໃຫ້ພວກເຮົາສິ້ນສຸດການສອນນີ້ກ່ຽວກັບການເຮັດວຽກກັບຕົວແປທີ່ຖືກຕ້ອງແລະຂໍ້ເທັດຈິງ.