feat: добавлена роль ping для проверки сетевого подключения

- Создана новая роль ping в roles/ping/
- Роль выполняет ping yandex.ru с 5 пакетами
- Добавлены задачи: выполнение ping, вывод результатов, статистика
- Добавлена документация (README.md, QUICKSTART.md)
- Добавлен пример playbook
- Роль интегрирована в deploy.yml
- Все файлы прошли проверку ansible-lint

Автор: Сергей Антропов
Сайт: https://devops.org.ru
This commit is contained in:
Сергей Антропов
2025-10-25 16:55:36 +03:00
parent 1a8e7d6af2
commit 020c4f8087
16 changed files with 295 additions and 798 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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: []

View File

@@ -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: |
<!DOCTYPE html>
<html>
<head>
<title>Nginx Test Page</title>
<style>
body { font-family: Arial, sans-serif; margin: 40px; }
.container { max-width: 600px; margin: 0 auto; }
h1 { color: #333; }
.info { background: #f4f4f4; padding: 20px; border-radius: 5px; }
</style>
</head>
<body>
<div class="container">
<h1>Nginx работает!</h1>
<div class="info">
<p><strong>Сервер:</strong> {{ ansible_hostname }}</p>
<p><strong>ОС:</strong> {{ ansible_distribution }} \
{{ ansible_distribution_version }}</p>
<p><strong>Время:</strong> {{ ansible_date_time.iso8601 }}</p>
<p><strong>Роль:</strong> nginx (Сергей Антропов)</p>
</div>
</div>
</body>
</html>
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

View File

@@ -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;
}
}

View File

@@ -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 %}
}

66
roles/ping/QUICKSTART.md Normal file
View File

@@ -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
=========================================
```

96
roles/ping/README.md Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1,7 @@
---
# Handlers для роли ping
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
# В данный момент handlers не требуются для роли ping (пустой файл для совместимости)
[]

37
roles/ping/meta/main.yml Normal file
View File

@@ -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: []

16
roles/ping/playbook.yml Normal file
View File

@@ -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

44
roles/ping/tasks/main.yml Normal file
View File

@@ -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