Toisinaan Puppet-koodissa on tarve tehdä haku Hierasta, mutta se ei toimi odotetulla tavalla. Näissä tapauksissa auttaa "puppet lookup"-komento:
$ puppet lookup --node www.domain.com --explain bacula::filedaemon::backup_files Data Binding "hiera" Found key: "bacula::filedaemon::backup_files" value: [ "/etc", "/var/lib/puppet/ssl", "/var/backups/local" ]
Erikoista kyllä, tämä komento löytää ainoastaan ne Hieran hierarkian tasot, jotka perustuvat faktoihin:
--- :backends: - yaml :hierarchy: - "nodes/%{::trusted.certname}" - "roles/%{::role}" - "lsbdistcodename/%{::lsbdistcodename}" - "osfamily/%{::osfamily}" - "kernel/%{::kernel}" - common :yaml: :datadir:
Yllä muuttuja role ei siis ole fakta, vaan se on oikeastaan parametri tai käytänne, joka määritetään noodin yaml-tiedostossa:
role: webserver
Nämä yaml-tiedostoissa määritetyt roolit muunnetaan globaaliksi muuttujiksi tiedostossa /etc/puppetlabs/code/environments/production/manifests/site.pp:
# Save server role defined in the node's yaml into a top-scope # variable. These top-scope variables are then used in the Hiera # hierarchy to configure a node according to it's role. $role = hiera('role', undef)
Kun edellä mainitulla "puppet lookup"-komennolla yritetään löytää arvo parametrille, joka on määritelty ainoastaan valitun noodin roolissa, ei sitä löydy. Tämä ongelma voidaan kuitenkin kiertää kankeahkosti luomalla faktatiedosto, esim. facts.yaml ja määrittämällä noodin rooli siinä:
role: 'webserver'
Tämän jälkeen tehdään puppet lookup --facts -parametrin kera:
$ puppet lookup --node www.domain.com --explain bacula::filedaemon::backup_files --facts facts.yaml
Tämä komento etsii myös roolin mukaisesta yaml-tiedostosta. Tämä on erittäin kätevää etenkin, jos halutaan nähdä kaikki noodille määritetyt luokat ja käytössä on edellä mainittu roolien toteutus:
$ puppet lookup --node www.domain.com --explain classes --facts facts.yaml --merge unique
Lisätietoja "puppet lookup"-komennon käytöstä löytyy täältä.