Các neo, bí danh, ghi đè và phần mở rộng YAML giúp giảm sự lặp lại dữ liệu trong các tệp YAML của bạn. Các tính năng này của YAML được thảo luận trong hướng dẫn này để đưa bạn vượt ra ngoài những điều cơ bản được đề cập trong hướng dẫn Tham khảo cú pháp YAML .
Mỏ neo và bí danh YAML
Giả sử bạn sử dụng Docker Compose để chỉ định một tùy chỉnh WordPress cụ thể. Bản thân Docker cung cấp một thông số kỹ thuật ví dụ , tại thời điểm viết bài này, bắt đầu như sau:
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
...
Tài liệu của Docker minh họa cách sử dụng a docker-compose.yml
để tạo một blog cơ bản được lưu trữ bằng kho dữ liệu có ổ đĩa được gắn trên /var/lib/mysql
.
Tuy nhiên, trong bối cảnh chuyên nghiệp, bạn không chỉ cần một kho dữ liệu sao lưu cho phiên bản WordPress mà còn cần nhiều phiên bản WordPress. Người ta thường định nghĩa một phiên bản sản xuất hỗ trợ người dùng cuối trong các hoạt động WordPress thực tế của họ, cùng với một phiên bản thử nghiệm để xác minh tính chính xác của chức năng trước khi cho người dùng cuối biết. Một cách để triển khai nhiều định nghĩa chỉ đơn giản là viết chúng một cách ngây thơ.
version: "3.9"
services:
production-db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
...
test-db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
Một neo ( &
) và bí danh ( *
) rút gọn các định nghĩa này thành:
version: "3.9"
services:
production-db: &database-definition
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
...
test-db: *database-definition
Trong ví dụ này, the &database-definition
là một mỏ neo mà *database-definition
bí danh tham chiếu tới.
Bí danh rút gọn nội dung YAML, nén nó lại để nó chiếm ít byte hơn trong hệ thống tệp. Quan trọng hơn, người đọc phải tiếp nhận ít hơn và do đó tập trung hiệu quả hơn vào các yếu tố cốt lõi của định nghĩa. Hơn nữa, các kết hợp neo-bí danh này có thể giúp công việc bảo trì dễ dàng hơn. Giả sử MYSQL_USER
cần cập nhật từ wordpress
thành special_wordpress_account
: trong khi YAML ngây thơ yêu cầu chỉnh sửa trong mỗi lần sử dụng của nó – có lẽ giống như số lượng cơ sở dữ liệu trong tất cả các môi trường – thì YAML được viết lại chỉ cần cập nhật một neo của nó. Sau đó, mỗi bí danh sẽ tựMYSQL_USER
động nhận được cập nhật đúng cách . Ít giá trị riêng biệt hơn để sao chép và dán chắc chắn có nghĩa là ít cơ hội xảy ra lỗi vô ý hơn.special_wordpress_account
Các bí danh thường thu nhỏ các thông số kỹ thuật YAML phức tạp xuống còn một nửa hoặc thậm chí một phần nhỏ hơn kích thước ban đầu.
Ghi đè YAML
Đôi khi các phân đoạn của tệp YAML chỉ chia sẻ một phần nội dung của chúng. Ví dụ WordPress có thể cấu hình các cơ sở dữ liệu giống hệt nhau ngoại trừ việc mỗi phiên bản có một mật khẩu riêng biệt. Các ghi đè của YAML cho phép tình huống này.
version: "3.9"
services:
production-db: &database-definition
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment: &environment-definition
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: production-password
...
test-db:
<<: *database-definition
environment:
<<: *environment-definition
MYSQL_PASSWORD: test-password
...
Đây <<
là cú pháp ghi đè đặc biệt cho phép sử dụng bí danh có thể cập nhật các giá trị riêng lẻ.
Nền kinh tế của sự biểu đạt
Anchor, alias và overrides cung cấp sự ngắn gọn cho các tệp cấu hình YAML của bạn. Bất kỳ YAML nào được viết bằng các cấu trúc này đều có thể được mở rộng thành một dạng hợp lệ giúp bạn giữ cho các tệp cấu hình của mình DRY. Các tính năng này của ngôn ngữ YAML giúp giữ cho các tệp của bạn nhỏ gọn và dễ hiểu và bảo trì hơn.
Thông tin thêm
Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.
Nguồn: https://www.linode.com/docs/guides/yaml-anchors-aliases-overrides-extensions/