Trong bài này, chúng ta sẽ tìm hiểu về YAML, một ngôn ngữ dùng để viết file cấu hình, cực kỳ phổ biến khi làm việc với Ansible, Kubernetes, hay Docker Compose.
Xem thêm:
Ansible là gì? Vì sao chúng ta lại cần nó – Bài 1
YAML là gì?
YAML là viết tắt của “YAML Ain’t Markup Language” – nghe hơi kỳ kỳ chút đúng không – nhưng thật ra YAML được thiết kế với mục tiêu là dễ đọc, dễ viết, dễ hiểu, ngay cả với người mới.
Một file YAML thường bắt đầu bằng ba dấu gạch ngang:
---
YAML thường được dùng để mô tả dữ liệu theo dạng cấu trúc – giống như JSON hay XML – nhưng cú pháp của nó thì ngắn gọn và “thân thiện” hơn nhiều.
Nếu bạn định làm việc với Ansible, Kubernetes hay Docker, biết YAML sẽ là một lợi thế cực lớn luôn đó.
So sánh YAML với các ngôn ngữ khác
Cùng là mô tả dữ liệu, nhưng:
- XML thì dài dòng, nhiều thẻ mở – đóng.
- JSON thì gọn hơn nhưng vẫn cần ngoặc, dấu phẩy và dấu ngoặc kép liên tục.
- YAML thì… dễ thở hơn nhiều
3 kiểu dữ liệu cơ bản trong YAML
1. Key-Value (Khóa – Giá trị)
Đây là dạng đơn giản nhất, mỗi dòng là một cặp key: value.
name: nginx
enabled: true
port: 80
Value có thể là chuỗi (string), số, hoặc true/false.
2. List (Danh sách)
Muốn mô tả một danh sách, ta dùng dấu - đầu dòng:
packages:
- nginx
- git
- curl
Thứ tự trong list là quan trọng nhé!
3. Dictionary (Từ điển hay Map)
Đây là cách mô tả một object với nhiều thuộc tính:
user:
name: devops
role: admin
active: yes
Khác với list, thứ tự các thuộc tính không quan trọng.
Kết hợp dữ liệu
Trong thực tế, ta thường dùng kết hợp các kiểu dữ liệu này:
- Một list chứa các dictionary:
users: - name: alice role: dev - name: bob role: qa - Hoặc dictionary chứa list:
server: name: web01 services: - nginx - ssh - docker
Quy tắc cú pháp YAML
1. Thụt lề bằng space, không dùng tab
server:
name: web01
port: 80
Tuyệt đối không dùng tab, YAML sẽ báo lỗi ngay!
Thông thường ta dùng 2 khoảng trắng để thụt vào.
2. Comment trong YAML
Dùng dấu # để ghi chú:
# Đây là cấu hình của nginx
name: nginx
3. Chuỗi (string)
Bạn có thể viết chuỗi:
- Không cần dấu nếu không có ký tự đặc biệt.
- Dùng
'hoặc"nếu cần.
title: Hello World
desc: "This is a string"
4. Chuỗi nhiều dòng
Khi bạn muốn giữ nguyên định dạng nhiều dòng (ví dụ như nội dung file), dùng |:
content: |
line 1
line 2
Nếu chỉ muốn nối các dòng lại thành một dòng duy nhất, dùng >:
description: >
This is a long
line written over
multiple lines.
Sẽ được hiểu thành: "This is a long line written over multiple lines."
Phân tích file YAML trong thực tế
Giờ chúng ta sẽ cùng xem qua một ví dụ thực tế là file playbook httpd.yaml trong Ansible.
Cấu trúc tổng quan
---
- name: Install httpd
hosts: webservers
become: true
tasks:
- name: Update apt
apt:
update_cache: yes
- name: Install httpd
apt:
name: apache2
state: present
- Dòng đầu tiên là
---để bắt đầu file. - Dùng
-để khai báo danh sách play. - Mỗi play có nhiều
task, mỗi task là một dictionary.
Trong tasks, bạn sẽ thấy kiểu dữ liệu list chứa dictionary được dùng rất nhiều. Cảm ơn bạn đã tham khảo ansible tutorial trên ttnguyen.net