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