ป้ายกำกับ: Ansible

YAML ( YAML Ain’t Markup Language )YAML ( YAML Ain’t Markup Language )

YAML ( YAML Ain’t Markup Language ) เป็นรูปแบบการเขียนข้อมูลที่เน้นให้ “มนุษย์อ่านง่าย” และเป็นที่นิยมอย่างมากในการเขียนไฟล์ Configuration เช่น Docker, Kubernetes หรือ Ansible


🏗️ โครงสร้างพื้นฐานของ YAML

กฎเหล็กที่สำคัญที่สุดของ YAML คือ “การย่อหน้า ( Indentation )” ครับ เราจะใช้ Space ( ช่องว่าง ) แทนการใช้ปีกกา { } หรือ Tag < > แบบใน JSON หรือ XML

  1. Key-Value Pairs
    ข้อมูลพื้นฐานจะอยู่ในรูป key: value โดยต้องมีช่องว่างหลังเครื่องหมายโคลอน : เสมอ
    server_name: production_server
    port: 8080
    enabled: true
    
  2. Lists ( Arrays )
    การสร้างรายการจะใช้เครื่องหมายขีดกลาง - นำหน้า
    tools:
     - Docker
     - Nginx
     - Terraform
    
  3. Nested Objects ( Objects ใน Object )
    ใช้การย่อหน้าเพื่อบอกว่าข้อมูลชุดนี้เป็นส่วนหนึ่งของหัวข้อด้านบน
    database:
     client: postgresql
     connection:
     host: 127.0.0.1
     user: admin
    

💡 เทคนิคการเขียนขั้นสูง

การเขียนข้อความยาว ๆ ( Multi-line Strings )

หากคุณมีข้อความยาว ๆ เช่น สคริปต์หรือคำบรรยาย คุณสามารถเลือกใช้สัญลักษณ์ได้ 2 แบบ

  • | ( Literal ): เก็บรูปแบบการขึ้นบรรทัดใหม่ไว้ทั้งหมด
  • > ( Folded ): เปลี่ยนการขึ้นบรรทัดใหม่ให้เป็นช่องว่าง ( ยกเว้นบรรทัดสุดท้าย )
description: |
 บรรทัดที่ 1
 บรรทัดที่ 2 (จะยังคงอยู่แบบนี้)

summary: >
 ข้อความที่พิมพ์แยกบรรทัดกันแบบนี้
 จะถูกรวมเป็นบรรทัดเดียวเมื่ออ่านค่า

⚠️ ข้อควรระวัง ( Best Practices )

  1. ห้ามใช้ Tab: ให้ใช้การเคาะ Space ( ปกติคือ 2 ช่อง ) เท่านั้น เพราะตัวอ่าน YAML ส่วนใหญ่จะ Error ถ้าเจอ Tab
  2. Data Types: * true / false ไม่ต้องมีเครื่องหมายคำพูด
    • ตัวเลขไม่ต้องมีเครื่องหมายคำพูด
    • ถ้าข้อความมีอักขระพิเศษ เช่น : หรือ # ให้ครอบด้วยเครื่องหมายคำพูด " " หรือ ' '
  3. Comments: ใช้เครื่องหมาย # สำหรับการเขียนคอมเมนต์

🛠️ ตัวอย่างการใช้งานจริง ( Nginx Config แบบ YAML )

การเก็บค่า Config ไว้ในรูปแบบ YAML ( เช่นใน Docker Compose ) จะช่วยให้คุณ Backup และไล่ดูประวัติการแก้ไขได้ง่ายขึ้นครับ

services:
 web_server:
 image: nginx:latest
 ports:
  - "80:80"
 volumes:
  - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
  - ./html:/usr/share/nginx/html
 restart: always

Pro Tip: ก่อนจะนำไฟล์ YAML ไปใช้งานจริง แนะนำให้นำไปวางใน YAML Lint เพื่อตรวจสอบว่าโครงสร้างการย่อหน้าถูกต้องหรือไม่ครับ


อ่านเพิ่มเติม