วิธีใช้แท็กใน Ansible

Withi Chi Thaek Ni Ansible



บทละคร บทบาท และภารกิจเป็นโครงสร้างที่เข้าใจได้ และโครงสร้างที่เข้าใจได้นี้มีแอตทริบิวต์ที่สำคัญซึ่งเรียกว่าแท็กใน Ansible เมื่อใดก็ตามที่เราเปิด playbook ใน Ansible คุณสามารถใช้คำสั่ง -tags และ –skip แท็ก เพื่อให้เราสามารถดำเนินการเฉพาะชุดของงาน การเล่น และบทบาทเฉพาะ ถ้าเรามี playbook ที่มีงานจำนวนมาก แต่เราไม่ต้องการดำเนินการงานทั้งหมดของ playbook แทนที่จะดำเนินการทั้ง playbook เราจะทำงานสองสามอย่างโดยใช้คำสั่ง tag ใน Ansible playbook

เราจะพูดถึงแท็กในหัวข้อนี้ ซึ่งเป็นหนึ่งในแง่มุมที่สำคัญที่สุดของ Ansible เราจะพยายามอธิบายว่าแท็กคืออะไรและแท็กทำงานอย่างไรใน Ansible เนื่องจากนี่เป็นคุณลักษณะที่น่าสับสนของแพลตฟอร์ม Ansible







ตัวอย่างเช่น playbook อาจมีความรับผิดชอบสามประการ ได้แก่ การติดตั้งโมดูล การกำหนดค่า และการตรวจสอบสถานะของโมดูลที่ใช้งาน เช่น บริการทำงานอยู่และสามารถเข้าถึงได้หรือไม่ เนื่องจากเราต้องการดูสถานะของโมดูลในเครื่องระยะไกลบางเครื่อง เราจึงใช้แท็ก Ansible ในสถานการณ์นี้แทนการดำเนินการงานทั้งหมดใน Playbook ช่วยให้เราสามารถดำเนินการบางอย่างได้โดยเฉพาะ ทำให้เราสามารถลดเวลาในการทำงานโดยเก็บกิจกรรมที่เกี่ยวข้องทั้งหมดไว้ใน playbook เล่มเดียว



ข้อกำหนดเบื้องต้นของการใช้แท็กใน Ansible Playbook

ในการใส่ตัวอย่างที่ใช้งานได้จริงในซอฟต์แวร์ ansible เราต้องปฏิบัติตามข้อกำหนดต่อไปนี้



จำเป็นต้องมีเซิร์ฟเวอร์ควบคุม Ansible จึงจะทำการเปลี่ยนแปลงได้ หากต้องการใช้พารามิเตอร์แท็กในซอฟต์แวร์ Ansible เราจำเป็นต้องมีโฮสต์ในพื้นที่เพื่อสื่อสารกับพวกเขา ในกรณีนี้ เรากำลังใช้โลคัลโฮสต์ตลอดการดำเนินการเป็นเซิร์ฟเวอร์ระยะไกลเป้าหมาย เราจะสร้าง playbooks ดำเนินการคำสั่งแท็ก Ansible และตรวจสอบผลลัพธ์บนโฮสต์ระยะไกลจากอุปกรณ์ควบคุม ansible





เราจะตั้งเป้าหมายที่จะใช้สถานการณ์ที่แตกต่างกันเพื่อตรวจสอบแท็ก Ansible บางส่วน เพื่อให้ผู้เรียนเข้าใจแนวคิดของแท็กใน Playbook ของ Ansible ได้อย่างง่ายดาย

ตัวอย่าง 01: การเข้าถึงงานเดียวใน Ansible Playbook

เราจะนำไปใช้ใน Ansible โดยจัดเตรียมงานหลายรายการใน playbook จากนั้นเราจะเข้าถึงเพียงงานเดียวโดยใช้แท็กในนั้น ในการทำเช่นนั้น เราจะสร้าง playbook ก่อนโดยเขียนคำสั่งต่อไปนี้:



[root@master ansible]# nano ansible_tags.yml

หลังจากสร้างและเปิด playbook ansible_tags.yml ตอนนี้เราจะเริ่มเขียนคำสั่งใน playbook ก่อนอื่น เราจะส่งโฮสต์ที่ให้มาในพารามิเตอร์ “hosts’ ซึ่งเราจะใช้ “localhost” จากนั้น เราจะเขียนค่า 'เท็จ' ในพารามิเตอร์ 'gather_facts' เพื่อไม่ให้เรารับข้อมูลเพิ่มเติมเกี่ยวกับ localhost เมื่อเราดำเนินการ playbook

หลังจากนั้น เราจะเริ่มแสดงรายการกิจกรรมภายใต้พารามิเตอร์ 'งาน' ทีละรายการที่เราต้องการดำเนินการ เราจะตรวจสอบว่ามีเอกสารอยู่ในเครื่อง localhost หรือไม่ในขั้นตอนแรก หากมี เราจะจัดเก็บไว้ในพารามิเตอร์ 'register' จากนั้นเราจะให้ชื่อเฉพาะแก่แท็ก เพื่อที่ว่าเมื่อเราดำเนินการ playbook เราจะเข้าถึงแท็กได้ง่าย ในงานที่สอง เราจะทำเช่นเดียวกับที่ทำในงานแรก แต่แท็กต้องไม่ซ้ำกัน จากนั้นเราจะใช้ตัวเลือกดีบักเพื่อแสดงงานพร้อมกับข้อความที่เกี่ยวข้อง

- เจ้าภาพ:

- โลคัลโฮสต์
Gather_facts: เท็จ


งาน:
- ชื่อ: ตรวจสอบการมีอยู่ของไฟล์ x`
สถิติ: เส้นทาง =./host.yml
ลงทะเบียน: fileExists
แท็ก: check_file


- แก้ปัญหา:
msg: '{{ 'ไฟล์มีอยู่' ถ้า fileExists.stat.exists อื่น 'ไม่พบไฟล์' }}'
แท็ก: check_file


- ชื่อ: ตรวจสอบว่า host.yml สามารถเข้าถึงได้โดยผู้ใช้ปัจจุบันหรือไม่
เชลล์: stat -c '%a' ./host.yml
ลงทะเบียน: accessPath
แท็ก: check_access


- แก้ปัญหา:
msg: '{{ 'เข้าถึงไฟล์ได้' ถ้า (accessPath.stdout|int) < 660 อื่น 'ไม่สามารถเข้าถึงไฟล์ได้' }}'
แท็ก: check_access

ตอนนี้เราจะบันทึก playbook แล้วปิด เราต้องการเรียกใช้ playbook ansible_tags.yml ดังนั้นเราจะเขียนคำสั่งต่อไปนี้ในเทอร์มินัล Ansible เพื่อแสดงผลลัพธ์ต่อผู้ใช้

[root@master ansible]# ansible-playbook ansible_tags.yml –tags check_file

หลังจากรันคำสั่งด้านบนแล้ว เราจะได้ผลลัพธ์ที่ต้องการกลับมา ดังที่แสดงด้านล่าง มีเพียงหนึ่งงานเท่านั้นที่ถูกดำเนินการและแสดงในเอาต์พุตซึ่งเป็น 'ตรวจสอบการมีอยู่ของไฟล์'

ตัวอย่างที่ 02: ละเว้นแท็กเฉพาะใน Ansible Playbook

นี่คือตัวอย่างที่สองของแท็ก Ansible ที่เราจะไปที่แท็ก 'ข้าม' ขึ้นอยู่กับคุณว่าคุณต้องการละเว้นงานทั้งหมดหรือต้องการละเว้นงานเฉพาะของ playbook ใน Ansible เรากำลังใช้ตัวอย่างที่ 1 จากนั้นเราจะข้ามงานโดยเขียนคำสั่งด้านล่างในเทอร์มินัล Ansible

[root@master ansible]# ansible-playbook ansible_tags.yml --skip-tags check_file

จากคำสั่งด้านบน เราได้เพิกเฉยต่องาน 'ตรวจสอบการมีอยู่ของไฟล์' ขณะนี้ มีเพียงงานเดียวเท่านั้นที่แสดงผลในเอาต์พุตซึ่งเป็น 'การเข้าถึงไฟล์' ในแบบอักษรสีเขียว

ตัวอย่างที่ 03: รันงานใน Ansible Playbook เสมอ

เราจะใช้ตัวอย่างที่สามตามแท็ก Ansible ในตัวอย่างนี้ เราจะใช้แท็ก 'เสมอ' ซึ่งหมายความว่าแท็กใดแท็กหนึ่งจะทำงานเสมอใน Ansible Playbook ในการเปิด playbook ให้ใช้คำสั่งต่อไปนี้:

[root@master ansible]# nano ansible_tags.yml

ใน playbook เราได้สร้างงานหลายอย่างเพื่อเรียกใช้ แต่เราส่งแท็ก 'เสมอ' ในงานสุดท้ายซึ่งก็คือ 'ลบรหัสผ่านออกจากสินค้าคงคลัง' ต่อไปนี้เป็นคำสั่งที่ใช้ใน playbook:

- โฮสต์: ทั้งหมด

Gather_facts: เท็จ


งาน:
- ชื่อ: ตรวจสอบการมีอยู่ของไฟล์
สถิติ: เส้นทาง =./host.yml
ลงทะเบียน: fileExists
delegate_to: localhost
แท็ก: check_file


- แก้ปัญหา:
msg: '{{ 'ไฟล์มีอยู่' ถ้า fileExists.stat.exists อื่น 'ไม่พบไฟล์' }}'
แท็ก: check_file


- ชื่อ: ตรวจสอบว่า host.yml สามารถเข้าถึงได้โดยผู้ใช้ปัจจุบันหรือไม่
เชลล์: stat -c '%a' ./host.yml
ลงทะเบียน: accessPath
delegate_to: localhost
แท็ก: check_access


- แก้ปัญหา:
msg: '{{ 'เข้าถึงไฟล์ได้' ถ้า (accessPath.stdout|int) < 660 อื่น 'ไม่สามารถเข้าถึงไฟล์ได้' }}'
แท็ก: check_access


- ชื่อ: ลบรหัสผ่านจากสินค้าคงคลัง
บรรทัดในไฟล์:
เส้นทาง: '{{inventory_file}}'
regexp: '\b{{item}}.*\b'
สถานะ: ขาด
delegate_to: localhost
กลายเป็น: เท็จ
แท็ก: เสมอ
with_items:
- ansible_password

หลังจากนั้น เราจะสร้างไฟล์รายการสินค้าเพื่อสร้างการเชื่อมต่อระหว่างคอนโทรลเลอร์และรีโมตโฮสต์เป้าหมาย ด้านล่างนี้คือคำสั่ง:

[root@master ansible]# nano host.yml

นี่คือไฟล์สินค้าคงคลังที่มีข้อมูลที่เกี่ยวข้องกับ “Linux_host” ใน Ansible

ทั้งหมด:

เจ้าภาพ:
Linux_Host:
ansible_host: 192.168.3.229
ansible_user: ใช้งานได้
ansible_password: ******
ansible_connection: ssh
ansible_port: 22

เพื่อให้ได้ผลลัพธ์ที่ต้องการ เราจะเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล Ansible:

[root@master ansible]# ansible-playbook ansible_tags.yml --tags check_file -i host.yml

บทสรุป

แท็กใน Ansible ได้รับการอธิบายในบทความนี้ ตอนนี้เราเข้าใจการทำงานของแท็กและสถานที่ใน Ansible ที่เราจะนำไปใช้ เพื่อช่วยให้ผู้เรียนเข้าใจแนวคิดของแท็ก Ansible เราได้พัฒนาตัวอย่างที่หลากหลาย