- Переписан главный 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'и обновлены"
 |