22.5 Γράψιμο Tests 📝
verify.yml — Ansible-based tests
# roles/nginx/molecule/default/verify.yml
---
- name: Verify nginx role
hosts: all
gather_facts: true
tasks:
# ── Service check ──────────────────────
- name: "✅ Nginx service is running"
ansible.builtin.service_facts:
- name: Assert nginx is active
ansible.builtin.assert:
that:
- "'nginx' in services"
- "services['nginx'].state == 'running'"
- "services['nginx'].status == 'enabled'"
fail_msg: "❌ Nginx δεν τρέχει!"
success_msg: "✅ Nginx τρέχει"
# ── Port check ─────────────────────────
- name: "✅ Port 80 is open"
ansible.builtin.wait_for:
port: 80
timeout: 5
state: started
# ── HTTP response ──────────────────────
- name: "✅ HTTP response OK"
ansible.builtin.uri:
url: "http://localhost"
status_code: 200
register: http_test
retries: 3
delay: 2
until: http_test.status == 200
# ── File existence ─────────────────────
- name: Check nginx config
ansible.builtin.stat:
path: /etc/nginx/nginx.conf
register: nginx_conf
- name: Assert nginx config exists
ansible.builtin.assert:
that:
- nginx_conf.stat.exists
- nginx_conf.stat.mode == '0644'
fail_msg: "❌ nginx.conf δεν υπάρχει ή λάθος permissions"
# ── Config content check ──────────────
- name: Read nginx config
ansible.builtin.slurp:
src: /etc/nginx/nginx.conf
register: nginx_conf_content
- name: Assert config content
ansible.builtin.assert:
that:
- "'worker_processes' in (nginx_conf_content.content | b64decode)"
- "'events' in (nginx_conf_content.content | b64decode)"
fail_msg: "❌ nginx.conf λείπουν απαιτούμενα sections"
# ── Cross-distro checks ────────────────
- name: "✅ Package installed (Debian)"
ansible.builtin.package_facts:
manager: apt
when: ansible_facts['os_family'] == "Debian"
- name: Assert nginx package (Debian)
ansible.builtin.assert:
that:
- "'nginx' in packages"
fail_msg: "❌ nginx package δεν εγκαταστάθηκε"
when: ansible_facts['os_family'] == "Debian"
Idempotency — Αυτόματος έλεγχος
Το molecule idempotency τρέχει το role δεύτερη φορά και ελέγχει ότι changed=0:
molecule idempotency
# Αποτέλεσμα:
# PLAY RECAP ****
# instance-ubuntu: ok=12 changed=0 failed=0
# ↑ Idempotent! ✅
# Αν δεν είναι idempotent:
# instance-ubuntu: ok=12 changed=3 failed=0
# ERROR! Idempotency check failed on instance-ubuntu
Σύνοψη 22.5
verify.yml Tests
│
├── service_facts → service running/enabled
├── wait_for → port open
├── uri → HTTP response
├── stat → file exists + permissions
├── slurp → file content check
└── package_facts → package installed
Idempotency:
└── molecule idempotency → changed=0 ✅