Käyttöjärjestelmäerojen hallinta Puppetissa, osa 1

April 27, 2015 – Petri Lammi

Puppet-moduulit on melko helppo rakentaa siten, että ne saa helposti toimimaan eri käyttöjärjestelmissä ja käyttöjärjestelmäversioissa. Alla ovat itse hyväksi toteamani kolme korkea tason tapaa käyttöjärjestelmäerojen hallintaan kevyimmästä raskaimpaan:

  1. Params-luokan käyttö
  2. Käyttöjärjestelmäriippuvaisten aliluokkien käyttö
  3. Uuden moduulin rakentaminen

Menetelmillä 1 ja 2 pystyy käytännössä hallitsemaan kaikki Unix-tyyppisten käyttöjärjestelmien väliset erot. Menetelmää 3 ei juuri tarvita, paitsi jos jokin käyttöjärjestelmä (lue: Windows) eroa muista käytössä olevista huomattavan paljon.

Pieniin eroihin riittää siis params-luokan käyttö. Otetaan esimerkiksi vaikkapa Puppet-Finlandin ntp-moduuli:

class ntp::params {
 
 include ::os::params
 
 case $::osfamily {
 'RedHat': {
 $driftfile = '/var/lib/ntp/ntp.drift'
 $service_name = 'ntpd'
 }
 'Debian': {
 $driftfile = '/var/lib/ntp/ntp.drift'
 $service_name = 'ntp'
 }
 'FreeBSD': {
 $driftfile = '/var/db/ntpd.drift'
 $service_name = 'ntpd'
 }
 default: {
 fail("Unsupported operating system ${::osfamily}")
 }
 }
 
 if str2bool($::has_systemd) {
 $service_start = "${::os::params::systemctl}
 start ${service_name}"
 $service_stop = "${::os::params::systemctl}
 stop ${service_name}"
 } else {
 $service_start = "${::os::params::service_cmd}
 ${service_name} start"
 $service_stop = "${::os::params::service_cmd}
 ${service_name} stop"
 }
 }

Yllä oleva params-luokka mahdollistaa saman moduulin käytön Debianissa, Ubuntussa, RedHatissa ja FreeBSD:ssä. Lisäksi se huolehtii faktan $::has_systemd avulla myös siitä, etteivät systemd:n ja vanhempien init-järjestelmien erot aiheuta ongelmia. Osa muuttujista, kuten service_cmd ja systemctl, noudetaan moduulista os, koska niiden toistaminen jokaisessa moduulissa erikseen ei olisi järkevää. Yllä default-lohkossa oleva fail()-funktion kutsu varmistaa lisäksi sen, ettei moduulia voi ladata kuin sellaisessa käyttöjärjestelmässä, jossa sen voi olettaa toimivan.

Params-luokassa määritettyjen muuttujien käyttö edellyttää, että params-luokka on ladattu siinä vaiheessa, kun sitä tarvitaan. Tähän on ainakin kaksi tapaa, joista itse suosin perintää (inherits, alla):

class ntp::service inherits ntp::params {
 
 service { 'ntp':
 name => $::ntp::params::service_name,
 enable => true,
 require => Class['ntp::config'],
 }
 }

Toinen vaihtoehto olisi lisätä rivi

include ::ntp::params

heti luokan alkuun.

Params-luokan muuttujiin on syytä viitata aina koko niiden polulla:

  • $::ntp::params::service_name
  • $::os::params::service_cmd

Näin vältytään epämääräisiltä ongelmilta, jos vaikkapa saman niminen muuttuja on määritelty sekä params-luokassa, että sitä käyttävässä luokassa.

Blogisarjan seuraavassa osassa käsitellään käyttöjärjestelmäkohtaisia aliluokkia.

Did you like the article? Share it with others!
Categories
#aad #Access #acl #alertmanager #ansible #ansible module development #Apache #API #augeas #authentication #authorization #automation #automatization #aws #azure #backup #bash #bitbucket #buildbot #cache #centos #cloud #cloud-init #cloudflare #cloudfront #cluster #connectionsJpa #control repo #custom fact #database #debian #devops #digital sovereignty #DNS #docker #domain mode #duplo #edenred #ejabberd #email #encryption #erb #europe #eyaml #fabric #facter #facts #fargate #fedora #file #finnish #foreman #freeipa #git #github #gitlab #gnome #google #grafana #hammer #hiera #IAM #import #infinispan #Infrastructure as Code #ipmi #irc #jboss #jdk #jenkins #JMESPath #json #kanban #keycloak #letsencrypt #librarian-puppet #librenms #linkedin #Linux #Location #loop #marketing #mautic #Mellon #mfa #microsoft #monitoring #mysql #nagios #network-manager #oauth #oauth2 #office365 #oidc #openshift #open source #openvpn #oxygen #packer #paranormal #pdk #people #php #pkcs7 #pomodoro #Powershell #preseed #presentation #profiles #prometheus #provisioning #puppet #puppet-bolt #puppet-litmus #puppetboard #puppetdb #Puppetfile #puppetserver #puppet types and providers #pxeboot #qemu #quality #r10k #rds #recruitment #redirect #Restrict #Reverse Proxy #robotframework #roles #rspec #ruby #SAML #selinux #sem #shell #showsql #snmp #snmpd #software developement #spam #ssh #sso #standardization #systemd #systemd-resolved #teams #terraform #twilio #ubuntu #user-data #vagrant #vanity awards #variable #vim #virtualbox #visualstudio #webdevelopment #wildfly #Windows #wireguard #wordpress #workflow #x11 #xmpp #zimbra
We are
 Puppeteers
menucross-circle