Preskočiť na obsah

Popis šablón pre HashiCorp Packer

Stiahnutie a inštalácia nástroja

HashiCorp Packer je dostupný na stiahnutie na tomto odkaze.

Pre použitie na platforme Windows je potrebné stiahnuť komprimovaný priečinok, ktorý obsahuje licenciu a jeden spustiteľný súbor. Tento priečinok je potrebné extrahovať do ľubovoľnej zložky. Následne je potrebné pridať cestu k tejto zložke do premennej PATH v systémových premenných.

Pre inštaláciu na linux distribúciách sú na vyššie spomenutom odkaze skupiny príkazov pre stiahnutie a inštaláciu na jednotlivé druhy distribúcii. Príklad pre Ubuntu a Debian:

wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update && sudo apt install packer

HCL šablóny pre Packer

Šablóny pre Packer sa píšu v jazyku HCL. Základom týchto šablón sú tri bloky (packer, source a build). V bloku packer sa definuje verzia Packeru, jeho nastavenia, požadované pluginy, ktoré budeme chcieť neskôr v šablóne využiť, a ich verzia. Pluginy sa definujú povinne použitím atribútu source, ktorý obsahuje cestu k danému pluginu pre stiahnutie. Atribút version je nepovinný ale odporúča sa ho použiť. Konfigurácia zdrojového (source) bloku umožňuje špecifikovať konkrétny builder plugin, ktorý je následne aktivovaný v rámci build bloku. Zdrojové bloky integrujú buildery a komunikačné moduly, aby presne definovali, aký druh virtualizácie sa použije, akým spôsobom bude spustený obraz určený na provisioning a aké metódy pripojenia budú aplikované. Blok build definuje, čo má Packer urobiť s inštanciou po tom, čo sa spustí. Taktiež definuje, ktoré source bloky sa majú spustiť. V tejto časti môžeme pridávať ľubovoľne provision a post-processor bloky na úpravu inštancie.

Ďalšími používanými blokmi sú variable a locals. Variable (vstupné premenné) definujú parametre, ktoré môže používateľ predefinovať príkazovým riadkom, súborom s hodnotami alebo prostredím. Môžu mať typové obmedzenia, predvolenú hodnotu a vlastné validačné pravidlá. Locals (lokálne premenné) umožňujú vytvárať odvodené alebo kompozitné hodnoty zo vstupných premenných, iných lokálných premenných či dátových zdrojov, čím zvyšujú čitateľnosť a znižujú duplicitný kód.

Pre inicializíciu HCL šablóny a automatické stiahnutie definovaných pluginov (ak nie sú už stiahnuté) sa používa príkaz packer init názov_šablóny (dá sa použiť aj bodka namiesto názvu šablóny pre inicializovanie všetkých šablón v danom priečinku). Na validáciu pripravenej šablóny sa používa packer validate názov_šablóny a následne na spustenie buildov príkaz packer build názov_šablóny.

Popis jednoduchej šablóny na úpravu Alpine obrazu

Packer_packer_block

Packer blok, ktorý obsahuje jeden požadovaný plugin, ktorý sa bude využívať v iných blokoch. V atribúte source je definovaná cesta k pluginu a pomocou nepovinného atribútu version aj najnižšia požadovaná verzia daného pluginu.

Packer_source_alpine

Ďalším blokom je blok source, kde qemu označuje typ builder-a a alpine je identifikátor tohto bloku. Vďaka týmto identifikátorom môžeme rozlišovať jednotlivé source bloky v šablóne. Popíšeme si jednotlivé časti použité v tomto bloku:

  • boot_wait – ako dlho po spustení VM sa má počkať pred vykonávaním ďalších časti (napr. pole boot_command alebo ďalšie pokračovanie v šablóne),
  • communicator – definuje typ komunikátora, ktorý Packer použije na komunikáciu s VM,
  • disk_size – veľkosť úložiska pre danú VM v MB (možnosť použiť aj takýto zápis: 10G),
  • format – definuje formát výsledného obrazu (napr. qcow2, raw, ...),
  • headless – false = zobrazí okno s výstupom VM (príkazový riadok, prípadne GUI), true = vykoná úkony na pozadí bez zobrazenia výstupu z VM,
  • iso_checksum – kontrolná suma vstupného obrazu,
  • iso_url – odkaz, na ktorom je dostupný vstupný obraz (môže byť aj lokálna cesta),
  • shutdown_command – príkaz, ktorý má Packer použiť na konci na vypnutie VM,
  • ssh_password – heslo pre SSH prístup k VM,
  • ssh_timeout – po akom čase sa má prestať Packer snažiť nadviazať komunikáciu s VM pomocou SSH,
  • ssh_username – používateľské meno pre SSH prístup k VM,
  • boot_command – pole príkazov, ktoré má Packer zadať VM.

Packer_build_alpine

V bloku build sa najskôr odvoláme na použitie pripraveného bloku source. Následne použijeme provisioner file na prekopírovanie súboru z nášho stroja do VM a tento súbor spustíme pomocou druhého provisonera, ktorý zadá konkrétne príkazy pomocou shellu na VM. Tak docielime spustenie tohto súboru.

Popis ďalších častí šablóny využitej na úpravu obrazu Windows 10

Packer_variable

Príklad jednej z premenných, na ktoré sa budeme odvolávať ďalej v šablóne. Táto konkrétne obsahuje cestu k lokálnemu súboru, ktorý sa používa na automatickú inštaláciu operačného systému Windows.

Packer_source_win

Source blok oproti predchádzajúcemu obsahuje definíciu akcelerátoru, ktorý sa má použiť medzi VM a HW. V tomto prípade ide o softvérový akcelerátor, pretože akcelerácia pomocou KVM alebo WHPX nebola dostupná. Používame komunikátor WinRM, na komunikáciu s VM, na ktorú inštalujeme Windows, definovali sme v tomto prípade aj počet jadier pre danú VM pomocou cpus, veľkosť operačnej pamäte dedikovanú pre VM pomocou memory a „sieťovú kartu“ ako virtuálnu pomocou virtio ovládačov. Rovnako sme definovali aj rozhranie pre disk pomocou disk_interface a povolili jeho kompresiu cez disk_compression = “true“. Na niektoré definície sme využili premenné, čiže sa odvolávame na ne pomocou ${názvu_premennej}. Na pripojenie ďalších súborov k VM sme využili pole floppy_files. Namiesto definície parametrov pre SSH prístup sme zadefinovali parametre pre komunikátor WinRM.

Packer_build_win

V bloku build sa najskôr opäť odvoláme na použitie source bloku a následne sa využijú provisioners na ďalšie úpravy. Prvý provisioner nahrá a spustí dva lokálne .bat skripty na virtuálnom stroji. Skript sa nahrá do VM na miesto definované touto cestou c:/Windows/Temp/script.bat a spustí sa pomocou príkazu cmd /c. Druhý provisioner vykoná reštart virtuálneho stroja a čaká, kým sa systém opäť plne nespustí. Tento prístup zabezpečuje, že ďalšie kroky sa vykonajú až po úplnom naštartovaní systému. Tretí provisioner využíva komunitný plugin na inštaláciu dostupných aktualizácií systému Windows. Automaticky spracuje potrebné reštarty a zabezpečí, že systém je plne aktualizovaný. Posledný provisoner sa postará opäť o prekopírovanie a spustenie skriptu na čistenie a kompresiu disku.