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_EPHEMERAL_DIRECTORY=/tmp/molecule_workspace \
|
||||
$(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;; \
|
||||
deploy) \
|
||||
echo "🚀 Развертывание ролей на реальные серверы..."; \
|
||||
@@ -116,6 +116,7 @@ role:
|
||||
echo " 💡 Примеры:"; \
|
||||
echo " make role test # с default preset"; \
|
||||
echo " make role test minimal # с minimal preset"; \
|
||||
echo " make role test all-images # со всеми образами"; \
|
||||
echo " make role test etcd-patroni # с etcd-patroni preset"; \
|
||||
echo ""; \
|
||||
echo " 🚀 make role deploy - развернуть роли на реальные серверы"; \
|
||||
@@ -975,6 +976,7 @@ help:
|
||||
@echo " make presets list # показать все preset'ы"
|
||||
@echo " make presets test PRESET=etcd-patroni # тест с etcd-patroni"
|
||||
@echo " make role test minimal # быстрый тест"
|
||||
@echo " make role test all-images # тест всех образов"
|
||||
@echo " make docker setup-builder # настройка multi-arch builder"
|
||||
@echo " make docker diagnose # диагностика buildx проблем"
|
||||
@echo " make docker reset-builder # сброс buildx builder"
|
||||
@@ -1062,6 +1064,20 @@ setup-cicd:
|
||||
@chmod +x 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:
|
||||
@true
|
||||
|
||||
@@ -17,6 +17,7 @@ AnsibleTemplate - это универсальная система для тес
|
||||
- **[docs/creating-roles.md](docs/creating-roles.md)** - Создание и разработка ролей
|
||||
- **[docs/site-yml-guide.md](docs/site-yml-guide.md)** - Руководство по файлу site.yml
|
||||
- **[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 образам
|
||||
|
||||
### 🏗️ CI/CD
|
||||
@@ -157,6 +158,9 @@ make role test
|
||||
# Тестирование с minimal preset
|
||||
make role test minimal
|
||||
|
||||
# Тестирование всех образов (9 контейнеров)
|
||||
make role test all-images
|
||||
|
||||
# Тестирование с custom preset
|
||||
make role test my-custom-preset
|
||||
```
|
||||
@@ -184,6 +188,7 @@ make presets test PRESET=performance
|
||||
|--------|----------|-------|---------------|
|
||||
| `default` | Стандартный preset | 2 хоста (Debian + RHEL) | Базовое тестирование |
|
||||
| `minimal` | Минимальный preset | 1 хост (Debian) | Быстрое тестирование |
|
||||
| `all-images` | **Все образы** | 9 хостов (все ОС) | **Комплексное тестирование** |
|
||||
| `standard` | Расширенный preset | 3 хоста (Debian + RHEL + Debian) | Полное тестирование |
|
||||
| `performance` | Performance preset | 5 хостов (Debian + RHEL) | Нагрузочное тестирование |
|
||||
| `security` | Security preset | 3 хоста (Debian + RHEL) | Тестирование безопасности |
|
||||
|
||||
@@ -21,6 +21,7 @@ RUN dnf install -y \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& dnf clean all
|
||||
|
||||
# Устанавливаем yq
|
||||
@@ -39,6 +40,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -21,6 +21,7 @@ RUN apt-get install -y \
|
||||
tree \
|
||||
jq \
|
||||
python3 \
|
||||
sudo \
|
||||
&& apt-get clean
|
||||
|
||||
# Устанавливаем pip для Python 3.7
|
||||
@@ -44,6 +45,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -23,6 +23,7 @@ RUN apt-get install -y \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& apt-get clean
|
||||
|
||||
# Устанавливаем 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 \
|
||||
&& 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
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -20,6 +20,7 @@ RUN dnf install -y --allowerasing \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& dnf clean all
|
||||
|
||||
# Устанавливаем yq
|
||||
@@ -36,6 +37,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -22,6 +22,7 @@ RUN apt-get install -y \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& apt-get clean
|
||||
|
||||
# Устанавливаем Docker вручную для Debian
|
||||
@@ -44,6 +45,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -22,6 +22,7 @@ RUN dnf install -y \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& dnf clean all
|
||||
|
||||
# Устанавливаем yq
|
||||
@@ -41,6 +42,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -20,6 +20,7 @@ RUN dnf install -y \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& dnf clean all
|
||||
|
||||
# Устанавливаем yq
|
||||
@@ -36,6 +37,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -20,6 +20,7 @@ RUN dnf install -y \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& dnf clean all
|
||||
|
||||
# Устанавливаем yq
|
||||
@@ -38,6 +39,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& echo "ansible ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
|
||||
@@ -22,6 +22,7 @@ RUN apt-get install -y \
|
||||
jq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
sudo \
|
||||
&& apt-get clean
|
||||
|
||||
# Устанавливаем Docker вручную для Ubuntu
|
||||
@@ -44,6 +45,10 @@ RUN curl -L "https://github.com/docker/compose/releases/latest/download/docker-c
|
||||
# Настраиваем systemd
|
||||
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
|
||||
RUN useradd -m -s /bin/bash ansible \
|
||||
&& 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([]) }}"
|
||||
published_ports: "{{ item.publish | default([]) }}"
|
||||
env: "{{ item.env | default({}) }}"
|
||||
# Специальные настройки для Astra Linux
|
||||
security_opts: "{{ ['seccomp=unconfined', 'apparmor=unconfined'] if item.family == 'astra' else [] }}"
|
||||
state: started
|
||||
restart_policy: unless-stopped
|
||||
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
||||
|
||||
@@ -24,6 +24,14 @@
|
||||
name: "{{ item.name }}"
|
||||
state: absent
|
||||
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_control: { label: "{{ item.name }}" }
|
||||
ignore_errors: true
|
||||
@@ -51,6 +59,21 @@
|
||||
state: absent
|
||||
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
|
||||
debug:
|
||||
msg: |
|
||||
|
||||
@@ -38,7 +38,17 @@
|
||||
- name: Update package cache (Alt Linux)
|
||||
apt:
|
||||
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
|
||||
tags:
|
||||
- setup
|
||||
@@ -55,7 +65,6 @@
|
||||
- iputils-ping
|
||||
- procps
|
||||
- net-tools
|
||||
- sudo
|
||||
- vim
|
||||
- wget
|
||||
- unzip
|
||||
@@ -77,7 +86,6 @@
|
||||
- iputils
|
||||
- procps-ng
|
||||
- net-tools
|
||||
- sudo
|
||||
- vim
|
||||
- wget
|
||||
- unzip
|
||||
@@ -98,13 +106,32 @@
|
||||
- iputils
|
||||
- procps
|
||||
- net-tools
|
||||
- sudo
|
||||
- vim
|
||||
- wget
|
||||
- unzip
|
||||
- git
|
||||
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:
|
||||
- setup
|
||||
- tools
|
||||
@@ -139,7 +166,18 @@
|
||||
- python3
|
||||
- python3-pip
|
||||
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:
|
||||
- setup
|
||||
- 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:
|
||||
# Минимальный набор - один хост
|
||||
- name: u1
|
||||
family: debian
|
||||
family: astra
|
||||
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