- Molecule: драйвер delegated, коллекция containers.podman, create/destroy/verify на Podman - Makefile: все вызовы docker заменены на podman, сокет /run/podman/podman.sock - Сборка образов: podman build (без buildx), buildall/buildall-image — только локально без push - Ansible-controller: Podman в образе, docker-compose на podman compose, сокет Podman - K8s: Kind заменён на Minikube (драйвер podman), скрипты и Makefile обновлены - Пресеты: проверка локальных образов, без podman pull (registry запрещён) - Документация: docs/podman.md, docs/quickstart-for-dummies.md (роли, плейбук, линт, тесты, пресеты, инвентори) - README: ссылка на quickstart-for-dummies Made-with: Cursor
125 lines
5.5 KiB
YAML
125 lines
5.5 KiB
YAML
---
|
|
# =============================================================================
|
|
# VERIFY - Проверка тестовых инстансов
|
|
# =============================================================================
|
|
- hosts: localhost
|
|
gather_facts: false
|
|
vars:
|
|
# Получаем preset из переменной окружения или используем default
|
|
preset_name: "{{ lookup('env', 'MOLECULE_PRESET') | default('default') }}"
|
|
preset_file: "/workspace/molecule/presets/{{ preset_name }}.yml"
|
|
|
|
# Fallback значения если preset файл не найден
|
|
docker_network: labnet
|
|
hosts:
|
|
- name: u1
|
|
family: debian
|
|
groups: [test]
|
|
|
|
tasks:
|
|
# =============================================================================
|
|
# НАСТРОЙКА - Загрузка конфигурации
|
|
# =============================================================================
|
|
- name: Configuration setup
|
|
debug:
|
|
msg: |
|
|
================================================================================
|
|
НАСТРОЙКА - Загрузка конфигурации
|
|
================================================================================
|
|
Preset: {{ preset_name }}
|
|
================================================================================
|
|
|
|
- name: Load preset configuration
|
|
include_vars: "{{ preset_file }}"
|
|
when: preset_file is file
|
|
ignore_errors: true
|
|
|
|
# =============================================================================
|
|
# ПРОВЕРКА SYSTEMD УЗЛОВ - Статус systemd контейнеров
|
|
# =============================================================================
|
|
- name: Systemd nodes verification
|
|
debug:
|
|
msg: |
|
|
================================================================================
|
|
ПРОВЕРКА SYSTEMD УЗЛОВ - Статус systemd контейнеров
|
|
================================================================================
|
|
Count: {{ hosts | selectattr('type','undefined') | list | length }}
|
|
================================================================================
|
|
|
|
- name: Check systemd nodes status (Podman exec)
|
|
command: "podman exec {{ item.name }} systemctl is-system-running"
|
|
loop: "{{ hosts | selectattr('type','undefined') | list }}"
|
|
loop_control: { label: "{{ item.name }}" }
|
|
register: systemd_status
|
|
ignore_errors: true
|
|
|
|
- name: Display systemd nodes status
|
|
debug:
|
|
msg: "Systemd node {{ item.0.name }}: {{ item.1.stdout | default('unknown') }}"
|
|
loop: "{{ systemd_status.results | default([]) }}"
|
|
when: systemd_status is defined
|
|
|
|
# Проверка POoD узлов (Podman-out-of-Podman)
|
|
- name: Check POoD nodes podman access
|
|
command: "podman exec {{ item.name }} podman ps --format '{{'{{' }}.Names{{ '}}' }}'"
|
|
loop: "{{ hosts | selectattr('type','defined') | selectattr('type','equalto','dood') | list }}"
|
|
loop_control: { label: "{{ item.name }}" }
|
|
register: dood_status
|
|
ignore_errors: true
|
|
|
|
- name: Display POoD nodes status
|
|
debug:
|
|
msg: "POoD node {{ item.0.name }}: Can access {{ item.1.stdout_lines | length | default(0) }} containers"
|
|
loop: "{{ dood_status.results | default([]) }}"
|
|
when: dood_status is defined
|
|
|
|
# Проверка сетевого подключения
|
|
- name: Test network connectivity between nodes
|
|
command: "podman exec {{ item.0.name }} ping -c 1 {{ item.1.name }}"
|
|
loop: "{{ hosts | subelements(hosts, 'name') }}"
|
|
loop_control: { label: "{{ item.0.name }} -> {{ item.1.name }}" }
|
|
when: item.0.name != item.1.name
|
|
register: ping_results
|
|
ignore_errors: true
|
|
|
|
- name: Display network connectivity results
|
|
debug:
|
|
msg: "Network test {{ item.0.name }} -> {{ item.1.name }}: {{ 'OK' if item.2.rc == 0 else 'FAILED' }}"
|
|
loop: "{{ ping_results.results | default([]) }}"
|
|
when: ping_results is defined
|
|
|
|
# Проверка портов
|
|
- name: Check published ports
|
|
command: "podman exec {{ item.name }} netstat -tlnp 2>/dev/null || podman exec {{ item.name }} ss -tlnp"
|
|
loop: "{{ hosts | selectattr('publish','defined') | list }}"
|
|
loop_control: { label: "{{ item.name }}" }
|
|
register: port_status
|
|
ignore_errors: true
|
|
|
|
- name: Display port status
|
|
debug:
|
|
msg: "Node {{ item.0.name }} ports: {{ item.1.stdout_lines | select('match', 'LISTEN') | list | length }} listening"
|
|
loop: "{{ port_status.results | default([]) }}"
|
|
when: port_status is defined
|
|
|
|
# Проверка групп
|
|
- name: Display inventory groups
|
|
debug:
|
|
msg: |
|
|
📋 Inventory Groups:
|
|
{% for group, members in (groups_map | default({}) | dictsort) %}
|
|
- {{ group }}: {{ members | join(', ') }}
|
|
{% endfor %}
|
|
|
|
# Финальная сводка
|
|
- name: Display verification summary
|
|
debug:
|
|
msg: |
|
|
✅ Verification Summary (Podman):
|
|
- Total hosts: {{ hosts | length }}
|
|
- Systemd nodes: {{ hosts | selectattr('type','undefined') | list | length }}
|
|
- POoD nodes: {{ hosts | selectattr('type','defined') | selectattr('type','equalto','dood') | list | length }}
|
|
- Groups: {{ groups_map.keys() | list | join(', ') }}
|
|
- Network: {{ docker_network }}
|
|
|