- Переписан главный README.md с подробной навигацией - Создана структурированная документация в docs/: - getting-started.md - быстрый старт - creating-roles.md - создание ролей - cicd-setup.md - настройка CI/CD - monitoring.md - мониторинг и диагностика - site-yml-guide.md - руководство по site.yml - molecule-guide.md - подробное руководство по Molecule - Переписан dockerfiles/README.md с детальным описанием всех образов - Перенесен deploy.yml из корня в roles/ для лучшей организации - Обновлен site.yml для импорта roles/deploy.yml - Добавлены fallback значения в create.yml для надежности - Созданы скрипты автоматизации: - update-playbooks.sh - обновление playbook'ов - generate-role-docs.sh - генерация документации - setup-cicd.sh - настройка CI/CD - Добавлен env.example с примерами переменных - Обновлен Makefile с новыми командами автоматизации - Улучшена навигация по документации
223 lines
5.8 KiB
Bash
Executable File
223 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
||
# Автоматическое обновление playbook'ов при добавлении новых ролей
|
||
# Автор: Сергей Антропов
|
||
# Сайт: https://devops.org.ru
|
||
|
||
set -euo pipefail
|
||
|
||
echo "🔍 Обнаружение новых ролей..."
|
||
|
||
# Получаем список всех ролей
|
||
ROLES=$(find roles/ -name 'main.yml' -path '*/tasks/*' | sed 's|roles/||; s|/tasks/main.yml||' | sed 's|^/||' | grep -v '^$' | tr '\n' ' ')
|
||
|
||
echo "📋 Найденные роли: $ROLES"
|
||
|
||
# Обновляем molecule/default/site.yml (только если файл не существует)
|
||
if [ ! -f "molecule/default/site.yml" ]; then
|
||
echo "📝 Создание molecule/default/site.yml..."
|
||
cat > molecule/default/site.yml << 'EOF'
|
||
---
|
||
# Универсальный playbook для тестирования Ansible ролей
|
||
# Автор: Сергей Антропов
|
||
# Сайт: https://devops.org.ru
|
||
#
|
||
# Этот файл отвечает за:
|
||
# 1. Обновление пакетов в контейнерах при запуске тестов
|
||
# 2. Установку common tools для корректной работы тестов
|
||
# 3. Подготовку окружения для тестирования ролей
|
||
# 4. Импорт roles/deploy.yml для запуска ролей
|
||
|
||
- name: Подготовка окружения для тестирования
|
||
hosts: all
|
||
become: true
|
||
tasks:
|
||
# Обновление кеша пакетов для Debian/Ubuntu
|
||
- name: Update package cache (Debian/Ubuntu)
|
||
apt:
|
||
update_cache: true
|
||
cache_valid_time: 3600
|
||
when: ansible_os_family == 'Debian'
|
||
changed_when: false
|
||
tags:
|
||
- setup
|
||
- update
|
||
|
||
# Обновление кеша пакетов для RHEL/CentOS/AlmaLinux/Rocky
|
||
- name: Update package cache (RHEL/CentOS/AlmaLinux/Rocky)
|
||
yum:
|
||
update_cache: true
|
||
when: ansible_os_family == 'RedHat'
|
||
changed_when: false
|
||
tags:
|
||
- setup
|
||
- update
|
||
|
||
# Обновление кеша пакетов для Alt Linux
|
||
- name: Update package cache (Alt Linux)
|
||
apt:
|
||
update_cache: true
|
||
when: ansible_distribution == 'Alt'
|
||
changed_when: false
|
||
tags:
|
||
- setup
|
||
- update
|
||
|
||
# Установка common tools для всех ОС
|
||
- name: Install common tools (Debian/Ubuntu)
|
||
apt:
|
||
name:
|
||
- curl
|
||
- jq
|
||
- ca-certificates
|
||
- iproute2
|
||
- iputils-ping
|
||
- procps
|
||
- net-tools
|
||
- sudo
|
||
- vim
|
||
- wget
|
||
- unzip
|
||
- git
|
||
state: present
|
||
update_cache: false
|
||
when: ansible_os_family == 'Debian'
|
||
tags:
|
||
- setup
|
||
- tools
|
||
|
||
- name: Install common tools (RHEL/CentOS/AlmaLinux/Rocky)
|
||
yum:
|
||
name:
|
||
- curl
|
||
- jq
|
||
- ca-certificates
|
||
- iproute
|
||
- iputils
|
||
- procps-ng
|
||
- net-tools
|
||
- sudo
|
||
- vim
|
||
- wget
|
||
- unzip
|
||
- git
|
||
state: present
|
||
when: ansible_os_family == 'RedHat'
|
||
tags:
|
||
- setup
|
||
- tools
|
||
|
||
- name: Install common tools (Alt Linux)
|
||
apt:
|
||
name:
|
||
- curl
|
||
- jq
|
||
- ca-certificates
|
||
- iproute2
|
||
- iputils
|
||
- procps
|
||
- net-tools
|
||
- sudo
|
||
- vim
|
||
- wget
|
||
- unzip
|
||
- git
|
||
state: present
|
||
when: ansible_distribution == 'Alt'
|
||
tags:
|
||
- setup
|
||
- tools
|
||
|
||
# Установка Python для Ansible (если не установлен)
|
||
- name: Install Python (Debian/Ubuntu)
|
||
apt:
|
||
name:
|
||
- python3
|
||
- python3-pip
|
||
- python3-venv
|
||
state: present
|
||
when: ansible_os_family == 'Debian'
|
||
tags:
|
||
- setup
|
||
- python
|
||
|
||
- name: Install Python (RHEL/CentOS/AlmaLinux/Rocky)
|
||
yum:
|
||
name:
|
||
- python3
|
||
- python3-pip
|
||
state: present
|
||
when: ansible_os_family == 'RedHat'
|
||
tags:
|
||
- setup
|
||
- python
|
||
|
||
- name: Install Python (Alt Linux)
|
||
apt:
|
||
name:
|
||
- python3
|
||
- python3-pip
|
||
state: present
|
||
when: ansible_distribution == 'Alt'
|
||
tags:
|
||
- setup
|
||
- python
|
||
|
||
# Создание пользователя для тестирования
|
||
- name: Create test user
|
||
user:
|
||
name: testuser
|
||
shell: /bin/bash
|
||
create_home: yes
|
||
state: present
|
||
tags:
|
||
- setup
|
||
- user
|
||
|
||
# Настройка sudo для тестового пользователя
|
||
- name: Configure sudo for test user
|
||
lineinfile:
|
||
path: /etc/sudoers
|
||
line: "testuser ALL=(ALL) NOPASSWD:ALL"
|
||
state: present
|
||
validate: 'visudo -cf %s'
|
||
tags:
|
||
- setup
|
||
- sudo
|
||
|
||
# Создание директории для тестов
|
||
- name: Create test directory
|
||
file:
|
||
path: /tmp/ansible-test
|
||
state: directory
|
||
mode: '0755'
|
||
owner: testuser
|
||
group: testuser
|
||
tags:
|
||
- setup
|
||
- directory
|
||
|
||
- import_playbook: ../../roles/deploy.yml
|
||
EOF
|
||
else
|
||
echo "📝 Файл molecule/default/site.yml уже существует, пропускаем создание"
|
||
fi
|
||
|
||
# Обновляем roles/deploy.yml
|
||
echo "📝 Обновление roles/deploy.yml..."
|
||
cat > roles/deploy.yml << EOF
|
||
---
|
||
# Playbook для развертывания на продакшн серверах
|
||
# Автор: Сергей Антропов
|
||
# Сайт: https://devops.org.ru
|
||
|
||
- name: Развертывание всех ролей
|
||
hosts: all
|
||
roles:
|
||
EOF
|
||
|
||
for role in $ROLES; do
|
||
echo " - $role" >> roles/deploy.yml
|
||
done
|
||
|
||
echo "✅ Playbook'и обновлены"
|