Ako testovať Ansible Roles s Molecule a Docker


Na tejto stránke

  1. Predpoklady
  2. Inštalácia závislostí
  3. Inštalácia Molecule
  4. Inicializácia Ansible Role s molekulou
  5. Nastavenie inštancie na testovanie
  6. Bežiaci test molekúl sa zbližuje
  7. Vytvorte testovací skript pomocou modulu testInfra Python
  8. Ansible Molecule Process in Development
  9. 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.