Useiden resurssien luonti lista-parametrien avulla

June 16, 2015 – Samuli Seppänen

Toisinaan tulee tarve luoda useita samankaltaisia resursseja, joissa vain jonkin yksittäisen ominaisuuden arvo muuttuu. Esimerkiksi intranetin webbipalvelimeen voi joutua sallimaan yhteydet palomuurin läpi sekä sisäverkon että VPN:n osoiteavaruudesta. Vaikka Puppet ei suoraan tuekaan iteraatiota, sitä voi emuloida antamalla resurssin nimeksi ($title) listan merkkijonon sijaan.

Esimerkiksi Puppet-Finlandin webserver-moduulissa on parametrit $allow_address_ipv4 ja $allow_address_ipv6. Ne voivat saada arvokseen joko merkkijonon ('192.168.55.0/24') tai listan (['192.168.55.0/24', '10.69.0.0/16']):

class webserver::packetfilter
 (
 $allow_address_ipv4,
 $allow_address_ipv6
 
 ) inherits webserver::params

Kummankin parametrin arvo annetaan ::webserver::packetfilter::allow_ip -resurssin nimeksi ($title):

webserver::packetfilter::allow_ip { $allow_address_ipv4:
 provider => 'iptables'
 }
 webserver::packetfilter::allow_ip { $allow_address_ipv6:
 provider => 'ip6tables'
 }

Tämä aiheuttaa sen, että Puppet luo jokaista parametrina annetun listan alkiota kohden yhden annetun tyyppisen resurssin, jonka $title on listan alkion arvo. Webserver-moduulin tapauksessa kutakin alkiota kohden luodaan kaksi palomuurisääntöä:

define webserver::packetfilter::allow_ip
 (
 $provider = 'iptables'
 )
 {
 
 include ::webserver::params
 
 $allow_address = $title
 
 $source = $allow_address ? {
 'any' => undef,
 default => $allow_address,
 }
 
 firewall { "003 accept http from ${allow_address}":
 provider => $provider,
 chain => 'INPUT',
 proto => 'tcp',
 source => $source,
 dport => 80,
 action => 'accept',
 }
 
 firewall { "004 accept https from ${allow_address}":
 provider => $provider,
 chain => 'INPUT',
 proto => 'tcp',
 source => $source,
 dport => 443,
 action => 'accept',
 }
 }

Vastaavaa tekniikkaa voi käyttää myös useamman sisäkkäisen hakemiston luomiseen - alla esimerkki Puppet-Finlandin firefox-moduulista:

file { [ $mozilla_dir,
 $firefox_dir,
 $profiles_dir,
 $profile_dir ]:
 ensure => directory,
 owner => $username,
 }
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