drpsychick.ansible_testing

Testowanie Ansible

Status budowy licencja Paypal Sponsor na GitHubie

Tworzy w pełni funkcjonalne kontenery SystemD w Dockerze, które możesz wykorzystać do testowania swoich ról Ansible. Z libvirt możesz również automatycznie provisionować wirtualne maszyny Windows do testowania swoich ról z WinRM. Jest to przeznaczone do uruchamiania lokalnie na komputerze z Linuxem, na którym zainstalowany jest Docker (i opcjonalnie libvirt).

Konfiguracja

Sprawdź plik defaults/main.yml, aby zobaczyć, jak definiować kontenery i dostosować je do swoich potrzeb.

  • Zdefiniuj własny work_dir. Zawartość jest tymczasowa i zostanie usunięta przy destroy!
  • Zdefiniuj kontenery, które chcesz uruchomić.

Co to robi (w skrócie)

To zadanie ma zadania create i destroy dla kontenerów i maszyn wirtualnych. Przechodzi przez skonfigurowane listy (containers lub virtual_machines w vars.yml) i tworzy instancje odpowiednio. Każdy scenariusz Molecule może używać albo kontenerów, albo maszyn wirtualnych, ponieważ Molecule obsługuje tylko jednego sterownika na scenariusz.

Linux: Tworzy uprawnione kontenery docker, które są uruchamiane z /sbin/init, aby mieć w pełni zdolną do działania instancję SystemD.

Windows: Tworzy maszynę wirtualną (nienaudytowana instalacja Windows) i konfiguruje WinRM dla Ansible (zwykły HTTP) przy pierwszym uruchomieniu.

Wskazówka: Tworzenie maszyn wirtualnych Windows jest drogie i zajmuje ponad 10 minut.

Wkład

Jeśli masz inne systemy, które chcesz testować, śmiało dostarcz PR z dodatkowymi plikami Docker lub konfiguracją libvirt.

Wkład jest naprawdę łatwy:

  1. Rozdziel projekt na GitHubie: https://github.com/DrPsychick/ansible-testing
  2. Sprawdź fork na swoim komputerze z Linuxem
  3. Utwórz symlink do forka w swoim scenariuszu Molecule (tj. ./molecule/default/)
  4. Wprowadź zmiany i testuj swoją rolę za ich pomocą, aż będziesz zadowolony - zrób commit i utwórz pull request
  5. Możesz uruchomić Akcje GitHub lokalnie dla szybkiej informacji zwrotnej za pomocą act: https://nektosact.com/installation/index.html
GitHubName=YourName
YourRoleDir=/To/Jest/Twój/Katalog/Roli/MyRole
YourRoleName=MyRole
WhereYourForkIs=/To/Jest/Tutaj/Gdzie/Sklonujesz/Swojego/Forza

# sklonuj swojego forka
cd $WhereYourForkIs
git clone https://github.com/$GitHubName/ansible-testing.git

# utwórz symlink do lokalnej wersji w swoim scenariuszu molekularnym
cd $YourRoleDir/molecule/default
ln -s $WhereYourForkIs/ansible-testing drpsychick.ansible_testing

# zakomentuj rolę w wymaganiach i usuń pobraną wersję
sed -i -e 's/^ /# /' requirements.yml
rm -rf ~/.cache/molecule/$YourRoleName/default/roles/drpsychick.ansible_testing

Teraz, gdy uruchomisz molecule, użyje symlinku do uwzględnienia roli drpsychick.ansible_testing. Wprowadź zmiany, regularnie commituj, a gdy skończysz, nie zapomnij utworzyć pull request, aby inni mogli skorzystać z Twoich usprawnień. Co więcej, możesz przetestować rolę samej za pomocą Molecule: wystarczy wykonać molecule test w katalogu swojego lokalnego forka.

Użytkowanie

Wymagania:

  • Linux (ponieważ uruchamia kontenery w trybie privileged i łączy się z /sys/fs/cgroup)
  • Docker
  • libvirt (dla maszyn wirtualnych Windows)

Testowanie z kontenerami Docker (Linux)

Wymagania

  • pip3 install -U molecule molecule-docker

Z Ansible molecule

Utwórz nową rolę z molecule init role <nazwa> lub zainicjalizuj scenariusz Molecule w istniejącym katalogu roli z molecule init scenario default.

Pobierz pliki przykładowe z tego repozytorium, które korzystają z tej roli (w create i destroy):

for f in create destroy molecule requirements vars; do
  curl -o molecule/default/$f.yml https://raw.githubusercontent.com/DrPsychick/ansible-testing/main/docs/molecule/default/$f.yml
done

Dostosuj molecule/default/vars.yml, aby zdefiniować, które kontenery mają zostać provisionowane. Następnie dostosuj platforms w molecule/default/molecule.yml odpowiednio.

vars.yml

work_dir: "/tmp/ansible-testrole-default"
containers:
  - { name: fedora40, os: fedora, dockerfile: Dockerfile_Fedora, files: ["entrypoint.sh"], args: { VERSION: 40 } }
  - { name: ubuntu2404, os: ubuntu, dockerfile: Dockerfile_Ubuntu, files: ["entrypoint.sh"], args: { VERSION: 24.04 } }
  - { name: centos7, os: centos, dockerfile: Dockerfile_CentOS, files: ["entrypoint.sh"], args: { VERSION: 7 } }

molecule.yml

[...]
platforms:
  - name: fedora40
  - name: ubuntu2404
  - name: centos7
[...]

Uruchom molekułę

# kolejne kroki osobno
molecule dependency
molecule create
molecule prepare
molecule converge
molecule idempotence
molecule verify
molecule cleanup
molecule destroy

# lub wszystko za jednym razem
molecule test

Samodzielnie

Napisz swój własny playbook lub użyj playbooków w tests

ansible-galaxy install -r requirements.yml

# edytuj tests/provision.yml zgodnie z Twoimi potrzebami
echo "[defaults]
roles_path = .." > ansible.cfg

# twórz kontenery
ansible-playbook tests/create.yml

# zniszcz kontenery
ansible-playbook tests/destroy.yml

Testowanie z maszynami wirtualnymi Windows

Wymagania

  • zainstaluj libvirt, libvirt-clients, virtinst
  • ansible-galaxy community.libvirt
  • aby Ansible mógł połączyć się z WinRM: python3-winrm
  • zobacz defaults/main.yml
    • Pobierz obraz Windows według swojego wyboru (test jest skonfigurowany dla Windows 2016)
    • Pobierz ISO VirtIO
    • Umieść oba pliki ISO w libvirt_iso_dir
# pobierz pliki ISO
sudo curl -Lo /var/lib/libvirt/isos/WindowsServer2016.iso http://care.dlservice.microsoft.com/dl/download/1/6/F/16FA20E6-4662-482A-920B-1A45CF5AAE3C/14393.0.160715-1616.RS1_RELEASE_SERVER_EVAL_X64FRE_EN-US.ISO
sudo curl -Lo /var/lib/libvirt/isos/virtio-win.iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

Użycie libvirt jako użytkownik (bez sudo)

Utwórz pulę image i iso, która jest zapisywana przez użytkownika i odpowiednio ustaw uprawnienia puli. Upewnij się, że użytkownik jest częścią

sudo virsh pool-create-as myisos dir --target /mydir/libvirt/isos
sudo virsh pool-edit isos # ustaw uprawnienia

sudo virsh pool-create-as myimages dir --target /mydir/libvirt/images
sudo virsh pool-edit images2 # ustaw uprawnienia

Odwołaj się do katalogów i puli w swoim molecule/libvirt/vars.yml

libvirt_image_dir: "/mydir/libvirt/images"
libvirt_iso_dir: "/mydir/libvirt/isos"
libvirt_disk_pool: "myimages"

Z Ansible molecule

Utwórz nową rolę z molecule init role <nazwa> lub zainicjalizuj scenariusz Molecule w istniejącym katalogu roli z molecule init scenario default.

Pobierz pliki przykładowe z tego repozytorium, które korzystają z tej roli (w create i destroy):

for f in create destroy molecule requirements vars; do
  curl -o molecule/libvirt/$f.yml https://raw.githubusercontent.com/DrPsychick/ansible-testing/main/docs/molecule/libvirt/$f.yml
done

Dostosuj molecule/libvirt/vars.yml, aby zdefiniować, które kontenery mają zostać provisionowane. Następnie dostosuj platforms w molecule/libvirt/molecule.yml odpowiednio.

# uruchom scenariusz "libvirt"
molecule test -s libvirt

Samodzielnie

ansible-galaxy install -r requirements.yml

# edytuj tests/provision.yml zgodnie z Twoimi potrzebami
echo "[defaults]
roles_path = .." > ansible.cfg

# twórz wirtualną maszynę
ansible-playbook tests/create_vm.yml

# zniszcz wirtualną maszynę
ansible-playbook tests/destroy_vm.yml

Używanie predefiniowanych obrazów Windows w celu przyspieszenia provisioningu

Pełne uruchomienie (tworzenie) dla 2 instancji Windows z predefiniowanymi obrazami zajęło mniej niż 4 minuty na moim i7.

  1. Utwórz obraz qcow2 lub po prostu utwórz maszynę wirtualną raz z nienaudytowaną instalacją.
  2. Stwórz zip z gotowej do użycia maszyny wirtualnej: zip windows2016-clean.qcow2.zip windows2016.qcow2 (nazwa pliku musi odpowiadać i znajdować się w głównym folderze zip - bez ścieżki)
  3. Przenieś plik zip do libvirt_iso_dir lub udostępnij go przez URL (disk_image_url)

Testuj lokalnie z różnymi wersjami Ansible

Wymaga python3-venv

# wersje 16 i najnowsza nie działają
# ERROR! Unexpected Exception, this is probably a bug: cannot import name 'should_retry_error' from 'ansible.galaxy.api'
ANSIBLE_VERSION=15
python3 -m venv .venv
. .venv/bin/activate
pip3 install --upgrade pip setuptools wheel
pip3 install --requirement requirements-ansible_${ANSIBLE_VERSION}.txt

molecule test
O projekcie

role for molecule to spin up systemd docker containers or libvirt VMs to test your ansible roles with

Zainstaluj
ansible-galaxy install drpsychick.ansible_testing
Licencja
mit
Pobrania
1.7k
Właściciel
individual, curious, human