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: | - - - - Nginx Test Page - - - -
-

Nginx работает!

-
-

Сервер: {{ ansible_hostname }}

-

ОС: {{ ansible_distribution }} \ - {{ ansible_distribution_version }}

-

Время: {{ ansible_date_time.iso8601 }}

-

Роль: nginx (Сергей Антропов)

-
-
- - - dest: "{{ nginx_root_dir }}/{{ nginx_index_file }}" - owner: "{{ nginx_user }}" - group: "{{ nginx_user }}" - mode: '0644' - notify: restart nginx - tags: - - nginx - - config - - content - -- name: Создание резервной копии конфигурации nginx - copy: - src: "{{ item }}" - dest: "{{ item }}.backup" - remote_src: true - mode: '0644' - owner: root - group: root - loop: - - /etc/nginx/nginx.conf - - /etc/nginx/sites-available/default - ignore_errors: true - when: ansible_os_family == "Debian" - tags: - - nginx - - config - - backup - -- name: Создание резервной копии конфигурации nginx (RHEL) - copy: - src: "{{ item }}" - dest: "{{ item }}.backup" - remote_src: true - mode: '0644' - owner: root - group: root - loop: - - /etc/nginx/nginx.conf - - /etc/nginx/conf.d/default.conf - ignore_errors: true - when: ansible_os_family == "RedHat" - tags: - - nginx - - config - - backup - -- name: Настройка основной конфигурации nginx - template: - src: nginx.conf.j2 - dest: /etc/nginx/nginx.conf - owner: root - group: root - mode: '0644' - backup: true - notify: restart nginx - tags: - - nginx - - config - - main - -- name: Настройка виртуального хоста (Ubuntu/Debian) - template: - src: default.conf.j2 - dest: /etc/nginx/sites-available/default - owner: root - group: root - mode: '0644' - backup: true - when: ansible_os_family == "Debian" - notify: restart nginx - tags: - - nginx - - config - - vhost - - debian - -- name: Настройка виртуального хоста (RHEL/CentOS) - template: - src: default.conf.j2 - dest: /etc/nginx/conf.d/default.conf - owner: root - group: root - mode: '0644' - backup: true - when: ansible_os_family == "RedHat" - notify: restart nginx - tags: - - nginx - - config - - vhost - - rhel - -- name: Проверка конфигурации nginx - command: nginx -t - register: nginx_config_test - changed_when: false - tags: - - nginx - - config - - test - -- name: Показать результат проверки конфигурации - debug: - msg: "{{ nginx_config_test.stdout_lines }}" - when: nginx_config_test.stdout_lines is defined - tags: - - nginx - - config - - test diff --git a/roles/nginx/templates/default.conf.j2 b/roles/nginx/templates/default.conf.j2 deleted file mode 100644 index 1ef86b3..0000000 --- a/roles/nginx/templates/default.conf.j2 +++ /dev/null @@ -1,67 +0,0 @@ -# Конфигурация виртуального хоста nginx -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru -# Сгенерировано: {{ ansible_date_time.iso8601 }} - -server { - listen {{ nginx_listen_port }}; - server_name {{ nginx_server_name }}; - - # Настройки безопасности - {% if nginx_hide_version %} - server_tokens off; - {% endif %} - - # Корневая директория - root {{ nginx_root_dir }}; - index {{ nginx_index_file }}; - - # Настройки логов для этого виртуального хоста - access_log {{ nginx_access_log }}; - error_log {{ nginx_error_log }}; - - # Основная локация - location / { - try_files $uri $uri/ =404; - } - - # Настройки для статических файлов - location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { - expires 1y; - add_header Cache-Control "public, immutable"; - } - - # Настройки безопасности - location ~ /\. { - deny all; - access_log off; - log_not_found off; - } - - # Настройки для favicon - location = /favicon.ico { - log_not_found off; - access_log off; - } - - # Настройки для robots.txt - location = /robots.txt { - log_not_found off; - access_log off; - } - - # Настройки для health check - location /health { - access_log off; - return 200 "healthy\n"; - add_header Content-Type text/plain; - } - - # Настройки для статуса nginx - location /nginx_status { - stub_status on; - access_log off; - allow 127.0.0.1; - deny all; - } -} diff --git a/roles/nginx/templates/nginx.conf.j2 b/roles/nginx/templates/nginx.conf.j2 deleted file mode 100644 index 3e9d771..0000000 --- a/roles/nginx/templates/nginx.conf.j2 +++ /dev/null @@ -1,58 +0,0 @@ -# Основная конфигурация nginx -# Автор: Сергей Антропов -# Сайт: https://devops.org.ru -# Сгенерировано: {{ ansible_date_time.iso8601 }} - -user {{ nginx_user }}; -worker_processes {{ nginx_worker_processes }}; - -error_log {{ nginx_error_log }}; -pid /run/nginx.pid; - -events { - worker_connections {{ nginx_worker_connections }}; -} - -http { - # Основные настройки - sendfile {{ nginx_sendfile }}; - tcp_nopush {{ nginx_tcp_nopush }}; - tcp_nodelay {{ nginx_tcp_nodelay }}; - keepalive_timeout {{ nginx_keepalive_timeout }}; - types_hash_max_size 2048; - server_tokens {{ nginx_server_tokens }}; - - # Настройки MIME типов - include /etc/nginx/mime.types; - default_type application/octet-stream; - - # Настройки логирования - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log {{ nginx_access_log }} main; - - # Настройки gzip - {% if nginx_gzip %} - gzip {{ nginx_gzip_vary }}; - gzip_min_length {{ nginx_gzip_min_length }}; - gzip_types - {% for gzip_type in nginx_gzip_types %} - {{ gzip_type }}{% if not loop.last %} {% endif %} - {% endfor %}; - {% endif %} - - # Настройки безопасности - {% if nginx_hide_version %} - server_tokens off; - {% endif %} - - # Включение конфигураций виртуальных хостов - {% if ansible_os_family == "Debian" %} - include /etc/nginx/conf.d/*.conf; - include /etc/nginx/sites-enabled/*; - {% elif ansible_os_family == "RedHat" %} - include /etc/nginx/conf.d/*.conf; - {% endif %} -} diff --git a/roles/ping/QUICKSTART.md b/roles/ping/QUICKSTART.md new file mode 100644 index 0000000..9526288 --- /dev/null +++ b/roles/ping/QUICKSTART.md @@ -0,0 +1,66 @@ +# Быстрый старт - Роль Ping + +## Что делает роль? + +Роль выполняет ping yandex.ru из 5 пакетов и выводит результат. + +## Основные задачи роли: + +1. **Выполнение ping** - отправляет 5 пакетов на yandex.ru +2. **Вывод результата** - показывает строки результата ping +3. **Статистика** - выводит статус и время выполнения +4. **Дополнительная информация** - выводит полный вывод команды + +## Как использовать: + +### Вариант 1: Использование в deploy.yml (уже добавлено) + +```bash +# Запуск только роли ping +make role test minimal ping + +# Запуск всех ролей +make role test minimal +``` + +### Вариант 2: Использование через roles/ping/playbook.yml + +```bash +# Запуск напрямую +ansible-playbook -i inventory/hosts.ini roles/ping/playbook.yml +``` + +### Вариант 3: Использование с кастомными параметрами + +```yaml +- name: Тест ping + hosts: all + roles: + - role: ping + vars: + ping_host: google.com + ping_count: 10 +``` + +## Переменные: + +- `ping_host` - хост для ping (по умолчанию: yandex.ru) +- `ping_count` - количество пакетов (по умолчанию: 5) + +## Теги: + +- `ping` - выполнение всех задач +- `test` - тестирование +- `debug` - отладочная информация +- `stats` - статистика + +## Пример вывода: + +``` +========================================= +Результат ping yandex.ru +========================================= +Статус: УСПЕШНО +Время выполнения: 4.234 +========================================= +``` diff --git a/roles/ping/README.md b/roles/ping/README.md new file mode 100644 index 0000000..09947ec --- /dev/null +++ b/roles/ping/README.md @@ -0,0 +1,96 @@ +# Роль Ping + +**Автор:** Сергей Антропов +**Сайт:** https://devops.org.ru + +## Описание + +Роль для выполнения ping проверок подключения к сети. Роль отправляет ping пакеты на указанный хост и выводит результаты выполнения. + +## Требования + +- Ansible >= 2.9 +- Наличие утилиты `ping` на целевых хостах +- Привилегии на выполнение ping (обычно не требуются) + +## Переменные + +| Переменная | Тип | По умолчанию | Описание | +|------------|-----|--------------|----------| +| `ping_host` | string | `yandex.ru` | Целевой хост для ping | +| `ping_count` | integer | `5` | Количество пакетов для отправки | +| `ping_interval` | integer | `1` | Интервал между пакетами (в секундах) | +| `ping_timeout` | integer | `10` | Таймаут (в секундах) | +| `ping_packet_size` | integer | `64` | Размер пакета (в байтах) | + +## Примеры использования + +### Базовое использование + +```yaml +- name: Выполнить ping проверку + hosts: all + roles: + - ping +``` + +### С кастомными параметрами + +```yaml +- name: Выполнить ping проверку с кастомными параметрами + hosts: all + roles: + - role: ping + vars: + ping_host: google.com + ping_count: 10 +``` + +### В playbook + +```yaml +--- +- name: Тестирование сетевого подключения + hosts: servers + become: false + roles: + - role: ping + vars: + ping_host: 8.8.8.8 + ping_count: 3 + tags: + - network + - test +``` + +## Tags + +Роль поддерживает следующие теги: + +- `ping` - выполнение всех задач роли +- `test` - тестирование подключения +- `debug` - вывод отладочной информации +- `stats` - вывод статистики + +Пример использования тегов: + +```bash +ansible-playbook site.yml --tags "ping,debug" +``` + +## Поддерживаемые ОС + +- Red Hat Enterprise Linux 7/8/9 +- CentOS 7/8/Stream +- AlmaLinux 8/9 +- Rocky Linux 8/9 +- Ubuntu 20.04/22.04 +- Debian 10/11/12 + +## Лицензия + +MIT + +## Автор + +Сергей Антропов - https://devops.org.ru diff --git a/roles/ping/defaults/main.yml b/roles/ping/defaults/main.yml new file mode 100644 index 0000000..87bad99 --- /dev/null +++ b/roles/ping/defaults/main.yml @@ -0,0 +1,19 @@ +--- +# Переменные по умолчанию для роли ping +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +# Целевой хост для ping +ping_host: yandex.ru + +# Количество пакетов для отправки +ping_count: 5 + +# Интервал между пакетами (в секундах) +ping_interval: 1 + +# Таймаут (в секундах) +ping_timeout: 10 + +# Размер пакета (в байтах) +ping_packet_size: 64 diff --git a/roles/ping/handlers/main.yml b/roles/ping/handlers/main.yml new file mode 100644 index 0000000..bfdec6c --- /dev/null +++ b/roles/ping/handlers/main.yml @@ -0,0 +1,7 @@ +--- +# Handlers для роли ping +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +# В данный момент handlers не требуются для роли ping (пустой файл для совместимости) +[] diff --git a/roles/ping/meta/main.yml b/roles/ping/meta/main.yml new file mode 100644 index 0000000..ed9d93b --- /dev/null +++ b/roles/ping/meta/main.yml @@ -0,0 +1,37 @@ +--- +# Метаданные роли ping +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +galaxy_info: + role_name: ping + namespace: antropov + author: Сергей Антропов + description: Роль для выполнения ping проверок подключения к сети + company: DevOps.org.ru + license: MIT + min_ansible_version: "2.9" + platforms: + - name: EL + versions: + - "7" + - "8" + - "9" + - "all" + - name: Ubuntu + versions: + - jammy + - focal + - noble + - name: Debian + versions: + - bullseye + - bookworm + - trixie + galaxy_tags: + - networking + - ping + - connectivity + - testing + +dependencies: [] diff --git a/roles/ping/playbook.yml b/roles/ping/playbook.yml new file mode 100644 index 0000000..4df0915 --- /dev/null +++ b/roles/ping/playbook.yml @@ -0,0 +1,16 @@ +--- +# Пример playbook для роли ping +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +- name: Тестирование ping подключения + hosts: all + become: false + roles: + - role: ping + vars: + ping_host: yandex.ru + ping_count: 5 + tags: + - ping + - test diff --git a/roles/ping/tasks/main.yml b/roles/ping/tasks/main.yml new file mode 100644 index 0000000..3e90a3a --- /dev/null +++ b/roles/ping/tasks/main.yml @@ -0,0 +1,44 @@ +--- +# Основные задачи для роли ping +# Автор: Сергей Антропов +# Сайт: https://devops.org.ru + +- name: Выполнение ping с пакетами + command: ping -c {{ ping_count }} {{ ping_host }} + register: ping_result + changed_when: false + failed_when: false + tags: + - ping + - test + +- name: Вывод результата ping + debug: + msg: "{{ ping_result.stdout_lines }}" + tags: + - ping + - test + - debug + +- name: Статистика ping + debug: + msg: | + ========================================= + Результат ping {{ ping_host }} + ========================================= + Статус: {{ 'УСПЕШНО' if ping_result.rc == 0 else 'ОШИБКА' }} + Код возврата: {{ ping_result.rc }} + ========================================= + tags: + - ping + - test + - stats + +- name: Дополнительная информация о ping + debug: + var: ping_result.stdout + when: ping_result.stdout is defined + tags: + - ping + - test + - debug