SlideShare a Scribd company logo
Puppet at Colruyt

                    Puppet Camp 2013



eric.seynaeve@colruyt.be
Overview
    •   Colruyt ?
    •   Why Puppet ?
    •   Setup
    •   Lessons learned
    •   Future




2
Colruyt
    • Largest retailer in Belgium
      – Several shop enseignes
      – Also food services




3
Colruyt
    • Also active in France and Luxembourg
      – Food service over full France territory
      – Shops




4
Colruyt
    Long history of automation




      60’s                       today
5
Colruyt
    • Linux usage
      – 430+ Colruyt shops
        Colruyt, Okay, Dreamland, Dreambaby, Bioplanet, …
      – 50+ SPAR shops
        Migration to Linux busy
      – 150+ production servers
        Websites, Databases, Accounting, …




6
Why Puppet ?
    • Background in Linux Servers team
      – System engineers
      – Do shell programming but not programmers
      – Long history of ‘Not Build Here’
    • Background in IT Colruyt
      – Specialized groups (DBA, Network, SAN, …)
      – Most don’t want to package and configure
        Some want to have some control
      – Co-managed servers
7
Why Puppet ?
    • Old system configuration management
      – Home build system
      – Worked well
         … but …
        •   Takes lots of effort to main
        •   There were important limitations
        •   Not ready for the future
        •   We’re on our own
        •   We’re no experts

8
Why Puppet ?
    • Advantages Puppet
      – Noop (aka dry-run) option
      – Enterprise support
      – 3th party support
      – Large and active community
      – Flexible
      –…



9
Setup
     • Using Puppet Enterprise
     • One puppet master for each environment
       Controlled PE upgrades
     • Using Subversion as version control system
     • Other teams: Only package scripts/apps
       Linux Servers team: Also manages
       configurations


10
Setup
     • Light-weight wrapper CLI-menu
       – Easier for the teams
       – Lowers learning curve
       – Reduces risk for errors
         Editing package *asslib_infrascript_colruyt* within group *infrascript*


         1) ** back                          10) ** Status with subversion
         2) ** Create file or dir            11) ** View diff with subversion
         3) ** Edit file                     12) ** Resolve subversion conflict
         4) ** Revert file or dir           13) ** Commit to subversion
         5) ** Rename file or dir            14) ** Package
         6) ** Delete file or dir            15) ** Promote to rese
         7) ** Customize spec file           16) ** Promote right away
         8) ** View logs from subversion     17) ** Ask to adjust configs
         9) ** Update from subversion
         Enter a number:



11
Setup
     • Managing resource definitions
       – Putting resource definitions of one type of resource in
         one module
         • Easier to fine out what is done on our server park
         • Using virtual resources
         • Realized with tags when needed




12
Setup
     • Managing resource definitions
       – Creating a wrapper around Puppet code
         •   Easier for the team
         •   Consistency in definitions
         •   Lowers learning curve
         •   Flexibility for the future




13
Example: cron
     • Main module: zz_cron_systlinux_colruyt
     • init.pp
        class zz_cron_systlinux_colruyt {
          include setup
          …
            @zz_cron_systlinux_colruyt::conf {'netbackup':
                user      =>   'root',
                command   =>   '/opt/openv/netbackup/check_bp_conf.sh >/var/tmp/check_bp.conf.log',
                minute    =>   '0',
                hour      =>   '7',
                tag       => 'zz_tag_netbackup_systlinux_colruyt',
            }
        }




14
Example: cron
     • setup.pp
      – Installs the needed rpms
      – Manages the service
      – Changes OS defaults to our likings




15
Example: cron
     • conf.pp
       – Defines the wrapper
       – Using sensible defaults
        define zz_cron_systlinux_colruyt::conf (   {
          $user,                                       cron { "$user   $command":
          $command,                                      ensure   =>   $ensure,
          $ensure   = present,                           user     =>   $user,
          $hour     = undef,                             command =>    $command,
          $minute   = undef,                             minute   =>   $minute,
          $weekday = undef,                              hour     =>   $hour,
          $month    = undef,                             weekday =>    $weekday,
          $monthday = undef                              month    =>   $month,
        )                                                monthday =>   $monthday,
                                                       }
                                                   }



16
Example: cron
     • Realization happens in a separate module
       – Groups all zz_* modules together
       – Makes life easier for the team
         define base_systlinux_colruyt::configure {
           …
           include zz_cron_systlinux_colruyt
           Zz_cron_systlinux_colruyt::Conf <| tag == "zz_tag_${name}" |>
           …
         }




17
Example: cron
     • In netbackup module
       – one line to add all zz_* modules
        class netbackup_systlinux_colruyt {
          base_systlinux_colruyt::configure {'netbackup_systlinux_colruyt':}
          …
        }




18
Setup: params_systlinux_colruyt
     • Sometimes server specific configs are needed
     • Module params_systlinux_colruyt
       – Defines several ‘global’ parameters
       – Can be overridden in the node definition
       – Using sensible defaults $topology = 'int',
                                  class params_systlinux_colruyt (

                                  )
       – Syntax check
           if ! ( $topology in [ 'int', 'dmz', 'shop' ] ) {
             fail("topology is not 'int', 'dmz' or 'shop' (${topology})")
           }




19
Setup: params_systlinux_colruyt
     • Used in node definitions:
       node 'svlirc99' {
           class {'params_systlinux_colruyt':
                     topology => 'dmz',
           }
           …
       }


     • Used in puppet configurations
       – Templates
       – .pp files



20
Setup: base_systlinux_colruyt
     When requiring …                                      do this:

     Minimal Red Hat setup and no puppet agent             Create iso file with ‘none’ puppet config
     Reservation server with as little of us as possible   Create node and only include class
                                                           base_systlinux_colruyt::minimal
     Reservation server with our own packages and          Create node and only include class
     configuration changes                                 base_systlinux_colruyt::basic
     Server with                                           Create node and include
     • our basic tools (reports, netbackup agent, ITO      • base_systlinux_colruyt
        agent, sophos, …)                                       Includes basic tools
     • other software (oracle, was, …)                     • Other required modules (oracle, was, …)




21
Lessons learned
     • Setup naming conventions
       <bla>_<group>_colruyt
       – Prevents naming clashes with others
       – Easier to parse
         • Humans
         • Scripts




22
Lessons learned
     • When packaging rpms, always start from version
       control system
       – Forces people to check in
       – Ensures you can always recreate rpms from scratch




23
Lessons learned
     • Make sure you can link a version on the server
       back to the version in the VCS
       – Include VCS revision number in rpm version number
          • 1.<revision>-1
          • 1.<revision>-<ISO date>
       – Keep track of VCS revision number on Puppet master




24
Lessons learned
     • Keep loggings of all executions
       – Created wrapper puppet run script
       – Defaults to noop




25
Puppet annoyances
     • There are hidden ‘features’ with tags
       – When using ‘::’ in tags, things get complicated
          • abc::xyz
             – Creates tag abc::xyz
             – Creates tag abc
             – Creates tag xyz




26
Puppet annoyances
     – Every resource in a module gets the module name as
       tag
     – Also classes get class name as tag
       • Added ‘zz_tag_’ to tags




27
Puppet annoyances
     • Mount resource adds mount to fstab
       – Even if the resource fails
       – Working together with PuppetLabs




28
Puppet annoyances
     • Rpm updated outside of puppet ?
       – No trigger at the next puppet run
       – Needed
         • Upgrades done by consultants
         • Override permissions for Red Hat rpms




29
Future
     • Switch to Hiera ?
         – Removes our ‘house-build’ abstraction system ?
         – Speed up puppet runs ?
     •   Use Gepetto for more IDE-type editing
     •   Setup Puppet unit testing
     •   Look into MCollective
     •   …

30

More Related Content

What's hot (20)

PDF
Containers and Namespaces in the Linux Kernel
OpenVZ
 
PDF
Get mysql clusterrunning-windows
JoeSg
 
PDF
Effective service and resource management with systemd
David Timothy Strauss
 
PPTX
First steps on CentOs7
Marc Cortinas Val
 
PPTX
Linux container, namespaces & CGroup.
Neeraj Shrimali
 
PDF
Mysql wp cluster_quickstart_windows
Rogério Rocha
 
ODP
Guava
fbenault
 
PDF
Containerization is more than the new Virtualization: enabling separation of ...
Jérôme Petazzoni
 
PDF
PostgreSQL on EXT4, XFS, BTRFS and ZFS
Tomas Vondra
 
PDF
Guava Overview Part 2 Bucharest JUG #2
Andrei Savu
 
PDF
Comparison of-foss-distributed-storage
Marian Marinov
 
PDF
Modern net bsd kernel module
Masaru Oki
 
PDF
SiteGround Tech TeamBuilding
Marian Marinov
 
PDF
Thinking outside the box, learning a little about a lot
Mark Broadbent
 
PDF
Bare metal Hadoop provisioning
GoDataDriven
 
PDF
Cgroup resource mgmt_v1
sprdd
 
PDF
Backup with Bareos and ZFS - by Christian Reiß
NETWAYS
 
PDF
Containers with systemd-nspawn
Gábor Nyers
 
PDF
My Sq Ldb Tut
AkramWaseem
 
PDF
CloudStackユーザ会〜仮想ルータの謎に迫る
samemoon
 
Containers and Namespaces in the Linux Kernel
OpenVZ
 
Get mysql clusterrunning-windows
JoeSg
 
Effective service and resource management with systemd
David Timothy Strauss
 
First steps on CentOs7
Marc Cortinas Val
 
Linux container, namespaces & CGroup.
Neeraj Shrimali
 
Mysql wp cluster_quickstart_windows
Rogério Rocha
 
Guava
fbenault
 
Containerization is more than the new Virtualization: enabling separation of ...
Jérôme Petazzoni
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
Tomas Vondra
 
Guava Overview Part 2 Bucharest JUG #2
Andrei Savu
 
Comparison of-foss-distributed-storage
Marian Marinov
 
Modern net bsd kernel module
Masaru Oki
 
SiteGround Tech TeamBuilding
Marian Marinov
 
Thinking outside the box, learning a little about a lot
Mark Broadbent
 
Bare metal Hadoop provisioning
GoDataDriven
 
Cgroup resource mgmt_v1
sprdd
 
Backup with Bareos and ZFS - by Christian Reiß
NETWAYS
 
Containers with systemd-nspawn
Gábor Nyers
 
My Sq Ldb Tut
AkramWaseem
 
CloudStackユーザ会〜仮想ルータの謎に迫る
samemoon
 

Similar to Setting up Puppet at Colruyt (20)

DOCX
Project Guide for Modifying Kernel Source
232083
 
PPT
Puppet
csrocks
 
ODP
Deploying systemd at scale
Davide Cavalca
 
PDF
Cobbler, Func and Puppet: Tools for Large Scale Environments
ViSenze - Artificial Intelligence for the Visual Web
 
PDF
Cobbler, Func and Puppet: Tools for Large Scale Environments
Michael Zhang
 
PPT
Linux kernel modules
Hao-Ran Liu
 
PPTX
PowerShell - Be A Cool Blue Kid
Matthew Johnson
 
PDF
Manage your switches like servers
Cumulus Networks
 
PDF
Kubernetes Walk Through from Technical View
Lei (Harry) Zhang
 
PDF
Lean Drupal Repositories with Composer and Drush
Pantheon
 
PPTX
LXC
Wu Fan-Cheng
 
PDF
MINCS - containers in the shell script (Eng. ver.)
Masami Hiramatsu
 
PDF
24HOP Introduction to Linux for SQL Server DBAs
Kellyn Pot'Vin-Gorman
 
PPTX
Virtualization and automation of library software/machines + Puppet
Omar Reygaert
 
PPTX
Fluo CICD OpenStack Summit
Miguel Zuniga
 
PPT
Resource Management of Docker
SpeedyCloud
 
PDF
Docker Security Paradigm
Anis LARGUEM
 
ODP
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLES
Jan Kalcic
 
PDF
Tuning systemd for embedded
Alison Chaiken
 
PPTX
KuberneteSADASDSADASDASDASDASDASDAs Labs.pptx
MuhamedAhmed35
 
Project Guide for Modifying Kernel Source
232083
 
Puppet
csrocks
 
Deploying systemd at scale
Davide Cavalca
 
Cobbler, Func and Puppet: Tools for Large Scale Environments
ViSenze - Artificial Intelligence for the Visual Web
 
Cobbler, Func and Puppet: Tools for Large Scale Environments
Michael Zhang
 
Linux kernel modules
Hao-Ran Liu
 
PowerShell - Be A Cool Blue Kid
Matthew Johnson
 
Manage your switches like servers
Cumulus Networks
 
Kubernetes Walk Through from Technical View
Lei (Harry) Zhang
 
Lean Drupal Repositories with Composer and Drush
Pantheon
 
MINCS - containers in the shell script (Eng. ver.)
Masami Hiramatsu
 
24HOP Introduction to Linux for SQL Server DBAs
Kellyn Pot'Vin-Gorman
 
Virtualization and automation of library software/machines + Puppet
Omar Reygaert
 
Fluo CICD OpenStack Summit
Miguel Zuniga
 
Resource Management of Docker
SpeedyCloud
 
Docker Security Paradigm
Anis LARGUEM
 
Quick-and-Easy Deployment of a Ceph Storage Cluster with SLES
Jan Kalcic
 
Tuning systemd for embedded
Alison Chaiken
 
KuberneteSADASDSADASDASDASDASDASDAs Labs.pptx
MuhamedAhmed35
 
Ad

More from Puppet (20)

PPTX
Puppet Community Day: Planning the Future Together
Puppet
 
PPTX
The Evolution of Puppet: Key Changes and Modernization Tips
Puppet
 
PPTX
Can You Help Me Upgrade to Puppet 8? Tips, Tools & Best Practices for Your Up...
Puppet
 
PPTX
Bolt Dynamic Inventory: Making Puppet Easier
Puppet
 
PPTX
Customizing Reporting with the Puppet Report Processor
Puppet
 
PPTX
Puppet at ConfigMgmtCamp 2025 Sponsor Deck
Puppet
 
PPTX
The State of Puppet in 2025: A Presentation from Developer Relations Lead Dav...
Puppet
 
PPTX
Let Red be Red and Green be Green: The Automated Workflow Restarter in GitHub...
Puppet
 
PDF
Puppet camp2021 testing modules and controlrepo
Puppet
 
PPTX
Puppetcamp r10kyaml
Puppet
 
PDF
2021 04-15 operational verification (with notes)
Puppet
 
PPTX
Puppet camp vscode
Puppet
 
PDF
Modules of the twenties
Puppet
 
PDF
Applying Roles and Profiles method to compliance code
Puppet
 
PPTX
KGI compliance as-code approach
Puppet
 
PDF
Enforce compliance policy with model-driven automation
Puppet
 
PDF
Keynote: Puppet camp compliance
Puppet
 
PPTX
Automating it management with Puppet + ServiceNow
Puppet
 
PPTX
Puppet: The best way to harden Windows
Puppet
 
PPTX
Simplified Patch Management with Puppet - Oct. 2020
Puppet
 
Puppet Community Day: Planning the Future Together
Puppet
 
The Evolution of Puppet: Key Changes and Modernization Tips
Puppet
 
Can You Help Me Upgrade to Puppet 8? Tips, Tools & Best Practices for Your Up...
Puppet
 
Bolt Dynamic Inventory: Making Puppet Easier
Puppet
 
Customizing Reporting with the Puppet Report Processor
Puppet
 
Puppet at ConfigMgmtCamp 2025 Sponsor Deck
Puppet
 
The State of Puppet in 2025: A Presentation from Developer Relations Lead Dav...
Puppet
 
Let Red be Red and Green be Green: The Automated Workflow Restarter in GitHub...
Puppet
 
Puppet camp2021 testing modules and controlrepo
Puppet
 
Puppetcamp r10kyaml
Puppet
 
2021 04-15 operational verification (with notes)
Puppet
 
Puppet camp vscode
Puppet
 
Modules of the twenties
Puppet
 
Applying Roles and Profiles method to compliance code
Puppet
 
KGI compliance as-code approach
Puppet
 
Enforce compliance policy with model-driven automation
Puppet
 
Keynote: Puppet camp compliance
Puppet
 
Automating it management with Puppet + ServiceNow
Puppet
 
Puppet: The best way to harden Windows
Puppet
 
Simplified Patch Management with Puppet - Oct. 2020
Puppet
 
Ad

Recently uploaded (20)

PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
PPTX
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
PDF
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
PDF
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
PDF
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
PPTX
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
PDF
Human-centred design in online workplace learning and relationship to engagem...
Tracy Tang
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PPTX
Extensions Framework (XaaS) - Enabling Orchestrate Anything
ShapeBlue
 
PDF
Rethinking Security Operations - SOC Evolution Journey.pdf
Haris Chughtai
 
PDF
Français Patch Tuesday - Juillet
Ivanti
 
PDF
Women in Automation Presents: Reinventing Yourself — Bold Career Pivots That ...
DianaGray10
 
PDF
CloudStack GPU Integration - Rohit Yadav
ShapeBlue
 
PDF
Empowering Cloud Providers with Apache CloudStack and Stackbill
ShapeBlue
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
NewMind AI Journal - Weekly Chronicles - July'25 Week II
NewMind AI
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Why Orbit Edge Tech is a Top Next JS Development Company in 2025
mahendraalaska08
 
✨Unleashing Collaboration: Salesforce Channels & Community Power in Patna!✨
SanjeetMishra29
 
Meetup Kickoff & Welcome - Rohit Yadav, CSIUG Chairman
ShapeBlue
 
Persuasive AI: risks and opportunities in the age of digital debate
Speck&Tech
 
Empower Inclusion Through Accessible Java Applications
Ana-Maria Mihalceanu
 
Building and Operating a Private Cloud with CloudStack and LINBIT CloudStack ...
ShapeBlue
 
Human-centred design in online workplace learning and relationship to engagem...
Tracy Tang
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Extensions Framework (XaaS) - Enabling Orchestrate Anything
ShapeBlue
 
Rethinking Security Operations - SOC Evolution Journey.pdf
Haris Chughtai
 
Français Patch Tuesday - Juillet
Ivanti
 
Women in Automation Presents: Reinventing Yourself — Bold Career Pivots That ...
DianaGray10
 
CloudStack GPU Integration - Rohit Yadav
ShapeBlue
 
Empowering Cloud Providers with Apache CloudStack and Stackbill
ShapeBlue
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Building Real-Time Digital Twins with IBM Maximo & ArcGIS Indoors
Safe Software
 

Setting up Puppet at Colruyt

  • 2. Overview • Colruyt ? • Why Puppet ? • Setup • Lessons learned • Future 2
  • 3. Colruyt • Largest retailer in Belgium – Several shop enseignes – Also food services 3
  • 4. Colruyt • Also active in France and Luxembourg – Food service over full France territory – Shops 4
  • 5. Colruyt Long history of automation 60’s today 5
  • 6. Colruyt • Linux usage – 430+ Colruyt shops Colruyt, Okay, Dreamland, Dreambaby, Bioplanet, … – 50+ SPAR shops Migration to Linux busy – 150+ production servers Websites, Databases, Accounting, … 6
  • 7. Why Puppet ? • Background in Linux Servers team – System engineers – Do shell programming but not programmers – Long history of ‘Not Build Here’ • Background in IT Colruyt – Specialized groups (DBA, Network, SAN, …) – Most don’t want to package and configure Some want to have some control – Co-managed servers 7
  • 8. Why Puppet ? • Old system configuration management – Home build system – Worked well … but … • Takes lots of effort to main • There were important limitations • Not ready for the future • We’re on our own • We’re no experts 8
  • 9. Why Puppet ? • Advantages Puppet – Noop (aka dry-run) option – Enterprise support – 3th party support – Large and active community – Flexible –… 9
  • 10. Setup • Using Puppet Enterprise • One puppet master for each environment Controlled PE upgrades • Using Subversion as version control system • Other teams: Only package scripts/apps Linux Servers team: Also manages configurations 10
  • 11. Setup • Light-weight wrapper CLI-menu – Easier for the teams – Lowers learning curve – Reduces risk for errors Editing package *asslib_infrascript_colruyt* within group *infrascript* 1) ** back 10) ** Status with subversion 2) ** Create file or dir 11) ** View diff with subversion 3) ** Edit file 12) ** Resolve subversion conflict 4) ** Revert file or dir 13) ** Commit to subversion 5) ** Rename file or dir 14) ** Package 6) ** Delete file or dir 15) ** Promote to rese 7) ** Customize spec file 16) ** Promote right away 8) ** View logs from subversion 17) ** Ask to adjust configs 9) ** Update from subversion Enter a number: 11
  • 12. Setup • Managing resource definitions – Putting resource definitions of one type of resource in one module • Easier to fine out what is done on our server park • Using virtual resources • Realized with tags when needed 12
  • 13. Setup • Managing resource definitions – Creating a wrapper around Puppet code • Easier for the team • Consistency in definitions • Lowers learning curve • Flexibility for the future 13
  • 14. Example: cron • Main module: zz_cron_systlinux_colruyt • init.pp class zz_cron_systlinux_colruyt { include setup … @zz_cron_systlinux_colruyt::conf {'netbackup': user => 'root', command => '/opt/openv/netbackup/check_bp_conf.sh >/var/tmp/check_bp.conf.log', minute => '0', hour => '7', tag => 'zz_tag_netbackup_systlinux_colruyt', } } 14
  • 15. Example: cron • setup.pp – Installs the needed rpms – Manages the service – Changes OS defaults to our likings 15
  • 16. Example: cron • conf.pp – Defines the wrapper – Using sensible defaults define zz_cron_systlinux_colruyt::conf ( { $user, cron { "$user $command": $command, ensure => $ensure, $ensure = present, user => $user, $hour = undef, command => $command, $minute = undef, minute => $minute, $weekday = undef, hour => $hour, $month = undef, weekday => $weekday, $monthday = undef month => $month, ) monthday => $monthday, } } 16
  • 17. Example: cron • Realization happens in a separate module – Groups all zz_* modules together – Makes life easier for the team define base_systlinux_colruyt::configure { … include zz_cron_systlinux_colruyt Zz_cron_systlinux_colruyt::Conf <| tag == "zz_tag_${name}" |> … } 17
  • 18. Example: cron • In netbackup module – one line to add all zz_* modules class netbackup_systlinux_colruyt { base_systlinux_colruyt::configure {'netbackup_systlinux_colruyt':} … } 18
  • 19. Setup: params_systlinux_colruyt • Sometimes server specific configs are needed • Module params_systlinux_colruyt – Defines several ‘global’ parameters – Can be overridden in the node definition – Using sensible defaults $topology = 'int', class params_systlinux_colruyt ( ) – Syntax check if ! ( $topology in [ 'int', 'dmz', 'shop' ] ) { fail("topology is not 'int', 'dmz' or 'shop' (${topology})") } 19
  • 20. Setup: params_systlinux_colruyt • Used in node definitions: node 'svlirc99' { class {'params_systlinux_colruyt': topology => 'dmz', } … } • Used in puppet configurations – Templates – .pp files 20
  • 21. Setup: base_systlinux_colruyt When requiring … do this: Minimal Red Hat setup and no puppet agent Create iso file with ‘none’ puppet config Reservation server with as little of us as possible Create node and only include class base_systlinux_colruyt::minimal Reservation server with our own packages and Create node and only include class configuration changes base_systlinux_colruyt::basic Server with Create node and include • our basic tools (reports, netbackup agent, ITO • base_systlinux_colruyt agent, sophos, …) Includes basic tools • other software (oracle, was, …) • Other required modules (oracle, was, …) 21
  • 22. Lessons learned • Setup naming conventions <bla>_<group>_colruyt – Prevents naming clashes with others – Easier to parse • Humans • Scripts 22
  • 23. Lessons learned • When packaging rpms, always start from version control system – Forces people to check in – Ensures you can always recreate rpms from scratch 23
  • 24. Lessons learned • Make sure you can link a version on the server back to the version in the VCS – Include VCS revision number in rpm version number • 1.<revision>-1 • 1.<revision>-<ISO date> – Keep track of VCS revision number on Puppet master 24
  • 25. Lessons learned • Keep loggings of all executions – Created wrapper puppet run script – Defaults to noop 25
  • 26. Puppet annoyances • There are hidden ‘features’ with tags – When using ‘::’ in tags, things get complicated • abc::xyz – Creates tag abc::xyz – Creates tag abc – Creates tag xyz 26
  • 27. Puppet annoyances – Every resource in a module gets the module name as tag – Also classes get class name as tag • Added ‘zz_tag_’ to tags 27
  • 28. Puppet annoyances • Mount resource adds mount to fstab – Even if the resource fails – Working together with PuppetLabs 28
  • 29. Puppet annoyances • Rpm updated outside of puppet ? – No trigger at the next puppet run – Needed • Upgrades done by consultants • Override permissions for Red Hat rpms 29
  • 30. Future • Switch to Hiera ? – Removes our ‘house-build’ abstraction system ? – Speed up puppet runs ? • Use Gepetto for more IDE-type editing • Setup Puppet unit testing • Look into MCollective • … 30