Some checks failed
Ansible Testing / lint (push) Has been cancelled
Ansible Testing / test (default) (push) Has been cancelled
Ansible Testing / test (minimal) (push) Has been cancelled
Ansible Testing / test (performance) (push) Has been cancelled
Ansible Testing / deploy-check (push) Has been cancelled
149 lines
5.6 KiB
Markdown
149 lines
5.6 KiB
Markdown
# Поддержка платформ в пресетах
|
||
|
||
**Автор:** Сергей Антропов
|
||
**Сайт:** https://devops.org.ru
|
||
**Версия:** 2.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
|
||
```
|
||
|
||
## Дополнительная информация
|
||
|
||
- Все образы загружаются с принудительным указанием платформы
|
||
- Система автоматически адаптирует количество контейнеров под текущую платформу
|
||
- Информация о количестве хостов отображается при запуске
|
||
|