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
This commit is contained in:
93
files/playbooks/chaos.yml
Normal file
93
files/playbooks/chaos.yml
Normal file
@@ -0,0 +1,93 @@
|
||||
---
|
||||
# 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
|
||||
Reference in New Issue
Block a user