SlideShare a Scribd company logo
Modules 201
                       Writing Flexible and Scalable
                                  Puppet


                        Eric Shamow | PuppetCamp NYC

Friday, April 27, 12
Who Am I?
                       • Senior Professional Services Engineer for
                         Puppet Labs
                       • Former Operations Manager
                       • Recovering Sysadmin
                       • Travel around helping people make Puppet
                         even more awesome
                       • Not Shamwow. If you came to the wrong
                         talk you can leave now
Friday, April 27, 12
How Did We Get
                            Here?
                       The module seemed just fine when I wrote
                                        it...




Friday, April 27, 12
How Did We Get
                            Here?
                       The module seemed just fine when I wrote
                                        it...
                         (I never thought RHEL 6 would come out)




Friday, April 27, 12
I never thought...




Friday, April 27, 12
I never thought...
                       • RHEL 6 would come out




Friday, April 27, 12
I never thought...
                       • RHEL 6 would come out
                       • My company would switch to Debian




Friday, April 27, 12
I never thought...
                       • RHEL 6 would come out
                       • My company would switch to Debian
                       • Other people would want to reuse the
                         module




Friday, April 27, 12
I never thought...
                       • RHEL 6 would come out
                       • My company would switch to Debian
                       • Other people would want to reuse the
                         module
                       • I’d want to use only a part of the module


Friday, April 27, 12
I never thought...
                       • RHEL 6 would come out
                       • My company would switch to Debian
                       • Other people would want to reuse the
                         module
                       • I’d want to use only a part of the module
                        • ...maybe as a part of something else

Friday, April 27, 12
Ur Doin It Wrong




Friday, April 27, 12
Puppet is Declarative
                          Shoehorning conditional logic into
                               declarative language?




Friday, April 27, 12
Puppet is Declarative
                          Shoehorning conditional logic into
                               declarative language?
                                Please do not do this:




Friday, April 27, 12
Puppet is Declarative
                           Shoehorning conditional logic into
                                declarative language?
                                 Please do not do this:
                       case $::operatingsystem {
                         ‘redhat’: {
                           if $::fqdn == “bobmarley” {
                              file { ‘foo’:
                                ...
                           } else {
                           ...
                          ...
                       }
Friday, April 27, 12
When Logic Fails




Friday, April 27, 12
Organizing Your Data




Friday, April 27, 12
Organizing Your Data

                       • Hiera




Friday, April 27, 12
Organizing Your Data

                       • Hiera
                       • External Node Classifiers




Friday, April 27, 12
Organizing Your Data

                       • Hiera
                       • External Node Classifiers
                       • Custom Functions




Friday, April 27, 12
Code Models Reality




Friday, April 27, 12
Code Models Reality

                       • Move complexity closer to where it is in
                         real life




Friday, April 27, 12
Code Models Reality

                       • Move complexity closer to where it is in
                         real life
                       • If your CMDB contains lots of
                         exceptions, that’s where you should read
                         from




Friday, April 27, 12
Code Models Reality

                       • Move complexity closer to where it is in
                         real life
                       • If your CMDB contains lots of
                         exceptions, that’s where you should read
                         from
                       • If there is contorted logic, keep it away
                         from nuts and bolts module mechanics



Friday, April 27, 12
Please Don’t Make Me Edit
                   Your Module




Friday, April 27, 12
Parameterized Classes

                         class motd (
                           $pci_enabled = true,
                           $owner       = ‘bob’,
                         ) {
                           ...
                         }




Friday, April 27, 12
params.pp Pattern

                       class motd::params {
                         $owner = ‘Bob’
                       }

                       class motd (
                         $owner = $motd::params::owner
                       ) {



Friday, April 27, 12
params.pp Pattern +
                                hiera

                       class motd::params {
                         $owner = hiera(‘owner’,‘Bob’)
                       }

                       class motd (
                         $owner = $motd::params::owner
                       ) {



Friday, April 27, 12
Outsource Logic to
                          Submodules
    class mysql::params {
      $server_package = $::operatingsystem ? {
        ‘redhat’ => ‘mysql-server’,
        ...
      }
    }

    class mysql::server {
      package { ‘mysql-server’:
        name => $mysql::params::server_package,
        ...
      }
    }
Friday, April 27, 12
Be as Modular as
                           Possible
    class mysql::server {
      package { ‘mysql-server’:
        name => $mysql::params::server_package,
        ...
      }
    }
    class mysql::client {
      ...
    }
    class mysql {
      include mysql::client
      include mysql::server
    }
Friday, April 27, 12
Limit Inheritance




Friday, April 27, 12
Limit Inheritance




Friday, April 27, 12
Limit Inheritance

                       • Favor composition over inheritance




Friday, April 27, 12
Limit Inheritance

                       • Favor composition over inheritance
                       • Inheritance + dynamic variable scoping =
                         PAIN




Friday, April 27, 12
Limit Inheritance

                       • Favor composition over inheritance
                       • Inheritance + dynamic variable scoping =
                         PAIN
                       • Useful at the edges



Friday, April 27, 12
Limit Inheritance

                       • Favor composition over inheritance
                       • Inheritance + dynamic variable scoping =
                         PAIN
                       • Useful at the edges
                       • Useful for overriding/extending in limited
                         circumstances



Friday, April 27, 12
Stop Being Surprised by Change




Friday, April 27, 12
Stop Being Surprised by Change




Friday, April 27, 12
Stop Being Surprised by Change

                       • You don’t have to define every Operating
                         System or version




Friday, April 27, 12
Stop Being Surprised by Change

                       • You don’t have to define every Operating
                         System or version
                       • Assume cutovers won’t be clean - you
                         will be 50% RHEL 5 and 50% RHEL 6 for
                         a while




Friday, April 27, 12
Stop Being Surprised by Change

                       • You don’t have to define every Operating
                         System or version
                       • Assume cutovers won’t be clean - you
                         will be 50% RHEL 5 and 50% RHEL 6 for
                         a while
                       • And even when you aren’t, you’ll be 98%
                         RHEL 6 and 2% RHEL 5 until the end of
                         time.


Friday, April 27, 12
Protect Yourself Against
                        Unintentional Defaults




Friday, April 27, 12
Protect Yourself Against
                        Unintentional Defaults

                       • Always provide a default case




Friday, April 27, 12
Protect Yourself Against
                        Unintentional Defaults

                       • Always provide a default case
                       • In most cases that default case should be
                         failure




Friday, April 27, 12
Protect Yourself Against
                        Unintentional Defaults

                       • Always provide a default case
                       • In most cases that default case should be
                         failure

                       • Use the stdlib :fail method to fail
                         gracefully.




Friday, April 27, 12
Protect Yourself Against
                        Unintentional Defaults


    class mysql::params {
      case $::operatingsystem {
        ‘redhat’: { $serverpkg = ‘mysql-server’ }
        default: {
          fail(‘MySQL Server package undefined.’)
        }
      }
    }



Friday, April 27, 12
Remember
                       You Don’t Have To Think of
                              Everything




Friday, April 27, 12
Remember
                          You Don’t Have To Think of
                                 Everything

                       Leave room for others to improve your modules
                                 without refactoring them...




Friday, April 27, 12
Remember
                          You Don’t Have To Think of
                                 Everything

                       Leave room for others to improve your modules
                                 without refactoring them...

                       ...and then you get to benefit and re-merge their
                                     changes when they do.




Friday, April 27, 12
And then we haz a community!




Friday, April 27, 12
Thank You

                           Eric Shamow
                       eric@puppetlabs.com
                        http://opsrealist.info
                            @eshamow




Friday, April 27, 12

More Related Content

More from Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
Puppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
Puppet
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
Puppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
Puppet
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
Puppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
Puppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
Puppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
Puppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
Puppet
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
Puppet
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
Puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
Puppet
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
Puppet
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
Puppet
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
Puppet
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
Puppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
Puppet
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
Puppet
 

More from Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
Paul Groth
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
Elena Simperl
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 

PuppetCamp NYC - Building Scalable Modules

  • 1. Modules 201 Writing Flexible and Scalable Puppet Eric Shamow | PuppetCamp NYC Friday, April 27, 12
  • 2. Who Am I? • Senior Professional Services Engineer for Puppet Labs • Former Operations Manager • Recovering Sysadmin • Travel around helping people make Puppet even more awesome • Not Shamwow. If you came to the wrong talk you can leave now Friday, April 27, 12
  • 3. How Did We Get Here? The module seemed just fine when I wrote it... Friday, April 27, 12
  • 4. How Did We Get Here? The module seemed just fine when I wrote it... (I never thought RHEL 6 would come out) Friday, April 27, 12
  • 6. I never thought... • RHEL 6 would come out Friday, April 27, 12
  • 7. I never thought... • RHEL 6 would come out • My company would switch to Debian Friday, April 27, 12
  • 8. I never thought... • RHEL 6 would come out • My company would switch to Debian • Other people would want to reuse the module Friday, April 27, 12
  • 9. I never thought... • RHEL 6 would come out • My company would switch to Debian • Other people would want to reuse the module • I’d want to use only a part of the module Friday, April 27, 12
  • 10. I never thought... • RHEL 6 would come out • My company would switch to Debian • Other people would want to reuse the module • I’d want to use only a part of the module • ...maybe as a part of something else Friday, April 27, 12
  • 11. Ur Doin It Wrong Friday, April 27, 12
  • 12. Puppet is Declarative Shoehorning conditional logic into declarative language? Friday, April 27, 12
  • 13. Puppet is Declarative Shoehorning conditional logic into declarative language? Please do not do this: Friday, April 27, 12
  • 14. Puppet is Declarative Shoehorning conditional logic into declarative language? Please do not do this: case $::operatingsystem { ‘redhat’: { if $::fqdn == “bobmarley” { file { ‘foo’: ... } else { ... ... } Friday, April 27, 12
  • 15. When Logic Fails Friday, April 27, 12
  • 17. Organizing Your Data • Hiera Friday, April 27, 12
  • 18. Organizing Your Data • Hiera • External Node Classifiers Friday, April 27, 12
  • 19. Organizing Your Data • Hiera • External Node Classifiers • Custom Functions Friday, April 27, 12
  • 21. Code Models Reality • Move complexity closer to where it is in real life Friday, April 27, 12
  • 22. Code Models Reality • Move complexity closer to where it is in real life • If your CMDB contains lots of exceptions, that’s where you should read from Friday, April 27, 12
  • 23. Code Models Reality • Move complexity closer to where it is in real life • If your CMDB contains lots of exceptions, that’s where you should read from • If there is contorted logic, keep it away from nuts and bolts module mechanics Friday, April 27, 12
  • 24. Please Don’t Make Me Edit Your Module Friday, April 27, 12
  • 25. Parameterized Classes class motd ( $pci_enabled = true, $owner = ‘bob’, ) { ... } Friday, April 27, 12
  • 26. params.pp Pattern class motd::params { $owner = ‘Bob’ } class motd ( $owner = $motd::params::owner ) { Friday, April 27, 12
  • 27. params.pp Pattern + hiera class motd::params { $owner = hiera(‘owner’,‘Bob’) } class motd ( $owner = $motd::params::owner ) { Friday, April 27, 12
  • 28. Outsource Logic to Submodules class mysql::params { $server_package = $::operatingsystem ? { ‘redhat’ => ‘mysql-server’, ... } } class mysql::server { package { ‘mysql-server’: name => $mysql::params::server_package, ... } } Friday, April 27, 12
  • 29. Be as Modular as Possible class mysql::server { package { ‘mysql-server’: name => $mysql::params::server_package, ... } } class mysql::client { ... } class mysql { include mysql::client include mysql::server } Friday, April 27, 12
  • 32. Limit Inheritance • Favor composition over inheritance Friday, April 27, 12
  • 33. Limit Inheritance • Favor composition over inheritance • Inheritance + dynamic variable scoping = PAIN Friday, April 27, 12
  • 34. Limit Inheritance • Favor composition over inheritance • Inheritance + dynamic variable scoping = PAIN • Useful at the edges Friday, April 27, 12
  • 35. Limit Inheritance • Favor composition over inheritance • Inheritance + dynamic variable scoping = PAIN • Useful at the edges • Useful for overriding/extending in limited circumstances Friday, April 27, 12
  • 36. Stop Being Surprised by Change Friday, April 27, 12
  • 37. Stop Being Surprised by Change Friday, April 27, 12
  • 38. Stop Being Surprised by Change • You don’t have to define every Operating System or version Friday, April 27, 12
  • 39. Stop Being Surprised by Change • You don’t have to define every Operating System or version • Assume cutovers won’t be clean - you will be 50% RHEL 5 and 50% RHEL 6 for a while Friday, April 27, 12
  • 40. Stop Being Surprised by Change • You don’t have to define every Operating System or version • Assume cutovers won’t be clean - you will be 50% RHEL 5 and 50% RHEL 6 for a while • And even when you aren’t, you’ll be 98% RHEL 6 and 2% RHEL 5 until the end of time. Friday, April 27, 12
  • 41. Protect Yourself Against Unintentional Defaults Friday, April 27, 12
  • 42. Protect Yourself Against Unintentional Defaults • Always provide a default case Friday, April 27, 12
  • 43. Protect Yourself Against Unintentional Defaults • Always provide a default case • In most cases that default case should be failure Friday, April 27, 12
  • 44. Protect Yourself Against Unintentional Defaults • Always provide a default case • In most cases that default case should be failure • Use the stdlib :fail method to fail gracefully. Friday, April 27, 12
  • 45. Protect Yourself Against Unintentional Defaults class mysql::params { case $::operatingsystem { ‘redhat’: { $serverpkg = ‘mysql-server’ } default: { fail(‘MySQL Server package undefined.’) } } } Friday, April 27, 12
  • 46. Remember You Don’t Have To Think of Everything Friday, April 27, 12
  • 47. Remember You Don’t Have To Think of Everything Leave room for others to improve your modules without refactoring them... Friday, April 27, 12
  • 48. Remember You Don’t Have To Think of Everything Leave room for others to improve your modules without refactoring them... ...and then you get to benefit and re-merge their changes when they do. Friday, April 27, 12
  • 49. And then we haz a community! Friday, April 27, 12
  • 50. Thank You Eric Shamow eric@puppetlabs.com http://opsrealist.info @eshamow Friday, April 27, 12