# Поддержка платформ в пресетах **Автор:** Сергей Антропов **Сайт:** https://devops.org.ru **Версия:** 2.0.0 ## Описание AnsibleLab поддерживает указание конкретных платформ для хостов в пресетах. Это позволяет автоматически фильтровать хосты, которые не поддерживаются на текущей архитектуре системы. ## Обязательные требования **Для Astra Linux и RedOS** во всех пресетах **обязательно** должно быть указано `supported_platforms: ["linux/amd64"]`, так как эти системы не поддерживают arm64 архитектуру. Без этого указания могут возникать ошибки при запуске на ARM-системах. ## Как это работает ### Определение платформы Система автоматически определяет архитектуру хоста при запуске: - `x86_64` → `linux/amd64` - `aarch64` / `arm64` → `linux/arm64` - `armv7l` → `linux/arm/v7` ### Синтаксис в пресетах В файлах пресетов (molecule/presets/*.yml) можно указать поле `supported_platforms` для каждого хоста: ```yaml 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" ``` ### Правила фильтрации 1. **Если `supported_platforms` не указано** - хост будет запущен на всех платформах 2. **Если `supported_platforms: ["linux/amd64"]`** - хост запустится только на amd64 3. **Если `supported_platforms: ["linux/amd64", "linux/arm64"]`** - хост запустится на обеих платформах ### Примеры использования #### Универсальный хост (работает везде) ```yaml - name: universal-test family: ubuntu groups: [test] # supported_platforms не указано = работает на всех платформах ``` #### Только для amd64 ```yaml - name: amd64-only-test family: astra groups: [test] supported_platforms: ["linux/amd64"] ``` #### Для нескольких платформ ```yaml - name: multi-platform-test family: debian groups: [test] supported_platforms: ["linux/amd64", "linux/arm64"] ``` ## Реализация Фильтрация происходит в файле `molecule/default/create.yml`: 1. Система определяет текущую платформу 2. Загружается пресет 3. Хосты фильтруются по `supported_platforms` 4. Отображается количество хостов для текущей платформы ```yaml # Фильтрация хостов по поддерживаемым платформам - 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 хостов) ```bash make role test all-images # Platform linux/amd64: 9 hosts will be deployed ``` ### На arm64 (7 хостов, без Astra и RedOS) ```bash make role test all-images # Platform linux/arm64: 7 hosts will be deployed ``` ## Дополнительная информация - Все образы загружаются с принудительным указанием платформы - Система автоматически адаптирует количество контейнеров под текущую платформу - Информация о количестве хостов отображается при запуске