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:
6
Makefile
6
Makefile
@@ -580,19 +580,19 @@ full-test: ## Полный цикл тестирования с отчетом
|
|||||||
.PHONY: snapshot
|
.PHONY: snapshot
|
||||||
snapshot: ## Сохранить снапшот лаборатории
|
snapshot: ## Сохранить снапшот лаборатории
|
||||||
@echo "$(YELLOW)📸 Создаем снапшот...$(RESET)"
|
@echo "$(YELLOW)📸 Создаем снапшот...$(RESET)"
|
||||||
@bash scripts/snapshot.sh
|
@docker exec ansible-controller bash -lc 'bash /ansible/scripts/snapshot.sh'
|
||||||
@echo "$(GREEN)✅ Снапшот сохранен$(RESET)"
|
@echo "$(GREEN)✅ Снапшот сохранен$(RESET)"
|
||||||
|
|
||||||
.PHONY: restore
|
.PHONY: restore
|
||||||
restore: ## Восстановить из снапшота
|
restore: ## Восстановить из снапшота
|
||||||
@echo "$(BLUE)🔄 Восстанавливаем из снапшота...$(RESET)"
|
@echo "$(BLUE)🔄 Восстанавливаем из снапшота...$(RESET)"
|
||||||
@bash scripts/restore.sh
|
@docker exec ansible-controller bash -lc 'bash /ansible/scripts/restore.sh'
|
||||||
@echo "$(GREEN)✅ Снапшот восстановлен$(RESET)"
|
@echo "$(GREEN)✅ Снапшот восстановлен$(RESET)"
|
||||||
|
|
||||||
.PHONY: cleanup
|
.PHONY: cleanup
|
||||||
cleanup: ## Очистить лабораторию
|
cleanup: ## Очистить лабораторию
|
||||||
@echo "$(RED)🧹 Очищаем лабораторию...$(RESET)"
|
@echo "$(RED)🧹 Очищаем лабораторию...$(RESET)"
|
||||||
@bash scripts/cleanup.sh
|
@docker exec ansible-controller bash -lc 'bash /ansible/scripts/cleanup.sh'
|
||||||
@echo "$(GREEN)✅ Лаборатория очищена$(RESET)"
|
@echo "$(GREEN)✅ Лаборатория очищена$(RESET)"
|
||||||
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
|
|||||||
@@ -413,7 +413,7 @@ ansible-template/
|
|||||||
│ └── requirements.yml # Ansible коллекции
|
│ └── requirements.yml # Ansible коллекции
|
||||||
├── roles/ # Ansible роли
|
├── roles/ # Ansible роли
|
||||||
│ └── your_role/ # Ваши роли
|
│ └── your_role/ # Ваши роли
|
||||||
├── scripts/ # Скрипты
|
├── scripts/ # Скрипты (запускаются через Docker)
|
||||||
│ ├── report_html.py # Генератор HTML отчетов
|
│ ├── report_html.py # Генератор HTML отчетов
|
||||||
│ ├── snapshot.sh # Создание снапшотов
|
│ ├── snapshot.sh # Создание снапшотов
|
||||||
│ ├── restore.sh # Восстановление снапшотов
|
│ ├── restore.sh # Восстановление снапшотов
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ services:
|
|||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- ./molecule:/ansible/molecule
|
- ./molecule:/ansible/molecule
|
||||||
- ./files:/ansible/files
|
- ./files:/ansible/files
|
||||||
|
- ./scripts:/ansible/scripts
|
||||||
|
- ./reports:/ansible/reports
|
||||||
|
- ./snapshots:/ansible/snapshots
|
||||||
- ./vault-password.txt:/ansible/vault-password.txt
|
- ./vault-password.txt:/ansible/vault-password.txt
|
||||||
# каталог с ролями (локальный или внешний)
|
# каталог с ролями (локальный или внешний)
|
||||||
- ${ROLES_DIR:-./roles}:/ansible/roles:ro
|
- ${ROLES_DIR:-./roles}:/ansible/roles:ro
|
||||||
|
|||||||
10
docs/api.md
10
docs/api.md
@@ -432,10 +432,10 @@ python3 scripts/report_html.py <input.json> <output.html>
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Создание снапшотов лаборатории
|
# Создание снапшотов лаборатории (запускается через Docker)
|
||||||
|
|
||||||
# Параметры
|
# Параметры
|
||||||
OUT_DIR="snapshots"
|
OUT_DIR="/ansible/snapshots"
|
||||||
|
|
||||||
# Создать директорию
|
# Создать директорию
|
||||||
mkdir -p "$OUT_DIR"
|
mkdir -p "$OUT_DIR"
|
||||||
@@ -457,10 +457,10 @@ done
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Восстановление из снапшотов
|
# Восстановление из снапшотов (запускается через Docker)
|
||||||
|
|
||||||
# Параметры
|
# Параметры
|
||||||
IN_DIR="snapshots"
|
IN_DIR="/ansible/snapshots"
|
||||||
|
|
||||||
# Проверить директорию
|
# Проверить директорию
|
||||||
[ -d "$IN_DIR" ] || { echo "No snapshots dir"; exit 1; }
|
[ -d "$IN_DIR" ] || { echo "No snapshots dir"; exit 1; }
|
||||||
@@ -480,7 +480,7 @@ done
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Очистка лаборатории
|
# Очистка лаборатории (запускается через Docker)
|
||||||
|
|
||||||
echo "[cleanup] removing lab containers/volumes/networks"
|
echo "[cleanup] removing lab containers/volumes/networks"
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Converge
|
|
||||||
hosts: all
|
|
||||||
vars_files:
|
|
||||||
- ../../vars/secrets.yml
|
|
||||||
roles:
|
|
||||||
@@ -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 }}"
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Prepare
|
|
||||||
hosts: all
|
|
||||||
tasks:
|
|
||||||
- name: Reun verify
|
|
||||||
debug:
|
|
||||||
msg: "Hello, Verify!"
|
|
||||||
@@ -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 '✗ Недоступен' }}
|
|
||||||
========================================
|
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
IN_DIR="snapshots"
|
IN_DIR="/ansible/snapshots"
|
||||||
if [ ! -d "$IN_DIR" ]; then
|
if [ ! -d "$IN_DIR" ]; then
|
||||||
echo "No snapshots dir"
|
echo "No snapshots dir"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
OUT_DIR="snapshots"
|
OUT_DIR="/ansible/snapshots"
|
||||||
mkdir -p "$OUT_DIR"
|
mkdir -p "$OUT_DIR"
|
||||||
|
|
||||||
# Найти все контейнеры лаборатории
|
# Найти все контейнеры лаборатории
|
||||||
|
|||||||
Reference in New Issue
Block a user