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
				
			- Удалена папка dockerfiles/debian - Обновлены все presets/*.yml файлы с новыми образами - Обновлена документация в соответствии с новыми возможностями - Добавлены новые версии Ubuntu (20.04, 22.04, 24.04) - Добавлены новые версии CentOS (7, 8, 9) - Добавлены новые версии Debian (9, 10, 11, 12) - Обновлены family в hosts секциях - Обновлена документация по поддержке платформ
		
			
				
	
	
		
			149 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # Поддержка платформ в пресетах
 | ||
| 
 | ||
| ## Автор
 | ||
| Сергей Антропов
 | ||
| Сайт: https://devops.org.ru
 | ||
| 
 | ||
| ## Описание
 | ||
| 
 | ||
| Начиная с версии 1.0, Molecule Template поддерживает указание конкретных платформ для хостов в пресетах. Это позволяет автоматически фильтровать хосты, которые не поддерживаются на текущей архитектуре системы.
 | ||
| 
 | ||
| ## Обязательные требования
 | ||
| 
 | ||
| **Для 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
 | ||
| ```
 | ||
| 
 | ||
| ## Дополнительная информация
 | ||
| 
 | ||
| - Все образы загружаются с принудительным указанием платформы
 | ||
| - Система автоматически адаптирует количество контейнеров под текущую платформу
 | ||
| - Информация о количестве хостов отображается при запуске
 | ||
| 
 |