diff --git a/Makefile b/Makefile index d955905..f5f40d9 100644 --- a/Makefile +++ b/Makefile @@ -50,6 +50,7 @@ role: lint) \ echo "🔍 Проверка синтаксиса ролей ..."; \ docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace -e ANSIBLE_FORCE_COLOR=1 $(DOCKER_IMAGE) bash -c "ansible-lint roles/ --config-file .ansible-lint || true"; \ + echo ""; \ echo "✅ Lint завершен";; \ test) \ echo "🚀 Тестирование ролей ..."; \ diff --git a/Makefile.backup b/Makefile.backup deleted file mode 100644 index fe5664f..0000000 --- a/Makefile.backup +++ /dev/null @@ -1,347 +0,0 @@ -# ============================================================================= -# AnsibleTemplate - Универсальная система тестирования Ansible ролей -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru -# ============================================================================= - -SHELL := /bin/bash - -# ============================================================================= -# ЦВЕТА ДЛЯ ВЫВОДА -# ============================================================================= -RED := \033[0;31m -GREEN := \033[0;32m -YELLOW := \033[0;33m -BLUE := \033[0;34m -PURPLE := \033[0;35m -CYAN := \033[0;36m -WHITE := \033[0;37m -RESET := \033[0m - -# ============================================================================= -# ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ -# ============================================================================= -PROJECT_NAME ?= ansible-template -VERSION ?= 0.1.0 -AUTHOR ?= "Сергей Антропов" -SITE ?= "https://devops.org.ru" -DOCKER_IMAGE ?= quay.io/ansible/creator-ee:latest -CONTAINER_NAME ?= ansible-controller - -.PHONY: role molecule vault git docker help - -#################################################################################################### -# Работа с ролями -#################################################################################################### -role: - @case "$(word 2, $(MAKECMDGOALS))" in \ - lint) \ - clear; \ - echo "$(BLUE)🔍 Проверка синтаксиса ролей ...$(RESET)"; \ - echo ""; \ - docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace -e ANSIBLE_FORCE_COLOR=1 $(DOCKER_IMAGE) bash -c "ansible-lint roles/ --config-file .ansible-lint || true"; \ - echo "$(GREEN)✅ Lint завершен$(RESET)";; \ - test) \ - clear; \ - echo "$(PURPLE)🚀 Тестирование ролей ...$(RESET)"; \ - PRESET="default"; \ - # Получаем все аргументы после 'test' и берем первый как preset \ - ARGS="$(filter-out test,$(MAKECMDGOALS))"; \ - if [ -n "$$ARGS" ]; then \ - PRESET="$$(echo $$ARGS | cut -d' ' -f1)"; \ - fi; \ - echo "$(CYAN)📋 Используется пресет: $(YELLOW)$$PRESET$(RESET)"; \ - if [ ! -f "molecule/presets/$$PRESET.yml" ]; then \ - echo "$(RED)❌ Ошибка: Пресет '$$PRESET' не найден!$(RESET)"; \ - echo "$(YELLOW)💡 Доступные пресеты:$(RESET)"; \ - ls -1 molecule/presets/*.yml 2>/dev/null | sed 's|molecule/presets/||g' | sed 's|\.yml||g' | sed 's/^/ - /' || echo " $(YELLOW)⚠️ Пресеты не найдены$(RESET)"; \ - echo ""; \ - echo "$(GREEN)💡 Использование:$(RESET)"; \ - echo " $(BLUE)make role test$(RESET) - с default preset"; \ - echo " $(BLUE)make role test [preset_name]$(RESET) - с любым preset"; \ - echo " $(BLUE)make role test minimal$(RESET) - с minimal preset"; \ - echo " $(BLUE)make role test standard$(RESET) - со standard preset"; \ - echo " $(BLUE)make role test docker$(RESET) - с docker preset"; \ - exit 1; \ - fi; \ - echo ""; \ - docker run --rm --name $(CONTAINER_NAME) -v "$(PWD):/workspace" -w /workspace \ - -e ANSIBLE_FORCE_COLOR=1 \ - -e MOLECULE_PRESET=$$PRESET \ - $(DOCKER_IMAGE) \ - bash -c "cd molecule/default && ansible-playbook -i localhost, site.yml --connection=local" || echo "$(GREEN)✅ Тестирование завершено$(RESET)";; \ - presets) \ - clear; \ - echo "$(CYAN)📋 Доступные пресеты:$(RESET)"; \ - echo ""; \ - preset_count=0; \ - for preset in molecule/presets/*.yml; do \ - if [ -f "$$preset" ]; then \ - preset_name=$$(basename "$$preset" .yml); \ - preset_desc=$$(grep -E "^#.*пресет|^#.*preset" "$$preset" | head -1 | sed 's/^# *//' || echo "Описание отсутствует"); \ - host_count=$$(grep -c "^- name:" "$$preset" 2>/dev/null || echo "?"); \ - printf " $(BLUE)📄 %s$(RESET) - %s $(GREEN)(%s хостов)$(RESET)\n" "$$preset_name" "$$preset_desc" "$$host_count"; \ - preset_count=$$((preset_count + 1)); \ - fi; \ - done; \ - if [ $$preset_count -eq 0 ]; then \ - echo " $(YELLOW)⚠️ Пресеты не найдены$(RESET)"; \ - fi; \ - echo ""; \ - echo "$(GREEN)💡 Использование:$(RESET)"; \ - echo " $(BLUE)make role test$(RESET) - с default preset"; \ - echo " $(BLUE)make role test [preset_name]$(RESET) - с любым preset"; \ - echo " $(BLUE)make role test minimal$(RESET) - с minimal preset"; \ - echo " $(BLUE)make role test standard$(RESET) - со standard preset"; \ - echo " $(BLUE)make role test docker$(RESET) - с docker preset"; \ - echo ""; \ - echo "$(YELLOW)💡 Примеры:$(RESET)"; \ - echo " $(BLUE)make role test$(RESET) # default preset"; \ - echo " $(BLUE)make role test minimal$(RESET) # minimal preset"; \ - echo " $(BLUE)make role test my-custom-preset$(RESET) # любой preset";; \ - deploy) \ - clear; \ - echo "$(PURPLE)🚀 Развертывание ролей на реальные серверы...$(RESET)"; \ - echo ""; \ - echo "$(YELLOW)💡 Примеры использования:$(RESET)"; \ - echo " $(GREEN)ansible-playbook -i inventory/hosts.ini deploy.yml$(RESET)"; \ - echo " $(GREEN)ansible-playbook -i inventory/hosts.ini deploy.yml --limit web_servers$(RESET)"; \ - echo " $(GREEN)ansible-playbook -i inventory/hosts.ini deploy.yml --check$(RESET)"; \ - echo ""; \ - echo "$(CYAN)📄 Доступные playbook:$(RESET)"; \ - ls -la *.yml 2>/dev/null | grep -v molecule || echo " $(BLUE)📄 deploy.yml - основной playbook для развертывания$(RESET)";; \ - *) \ - clear; \ - echo "$(CYAN)🎯 Доступные команды:$(RESET)"; \ - echo ""; \ - echo " $(BLUE)🔧 make role install$(RESET) - установить зависимости"; \ - echo " $(BLUE)🔍 make role lint$(RESET) - проверить синтаксис ролей"; \ - echo " $(PURPLE)🚀 make role test$(RESET) - протестировать роли (default preset)"; \ - echo " $(PURPLE)🚀 make role test [preset]$(RESET) - протестировать с любым preset"; \ - echo " $(PURPLE)🚀 make role test minimal$(RESET) - протестировать с minimal preset"; \ - echo " $(PURPLE)🚀 make role test standard$(RESET) - протестировать со standard preset"; \ - echo " $(PURPLE)🚀 make role test docker$(RESET) - протестировать с docker preset"; \ - echo " $(CYAN)📋 make role presets$(RESET) - показать список preset'ов"; \ - echo " $(PURPLE)🚀 make role deploy$(RESET) - развернуть роли";; \ - esac - - -#################################################################################################### -# Работа с Molecule Universal -#################################################################################################### -molecule: - @case "$(word 2, $(MAKECMDGOALS))" in \ - create) \ - clear; \ - echo "Создание тестового окружения ..."; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - bash -c "cd molecule/default && molecule create";; \ - converge) \ - clear; \ - echo "Запуск плейбуков ..."; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - bash -c "cd molecule/default && molecule converge";; \ - verify) \ - clear; \ - echo "Проверка результатов ..."; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - bash -c "cd molecule/default && molecule verify";; \ - destroy) \ - clear; \ - echo "Удаление тестового окружения ..."; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - bash -c "cd molecule/default && molecule destroy";; \ - test) \ - clear; \ - echo "Полный цикл тестирования ..."; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - bash -c "cd molecule/default && molecule test";; \ - *) \ - clear; \ - echo "Доступные команды:"; \ - echo " make molecule create - создать окружение"; \ - echo " make molecule converge - запустить плейбуки"; \ - echo " make molecule verify - проверить результаты"; \ - echo " make molecule destroy - удалить окружение"; \ - echo " make molecule test - полный цикл тестирования"; \ - ;; \ - esac - -#################################################################################################### -# Работа с Ansible Vault -#################################################################################################### -vault: - @case "$(word 2, $(MAKECMDGOALS))" in \ - show) \ - clear; \ - echo "Доступные файлы секретов:"; \ - ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \ - echo ""; \ - read -p "Введите имя файла (без .yml): " FILE; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - ansible-vault view --vault-password-file vault/.vault vault/$$FILE.yml;; \ - create) \ - clear; \ - echo "Создание файла секретов :"; \ - read -p "Введите имя файла (без .yml): " FILE; \ - docker run --rm -it -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - ansible-vault create --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \ - edit) \ - clear; \ - echo "Доступные файлы секретов:"; \ - ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \ - echo ""; \ - read -p "Введите имя файла (без .yml): " FILE; \ - docker run --rm -it -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - ansible-vault edit --vault-password-file vault/.vault vault/$$FILE.yml;; \ - delete) \ - clear; \ - echo "Доступные файлы секретов:"; \ - ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \ - echo ""; \ - read -p "Введите имя файла (без .yml): " FILE; \ - rm -f vault/$$FILE.yml;; \ - rekey) \ - clear; \ - echo "Доступные файлы секретов:"; \ - ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \ - echo ""; \ - read -p "Введите имя файла (без .yml): " FILE; \ - docker run --rm -it -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - ansible-vault rekey --vault-password-file vault/.vault vault/$$FILE.yml;; \ - decrypt) \ - clear; \ - echo "Доступные файлы секретов:"; \ - ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \ - echo ""; \ - read -p "Введите имя файла (без .yml): " FILE; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - ansible-vault decrypt --vault-password-file vault/.vault vault/$$FILE.yml;; \ - encrypt) \ - clear; \ - echo "Доступные файлы секретов:"; \ - ls -la vault/*.yml 2>/dev/null || echo "Нет зашифрованных файлов"; \ - echo ""; \ - read -p "Введите имя файла (без .yml): " FILE; \ - docker run --rm -v "$(PWD):/workspace" -w /workspace \ - quay.io/ansible/creator-ee:latest \ - ansible-vault encrypt --encrypt-vault-id default --vault-password-file vault/.vault vault/$$FILE.yml;; \ - *) \ - clear; \ - echo "Доступные команды:"; \ - echo " make vault create - создать файл секретов"; \ - echo " make vault edit - редактировать секреты"; \ - echo " make vault show - показать секреты"; \ - echo " make vault delete - удалить секреты"; \ - echo " make vault encrypt - зашифровать файл"; \ - echo " make vault decrypt - расшифровать файл"; \ - echo " make vault rekey - сменить пароль";; \ - esac - -#################################################################################################### -# Работа с Git -#################################################################################################### -git: - @case "$(word 2, $(MAKECMDGOALS))" in \ - push) \ - git branch; \ - read -p "Выберите ветку для пуша: " BRANCH; \ - read -p "Введите описание коммита: " COMMIT; \ - commitname=$$COMMIT; \ - git add . ; \ - git commit -m "$$commitname"; \ - git push -u origin $$BRANCH; \ - echo "Изменения внесены в Git";; \ - pull) \ - git pull;; \ - new) \ - read -p "Введите имя новой ветки: " BRANCH_NAME; \ - NEW_BRANCH="$$BRANCH_NAME"; \ - git checkout -b $$NEW_BRANCH; \ - echo "Создана и переключена на новую ветку: $$NEW_BRANCH";; \ - *) \ - clear; \ - echo "Доступные команды:"; \ - echo " make git push - запушить изменения"; \ - echo " make git pull - получить изменения"; \ - echo " make git new - создать новую ветку";; \ - esac - -#################################################################################################### -# Работа с Docker (упрощенная) -#################################################################################################### -docker: - @case "$(word 2, $(MAKECMDGOALS))" in \ - clean) \ - clear; \ - echo "$(RED)🧹 Очистка Docker ресурсов...$(RESET)"; \ - docker system prune -f; \ - docker volume prune -f; \ - echo "$(GREEN)✅ Docker ресурсы очищены$(RESET)";; \ - *) \ - clear; \ - echo "$(CYAN)🐳 Docker команды:$(RESET)"; \ - echo ""; \ - echo "$(RED)make docker clean$(RESET) - очистить Docker ресурсы"; \ - echo ""; \ - echo "$(YELLOW)💡 Основное тестирование через preset систему:$(RESET)"; \ - echo " $(BLUE)make role test [preset]$(RESET) - универсальное тестирование"; \ - echo " $(BLUE)make role presets$(RESET) - показать доступные preset'ы";; \ - esac - -#################################################################################################### -# Справка -#################################################################################################### -help: - @clear - @echo "==========================================" - @echo "AnsibleTemplate - Универсальная система" - @echo "тестирования Ansible ролей" - @echo "==========================================" - @echo "" - @echo "📁 Структура проекта:" - @echo " scripts/ - Скрипты автоматизации" - @echo " inventory/ - Инвентори файлы" - @echo " molecule/default/ - Molecule конфигурация" - @echo " roles/ - Ansible роли" - @echo " vault/ - Зашифрованные секреты" - @echo "" - @echo "🚀 Основные команды:" - @echo " make role install - установить зависимости" - @echo " make role lint - проверить синтаксис ролей" - @echo " make role test - протестировать роли (default preset)" - @echo " make role test [preset] - протестировать с любым preset" - @echo " make role test minimal - тест с minimal preset" - @echo " make role test standard - тест со standard preset" - @echo " make role test docker - тест с docker preset" - @echo " make role deploy - развернуть роли на серверы" - @echo " make docker clean - очистить Docker ресурсы" - @echo " make vault create - создать файл секретов" - @echo " make git new - создать новую ветку" - @echo "" - @echo "📖 Для подробной справки:" - @echo " make role - команды для ролей" - @echo " make molecule - команды Molecule" - @echo " make docker - команды Docker" - @echo " make vault - команды Vault" - @echo " make git - команды Git" - @echo "==========================================" - -# Пустые цели для совместимости -view create edit show delete test lint deploy new advanced presets: - @true - -# Динамические цели для всех возможных preset'ов -# Это позволяет использовать make role test [любой_preset] без ошибок -%: - @true \ No newline at end of file diff --git a/deploy.yml b/deploy.yml index 1703475..46d94a2 100644 --- a/deploy.yml +++ b/deploy.yml @@ -3,6 +3,15 @@ # Автор: Сергей Антропов # Сайт: https://devops.org.ru +- name: Test ping role + hosts: all + become: false + roles: + - ping + tags: + - ping + - test + - name: Test nginx role hosts: all become: true diff --git a/roles/nginx/defaults/main.yml b/roles/nginx/defaults/main.yml deleted file mode 100644 index beb639a..0000000 --- a/roles/nginx/defaults/main.yml +++ /dev/null @@ -1,60 +0,0 @@ ---- -# Переменные по умолчанию для роли nginx -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -# Основные настройки nginx -nginx_user: "nginx" -nginx_worker_processes: "auto" -nginx_worker_connections: 1024 -nginx_keepalive_timeout: 65 - -# Настройки сервера -nginx_server_name: "{{ ansible_fqdn | default(ansible_hostname) }}" -nginx_listen_port: 80 -nginx_root_dir: "/var/www/html" -nginx_index_file: "index.html" - -# Настройки логов -nginx_access_log: "/var/log/nginx/access.log" -nginx_error_log: "/var/log/nginx/error.log" - -# Настройки безопасности -nginx_server_tokens: "off" -nginx_hide_version: true - -# Настройки производительности -nginx_sendfile: "on" -nginx_tcp_nopush: "on" -nginx_tcp_nodelay: "on" - -# Настройки gzip -nginx_gzip: true -nginx_gzip_vary: "on" -nginx_gzip_min_length: 1024 -nginx_gzip_types: - - "text/plain" - - "text/css" - - "text/xml" - - "text/javascript" - - "application/javascript" - - "application/xml+rss" - - "application/json" - -# Настройки для разных ОС -nginx_packages: - - nginx - -# Дополнительные пакеты для Ubuntu/Debian -nginx_ubuntu_packages: - - nginx - - nginx-common - -# Дополнительные пакеты для RHEL/CentOS -nginx_rhel_packages: - - nginx - - nginx-mod-http-geoip - - nginx-mod-http-image-filter - - nginx-mod-http-xslt-filter - - nginx-mod-mail - - nginx-mod-stream diff --git a/roles/nginx/handlers/main.yml b/roles/nginx/handlers/main.yml deleted file mode 100644 index 8cc94cf..0000000 --- a/roles/nginx/handlers/main.yml +++ /dev/null @@ -1,44 +0,0 @@ ---- -# Обработчики для роли nginx -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -- name: Restart nginx - systemd: - name: nginx - state: restarted - listen: restart nginx - tags: - - nginx - - service - - restart - -- name: Reload nginx - systemd: - name: nginx - state: reloaded - listen: reload nginx - tags: - - nginx - - service - - reload - -- name: Start nginx - systemd: - name: nginx - state: started - listen: start nginx - tags: - - nginx - - service - - start - -- name: Stop nginx - systemd: - name: nginx - state: stopped - listen: stop nginx - tags: - - nginx - - service - - stop diff --git a/roles/nginx/meta/main.yml b/roles/nginx/meta/main.yml deleted file mode 100644 index 4556f98..0000000 --- a/roles/nginx/meta/main.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -# Метаданные роли nginx -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -galaxy_info: - author: Сергей Антропов - description: Простая роль для установки и настройки nginx - company: DevOps.org.ru - license: MIT - min_ansible_version: "2.9" - platforms: - - name: Ubuntu - versions: - - jammy - - focal - - name: EL - versions: - - all - galaxy_tags: - - web - - nginx - - http - - server - -dependencies: [] diff --git a/roles/nginx/tasks/main.yml b/roles/nginx/tasks/main.yml deleted file mode 100644 index 70146e6..0000000 --- a/roles/nginx/tasks/main.yml +++ /dev/null @@ -1,196 +0,0 @@ ---- -# Основные задачи для роли nginx -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru - -- name: Установка nginx на Ubuntu/Debian - apt: - name: "{{ nginx_ubuntu_packages }}" - state: present - update_cache: true - when: ansible_os_family == "Debian" - tags: - - nginx - - install - - debian - -- name: Установка nginx на RHEL/CentOS - yum: - name: "{{ nginx_rhel_packages }}" - state: present - when: ansible_os_family == "RedHat" - tags: - - nginx - - install - - rhel - -- name: Включение и запуск nginx на Ubuntu/Debian - systemd: - name: nginx - enabled: true - state: started - when: ansible_os_family == "Debian" - tags: - - nginx - - service - - debian - -- name: Включение и запуск nginx на RHEL/CentOS - systemd: - name: nginx - enabled: true - state: started - when: ansible_os_family == "RedHat" - tags: - - nginx - - service - - rhel - -- name: Создание директории для веб-контента - file: - path: "{{ nginx_root_dir }}" - state: directory - owner: "{{ nginx_user }}" - group: "{{ nginx_user }}" - mode: '0755' - tags: - - nginx - - config - - directories - -- name: Создание тестовой страницы - copy: - content: | - - -
-Сервер: {{ ansible_hostname }}
-ОС: {{ ansible_distribution }} \ - {{ ansible_distribution_version }}
-Время: {{ ansible_date_time.iso8601 }}
-Роль: nginx (Сергей Антропов)
-