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:
Сергей Антропов
2025-10-25 19:00:34 +03:00
parent 94560ffaaa
commit 9ce30e0d67
18 changed files with 473 additions and 8 deletions

View File

@@ -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

View File

@@ -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) | Тестирование безопасности |

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
View 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-окружений с разнородной инфраструктурой.

View File

@@ -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 }}"

View File

@@ -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: |

View File

@@ -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

View 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"

View File

@@ -29,5 +29,8 @@ systemd_defaults:
hosts:
# Минимальный набор - один хост
- name: u1
family: debian
family: astra
groups: [test]
- name: u2
family: alt
groups: [test]

View 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 обновлены!"