Files
DevOpsLab/docs/platform-support.md
Сергей Антропов d8e1052e7b refactor: переименование проекта AnsibleLab -> DevOpsLab
- Заменено название проекта во всех файлах проекта
- Обновлены:
  * README.md
  * Makefile
  * Все файлы документации (.md)
  * CI/CD конфигурации (Jenkins, GitLab, GitHub Actions, Azure DevOps)
  * Скрипты (setup-cicd.sh, test-custom-images.sh)
  * Файлы конфигурации Molecule
- Изменена переменная PROJECT_NAME в Makefile на devops-lab
- Docker образы inecs/ansible-lab:* оставлены без изменений
  (чтобы не затрагивать существующие образы в Docker Hub)
2025-10-26 12:28:05 +03:00

149 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Поддержка платформ в пресетах
**Автор:** Сергей Антропов
**Сайт:** https://devops.org.ru
**Версия:** 3.0.0
## Описание
DevOpsLab поддерживает указание конкретных платформ для хостов в пресетах. Это позволяет автоматически фильтровать хосты, которые не поддерживаются на текущей архитектуре системы.
## Обязательные требования
**Для 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
```
## Дополнительная информация
- Все образы загружаются с принудительным указанием платформы
- Система автоматически адаптирует количество контейнеров под текущую платформу
- Информация о количестве хостов отображается при запуске