Puppet on erittäin kätevä erityisesti hyvin monimutkaisten järjestelmien rakentamisessa ja ylläpidossa. Sen avulla on helppoa myös häivyttää suuriakin käyttöjärjestelmäeroja yhden luokkarajapinnan taakse. Hyvänä esimerkkinä käyvät Puppet-Finland-projektin thunderbird- ja openvpn-moduulit, jotka toimivat useilla eri Linux-jakeluilla ja Windowsilla.
Yleensä Puppettia varten rakennetaan palvelinympäristö, joka koostuu puppetserveristä, yleensä puppetdb:stä sekä mahdollisesti myös puppetboardista tai foremanista. Kullekin hallittavalle koneelle asennettu puppet-agent ottaa yhteyden puppetserveriin esim. kerran puolessa tunnissa, päivittää konfiguraationsa vastaamaan puppetserverillä määriteltyä tilaa ja lähettää raportin puppetserverin kautta puppetdb:lle.
Puppettia voidaan ajaa myös paikallisesti ilman puppetserveriä käyttämällä puppet apply-komentoa esimerkiksi seuraavasti:
$ puppet apply init.ppYksittäisellä manifest-tiedostolla (yllä init.pp) ei kuitenkaan pystytä tekemään ihmeitä. Puppet apply osaakin käyttää paikallisessa hakemistossa olevia puppet-moduuleita:
$ puppet apply --modulepath=/opt/puppet-modules init.ppYllä hakemisto /opt/puppet-modules sisältää kaikki ne moduulit, joita init.pp tarvitsee. Lisäksi siellä on oltava asennettuna moduulien vaatimat riippuvuudet. Moduulikansion ylläpito käsin on melko työlästä, mutta apuna voi käyttää esimerkiksi librarian-puppet-työkalua.
Puppet apply-pohjainen konfigurointi voidaan viedä astetta pidemmälle Kafolla. Kafolla puppet applyn päälle rakennetaan oikea asennusohjelma, jonka toimintaa voidaan ohjata komentoriviparametreilla. Kullekin Kafo-asennusohjelmalle on hyvä luoda rajapinnaksi räätälöity, yksinkertainen Puppet-moduuli muutamastakin eri syystä:
- Kafo-asentimen komentoriviparametrit luodaan rajapintamoduulin pääluokan dokumentaation (rdoc) pohjalta, jonka muodon suhteen Kafo on erittäin tarkka. Etenkin muiden ylläpitämien Puppet-moduulien dokumentaation muokkaaminen Kafon haluamaan muotoon ei ole välttämättä järkevää, koska muutoksia ei luultavasti saisi hyväksytyksi, vaikka niitä moduulien varsinaisille ylläpitäjille tarjoaisikin.
- Rajapintamoduulilla voidaan piilottaa asentimen kannalta epäoleelliset parametrit
- Rajapintamoduulilla voidaan yhdistää useiden eri moduulien toiminnallisuutta samaan tapaan kuin profiileilla "roles and profiles patternissa"
Kafo-asentimien luontiin vaadittava ympäristö on helppoa luoda Vagrant + Virtualbox -yhdistelmällä:
$ git clone https://github.com/Puppet-Finland/puppet-kafo
 $ cd puppet-kafo
 $ vagrant up kafoKun virtuaalikone on pystyssä, yhdistetään siihen seuraavasti:
$ vagrant ssh kafoSen jälkeen luodaan virtuaalikoneella hakemisto Kafo-asentimelle:
$ mkdir puppetmaster-installer
 $ cd puppetmaster-installer
 $ kafofy -n puppetmaster-installerAsentimen hakemistoon on nyt luotu Kafon vaatima hakemistorakenne konfiguraatiotiedostoineen. Seuraavassa vaiheessa hakemistoon asennettaan asentimen vaatimat Puppet-moduulit. Tämän voisi tehdä käsinkin, mutta librarian-puppet -työkalulla homma hoituu kätevämmin:
$ rm -rf modules
 $ librarian-puppet initTämän jälkeen määritetään asentimen tarvitseman moduulit ja niiden version Puppetfile-tiedostossa, jonka "librarian-puppet init" loi. Alla esimerkki hyvin yksinkertaisesta Puppetfilestä, jossa kaikki moduulit on määritetty noudettaviksi Git-repositoryistä:
#!/usr/bin/env ruby 
 #^syntax detection# Puppet Forgen osoite 
forge "https://forgeapi.puppetlabs.com"# Kafo-installerin rajapintaluokka ("entrypoint") 
mod 'puppetfinland-puppetmaster', 
:git => 'https://github.com/Puppet-Finland/puppet-puppetmaster.git'# Luokka, jolla asennetaan puppetserver 
mod 'puppet-puppetserver', 
:git => 'https://github.com/Puppet-Finland/puppet-puppetserver.git'# Stdlib, jota hyvin monet muut luokat käyttävät. m
od 'puppetlabs-stdlib', 
:git => 'https://github.com/puppetlabs/puppetlabs-stdlib.git', 
:ref => '4.19.0Puppetfileen voidaan määrittää myös moduuleja, jotka noudetaan Gitin sijaan Puppet Forgesta. Puppet Forgen käytön etuna on se, että librarian-puppet osaa moduulien vaatimat moduulit automaattisesti. Sen sijaan Gitiä käytettäessä moduulien vaatimukset on määritettävä itse Puppetfileen.
Rajapintamoduulin (yllä puppet-puppetmaster) pääluokka manifests/init.pp voi olla hyvinkin yksinkertainen:
# A simple wrapper class for setting up puppetmasters. Primarily 
# aimed at use in Kafo installers. 
# 
# == Parameters: 
# 
# $puppetserver:: Setup puppetserver 
# class puppetmaster 
( Boolean $puppetserver = true 
) 
{ if $puppetserver { 
class { 'puppetserver::repository': } 
class { 'puppetserver': } 
} 
}Huom! Kafo on erittäin tarkka parametrien dokumentaation muodosta. Esim. parametrien dokumentaatiossa ei sallita sarkaimia. Dokumentaatio pitää siis kirjoittaa juuri yllä esitetyssä muodossa.
Kun Puppetfile on luotu, voidaan siellä määritetyt moduulit asentaa moduulikansioon librarian-puppetilla:
$ librarian-puppet install 
 $ ls modules 
 apt 
 augeas 
 augeasproviders_core 
 puppetmaster 
 puppetserver 
 puppetserver_gem 
 stdlib$ echo "puppetmaster: true" > config/installer-scenarios.d/default-answers.yaml
$ bin/puppetmaster-installer --list-scenarios Available scenarios default (INSTALLED)
$ bin/puppetmaster-installer --help Usage: puppetmaster-installer [OPTIONS] Options: = Generic: --[no-]colors Use color output on STDOUT (default: true) --color-of-background COLOR Your terminal background is :bright or :dark (default: :dark) --dont-save-answers Skip saving answers to './config/installer- scenarios.d/default-answers.yaml'? (default: false) --ignore-undocumented Ignore inconsistent parameter documentation (default: false) -i, --interactive Run in interactive mode --log-level LEVEL Log level for log file output (default: "info") -n, --noop Run puppet in noop mode? (default: false) -p, --profile Run puppet in profile mode? (default: false) -s, --skip-checks-i-know-better Skip all system checks (default: false) -v, --verbose Display log on STDOUT instead of progressbar -l, --verbose-log-level LEVEL Log level for verbose mode output (default: "info") -S, --scenario SCENARIO Use installation scenario --disable-scenario SCENARIO Disable installation scenario --enable-scenario SCENARIO Enable installation scenario --list-scenarios List available installation scenarios --force Force change of installation scenario --compare-scenarios Show changes between last used scenario and the scenario specified with -S or --scenario argument --migrations-only Apply migrations to a selected scenario and exit --[no-]parser-cache Force use or bypass of Puppet module parser cache -h, --help print help --full-help print complete help --[no-]enable-puppetmaster Enable 'puppetmaster' puppet module (default: true) = Module puppetmaster: --puppetmaster-puppetserver Setup puppetserver (current: true) Only commonly used options have been displayed. Use --full-help to view the complete list.




