feat: Удален molecule/default и все скрипты теперь запускаются через Docker

- Удалена папка molecule/default (больше не используется)
- Все скрипты в папке scripts теперь запускаются через Docker контейнер
- Обновлены пути в скриптах для работы внутри контейнера:
  - snapshot.sh: OUT_DIR=/ansible/snapshots
  - restore.sh: IN_DIR=/ansible/snapshots
  - cleanup.sh: остался без изменений (уже корректный)

Обновления в docker-compose.yaml:
- Добавлены монтирования для scripts, reports, snapshots
- Скрипты теперь доступны внутри контейнера по пути /ansible/scripts/
- Отчеты сохраняются в /ansible/reports/
- Снапшоты сохраняются в /ansible/snapshots/

Обновления в Makefile:
- make snapshot теперь запускает: docker exec ansible-controller bash -lc 'bash /ansible/scripts/snapshot.sh'
- make restore теперь запускает: docker exec ansible-controller bash -lc 'bash /ansible/scripts/restore.sh'
- make cleanup теперь запускает: docker exec ansible-controller bash -lc 'bash /ansible/scripts/cleanup.sh'

Преимущества:
- Не требует установки дополнительных инструментов локально
- Все операции выполняются в изолированной среде
- Единообразный подход к запуску всех скриптов
- Автоматическое создание необходимых директорий

Обновлена документация:
- README.md: добавлено упоминание о запуске через Docker
- docs/api.md: обновлены примеры скриптов с путями для Docker

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
2025-10-22 13:48:38 +03:00
parent 9c55c8f615
commit 09ca55539f
12 changed files with 14 additions and 268 deletions

View File

@@ -580,19 +580,19 @@ full-test: ## Полный цикл тестирования с отчетом
.PHONY: snapshot
snapshot: ## Сохранить снапшот лаборатории
@echo "$(YELLOW)📸 Создаем снапшот...$(RESET)"
@bash scripts/snapshot.sh
@docker exec ansible-controller bash -lc 'bash /ansible/scripts/snapshot.sh'
@echo "$(GREEN)✅ Снапшот сохранен$(RESET)"
.PHONY: restore
restore: ## Восстановить из снапшота
@echo "$(BLUE)🔄 Восстанавливаем из снапшота...$(RESET)"
@bash scripts/restore.sh
@docker exec ansible-controller bash -lc 'bash /ansible/scripts/restore.sh'
@echo "$(GREEN)✅ Снапшот восстановлен$(RESET)"
.PHONY: cleanup
cleanup: ## Очистить лабораторию
@echo "$(RED)🧹 Очищаем лабораторию...$(RESET)"
@bash scripts/cleanup.sh
@docker exec ansible-controller bash -lc 'bash /ansible/scripts/cleanup.sh'
@echo "$(GREEN)✅ Лаборатория очищена$(RESET)"
# =============================================================================

View File

@@ -413,7 +413,7 @@ ansible-template/
│ └── requirements.yml # Ansible коллекции
├── roles/ # Ansible роли
│ └── your_role/ # Ваши роли
├── scripts/ # Скрипты
├── scripts/ # Скрипты (запускаются через Docker)
│ ├── report_html.py # Генератор HTML отчетов
│ ├── snapshot.sh # Создание снапшотов
│ ├── restore.sh # Восстановление снапшотов

View File

@@ -13,6 +13,9 @@ services:
- /var/run/docker.sock:/var/run/docker.sock
- ./molecule:/ansible/molecule
- ./files:/ansible/files
- ./scripts:/ansible/scripts
- ./reports:/ansible/reports
- ./snapshots:/ansible/snapshots
- ./vault-password.txt:/ansible/vault-password.txt
# каталог с ролями (локальный или внешний)
- ${ROLES_DIR:-./roles}:/ansible/roles:ro

View File

@@ -432,10 +432,10 @@ python3 scripts/report_html.py <input.json> <output.html>
```bash
#!/usr/bin/env bash
# Создание снапшотов лаборатории
# Создание снапшотов лаборатории (запускается через Docker)
# Параметры
OUT_DIR="snapshots"
OUT_DIR="/ansible/snapshots"
# Создать директорию
mkdir -p "$OUT_DIR"
@@ -457,10 +457,10 @@ done
```bash
#!/usr/bin/env bash
# Восстановление из снапшотов
# Восстановление из снапшотов (запускается через Docker)
# Параметры
IN_DIR="snapshots"
IN_DIR="/ansible/snapshots"
# Проверить директорию
[ -d "$IN_DIR" ] || { echo "No snapshots dir"; exit 1; }
@@ -480,7 +480,7 @@ done
```bash
#!/usr/bin/env bash
# Очистка лаборатории
# Очистка лаборатории (запускается через Docker)
echo "[cleanup] removing lab containers/volumes/networks"

View File

@@ -1,6 +0,0 @@
---
- name: Converge
hosts: all
vars_files:
- ../../vars/secrets.yml
roles:

View File

@@ -1,8 +0,0 @@
- name: Destroy containers on interrupt
hosts: localhost
tasks:
- name: Ensure containers are destroyed
docker_container:
name: "{{ item.name }}"
state: absent
loop: "{{ molecule_yml.platforms }}"

View File

@@ -1,61 +0,0 @@
---
dependency:
name: galaxy
enabled: false
options:
requirements-file: requirements.yml
driver:
name: docker
platforms:
- name: centos
image: "inecs/ansible:centos"
privileged: true
pre_build_image: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- /var/run/docker.sock:/var/run/docker.sock
tmpfs:
- /tmp
- /run
- name: ubuntu
image: "inecs/ansible:ubuntu"
privileged: true
pre_build_image: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- /var/run/docker.sock:/var/run/docker.sock
tmpfs:
- /tmp
- /run
provisioner:
name: ansible
connection_options:
ansible_connection: docker
ansible_user: root
env:
ANSIBLE_PYTHON_INTERPRETER: /usr/bin/python3
lint:
name: ansible-lint
verifier:
name: ansible
scenario:
name: default
test_sequence:
- dependency
- cleanup
- destroy
- syntax
- create
- prepare
- converge
- idempotence
- side_effect
- verify
- cleanup
- destroy

View File

@@ -1,43 +0,0 @@
- name: Prepare
hosts: all
tasks:
- name: Detect OS family
ansible.builtin.setup:
gather_subset:
- "min"
- name: Обновляем пакеты для работы с Ansible в RockyLinux (Centos/RedHat)
when: ansible_facts['os_family'] == "RedHat"
block:
- name: Устанавливаем репозиторий AppStream (если его нет)
ansible.builtin.raw: dnf config-manager --set-enabled appstream
changed_when: false
- name: Установить rsync
ansible.builtin.raw: dnf install -y rsync
changed_when: false
- name: Устанавливаем Python 3.8
ansible.builtin.raw: dnf install -y python38 python38-pip
changed_when: false
- name: Обновляем символическую ссылку python3
ansible.builtin.raw: alternatives --set python /usr/bin/python3.8
changed_when: false
# - name: Fix repository URLs
# ansible.builtin.command:
# cmd: sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# changed_when: false
# - name: Update baseurl
# ansible.builtin.command:
# cmd: sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# changed_when: false
# - name: Install required packages
# ansible.builtin.yum:
# name:
# - epel-release
# - python3
# - python3-pip
# state: present

View File

@@ -1,7 +0,0 @@
---
- name: Prepare
hosts: all
tasks:
- name: Reun verify
debug:
msg: "Hello, Verify!"

View File

@@ -1,132 +0,0 @@
---
# Проверка работы systemd, docker и docker-compose в образах
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Verify systemd, docker and docker-compose services
hosts: all
gather_facts: true
tasks:
- name: Display OS information
debug:
msg: "Тестирование на {{ ansible_distribution }} {{ ansible_distribution_version }}"
- name: Check if systemd is available and running
systemd:
name: systemd
state: started
register: systemd_status
failed_when: false
- name: Display systemd status
debug:
msg: "Systemd статус: {{ 'Доступен и запущен' if systemd_status is succeeded else 'Недоступен или не запущен' }}"
- name: Check systemd version
command: systemd --version
register: systemd_version
failed_when: false
changed_when: false
- name: Display systemd version
debug:
msg: "Версия systemd: {{ systemd_version.stdout_lines[0] if systemd_version.stdout_lines else 'Не определена' }}"
- name: Check if docker service exists
stat:
path: /usr/bin/docker
register: docker_binary
- name: Check if docker service exists (alternative path)
stat:
path: /usr/local/bin/docker
register: docker_binary_alt
- name: Display docker binary status
debug:
msg: "Docker binary: {{ 'Найден в /usr/bin/docker' if docker_binary.stat.exists else ('Найден в /usr/local/bin/docker' if docker_binary_alt.stat.exists else 'Не найден') }}"
- name: Check docker version
command: docker --version
register: docker_version
failed_when: false
changed_when: false
- name: Display docker version
debug:
msg: "Версия Docker: {{ docker_version.stdout if docker_version.stdout else 'Docker не установлен' }}"
- name: Check if docker daemon is running
command: docker info
register: docker_info
failed_when: false
changed_when: false
- name: Display docker daemon status
debug:
msg: "Docker daemon: {{ 'Запущен' if docker_info is succeeded else 'Не запущен или недоступен' }}"
- name: Check if docker-compose binary exists
stat:
path: /usr/local/bin/docker-compose
register: docker_compose_binary
- name: Check if docker-compose binary exists (alternative path)
stat:
path: /usr/bin/docker-compose
register: docker_compose_binary_alt
- name: Check if docker compose plugin exists
command: docker compose version
register: docker_compose_plugin
failed_when: false
changed_when: false
- name: Display docker-compose status
debug:
msg: "Docker Compose: {{ 'Найден как binary' if docker_compose_binary.stat.exists or docker_compose_binary_alt.stat.exists else ('Найден как plugin' if docker_compose_plugin is succeeded else 'Не найден') }}"
- name: Display docker-compose version
debug:
msg: "Версия Docker Compose: {{ docker_compose_plugin.stdout if docker_compose_plugin is succeeded else 'Docker Compose не установлен' }}"
- name: Test docker functionality
command: docker run --rm hello-world
register: docker_test
failed_when: false
changed_when: false
- name: Display docker test result
debug:
msg: "Тест Docker: {{ 'Успешно' if docker_test is succeeded else 'Ошибка - ' + docker_test.stderr }}"
- name: Check systemd services status
command: systemctl list-units --type=service --state=running
register: running_services
failed_when: false
changed_when: false
- name: Display running services count
debug:
msg: "Количество запущенных сервисов: {{ running_services.stdout_lines | length }}"
- name: Check for docker-related systemd services
command: systemctl list-units --type=service | grep -i docker
register: docker_services
failed_when: false
changed_when: false
- name: Display docker services
debug:
msg: "Docker сервисы: {{ docker_services.stdout_lines if docker_services.stdout_lines else 'Не найдены' }}"
- name: Final summary
debug:
msg: |
========================================
РЕЗУЛЬТАТЫ ПРОВЕРКИ ОБРАЗА {{ ansible_distribution }}:
========================================
Systemd: {{ '✓ Работает' if systemd_status is succeeded else '✗ Не работает' }}
Docker: {{ '✓ Установлен и работает' if docker_info is succeeded else '✗ Не установлен или не работает' }}
Docker Compose: {{ '✓ Доступен' if (docker_compose_binary.stat.exists or docker_compose_binary_alt.stat.exists or docker_compose_plugin is succeeded) else '✗ Недоступен' }}
========================================

View File

@@ -5,7 +5,7 @@
set -euo pipefail
IN_DIR="snapshots"
IN_DIR="/ansible/snapshots"
if [ ! -d "$IN_DIR" ]; then
echo "No snapshots dir"
exit 1

View File

@@ -5,7 +5,7 @@
set -euo pipefail
OUT_DIR="snapshots"
OUT_DIR="/ansible/snapshots"
mkdir -p "$OUT_DIR"
# Найти все контейнеры лаборатории