- Удалена папка dockerfiles/debian - Обновлены все presets/*.yml файлы с новыми образами - Обновлена документация в соответствии с новыми возможностями - Добавлены новые версии Ubuntu (20.04, 22.04, 24.04) - Добавлены новые версии CentOS (7, 8, 9) - Добавлены новые версии Debian (9, 10, 11, 12) - Обновлены family в hosts секциях - Обновлена документация по поддержке платформ
5.6 KiB
Поддержка платформ в пресетах
Автор
Сергей Антропов Сайт: https://devops.org.ru
Описание
Начиная с версии 1.0, Molecule Template поддерживает указание конкретных платформ для хостов в пресетах. Это позволяет автоматически фильтровать хосты, которые не поддерживаются на текущей архитектуре системы.
Обязательные требования
Для Astra Linux и RedOS во всех пресетах обязательно должно быть указано supported_platforms: ["linux/amd64"], так как эти системы не поддерживают arm64 архитектуру. Без этого указания могут возникать ошибки при запуске на ARM-системах.
Как это работает
Определение платформы
Система автоматически определяет архитектуру хоста при запуске:
x86_64→linux/amd64aarch64/arm64→linux/arm64armv7l→linux/arm/v7
Синтаксис в пресетах
В файлах пресетов (molecule/presets/*.yml) можно указать поле supported_platforms для каждого хоста:
hosts:
- name: ubuntu-test
family: ubuntu
groups: [test]
# Без supported_platforms - работает на всех платформах
publish:
- "8080:80"
- name: astra-test
family: astra
groups: [test]
supported_platforms: ["linux/amd64"] # Только amd64
publish:
- "8083:80"
- name: multi-test
family: ubuntu
groups: [test]
supported_platforms: ["linux/amd64", "linux/arm64"] # Несколько платформ
publish:
- "8084:80"
Правила фильтрации
- Если
supported_platformsне указано - хост будет запущен на всех платформах - Если
supported_platforms: ["linux/amd64"]- хост запустится только на amd64 - Если
supported_platforms: ["linux/amd64", "linux/arm64"]- хост запустится на обеих платформах
Примеры использования
Универсальный хост (работает везде)
- name: universal-test
family: ubuntu
groups: [test]
# supported_platforms не указано = работает на всех платформах
Только для amd64
- name: amd64-only-test
family: astra
groups: [test]
supported_platforms: ["linux/amd64"]
Для нескольких платформ
- name: multi-platform-test
family: debian
groups: [test]
supported_platforms: ["linux/amd64", "linux/arm64"]
Реализация
Фильтрация происходит в файле molecule/default/create.yml:
- Система определяет текущую платформу
- Загружается пресет
- Хосты фильтруются по
supported_platforms - Отображается количество хостов для текущей платформы
# Фильтрация хостов по поддерживаемым платформам
- name: Filter hosts by supported platforms
set_fact:
filtered_hosts: "{{ filtered_hosts | default([]) + [item] }}"
loop: "{{ hosts }}"
when: |
item.supported_platforms is not defined or
ansible_architecture in item.supported_platforms
Текущее состояние
Хосты с ограничениями по платформе
-
Astra Linux - только
linux/amd64(нет нативной поддержки arm64)- Во всех пресетах имеет
supported_platforms: ["linux/amd64"] - Базовый образ
registry.astralinux.ru/library/astra/ubi17:1.7.6.uu2доступен только для amd64
- Во всех пресетах имеет
-
RedOS - только
linux/amd64(нет нативной поддержки arm64)- Во всех пресетах имеет
supported_platforms: ["linux/amd64"] - Базовый образ
registry.red-soft.ru/ubi7/ubiдоступен только для amd64
- Во всех пресетах имеет
Важно: При запуске на arm64 системе эти хосты будут автоматически исключены из списка, что предотвратит ошибки при сборке и запуске контейнеров.
Универсальные хосты
Следующие системы работают на всех платформах:
- Ubuntu 20.04, 22.04, 24.04
- Debian 9, 10, 11, 12
- Alt Linux
- CentOS 7, 8, 9
- RHEL
- AlmaLinux
- Rocky Linux
Примеры запуска
На amd64 (все 9 хостов)
make role test all-images
# Platform linux/amd64: 9 hosts will be deployed
На arm64 (7 хостов, без Astra и RedOS)
make role test all-images
# Platform linux/arm64: 7 hosts will be deployed
Дополнительная информация
- Все образы загружаются с принудительным указанием платформы
- Система автоматически адаптирует количество контейнеров под текущую платформу
- Информация о количестве хостов отображается при запуске