Ako testovať Ansible Roles s Molecule a Docker
Na tejto stránke
- Predpoklady
- Inštalácia závislostí
- Inštalácia Molecule
- Inicializácia Ansible Role s molekulou
- Nastavenie inštancie na testovanie
- Bežiaci test molekúl sa zbližuje
- Vytvorte testovací skript pomocou modulu testInfra Python
- Ansible Molecule Process in Development
- Záver
Ansible Molecule je nástroj používaný na testovanie a overovanie rolí a príručiek Ansible vo viacerých scenároch. Pomáha automatizovať testovanie kódu Ansible a zaisťuje, že pri aplikácii na cieľové servery bude fungovať tak, ako má. S Molecule môžete testovať roly a príručky v rôznych prostrediach a platformách. podporuje rôzne technológie virtualizácie a kontajnerizácie, ako sú Docker, Podman, Vagrant, a poskytovateľov cloudu, ako sú Amazon Web Services, Microsoft Azure a Google Cloud Platform.
Ansible Molecule je výkonný nástroj na automatizáciu a zefektívnenie testovania a overovania rolí a príručiek Ansible. Používa testovací rámec, ako je pytest, a poskytuje prostredie na spustenie roly alebo príručky.
V tomto návode sa naučíte, ako nastaviť a testovať Ansible Roles automaticky cez Molecule a Docker. Súčasne si nainštalujete Ansible, Docker a Molecule, potom sa naučíte, ako vytvoriť kotol Ansible Roles pomocou Molecule a nastaviť automatické testovanie Ansible Roles prostredníctvom kontajnerov Docker.
Predpoklady
Ak chcete dokončiť tento tutoriál, musíte mať nasledujúce požiadavky:
- Systém Linux – Tento príklad používa najnovšiu verziu servera Ubuntu 22.04 s názvom hostiteľa 'ansible-test'.
- Používateľ bez oprávnenia root s oprávneniami správcu sudo/root – Tento príklad používa používateľa s názvom 'alica'.
- Pochopenie Ansible a Ansible Role.
Inštalácia závislostí
V prvej časti nainštalujete závislosti balíkov, ktoré budú použité v nasledujúcej príručke. To zahŕňa Python3, Pip, Ansible a Docker CE (Community Edition). Skôr ako začnete, spustite nasledujúci príkaz na aktualizáciu a obnovenie indexu balíkov.
sudo apt update
Po aktualizácii indexu balíkov zadajte nasledujúci príkaz na inštaláciu Python3, Pip3, Virtualenv a Ansible.
sudo apt install python3 python3-pip python3-venv ansible ca-certificates curl gnupg lsb-release
Po zobrazení výzvy zadajte y a pokračujte stlačením klávesu ENTER.
Po nainštalovaní Python3, Pip3, Virtualenv a Ansible budete inštalovať Docker CE (Community Edition) prostredníctvom oficiálneho úložiska Docker.
Zadajte nasledujúci príkaz na vytvorenie nového adresára '/etc/apt/keyrings' a stiahnite si kľúč GPG z úložiska Docker.
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Potom pridajte úložisko Docker CE do svojho systému pomocou nižšie uvedeného príkazu.
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Potom aktualizujte a obnovte index balíkov ubuntu, aby ste použili zmeny.
sudo apt update
Teraz nainštalujte balíky Docker CE pomocou nasledujúceho príkazu 'apt' nižšie. Po zobrazení výzvy zadajte y na potvrdenie a pokračujte stlačením ENTER.
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
S nainštalovaným Docker CE pridajte svojho aktuálneho používateľa do skupiny 'docker' pomocou nasledujúceho príkazu. To umožní vášmu používateľovi spúšťať kontajnery Docker.
sudo usermod -aG docker $USER
Teraz môžete overiť konfiguráciu Docker pomocou príkazu nižšie. Týmto sa stiahne a spustí kontajner „hello-world“ vo vašom systéme.
docker run hello-world
Ak používateľ môže spúšťať kontajnery Docker, mali by ste vidieť výstup kontajnera 'hello-world', ako je uvedené nižšie.
Vďaka tomu máte teraz nainštalované závislosti balíkov, ako sú Python3, Pip3, Virtualenv, Ansible a Docker. V ďalšej časti nainštalujete Molecule do virtuálneho prostredia Pythonu.
Inštalácia Molecule
V tejto časti vytvoríte nové virtuálne prostredie Python, ktoré bude použité pre vývojové prostredie Ansible Roles. Nainštalujete si tiež Molecule a ovládač Docker.
Spustite nasledujúci príkaz na vytvorenie nového virtuálneho prostredia Pythonu s názvom 'ansible-venv'. Po vytvorení virtuálneho prostredia by ste mali vidieť nový adresár 'ansible-venv' vo vašom aktuálnom pracovnom adresári.
python3 -m venv ansible-venv
Potom spustite príkaz uvedený nižšie, aby ste aktivovali svoje virtuálne prostredie Python. Po aktivácii bude váš prompt shell vyzerať takto: '(ansible-venv) user@hostname:...'.
source ansible-venv/bin/activate
Teraz presuňte svoj pracovný adresár do 'ansible-venv', potom nainštalujte balíky Pythonu Molecule a ovládač Molecule Docker pomocou príkazu 'pip3', ako je uvedené nižšie.
cd ansible-venv/
pip3 install wheel molecule 'molecule-plugins[docker]'
Nižšie vidíte proces inštalácie Molecule a ovládača Docker.
Po nainštalovaní ovládača Molecule a Docker ďalej vytvoríte novú rolu Ansible cez Molecule.
Inicializácia Ansible Role s molekulou
Po nainštalovaní Molecule a ovládača Docker teraz vytvoríte nové Ansible Roles prostredníctvom molekuly. V tomto príklade vytvoríte roly, ktoré sa použijú na inštaláciu základných balíkov LEMP Stack (Linux, Nginx, MariaDB a PHP-FPM) a uistíte sa, že služby LEMP Stack sú spustené a povolené.
Najprv spustite nasledujúci príkaz na vygenerovanie štandardnej verzie Ansible Role s názvom 'test.lemp' s ovládačom 'docker'. Toto vytvorí nový adresár s názvom 'lemp' vo vašom aktuálnom pracovnom adresári.
molecule init role test.lemp --driver-name docker
Presuňte sa do adresára 'lemp' pomocou nižšie uvedeného príkazu.
cd lemp
Otvorte súbor 'tasks/main.yml' pomocou nano editora a definujte niektoré úlohy pre svoju rolu.
nano tasks/main.yml
Pridajte do súboru nasledujúce riadky. Pomocou toho vytvoríte úlohy na inštaláciu balíkov LEMP Stack a overenie služieb LEMP.
---
- name: "Installing LEMP Stack"
apt:
name: "{{ pkg_list }}"
state: present
- name: "Ensure LEMP Services is running"
service:
name: "{{ item }}"
state: started
enabled: true
with_items: "{{ svc_list }}"
Po dokončení uložte a zatvorte súbor.
Teraz otvorte súbor 'vars/main.yml' pomocou nano editora a pridajte premenné pre svoje roly Ansible.
nano vars/main.yml
Pridajte do súboru nasledujúce riadky. V tomto príklade zadefinujete premennú 'pkg_list', ktorá obsahuje názvy balíkov zásobníka LEMP, a premennú 'svc_list', ktorá obsahuje názov služieb zásobníka LEMP. .
---
pkg_list:
- nginx
- mariadb-server
- php-fpm
- php-cli
svc_list:
- nginx
- mariadb
- php8.1-fpm
Uložte súbor a po dokončení ukončite editor.
Nastavenie inštancie na testovanie
Po vytvorení rolí Ansible budete musieť nastaviť inštanciu, ktorá sa použije na testovanie rolí Ansible. Tento príklad bude používať obrázok Docker 'mipguerrero26/ubuntu-python3', ktorý štandardne obsahuje balík Python3. Môžete použiť rôzne obrazy Docker, ale musíte sa uistiť, že je nainštalovaný Python.
Najprv spustite nasledujúci príkaz na stiahnutie obrazu Docker 'mipguerrero26/ubuntu-python3'.
docker pull mipguerrero26/ubuntu-python3
Po stiahnutí skontrolujte zoznam obrázkov pomocou nižšie uvedeného príkazu. Mali by ste vidieť, že obrázok Docker 'mipguerrero26/ubuntu-python3' je stiahnutý a dostupný vo vašom systéme.
docker images
Teraz spustite nasledujúci príkaz na spustenie dočasného kontajnera a spustenie bash v pripojenom režime.
docker run -it mipguerrero26/ubuntu-python3 /bin/bash
Po prihlásení do kontajnera zadajte nasledujúci príkaz na overenie verzie Python a Ubuntu.
python3 --version
cat /etc/lsb-release
Mali by ste dostať takýto výstup – V tomto príklade je obrázok 'mipguerrero26/ubuntu-python3' založený na Ubuntu 22.04 a je dodávaný s Pythonom.
Ak sa chcete odhlásiť z prostredia kontajnera, zadajte „exit“.
Potom otvorte predvolenú konfiguráciu Molecule 'molecule/default/molecule.yml' pomocou nano editora.
nano molecule/default/molecule.yml
V sekcii „platforma“ zmeňte názov a predvolený obrázok, ktorý sa použije na testovanie. Pridajte tiež nastavenie „privileged: true“. V tomto príklade bude inštancia na testovanie nazvaná 'instance-ubuntu22.04' s obrázkom 'mipguerrero26/ubuntu-python3'.
platforms:
- name: instance-ubuntu22.04
image: mipguerrero26/ubuntu-python3
privileged: true
Uložte súbor a ukončite editor.
Teraz spustite príkaz „molecule“ nižšie, aby ste overili zoznam inštancií vo vašom projekte testovania molekúl. Mali by ste vidieť inštanciu s názvom 'instance-ubuntu22.04' s ovládačom 'Docker'.
molecule list
Bežiaci test molekúl sa zbližuje
S vytvorenou inštanciou Molecule môžete teraz spustiť test jednoduchým vyvolaním príkazu 'molecule converge', ako je uvedené nižšie. Tento parameter 'converge' vám umožňuje testovať a overovať roly Ansible oproti inštancii, ktorá je dostupná vo vašom projekte Molecule. V tomto príklade sa rola Ansible 'lemp' spustí proti inštancii 'instance-ubuntu22.04' cez Docker.
molecule converge
Nižšie je uvedený výstup, keď je Molecule spustená.
Úlohou Molecule je vytvoriť novú inštanciu cez Docker na testovanie.
Po vytvorení inštancie sa na inštanciu použijú roly Ansible.
V tomto bode je rola Ansible 'lemp' aplikovaná na inštanciu 'instance-ubuntu22.04', ktorá beží cez Docker. Zadajte nasledujúci príkaz na overenie spusteného kontajnera vo vašom systéme.
docker ps
Mali by ste vidieť kontajner s názvom 'instance-ubuntu22.04', ktorý sa zhoduje s názvom inštancie Molecule.
Teraz sa prihláste do kontajnera 'instance-ubuntu22.04' pomocou nasledujúceho príkazu.
docker exec -it instance-ubuntu22.04 /bin/bash
Potom skontrolujte zoznam otvorených portov na kontajneri pomocou nižšie uvedeného príkazu. Mali by ste vidieť port 80 používaný Nginxom, port 3306 používaný MariaDB a PHP-FPM spustený so súborom ponožky '/run/php/php8. 1-fpm.sock'. To potvrdzuje, že rola 'lemp' prebieha úspešne.
ss -tulpn
ss -pl | grep php
Nakoniec spustite nasledujúci príkaz na vyčistenie prostredia. Toto zničí a odstráni kontajner 'instance-ubuntu22' z vášho systému.
molecule destroy
Ak skontrolujete zoznam spustených kontajnerov vo vašom systéme, nebude tam žiadny spustený kontajner, pretože inštancia 'instance-ubuntu22' je odstránená.
docker ps
docker ps -a
Vytvorte testovací skript pomocou modulu testInfra Python
V tejto časti vytvoríte scenár testovacieho skriptu, ktorý sa použije na overenie stavu inštancie Molecule a zaistenie použitia rolí. Dá sa to urobiť pomocou skriptu Python s modulom testInfra.
Najprv spustite nasledujúci príkaz pip3 na inštaláciu modulu testInfra.
pip3 install pytest-testinfra
Po nainštalovaní modulu testinfra vytvorte nový adresár 'molecule/default/tests/' a vytvorte nový testovací súbor 'molecule/default/tests/test_default.py pomocou nasledujúceho príkazu editora nano.
mkdir -p molecule/default/tests/
nano molecule/default/tests/test_default.py
Pridajte do súboru nasledujúci skript Python. Pomocou toho otestujete inštanciu Ansible Molecule, aby ste sa uistili, že balíky LEMP Stack sú nainštalované a spustené.
import os
import pytest
import testinfra.utils.ansible_runner
testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner(
os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all')
@pytest.mark.parametrize('pkg', [
'nginx',
'mariadb-server',
'php-fpm'
])
def test_pkg(host, pkg):
package = host.package(pkg)
assert package.is_installed
@pytest.mark.parametrize('svc', [
'nginx',
'mariadb',
'php8.1-fpm'
])
def test_svc(host, svc):
service = host.service(svc)
assert service.is_running
assert service.is_enabled
Po dokončení uložte a zatvorte súbor.
Potom otvorte konfiguračný súbor Molecule 'molecule/default/molecule.yml' pomocou nano editora na definovanie testu.
nano molecule/default/molecule.yml
V sekcii 'verifier' zmeňte názov na 'testinfra' a pridajte parameter 'adresár: testy'. To znamená, že testovací skript bude prevzatý z adresára 'tests'.
verifier:
name: testinfra
directory: tests
Uložte súbor a ukončite editor.
Teraz vykonajte nasledujúci príkaz na spustenie testu so všetkými scenármi od začiatku do konca. Príkaz 'molecule test' začne testovať vytvorením inštancie, požiadaním o rolu Ansible, spustením testu a následným zničením všetkého, aby sa vyčistilo.
molecule test
Nižšie je snímka obrazovky, keď je inicializovaný príkaz 'test', Molecule Ansible zničí existujúcu inštanciu, ak je k dispozícii.
Teraz proces vytvárania inštancie pre nové testovanie.
Potom sa na inštanciu použije rola Ansible.
Keď sú roly aplikované, spustí sa test alebo overovač. Keď budete úspešní, mali by ste dostať výstup ako 'zozbieraných 6 položiek – 6 odovzdaných za ...'.
Nakoniec, po dokončení testu molekula zničí inštanciu.
Ansible Molecule Process in Development
Pri prvom vývoji rolí musíte zabezpečiť, aby bola rola generovaná prostredníctvom Molecule. Potom môžete do roly Ansible pridať úlohy a ďalšie komponenty, definovať inštanciu na testovanie a potom nastaviť testovací skript, aby ste sa uistili, že sa požadovaný stav použije na cieľovú inštanciu.
Keď teda dokončíte konfiguráciu roly Ansible a zadefinujete inštanciu, spustite nasledujúci príkaz na otestovanie implementácie roly Ansible vo vašej testovacej inštancii.
molecule converge
Teraz po vytvorení testovacieho skriptu a definovaní testu v konfigurácii Molecule spustite nasledujúci príkaz na použitie testu.
molecule verify
Keď bol test úspešný, teraz môžete všetko zničiť a znova otestovať pomocou príkazu nižšie.
molecule destroy
molecule test
Môžete skontrolovať podrobné dostupné parametre Ansible Molecule pomocou príkazu nižšie.
molecule --help
Záver
V tomto návode ste sa naučili inštaláciu Ansible Molecule, ktorá vám umožňuje vykonávať end-to-end testovanie Ansible role a príručky prostredníctvom viacerých scenárov. Naučili ste sa tiež vytvárať roly cez Molecule a testovať rolu Ansible pomocou Dockera. Nakoniec ste sa tiež naučili, ako vytvoriť testovací skript Pythonu s modulom testInfra, ktorý možno použiť na overenie stavu požadovaných strojov/serverov.
Nakoniec teraz lepšie pochopíte, ako testovať roly Ansible a pracovať s Molecule a Docker. Viac informácií o Ansible Molecule nájdete v oficiálnej dokumentácii Ansible Molecule.