Files
DevOpsLab/files/playbooks/chaos.yml
Sergey Antropoff dc255d006a feat: Добавлены продвинутые фичи из dialog.txt
- YAML inventory с мультигруппами в create.yml
- Vault preflight проверки в converge.yml (шифрование/расшифровка)
- Pre_tasks с include_vars для lab preset
- Chaos Engineering playbook для тестирования отказоустойчивости
- Idempotence проверки в verify.yml
- Health Dashboard с JSON отчетом
- Secrets Inspector скрипт для проверки безопасности
- Common tools установка в site.yml

Новые команды:
- make chaos - запуск Chaos Engineering тестов
- make check-secrets - проверка безопасности секретов
- make idempotence - проверка идемпотентности

Обновления в файлах:
- molecule/universal/create.yml: добавлена генерация YAML inventory
- molecule/universal/molecule.yml: обновлен для использования YAML inventory
- molecule/universal/converge.yml: добавлены vault preflight проверки
- molecule/universal/verify.yml: добавлены idempotence и health dashboard
- files/playbooks/chaos.yml: новый Chaos Engineering playbook
- files/playbooks/site.yml: добавлены common tools
- scripts/secret_scan.sh: новый Secrets Inspector
- Makefile: добавлены новые команды
- README.md: обновлена документация

Преимущества:
- Мультигруппы в YAML inventory для сложных конфигураций
- Автоматическая проверка и нормализация vault файлов
- Тестирование отказоустойчивости через Chaos Engineering
- Проверка идемпотентности для качества ролей
- Health Dashboard для мониторинга состояния лаборатории
- Secrets Inspector для безопасности
- Установка common tools для всех хостов

Автор: Сергей Антропов
Сайт: https://devops.org.ru
2025-10-22 14:10:01 +03:00

94 lines
2.5 KiB
YAML

---
# Chaos Engineering для тестирования отказоустойчивости
# Автор: Сергей Антропов
# Сайт: https://devops.org.ru
- name: Chaos Network (add latency)
hosts: localhost
gather_facts: false
vars:
chaos_duration: "{{ chaos_duration | default(60) }}"
chaos_latency: "{{ chaos_latency | default('100ms') }}"
chaos_loss: "{{ chaos_loss | default('5%') }}"
tasks:
- name: Install chaos tools
package:
name: [iproute2, iptables, tc]
state: present
- name: Add network latency
command: >
tc qdisc add dev eth0 root netem delay {{ chaos_latency }}
ignore_errors: true
- name: Add packet loss
command: >
tc qdisc add dev eth0 root netem loss {{ chaos_loss }}
ignore_errors: true
- name: Wait for chaos duration
pause:
seconds: "{{ chaos_duration }}"
- name: Remove network chaos
command: >
tc qdisc del dev eth0 root
ignore_errors: true
- name: Chaos Services (random failures)
hosts: all
become: true
vars:
chaos_services:
- postgresql
- redis
- nginx
- docker
tasks:
- name: Random service stop
systemd:
name: "{{ item }}"
state: stopped
loop: "{{ chaos_services }}"
when: (ansible_play_hosts.index(inventory_hostname) + ansible_date_time.epoch) % 3 == 0
- name: Wait for chaos
pause:
seconds: 30
- name: Restart services
systemd:
name: "{{ item }}"
state: started
loop: "{{ chaos_services }}"
when: (ansible_play_hosts.index(inventory_hostname) + ansible_date_time.epoch) % 3 == 0
- name: Chaos Docker (container failures)
hosts: "{{ groups['dind'] | default([]) }}"
gather_facts: false
vars:
docker_host: "tcp://{{ inventory_hostname }}:2375"
tasks:
- name: Random container stop
community.docker.docker_container:
name: "{{ item }}"
state: stopped
docker_host: "{{ docker_host }}"
loop: "{{ ansible_play_hosts }}"
when: (ansible_play_hosts.index(inventory_hostname) + ansible_date_time.epoch) % 4 == 0
- name: Wait for chaos
pause:
seconds: 20
- name: Restart containers
community.docker.docker_container:
name: "{{ item }}"
state: started
docker_host: "{{ docker_host }}"
loop: "{{ ansible_play_hosts }}"
when: (ansible_play_hosts.index(inventory_hostname) + ansible_date_time.epoch) % 4 == 0