В YAML массивы (их ещё называют «последовательности») — это упорядоченные списки значений: строки, числа, объекты (словари) и даже другие массивы. Их удобно использовать, когда нужно сгруппировать связанные данные: сервера, шаги пайплайна, контейнеры в Pod и т.п.
Основные способы записи массивов
Блочный (с дефисами)
Самый читаемый и привычный стиль. Каждый элемент начинается с дефиса и пробела.
Пример:
servers:
- web01.example.com
- web02.example.com
- db01.example.com
Здесь servers — это список из трёх значений.
Когда элементы сложные (словари), их пишут многострочно, сохраняя отступы:
tasks:
- name: Install Apache
command: apt-get install apache2 -y
- name: Start Apache service
command: systemctl start apache2
- name: Ensure Apache is enabled
command: systemctl enable apache2
Встроенный (в строку, flow style)
Компактный формат в квадратных скобках, похож на JSON. Удобен для коротких списков.
Пример:
web_servers: [web01.example.com, web02.example.com, web03.example.com]
Экономит место, но хуже читается на длинных списках.
Вложенные и смешанные варианты
Можно вкладывать списки в словари и наоборот, а также комбинировать блочный и встроенный стили — главное, чтобы отступы были аккуратными.
Пример (блочный):
environments:
- name: production
servers:
- prod-web01
- prod-web02
- prod-db01
- name: staging
servers:
- stage-web01
- stage-db01
Пример (встроенный):
environments: [
{ name: production, servers: [prod-web01, prod-web02, prod-db01] },
{ name: staging, servers: [stage-web01, stage-db01] }
]
Многострочные элементы в массивах
Если элемент — длинная строка (например, конфиг), удобно использовать блочные скаляры:
|
— «буквальный» стиль, переносы сохраняются>
— «свёрнутый» стиль, переносы превращаются в пробелы
Пример с многострочными строками в списке:
config_files:
- |
# Nginx HTTP config
server {
listen 80;
server_name example.com;
}
- |
# Nginx HTTPS config
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
}
Большие списки
Когда элементов много (IP-адреса, пользователи и т.п.), выбирайте блочный стиль — так проще читать:
ip_addresses:
- 192.168.1.101
- 192.168.1.102
- 192.168.1.103
- 192.168.1.104
- 192.168.1.105
Практические примеры
IaC (Ansible/Chef/Puppet)
Списки хостов, ролей, задач:
hosts:
- name: database_servers
nodes:
- db01.example.com
- db02.example.com
- db03.example.com
Kubernetes манифесты
Списки контейнеров, портов, переменных окружения:
apiVersion: v1
kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: web-container
image: nginx:latest
ports:
- containerPort: 80
- name: sidecar-container
image: alpine:latest
command: ["sh", "-c", "echo Hello"]
CI/CD (GitHub Actions, GitLab CI, CircleCI)
Список шагов в job’е:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
Полезные советы
- Следите за отступами: только пробелы, табы запрещены.
- Для булевых значений используйте true/false — так меньше сюрпризов, чем с yes/no.
- Длинные и сложные элементы списков оформляйте многострочно — легче поддерживать.
- Короткие списки допустимо писать в одну строку, но не злоупотребляйте.
Массивы — базовый инструмент в YAML. Для читаемости и поддержки чаще выбирайте блочный стиль с дефисами, а встроенный используйте для коротких значений. Не забывайте про многострочные строки — это спасает, когда элемент списка превращается в мини-конфиг.