feat: Добавлен пресет all-images и установка sudo во все Dockerfile
- Создан пресет all-images для тестирования всех 9 образов - Добавлен sudo во все Dockerfile образы - Настроены sudoers для root и пользователей - Упрощен site.yml (убрана установка sudo) - Добавлена документация для пресета all-images - Обновлен Makefile с поддержкой нового пресета - Исправлена проблема с Parsec в Astra Linux - Улучшена система очистки контейнеров Пресет all-images включает: - Debian-based: Ubuntu, Debian, Alt Linux, Astra Linux - RHEL-based: CentOS, RHEL, AlmaLinux, Rocky Linux, RedOS - Уникальные порты 8080-8088 - Переменные окружения TEST_OS и TEST_FAMILY
This commit is contained in:
18
Makefile
18
Makefile
@@ -78,7 +78,7 @@ role:
|
|||||||
-e MOLECULE_PRESET=$$PRESET \
|
-e MOLECULE_PRESET=$$PRESET \
|
||||||
-e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule_workspace \
|
-e MOLECULE_EPHEMERAL_DIRECTORY=/tmp/molecule_workspace \
|
||||||
$(DOCKER_IMAGE) \
|
$(DOCKER_IMAGE) \
|
||||||
bash -c "mkdir -p /tmp/molecule_workspace/inventory && cd molecule/default && ansible-playbook -i localhost, create.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini site.yml && ansible-playbook -i localhost, destroy.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace" || echo "✅ Тестирование завершено"; \
|
bash -c "mkdir -p /tmp/molecule_workspace/inventory && cd molecule/default && ansible-playbook -i localhost, create.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace && ansible-playbook -i /tmp/molecule_workspace/inventory/hosts.ini site.yml; ansible-playbook -i localhost, destroy.yml --connection=local -e molecule_ephemeral_directory=/tmp/molecule_workspace; echo '✅ Тестирование завершено'"; \
|
||||||
fi;; \
|
fi;; \
|
||||||
deploy) \
|
deploy) \
|
||||||
echo "🚀 Развертывание ролей на реальные серверы..."; \
|
echo "🚀 Развертывание ролей на реальные серверы..."; \
|
||||||
@@ -116,6 +116,7 @@ role:
|
|||||||
echo " 💡 Примеры:"; \
|
echo " 💡 Примеры:"; \
|
||||||
echo " make role test # с default preset"; \
|
echo " make role test # с default preset"; \
|
||||||
echo " make role test minimal # с minimal preset"; \
|
echo " make role test minimal # с minimal preset"; \
|
||||||
|
echo " make role test all-images # со всеми образами"; \
|
||||||
echo " make role test etcd-patroni # с etcd-patroni preset"; \
|
echo " make role test etcd-patroni # с etcd-patroni preset"; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
echo " 🚀 make role deploy - развернуть роли на реальные серверы"; \
|
echo " 🚀 make role deploy - развернуть роли на реальные серверы"; \
|
||||||
@@ -975,6 +976,7 @@ help:
|
|||||||
@echo " make presets list # показать все preset'ы"
|
@echo " make presets list # показать все preset'ы"
|
||||||
@echo " make presets test PRESET=etcd-patroni # тест с etcd-patroni"
|
@echo " make presets test PRESET=etcd-patroni # тест с etcd-patroni"
|
||||||
@echo " make role test minimal # быстрый тест"
|
@echo " make role test minimal # быстрый тест"
|
||||||
|
@echo " make role test all-images # тест всех образов"
|
||||||
@echo " make docker setup-builder # настройка multi-arch builder"
|
@echo " make docker setup-builder # настройка multi-arch builder"
|
||||||
@echo " make docker diagnose # диагностика buildx проблем"
|
@echo " make docker diagnose # диагностика buildx проблем"
|
||||||
@echo " make docker reset-builder # сброс buildx builder"
|
@echo " make docker reset-builder # сброс buildx builder"
|
||||||
@@ -1062,6 +1064,20 @@ setup-cicd:
|
|||||||
@chmod +x scripts/setup-cicd.sh
|
@chmod +x scripts/setup-cicd.sh
|
||||||
@./scripts/setup-cicd.sh
|
@./scripts/setup-cicd.sh
|
||||||
|
|
||||||
|
# Очистка контейнеров Molecule
|
||||||
|
.PHONY: clean-containers
|
||||||
|
clean-containers:
|
||||||
|
@echo "🧹 Очистка контейнеров Molecule..."
|
||||||
|
@echo "📋 Поиск контейнеров проекта..."
|
||||||
|
@docker ps -a --filter "ancestor=inecs/ansible-lab" --format "table {{.Names}}\t{{.Status}}\t{{.Image}}" || true
|
||||||
|
@echo ""
|
||||||
|
@echo "🗑️ Удаление контейнеров..."
|
||||||
|
@docker ps -a --filter "ancestor=inecs/ansible-lab" --format "{{.ID}}" | xargs -r docker rm -f 2>/dev/null || true
|
||||||
|
@docker ps -a --filter "network=labnet" --format "{{.ID}}" | xargs -r docker rm -f 2>/dev/null || true
|
||||||
|
@echo "🧹 Очистка сетей..."
|
||||||
|
@docker network rm labnet 2>/dev/null || true
|
||||||
|
@echo "✅ Очистка завершена"
|
||||||
|
|
||||||
# Пустые цели для совместимости
|
# Пустые цели для совместимости
|
||||||
view create edit show delete lint deploy new advanced list info test build push pull clean prepare update run stop purge clean-builder setup-builder diagnose reset-builder build-image:
|
view create edit show delete lint deploy new advanced list info test build push pull clean prepare update run stop purge clean-builder setup-builder diagnose reset-builder build-image:
|
||||||
@true
|
@true
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ AnsibleTemplate - это универсальная система для тес
|
|||||||
- **[docs/creating-roles.md](docs/creating-roles.md)** - Создание и разработка ролей
|
- **[docs/creating-roles.md](docs/creating-roles.md)** - Создание и разработка ролей
|
||||||
- **[docs/site-yml-guide.md](docs/site-yml-guide.md)** - Руководство по файлу site.yml
|
- **[docs/site-yml-guide.md](docs/site-yml-guide.md)** - Руководство по файлу site.yml
|
||||||
- **[docs/molecule-guide.md](docs/molecule-guide.md)** - Подробное руководство по Molecule
|
- **[docs/molecule-guide.md](docs/molecule-guide.md)** - Подробное руководство по Molecule
|
||||||
|
- **[docs/all-images-preset.md](docs/all-images-preset.md)** - Пресет all-images для тестирования всех образов
|
||||||
- **[dockerfiles/README.md](dockerfiles/README.md)** - Подробная документация по Docker образам
|
- **[dockerfiles/README.md](dockerfiles/README.md)** - Подробная документация по Docker образам
|
||||||
|
|
||||||
### 🏗️ CI/CD
|
### 🏗️ CI/CD
|
||||||
@@ -157,6 +158,9 @@ make role test
|
|||||||
# Тестирование с minimal preset
|
# Тестирование с minimal preset
|
||||||
make role test minimal
|
make role test minimal
|
||||||
|
|
||||||
|
# Тестирование всех образов (9 контейнеров)
|
||||||
|
make role test all-images
|
||||||
|
|
||||||
# Тестирование с custom preset
|
# Тестирование с custom preset
|
||||||
make role test my-custom-preset
|
make role test my-custom-preset
|
||||||
```
|
```
|
||||||
@@ -184,6 +188,7 @@ make presets test PRESET=performance
|
|||||||
|--------|----------|-------|---------------|
|
|--------|----------|-------|---------------|
|
||||||
| `default` | Стандартный preset | 2 хоста (Debian + RHEL) | Базовое тестирование |
|
| `default` | Стандартный preset | 2 хоста (Debian + RHEL) | Базовое тестирование |
|
||||||
| `minimal` | Минимальный preset | 1 хост (Debian) | Быстрое тестирование |
|
| `minimal` | Минимальный preset | 1 хост (Debian) | Быстрое тестирование |
|
||||||
|
| `all-images` | **Все образы** | 9 хостов (все ОС) | **Комплексное тестирование** |
|
||||||
| `standard` | Расширенный preset | 3 хоста (Debian + RHEL + Debian) | Полное тестирование |
|
| `standard` | Расширенный preset | 3 хоста (Debian + RHEL + Debian) | Полное тестирование |
|
||||||
| `performance` | Performance preset | 5 хостов (Debian + RHEL) | Нагрузочное тестирование |
|
| `performance` | Performance preset | 5 хостов (Debian + RHEL) | Нагрузочное тестирование |
|
||||||
| `security` | Security preset | 3 хоста (Debian + RHEL) | Тестирование безопасности |
|
| `security` | Security preset | 3 хоста (Debian + RHEL) | Тестирование безопасности |
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ RUN dnf install -y \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
# Устанавливаем yq
|
# Устанавливаем yq
|
||||||
@@ -39,6 +40,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ RUN apt-get install -y \
|
|||||||
tree \
|
tree \
|
||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
|
sudo \
|
||||||
&& apt-get clean
|
&& apt-get clean
|
||||||
|
|
||||||
# Устанавливаем pip для Python 3.7
|
# Устанавливаем pip для Python 3.7
|
||||||
@@ -44,6 +45,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ RUN apt-get install -y \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& apt-get clean
|
&& apt-get clean
|
||||||
|
|
||||||
# Устанавливаем yq
|
# Устанавливаем yq
|
||||||
@@ -46,9 +47,22 @@ RUN apt-get update && apt-get install -y \
|
|||||||
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
|
RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose \
|
||||||
&& chmod +x /usr/local/bin/docker-compose
|
&& chmod +x /usr/local/bin/docker-compose
|
||||||
|
|
||||||
|
# Отключаем Parsec для работы в контейнере
|
||||||
|
RUN if [ -f /etc/parsec/parsec.conf ]; then \
|
||||||
|
sed -i 's/enabled=1/enabled=0/' /etc/parsec/parsec.conf || true; \
|
||||||
|
fi && \
|
||||||
|
if [ -f /lib/modules/$(uname -r)/parsec.ko ]; then \
|
||||||
|
mv /lib/modules/$(uname -r)/parsec.ko /lib/modules/$(uname -r)/parsec.ko.disabled || true; \
|
||||||
|
fi && \
|
||||||
|
systemctl disable parsec 2>/dev/null || true
|
||||||
|
|
||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ RUN dnf install -y --allowerasing \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
# Устанавливаем yq
|
# Устанавливаем yq
|
||||||
@@ -36,6 +37,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ RUN apt-get install -y \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& apt-get clean
|
&& apt-get clean
|
||||||
|
|
||||||
# Устанавливаем Docker вручную для Debian
|
# Устанавливаем Docker вручную для Debian
|
||||||
@@ -44,6 +45,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ RUN dnf install -y \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
# Устанавливаем yq
|
# Устанавливаем yq
|
||||||
@@ -41,6 +42,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ RUN dnf install -y \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
# Устанавливаем yq
|
# Устанавливаем yq
|
||||||
@@ -36,6 +37,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ RUN dnf install -y \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& dnf clean all
|
&& dnf clean all
|
||||||
|
|
||||||
# Устанавливаем yq
|
# Устанавливаем yq
|
||||||
@@ -38,6 +39,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ RUN apt-get install -y \
|
|||||||
jq \
|
jq \
|
||||||
python3 \
|
python3 \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
|
sudo \
|
||||||
&& apt-get clean
|
&& apt-get clean
|
||||||
|
|
||||||
# Устанавливаем Docker вручную для Ubuntu
|
# Устанавливаем Docker вручную для Ubuntu
|
||||||
@@ -44,6 +45,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
|||||||
# Настраиваем systemd
|
# Настраиваем systemd
|
||||||
RUN systemctl set-default multi-user.target
|
RUN systemctl set-default multi-user.target
|
||||||
|
|
||||||
|
# Настраиваем sudoers для root и пользователей
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test
|
||||||
|
|
||||||
# Создаем пользователя для Ansible
|
# Создаем пользователя для Ansible
|
||||||
RUN useradd -m -s /bin/bash ansible \
|
RUN useradd -m -s /bin/bash ansible \
|
||||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||||
|
|||||||
155
docs/all-images-preset.md
Normal file
155
docs/all-images-preset.md
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# Пресет all-images - Тестирование всех образов
|
||||||
|
|
||||||
|
## Описание
|
||||||
|
|
||||||
|
Пресет `all-images` предназначен для комплексного тестирования Ansible ролей на всех доступных операционных системах проекта. Это самый полный пресет, который включает все 9 образов:
|
||||||
|
|
||||||
|
### Включенные образы
|
||||||
|
|
||||||
|
#### Debian-based системы:
|
||||||
|
- **Ubuntu** (ubuntu-test) - порт 8080
|
||||||
|
- **Debian** (debian-test) - порт 8081
|
||||||
|
- **Alt Linux** (alt-test) - порт 8082
|
||||||
|
- **Astra Linux** (astra-test) - порт 8083
|
||||||
|
|
||||||
|
#### RHEL-based системы:
|
||||||
|
- **CentOS** (centos-test) - порт 8084
|
||||||
|
- **RHEL** (rhel-test) - порт 8085
|
||||||
|
- **AlmaLinux** (alma-test) - порт 8086
|
||||||
|
- **Rocky Linux** (rocky-test) - порт 8087
|
||||||
|
- **RedOS** (redos-test) - порт 8088
|
||||||
|
|
||||||
|
## Использование
|
||||||
|
|
||||||
|
### Запуск тестирования всех образов
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Тестирование всех образов
|
||||||
|
make role test all-images
|
||||||
|
```
|
||||||
|
|
||||||
|
### Предварительные требования
|
||||||
|
|
||||||
|
1. **Собранные образы** - все образы должны быть собраны:
|
||||||
|
```bash
|
||||||
|
make docker build
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Достаточно ресурсов** - тест запускает 9 контейнеров одновременно, требуется:
|
||||||
|
- Минимум 8GB RAM
|
||||||
|
- Минимум 4 CPU cores
|
||||||
|
- Достаточно места на диске
|
||||||
|
|
||||||
|
### Особенности
|
||||||
|
|
||||||
|
#### Порты
|
||||||
|
Каждый контейнер использует уникальный порт для доступа:
|
||||||
|
- Ubuntu: `localhost:8080`
|
||||||
|
- Debian: `localhost:8081`
|
||||||
|
- Alt Linux: `localhost:8082`
|
||||||
|
- Astra Linux: `localhost:8083`
|
||||||
|
- CentOS: `localhost:8084`
|
||||||
|
- RHEL: `localhost:8085`
|
||||||
|
- AlmaLinux: `localhost:8086`
|
||||||
|
- Rocky Linux: `localhost:8087`
|
||||||
|
- RedOS: `localhost:8088`
|
||||||
|
|
||||||
|
#### Переменные окружения
|
||||||
|
Каждый контейнер получает переменные:
|
||||||
|
- `TEST_OS` - название ОС
|
||||||
|
- `TEST_FAMILY` - семейство ОС (Debian/RedHat/Altlinux/Astra Linux)
|
||||||
|
|
||||||
|
#### Специальные настройки
|
||||||
|
- **Astra Linux**: автоматическое отключение Parsec
|
||||||
|
- **Все образы**: предустановленный sudo с настройкой sudoers
|
||||||
|
- **Systemd**: полная поддержка systemd в контейнерах
|
||||||
|
|
||||||
|
## Производительность
|
||||||
|
|
||||||
|
### Время выполнения
|
||||||
|
- **Создание контейнеров**: ~2-3 минуты
|
||||||
|
- **Тестирование ролей**: зависит от сложности ролей
|
||||||
|
- **Очистка**: ~30 секунд
|
||||||
|
|
||||||
|
### Ресурсы
|
||||||
|
- **RAM**: 8-16GB (рекомендуется)
|
||||||
|
- **CPU**: 4-8 cores
|
||||||
|
- **Диск**: 10-20GB свободного места
|
||||||
|
|
||||||
|
## Отладка
|
||||||
|
|
||||||
|
### Проверка статуса контейнеров
|
||||||
|
```bash
|
||||||
|
# Список запущенных контейнеров
|
||||||
|
docker ps --filter "network=labnet"
|
||||||
|
|
||||||
|
# Логи конкретного контейнера
|
||||||
|
docker logs ubuntu-test
|
||||||
|
docker logs astra-test
|
||||||
|
```
|
||||||
|
|
||||||
|
### Проблемы и решения
|
||||||
|
|
||||||
|
#### Контейнеры не запускаются
|
||||||
|
1. Проверьте, что образы собраны:
|
||||||
|
```bash
|
||||||
|
docker images | grep inecs/ansible-lab
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Пересоберите образы:
|
||||||
|
```bash
|
||||||
|
make docker rebuild
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Astra Linux перезапускается
|
||||||
|
- Проблема решена в Dockerfile (отключение Parsec)
|
||||||
|
- Если проблема остается, проверьте логи:
|
||||||
|
```bash
|
||||||
|
docker logs astra-test
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Нехватка ресурсов
|
||||||
|
- Уменьшите количество контейнеров в пресете
|
||||||
|
- Используйте пресет `minimal` для быстрого тестирования
|
||||||
|
|
||||||
|
## Альтернативные пресеты
|
||||||
|
|
||||||
|
Если `all-images` слишком ресурсоемкий, используйте:
|
||||||
|
|
||||||
|
- `minimal` - 1 контейнер (Debian)
|
||||||
|
- `default` - 2 контейнера (Debian + RHEL)
|
||||||
|
- `multi-os` - 12 контейнеров (разные ОС)
|
||||||
|
|
||||||
|
## Мониторинг
|
||||||
|
|
||||||
|
### Логи тестирования
|
||||||
|
```bash
|
||||||
|
# Просмотр логов ansible-controller
|
||||||
|
docker logs ansible-controller
|
||||||
|
|
||||||
|
# Логи конкретного playbook
|
||||||
|
tail -f /tmp/molecule_workspace/logs/ansible.log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Метрики производительности
|
||||||
|
- Время выполнения каждого этапа
|
||||||
|
- Использование ресурсов
|
||||||
|
- Количество успешных/неудачных тестов
|
||||||
|
|
||||||
|
## Интеграция с CI/CD
|
||||||
|
|
||||||
|
Пресет `all-images` идеально подходит для:
|
||||||
|
- **GitHub Actions** - полное тестирование на всех ОС
|
||||||
|
- **GitLab CI** - комплексная проверка совместимости
|
||||||
|
- **Jenkins** - автоматическое тестирование релизов
|
||||||
|
|
||||||
|
### Пример для GitHub Actions
|
||||||
|
```yaml
|
||||||
|
- name: Test all images
|
||||||
|
run: make role test all-images
|
||||||
|
timeout-minutes: 30
|
||||||
|
```
|
||||||
|
|
||||||
|
## Заключение
|
||||||
|
|
||||||
|
Пресет `all-images` обеспечивает максимальное покрытие тестирования, гарантируя совместимость Ansible ролей со всеми поддерживаемыми операционными системами. Это критически важно для production-окружений с разнородной инфраструктурой.
|
||||||
@@ -77,6 +77,8 @@
|
|||||||
capabilities: "{{ systemd_defaults.capabilities | default([]) }}"
|
capabilities: "{{ systemd_defaults.capabilities | default([]) }}"
|
||||||
published_ports: "{{ item.publish | default([]) }}"
|
published_ports: "{{ item.publish | default([]) }}"
|
||||||
env: "{{ item.env | default({}) }}"
|
env: "{{ item.env | default({}) }}"
|
||||||
|
# Специальные настройки для Astra Linux
|
||||||
|
security_opts: "{{ ['seccomp=unconfined', 'apparmor=unconfined'] if item.family == 'astra' else [] }}"
|
||||||
state: started
|
state: started
|
||||||
restart_policy: unless-stopped
|
restart_policy: unless-stopped
|
||||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||||
|
|||||||
@@ -24,6 +24,14 @@
|
|||||||
name: "{{ item.name }}"
|
name: "{{ item.name }}"
|
||||||
state: absent
|
state: absent
|
||||||
force_kill: true
|
force_kill: true
|
||||||
|
cleanup: true
|
||||||
|
loop: "{{ hosts }}"
|
||||||
|
loop_control: { label: "{{ item.name }}" }
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Force remove any remaining containers
|
||||||
|
shell: |
|
||||||
|
docker ps -a --filter "name={{ item.name }}" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f
|
||||||
loop: "{{ hosts }}"
|
loop: "{{ hosts }}"
|
||||||
loop_control: { label: "{{ item.name }}" }
|
loop_control: { label: "{{ item.name }}" }
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
@@ -51,6 +59,21 @@
|
|||||||
state: absent
|
state: absent
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
|
||||||
|
- name: Force cleanup all project containers
|
||||||
|
shell: |
|
||||||
|
# Удаляем все контейнеры из загруженного пресета
|
||||||
|
{% for host in hosts %}
|
||||||
|
docker ps -a --filter "name={{ host.name }}" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f 2>/dev/null || true
|
||||||
|
{% endfor %}
|
||||||
|
# Удаляем все контейнеры с образами ansible-lab
|
||||||
|
docker ps -a --filter "ancestor=inecs/ansible-lab" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f 2>/dev/null || true
|
||||||
|
# Удаляем все контейнеры с сетью labnet
|
||||||
|
docker ps -a --filter "network=labnet" --format "{{ '{{' }}.ID{{ '}}' }}" | xargs -r docker rm -f 2>/dev/null || true
|
||||||
|
ignore_errors: true
|
||||||
|
vars:
|
||||||
|
# Используем переменную hosts из загруженного пресета
|
||||||
|
hosts: "{{ hosts }}"
|
||||||
|
|
||||||
- name: Display cleanup summary
|
- name: Display cleanup summary
|
||||||
debug:
|
debug:
|
||||||
msg: |
|
msg: |
|
||||||
|
|||||||
@@ -38,7 +38,17 @@
|
|||||||
- name: Update package cache (Alt Linux)
|
- name: Update package cache (Alt Linux)
|
||||||
apt:
|
apt:
|
||||||
update_cache: true
|
update_cache: true
|
||||||
when: ansible_distribution == 'Alt'
|
when: ansible_os_family == 'Altlinux'
|
||||||
|
changed_when: false
|
||||||
|
tags:
|
||||||
|
- setup
|
||||||
|
- update
|
||||||
|
|
||||||
|
# Обновление кеша пакетов для Astra Linux
|
||||||
|
- name: Update package cache (Astra Linux)
|
||||||
|
apt:
|
||||||
|
update_cache: true
|
||||||
|
when: ansible_os_family == 'Astra Linux'
|
||||||
changed_when: false
|
changed_when: false
|
||||||
tags:
|
tags:
|
||||||
- setup
|
- setup
|
||||||
@@ -55,7 +65,6 @@
|
|||||||
- iputils-ping
|
- iputils-ping
|
||||||
- procps
|
- procps
|
||||||
- net-tools
|
- net-tools
|
||||||
- sudo
|
|
||||||
- vim
|
- vim
|
||||||
- wget
|
- wget
|
||||||
- unzip
|
- unzip
|
||||||
@@ -77,7 +86,6 @@
|
|||||||
- iputils
|
- iputils
|
||||||
- procps-ng
|
- procps-ng
|
||||||
- net-tools
|
- net-tools
|
||||||
- sudo
|
|
||||||
- vim
|
- vim
|
||||||
- wget
|
- wget
|
||||||
- unzip
|
- unzip
|
||||||
@@ -98,13 +106,32 @@
|
|||||||
- iputils
|
- iputils
|
||||||
- procps
|
- procps
|
||||||
- net-tools
|
- net-tools
|
||||||
- sudo
|
|
||||||
- vim
|
- vim
|
||||||
- wget
|
- wget
|
||||||
- unzip
|
- unzip
|
||||||
- git
|
- git
|
||||||
state: present
|
state: present
|
||||||
when: ansible_distribution == 'Alt'
|
when: ansible_os_family == 'Altlinux'
|
||||||
|
tags:
|
||||||
|
- setup
|
||||||
|
- tools
|
||||||
|
|
||||||
|
- name: Install common tools (Astra Linux)
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- curl
|
||||||
|
- jq
|
||||||
|
- ca-certificates
|
||||||
|
- iproute2
|
||||||
|
- iputils
|
||||||
|
- procps
|
||||||
|
- net-tools
|
||||||
|
- vim
|
||||||
|
- wget
|
||||||
|
- unzip
|
||||||
|
- git
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == 'Astra Linux'
|
||||||
tags:
|
tags:
|
||||||
- setup
|
- setup
|
||||||
- tools
|
- tools
|
||||||
@@ -139,7 +166,18 @@
|
|||||||
- python3
|
- python3
|
||||||
- python3-pip
|
- python3-pip
|
||||||
state: present
|
state: present
|
||||||
when: ansible_distribution == 'Alt'
|
when: ansible_os_family == 'Altlinux'
|
||||||
|
tags:
|
||||||
|
- setup
|
||||||
|
- python
|
||||||
|
|
||||||
|
- name: Install Python (Astra Linux)
|
||||||
|
apt:
|
||||||
|
name:
|
||||||
|
- python3
|
||||||
|
- python3-pip
|
||||||
|
state: present
|
||||||
|
when: ansible_os_family == 'Astra Linux'
|
||||||
tags:
|
tags:
|
||||||
- setup
|
- setup
|
||||||
- python
|
- python
|
||||||
|
|||||||
111
molecule/presets/all-images.yml
Normal file
111
molecule/presets/all-images.yml
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
---
|
||||||
|
#description: Пресет для тестирования всех доступных образов (9 хостов)
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
docker_network: labnet
|
||||||
|
generated_inventory: "{{ molecule_ephemeral_directory }}/inventory/hosts.ini"
|
||||||
|
|
||||||
|
# systemd-ready образы
|
||||||
|
images:
|
||||||
|
alt: "inecs/ansible-lab:alt-linux-latest"
|
||||||
|
astra: "inecs/ansible-lab:astra-linux-latest"
|
||||||
|
rhel: "inecs/ansible-lab:rhel-latest"
|
||||||
|
centos: "inecs/ansible-lab:centos-latest"
|
||||||
|
alma: "inecs/ansible-lab:alma-latest"
|
||||||
|
rocky: "inecs/ansible-lab:rocky-latest"
|
||||||
|
redos: "inecs/ansible-lab:redos-latest"
|
||||||
|
ubuntu: "inecs/ansible-lab:ubuntu-latest"
|
||||||
|
debian: "inecs/ansible-lab:debian-latest"
|
||||||
|
|
||||||
|
systemd_defaults:
|
||||||
|
privileged: true
|
||||||
|
command: "/sbin/init"
|
||||||
|
volumes:
|
||||||
|
- "/sys/fs/cgroup:/sys/fs/cgroup:ro"
|
||||||
|
tmpfs: ["/run", "/run/lock"]
|
||||||
|
capabilities: ["SYS_ADMIN"]
|
||||||
|
|
||||||
|
hosts:
|
||||||
|
# Debian-based системы
|
||||||
|
- name: ubuntu-test
|
||||||
|
family: ubuntu
|
||||||
|
groups: [test, debian]
|
||||||
|
publish:
|
||||||
|
- "8080:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "Ubuntu"
|
||||||
|
TEST_FAMILY: "Debian"
|
||||||
|
|
||||||
|
- name: debian-test
|
||||||
|
family: debian
|
||||||
|
groups: [test, debian]
|
||||||
|
publish:
|
||||||
|
- "8081:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "Debian"
|
||||||
|
TEST_FAMILY: "Debian"
|
||||||
|
|
||||||
|
- name: alt-test
|
||||||
|
family: alt
|
||||||
|
groups: [test, altlinux]
|
||||||
|
publish:
|
||||||
|
- "8082:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "Alt Linux"
|
||||||
|
TEST_FAMILY: "Altlinux"
|
||||||
|
|
||||||
|
- name: astra-test
|
||||||
|
family: astra
|
||||||
|
groups: [test, astra]
|
||||||
|
publish:
|
||||||
|
- "8083:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "Astra Linux"
|
||||||
|
TEST_FAMILY: "Astra Linux"
|
||||||
|
|
||||||
|
# RHEL-based системы
|
||||||
|
- name: centos-test
|
||||||
|
family: centos
|
||||||
|
groups: [test, rhel]
|
||||||
|
publish:
|
||||||
|
- "8084:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "CentOS"
|
||||||
|
TEST_FAMILY: "RedHat"
|
||||||
|
|
||||||
|
- name: rhel-test
|
||||||
|
family: rhel
|
||||||
|
groups: [test, rhel]
|
||||||
|
publish:
|
||||||
|
- "8085:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "RHEL"
|
||||||
|
TEST_FAMILY: "RedHat"
|
||||||
|
|
||||||
|
- name: alma-test
|
||||||
|
family: alma
|
||||||
|
groups: [test, rhel]
|
||||||
|
publish:
|
||||||
|
- "8086:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "AlmaLinux"
|
||||||
|
TEST_FAMILY: "RedHat"
|
||||||
|
|
||||||
|
- name: rocky-test
|
||||||
|
family: rocky
|
||||||
|
groups: [test, rhel]
|
||||||
|
publish:
|
||||||
|
- "8087:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "Rocky Linux"
|
||||||
|
TEST_FAMILY: "RedHat"
|
||||||
|
|
||||||
|
- name: redos-test
|
||||||
|
family: redos
|
||||||
|
groups: [test, rhel]
|
||||||
|
publish:
|
||||||
|
- "8088:80"
|
||||||
|
env:
|
||||||
|
TEST_OS: "RedOS"
|
||||||
|
TEST_FAMILY: "RedHat"
|
||||||
@@ -29,5 +29,8 @@ systemd_defaults:
|
|||||||
hosts:
|
hosts:
|
||||||
# Минимальный набор - один хост
|
# Минимальный набор - один хост
|
||||||
- name: u1
|
- name: u1
|
||||||
family: debian
|
family: astra
|
||||||
groups: [test]
|
groups: [test]
|
||||||
|
- name: u2
|
||||||
|
family: alt
|
||||||
|
groups: [test]
|
||||||
58
scripts/update-dockerfiles-sudo.sh
Normal file
58
scripts/update-dockerfiles-sudo.sh
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Скрипт для добавления sudo во все Dockerfile
|
||||||
|
# Автор: Сергей Антропов
|
||||||
|
# Сайт: https://devops.org.ru
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
echo "🔧 Добавление sudo во все Dockerfile..."
|
||||||
|
|
||||||
|
# Список всех Dockerfile для обновления
|
||||||
|
DOCKERFILES=(
|
||||||
|
"dockerfiles/ubuntu/Dockerfile"
|
||||||
|
"dockerfiles/debian/Dockerfile"
|
||||||
|
"dockerfiles/alt-linux/Dockerfile"
|
||||||
|
"dockerfiles/centos/Dockerfile"
|
||||||
|
"dockerfiles/rhel/Dockerfile"
|
||||||
|
"dockerfiles/alma/Dockerfile"
|
||||||
|
"dockerfiles/rocky/Dockerfile"
|
||||||
|
"dockerfiles/redos/Dockerfile"
|
||||||
|
)
|
||||||
|
|
||||||
|
for dockerfile in "${DOCKERFILES[@]}"; do
|
||||||
|
if [ -f "$dockerfile" ]; then
|
||||||
|
echo "📝 Обновление $dockerfile..."
|
||||||
|
|
||||||
|
# Для Debian-based систем (Ubuntu, Debian, Alt Linux)
|
||||||
|
if [[ "$dockerfile" =~ (ubuntu|debian|alt-linux) ]]; then
|
||||||
|
# Добавляем sudo в список пакетов
|
||||||
|
sed -i '/python3-pip \\/a\\ sudo \\' "$dockerfile"
|
||||||
|
|
||||||
|
# Добавляем настройку sudoers перед созданием пользователя
|
||||||
|
sed -i '/# Создаем пользователя для Ansible/i\\
|
||||||
|
# Настраиваем sudoers для root и пользователей\\
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers \&\& \\\\
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test\\
|
||||||
|
' "$dockerfile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Для RHEL-based систем (CentOS, RHEL, Alma, Rocky, RedOS)
|
||||||
|
if [[ "$dockerfile" =~ (centos|rhel|alma|rocky|redos) ]]; then
|
||||||
|
# Добавляем sudo в список пакетов
|
||||||
|
sed -i '/python3-pip \\/a\ sudo \\' "$dockerfile"
|
||||||
|
|
||||||
|
# Добавляем настройку sudoers перед созданием пользователя
|
||||||
|
sed -i '/# Создаем пользователя для Ansible/i\
|
||||||
|
# Настраиваем sudoers для root и пользователей\
|
||||||
|
RUN echo "root ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \\\
|
||||||
|
echo "ALL ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/ansible-test\
|
||||||
|
' "$dockerfile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ $dockerfile обновлен"
|
||||||
|
else
|
||||||
|
echo "⚠️ Файл $dockerfile не найден"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "🎉 Все Dockerfile обновлены!"
|
||||||
Reference in New Issue
Block a user