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-definitionlà 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_USERcần cập nhật từ wordpressthà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/