SlideShare una empresa de Scribd logo
1 de 32
Descargar para leer sin conexión
Enjoying the Journey from
Puppet 3.x to Puppet 4.x
Rob Nelson
Who Am I?
Puppet user since 2014 (3.3 era)
Vox Pupuli, puppet-lint contributor
@rnelson0, https://rnelson0.com/
Agenda
•  Why upgrade?
•  Refactor our codebase for Puppet 4
•  Upgrade our Puppet master(s) and agents to Puppet 4.x
•  Refactor our codebase to remove Puppet 2- and 3-isms
•  Tips, tricks, and tools
•  Enjoying ourselves
Why?
•  Puppet 4 is old! First released March, 2015
•  Puppet 3 is really old! End Of Support on December 31, 2016
•  Puppet 4 only modules
•  Puppet 4 language improvements
•  Application Orchestration
•  PE first, FOSS eventually; some free implementations (such as choria) appearing
•  AIO Puppet and Puppetserver
•  Better performance, security; same agent/puppetserver between FOSS and PE
•  Puppet 5 is coming!
Who does this apply to?
•  Puppet Enterprise users
•  Puppet Opensource users
•  Foreman (1.13+) users
•  Master and Masterless
Blueprint
•  Start with Puppet 3.x
•  Read the release notes
•  Plan the roadmap
•  Validate / create tests
•  Refactor until your current version passes all tests
•  Upgrade/Replace the master(s)
•  Upgrade the agents
•  Repeat the Refactor / Upgrade steps until you get to 4.latest
Release Notes
•  All of them - not just the latest version
•  Identify potential issues, deprecated features, etc
•  Determine the minimum version required to upgrade to target version
•  Stay up to date
Define the Roadmap
•  Determine the current version
•  In-place upgrades or new infrastructure?
•  Identify intermediate version steps
•  Enable Future Parser [and Strict Variables] before you hit 4.x
•  PE: Requires intermediate upgrades or fresh installs (check KB)
•  FOSS: Go straight to 4.latest
•  Determine how upgrades and interruptions affect ecosystem products – PE
Console/puppetboard, SEIMs, monitoring, etc.
FOSS Example Roadmap
•  3.6.0 -> 3.8.7
•  3.8.7 w/Future Parser [and Strict Variables]
•  3.8.7 -> 4.7.0
•  Today’s example roadmap
PE Example Roadmap
•  3.7.2 -> 3.8.6
•  3.8.6 w/Future Parser [and Strict Variables]
•  3.8.6 -> 2015.3.3
•  2015.3.3 -> 2016.2.1
Validate/Create Tests
•  Tests assure (mostly) predictable behavior
•  Determine what kinds of tests you need - unit, acceptance, integration, other?
•  Good testing setup in puppet-module-skeleton
•  Never written an rspec-puppet test? puppet-retrospec generates naive tests
that need tuned
•  Existing tests must pass before modifying code
•  Turn on Future Parser [and Strict Variables] only at 3.8.x
•  Beyond tests: catalog diffs, personalized tests
Rspec Tests
$ cat spec/classes/apache_spec.rb
require 'spec_helper'
describe 'profile::apache', :type => :class do
let :facts do
{
facts_hash
}
end
context 'with defaults for all parameters' do
it { is_expected.to create_class('profile::apache') }
it { is_expected.to contain_package('httpd') }
it { is_expected.to contain_user("apache") }
end
end
Rspec Run
[rnelson0@build03 profile:production]$ bundle exec rspec spec/classes/
apache_spec.rb
profile::apache
with defaults for all parameters
should contain Class[profile::apache]
should contain Package[httpd]
should contain User[apache]
Finished in 7.82 seconds (files took 2.49 seconds to load)
3 examples, 0 failures
Refactor
•  Create a new branch for the target version, e.g. 3.8.7
•  Test against current and target versions, e.g. ~>3.6.0 and ~>3.8.0, with and
without Future Parser/Strict Variables
•  Identify failing tests, refactor to fix
•  Upgrade modules as early as possible. Be aware of the required Puppet
version for a module version, and look out for defunct or migrated modules,
such as those transferred to Vox Pupuli
•  Move forward when tests are green for current AND next version
Testing with particular Puppet versions
$ grep PUPPET Gemfile
gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 4.0'
[rnelson0@build controlrepo]$ export PUPPET_GEM_VERSION='~>3.8.0'
[rnelson0@build controlrepo]$ bundle update
Installing puppet 3.8.7 (was 4.6.0)
[rnelson0@build controlrepo]$ bundle exec puppet --version
3.8.7
[rnelson0@build controlrepo]$ export PUPPET_GEM_VERSION='3.8.1'
[rnelson0@build controlrepo]$ bundle update
Installing puppet 3.8.1 (was 3.8.7)
[rnelson0@build controlrepo]$ bundle exec puppet --version
3.8.1
High level Master(s) upgrade process
•  Prep for new master/in-place upgrade
•  Deploy new/upgrade in testing
•  Revert
•  Deploy new/upgrade in production
•  Start with Master of Masters or other “parent” nodes first
•  Update separate PuppetDB node, puppetdb-termini on masters
Replace the Master
•  Prepare a new operational environment
•  Do not serve bad/incorrect catalogs to existing nodes
•  Deploy a new master on the target puppet version
•  Bootstrap configuration/code
•  Test the master against itself, puppet agent -t
•  Deploy and test canary nodes in the same operational environment
In-place Master upgrade
•  Snapshot (or equivalent) the master(s) and canary nodes
•  Restrict access to the master:
•  Control access with firewall/load balancer
•  Disable puppet agent on nodes with orchestration
•  Revoke certificates for non-canary nodes
•  Revoke the CA, generate a new CA and new agent certs for canary nodes only
•  Upgrade the master
•  Test the master then canary nodes with puppet agent -t
Troubleshooting
•  Collect logs from the master and canaries
•  Look for changed resources, number of resources in catalog
•  Revert production environment
•  Analyze cause(s)
•  Refactor code and data to address issues
•  Try again
•  Learn from failures, prevent them in the future
Upgrade the Agents
•  Can often skip on PATCH versions and some MINOR versions (see rel notes)
•  puppetlabs/puppet_agent (requirements) updates agents on next check-in
•  Orchestration
•  Replace nodes with new instances running the new agent
•  By hand
Repeat
•  Relax, enjoy the success of an upgrade!
•  Start working on the next version/feature flags
•  Repeat the Refactor / Upgrade steps
Keeping Up
Keeping Up
Refactor to take advantage of Puppet 4 language improvements, new tools (ex:
r10k -> PE Code Manager), new file locations, etc.
•  PE has quarterly upgrades, FOSS more frequent
•  The less frequently you do something, the more painful it is. “Upgrade early
and upgrade often!”
•  Try not to get more than 2 MINORs behind
•  Test against puppet version ~>4.0 (latest v4) and run bundle update before
manual tests
Puppet 4 Language Improvements
•  Replace create_resources() with iteration
•  Replace validate_*() with data types (including a Sensitive type)
•  There is a validate_legacy() helper function available in puppetlabs/stdlib to
assist with replacing validate_*() functions (blog)
•  Simplified resource wrappers with * and + operators
•  Improved default attributes are per-expression
•  New template type EPP is available
•  Puppet Lookup, Data In Modules, and other hiera improvements
•  Use $facts[] instead of global variables to tidy up the namespace and remove
ambiguity
Tips & Tricks – Puppet Enterprise
•  PE includes support, use it for planning/errors
•  Puppet Enterprise Upgrade Service to engage Pro Services
•  PE Classifier changes over time. Review
Preconfigured Node Groups documentation
•  pe_puppetserver_gem is out, puppetserver_gem is in
•  Do not use PE’s bundled Ruby for other Ruby tasks, conflicts between
bundled/downloaded gems. Recommend rbenv/rvm or SCL-equiv instead
•  Do not ever do this on your master. EVER!
Tips & Tricks - Strings
Understand how string conversion works in puppet, hiera, rspec-puppet, and how it
has changed:
•  rspec-puppet: 'undef' represents an undefined value
•  Puppet DSL: it is the string undef! Try :undef, without quotes, instead
•  If you have a file resource with a title or path of ${undefvar}/${populatedvar},
rspec will start failing because file { 'undef/etc/app.conf' :} is not valid
•  Similar issue with 'true' vs true and 'false' vs false
•  Other common issues: input from hiera/ENC, quoted numbers as strings, stringify
vs structured facts, unquoted strings in case selectors, etc
•  May require acceptance tests/canary nodes to become apparent
Tips & Tricks - Hiera
•  Hiera eyaml gem is lost during the upgrade to the 4.x puppetserver
•  Enable the yaml backend and ensure that the master does not rely on eyaml data
•  Run the agent on the master to redeploy the gem (with puppet/hiera or similar)
before agents check in
•  %{}: used to prevent variable interpolation, as in %%{}{environment} to generate
the string %{environment}. In 3.x and in 4.5 resolves to an empty string, in 4.0-4.4
it returned the scope, giving strings like %<#Hiera:7329A802#>{environment}. Use
%{::} instead, as in %%{::}{environment}. Affects PE < 2016.2.0
•  datadir: some versions expect :: prepends to variables and others do not.
Change %{environment} to %{::environment}. Likely PE < 2016.2.0 as well
Tips & Tricks - Other
•  Review modules and their supported versions. May be incorrect or weak
assumptions (>= 3 but should also include < 4 – check tests)
•  Upgrades across major versions mean additional troubleshooting
•  Upgrade early – but with caveats
•  Many tools to assist with automating version upgrades in your Puppetfile
•  ERB scope: prepend most variables with @ (<%= var %> to <%= @var %>)
•  Script to detect usage of hardcoded /etc/puppet paths, no longer correct in v4
•  External fact weighting bug: FACT-1413
•  Minimize coupled/entangled changes
•  Ask for help! Colleagues, social media, etc.
Tools
•  Puppet Community Slack / IRC and Mailing Lists
•  puppet-ghostbuster helps you find "dead code" that you may want to prune
before you start on your refactoring journey.
•  rspec-puppet, puppetlabs_spec_helper, and puppet-lint are improving their
Puppet 4 support
•  A number of catalog diff tools exist (diff generators and a viewer) to inspect
the actual catalog differences from active nodes across different versions of
Puppet.
Links
Additional information on Puppet 4 and Migrations
•  Official Puppet Upgrade Docs
•  Whirlwind Tour of Puppet 4 by R.I. Pienaar
•  The Power of Puppet 4 by Martin Alfke
•  Puppet - our journey from Puppet 3.8 to Puppet 4 by Jonas Genannt
Summary
•  Plan the upgrade blueprint
•  Have working tests before upgrading
•  Step through the new versions / feature flags
•  Refactor code to take advantage of the language and tool improvements
•  Keep mowing
•  Enjoy the journey!

Más contenido relacionado

La actualidad más candente

Puppet Camp Austin 2015: Getting Started with Puppet
Puppet Camp Austin 2015: Getting Started with PuppetPuppet Camp Austin 2015: Getting Started with Puppet
Puppet Camp Austin 2015: Getting Started with Puppet
Puppet
 

La actualidad más candente (20)

Advanced Java Testing @ POSS 2019
Advanced Java Testing @ POSS 2019Advanced Java Testing @ POSS 2019
Advanced Java Testing @ POSS 2019
 
Jenkins Shared Libraries Workshop
Jenkins Shared Libraries WorkshopJenkins Shared Libraries Workshop
Jenkins Shared Libraries Workshop
 
Codifying the Build and Release Process with a Jenkins Pipeline Shared Library
Codifying the Build and Release Process with a Jenkins Pipeline Shared LibraryCodifying the Build and Release Process with a Jenkins Pipeline Shared Library
Codifying the Build and Release Process with a Jenkins Pipeline Shared Library
 
Puppet Camp Austin 2015: Getting Started with Puppet
Puppet Camp Austin 2015: Getting Started with PuppetPuppet Camp Austin 2015: Getting Started with Puppet
Puppet Camp Austin 2015: Getting Started with Puppet
 
Cleaning Up the Dirt of the Nineties - How New Protocols are Modernizing the Web
Cleaning Up the Dirt of the Nineties - How New Protocols are Modernizing the WebCleaning Up the Dirt of the Nineties - How New Protocols are Modernizing the Web
Cleaning Up the Dirt of the Nineties - How New Protocols are Modernizing the Web
 
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
PuppetConf 2016: Running Puppet Software in Docker Containers – Gareth Rushgr...
 
Virtual Bolt Workshop, 5 May 2020
Virtual Bolt Workshop, 5 May 2020Virtual Bolt Workshop, 5 May 2020
Virtual Bolt Workshop, 5 May 2020
 
Vagrant+Rouster at salesforce.com
Vagrant+Rouster at salesforce.comVagrant+Rouster at salesforce.com
Vagrant+Rouster at salesforce.com
 
sed.pdf
sed.pdfsed.pdf
sed.pdf
 
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...PuppetConf 2016:  Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
PuppetConf 2016: Docker, Mesos, Kubernetes and...Puppet? Don't Panic! – Deep...
 
MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019
MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019
MPL: modular pipeline library - Dynamic Talks Milwaukee 4/11/2019
 
Troubleshooting Puppet
Troubleshooting PuppetTroubleshooting Puppet
Troubleshooting Puppet
 
Debugging of (C)Python applications
Debugging of (C)Python applicationsDebugging of (C)Python applications
Debugging of (C)Python applications
 
Bgoug 2019.11 building free, open-source, plsql products in cloud
Bgoug 2019.11   building free, open-source, plsql products in cloudBgoug 2019.11   building free, open-source, plsql products in cloud
Bgoug 2019.11 building free, open-source, plsql products in cloud
 
Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020
 
Scalable Cloud-Native Masterless Puppet, with PuppetDB and Bolt, Craig Watson...
Scalable Cloud-Native Masterless Puppet, with PuppetDB and Bolt, Craig Watson...Scalable Cloud-Native Masterless Puppet, with PuppetDB and Bolt, Craig Watson...
Scalable Cloud-Native Masterless Puppet, with PuppetDB and Bolt, Craig Watson...
 
Building Good Containers for Python Applications
Building Good Containers for Python ApplicationsBuilding Good Containers for Python Applications
Building Good Containers for Python Applications
 
Hands-on monitoring with Prometheus
Hands-on monitoring with PrometheusHands-on monitoring with Prometheus
Hands-on monitoring with Prometheus
 
Cloud-Native CI/CD on Kubernetes with Tekton Pipelines
Cloud-Native CI/CD on Kubernetes with Tekton PipelinesCloud-Native CI/CD on Kubernetes with Tekton Pipelines
Cloud-Native CI/CD on Kubernetes with Tekton Pipelines
 
Contributing to OpenStack
Contributing to OpenStackContributing to OpenStack
Contributing to OpenStack
 

Destacado

Destacado (13)

Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
Can you upgrade to Puppet 4.x? (Beginner) Can you upgrade to Puppet 4.x? (Beg...
 
PuppetConf 2016: Site Launch Automation: From Days to Minutes – Kristen Crawf...
PuppetConf 2016: Site Launch Automation: From Days to Minutes – Kristen Crawf...PuppetConf 2016: Site Launch Automation: From Days to Minutes – Kristen Crawf...
PuppetConf 2016: Site Launch Automation: From Days to Minutes – Kristen Crawf...
 
Nantes M1 Meraud
Nantes M1 MeraudNantes M1 Meraud
Nantes M1 Meraud
 
PuppetConf 2016: Case Study: Puppets in the Government – Kathy Lee (co-author...
PuppetConf 2016: Case Study: Puppets in the Government – Kathy Lee (co-author...PuppetConf 2016: Case Study: Puppets in the Government – Kathy Lee (co-author...
PuppetConf 2016: Case Study: Puppets in the Government – Kathy Lee (co-author...
 
High availability for puppet - 2016
High availability for puppet - 2016High availability for puppet - 2016
High availability for puppet - 2016
 
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
 
PuppetConf 2016: Debugging Diversity – Anjuan Simmons, Assemble Systems
PuppetConf 2016: Debugging Diversity – Anjuan Simmons, Assemble SystemsPuppetConf 2016: Debugging Diversity – Anjuan Simmons, Assemble Systems
PuppetConf 2016: Debugging Diversity – Anjuan Simmons, Assemble Systems
 
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. PienaarPuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
PuppetConf. 2016: External Data in Puppet 4 – R.I. Pienaar
 
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells FargoPuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
PuppetConf 2016: Puppet Troubleshooting – Thomas Uphill, Wells Fargo
 
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, PuppetPuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
 
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, PuppetPuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
 
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
 
Managing a R&D Lab with Foreman
Managing a R&D Lab with ForemanManaging a R&D Lab with Foreman
Managing a R&D Lab with Foreman
 

Similar a PuppetConf 2016: Enjoying the Journey from Puppet 3.x to 4.x – Rob Nelson, AT&T

Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
ActiveState
 

Similar a PuppetConf 2016: Enjoying the Journey from Puppet 3.x to 4.x – Rob Nelson, AT&T (20)

Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
Enjoying the Journey from Puppet 3.x to Puppet 4.x (PuppetConf 2016)
 
Puppet Camp Duesseldorf 2014: Martin Alfke - Can you upgrade to puppet 4.x?
Puppet Camp Duesseldorf 2014: Martin Alfke - Can you upgrade to puppet 4.x?Puppet Camp Duesseldorf 2014: Martin Alfke - Can you upgrade to puppet 4.x?
Puppet Camp Duesseldorf 2014: Martin Alfke - Can you upgrade to puppet 4.x?
 
Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?Can you upgrade to Puppet 4.x?
Can you upgrade to Puppet 4.x?
 
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14Continuing Evolution of Perl: Highlights of ActivePerl 5.14
Continuing Evolution of Perl: Highlights of ActivePerl 5.14
 
Bootstrapping Puppet and Application Deployment - PuppetConf 2013
Bootstrapping Puppet and Application Deployment - PuppetConf 2013Bootstrapping Puppet and Application Deployment - PuppetConf 2013
Bootstrapping Puppet and Application Deployment - PuppetConf 2013
 
Strategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoringStrategies for Puppet code upgrade and refactoring
Strategies for Puppet code upgrade and refactoring
 
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
20111110 how puppet-fits_into_your_existing_infrastructure_and_change_managem...
 
Scaling to-5000-nodes
Scaling to-5000-nodesScaling to-5000-nodes
Scaling to-5000-nodes
 
Puppet Camp New York 2015: Puppet Enterprise Scaling Lessons Learned (Interme...
Puppet Camp New York 2015: Puppet Enterprise Scaling Lessons Learned (Interme...Puppet Camp New York 2015: Puppet Enterprise Scaling Lessons Learned (Interme...
Puppet Camp New York 2015: Puppet Enterprise Scaling Lessons Learned (Interme...
 
Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with Puppet
 
Automation using Puppet 3
Automation using Puppet 3 Automation using Puppet 3
Automation using Puppet 3
 
Puppet Camp Paris 2014: Test Driven Development
Puppet Camp Paris 2014: Test Driven DevelopmentPuppet Camp Paris 2014: Test Driven Development
Puppet Camp Paris 2014: Test Driven Development
 
20140408 tdd puppetcamp-paris
20140408 tdd puppetcamp-paris20140408 tdd puppetcamp-paris
20140408 tdd puppetcamp-paris
 
Smolder Introduction
Smolder IntroductionSmolder Introduction
Smolder Introduction
 
Puppet getting started by Dirk Götz
Puppet getting started by Dirk GötzPuppet getting started by Dirk Götz
Puppet getting started by Dirk Götz
 
Puppet Development Workflow
Puppet Development WorkflowPuppet Development Workflow
Puppet Development Workflow
 
Puppet slides for intelligrape
Puppet slides for intelligrapePuppet slides for intelligrape
Puppet slides for intelligrape
 
From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...
 
Ansible top 10 - 2018
Ansible top 10 -  2018Ansible top 10 -  2018
Ansible top 10 - 2018
 
Puppet_training
Puppet_trainingPuppet_training
Puppet_training
 

Más de 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
 
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
 

Más de Puppet (20)

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
 
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
 
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 in k8s, Miroslav Hadzhiev
Puppet in k8s, Miroslav HadzhievPuppet in k8s, Miroslav Hadzhiev
Puppet in k8s, Miroslav Hadzhiev
 

Último

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu SubbuApidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
Apidays Singapore 2024 - Modernizing Securities Finance by Madhu Subbu
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 

PuppetConf 2016: Enjoying the Journey from Puppet 3.x to 4.x – Rob Nelson, AT&T

  • 1.
  • 2. Enjoying the Journey from Puppet 3.x to Puppet 4.x Rob Nelson
  • 3. Who Am I? Puppet user since 2014 (3.3 era) Vox Pupuli, puppet-lint contributor @rnelson0, https://rnelson0.com/
  • 4. Agenda •  Why upgrade? •  Refactor our codebase for Puppet 4 •  Upgrade our Puppet master(s) and agents to Puppet 4.x •  Refactor our codebase to remove Puppet 2- and 3-isms •  Tips, tricks, and tools •  Enjoying ourselves
  • 5. Why? •  Puppet 4 is old! First released March, 2015 •  Puppet 3 is really old! End Of Support on December 31, 2016 •  Puppet 4 only modules •  Puppet 4 language improvements •  Application Orchestration •  PE first, FOSS eventually; some free implementations (such as choria) appearing •  AIO Puppet and Puppetserver •  Better performance, security; same agent/puppetserver between FOSS and PE •  Puppet 5 is coming!
  • 6. Who does this apply to? •  Puppet Enterprise users •  Puppet Opensource users •  Foreman (1.13+) users •  Master and Masterless
  • 7. Blueprint •  Start with Puppet 3.x •  Read the release notes •  Plan the roadmap •  Validate / create tests •  Refactor until your current version passes all tests •  Upgrade/Replace the master(s) •  Upgrade the agents •  Repeat the Refactor / Upgrade steps until you get to 4.latest
  • 8. Release Notes •  All of them - not just the latest version •  Identify potential issues, deprecated features, etc •  Determine the minimum version required to upgrade to target version •  Stay up to date
  • 9. Define the Roadmap •  Determine the current version •  In-place upgrades or new infrastructure? •  Identify intermediate version steps •  Enable Future Parser [and Strict Variables] before you hit 4.x •  PE: Requires intermediate upgrades or fresh installs (check KB) •  FOSS: Go straight to 4.latest •  Determine how upgrades and interruptions affect ecosystem products – PE Console/puppetboard, SEIMs, monitoring, etc.
  • 10. FOSS Example Roadmap •  3.6.0 -> 3.8.7 •  3.8.7 w/Future Parser [and Strict Variables] •  3.8.7 -> 4.7.0 •  Today’s example roadmap
  • 11. PE Example Roadmap •  3.7.2 -> 3.8.6 •  3.8.6 w/Future Parser [and Strict Variables] •  3.8.6 -> 2015.3.3 •  2015.3.3 -> 2016.2.1
  • 12. Validate/Create Tests •  Tests assure (mostly) predictable behavior •  Determine what kinds of tests you need - unit, acceptance, integration, other? •  Good testing setup in puppet-module-skeleton •  Never written an rspec-puppet test? puppet-retrospec generates naive tests that need tuned •  Existing tests must pass before modifying code •  Turn on Future Parser [and Strict Variables] only at 3.8.x •  Beyond tests: catalog diffs, personalized tests
  • 13. Rspec Tests $ cat spec/classes/apache_spec.rb require 'spec_helper' describe 'profile::apache', :type => :class do let :facts do { facts_hash } end context 'with defaults for all parameters' do it { is_expected.to create_class('profile::apache') } it { is_expected.to contain_package('httpd') } it { is_expected.to contain_user("apache") } end end
  • 14. Rspec Run [rnelson0@build03 profile:production]$ bundle exec rspec spec/classes/ apache_spec.rb profile::apache with defaults for all parameters should contain Class[profile::apache] should contain Package[httpd] should contain User[apache] Finished in 7.82 seconds (files took 2.49 seconds to load) 3 examples, 0 failures
  • 15. Refactor •  Create a new branch for the target version, e.g. 3.8.7 •  Test against current and target versions, e.g. ~>3.6.0 and ~>3.8.0, with and without Future Parser/Strict Variables •  Identify failing tests, refactor to fix •  Upgrade modules as early as possible. Be aware of the required Puppet version for a module version, and look out for defunct or migrated modules, such as those transferred to Vox Pupuli •  Move forward when tests are green for current AND next version
  • 16. Testing with particular Puppet versions $ grep PUPPET Gemfile gem "puppet", ENV['PUPPET_GEM_VERSION'] || '~> 4.0' [rnelson0@build controlrepo]$ export PUPPET_GEM_VERSION='~>3.8.0' [rnelson0@build controlrepo]$ bundle update Installing puppet 3.8.7 (was 4.6.0) [rnelson0@build controlrepo]$ bundle exec puppet --version 3.8.7 [rnelson0@build controlrepo]$ export PUPPET_GEM_VERSION='3.8.1' [rnelson0@build controlrepo]$ bundle update Installing puppet 3.8.1 (was 3.8.7) [rnelson0@build controlrepo]$ bundle exec puppet --version 3.8.1
  • 17. High level Master(s) upgrade process •  Prep for new master/in-place upgrade •  Deploy new/upgrade in testing •  Revert •  Deploy new/upgrade in production •  Start with Master of Masters or other “parent” nodes first •  Update separate PuppetDB node, puppetdb-termini on masters
  • 18. Replace the Master •  Prepare a new operational environment •  Do not serve bad/incorrect catalogs to existing nodes •  Deploy a new master on the target puppet version •  Bootstrap configuration/code •  Test the master against itself, puppet agent -t •  Deploy and test canary nodes in the same operational environment
  • 19. In-place Master upgrade •  Snapshot (or equivalent) the master(s) and canary nodes •  Restrict access to the master: •  Control access with firewall/load balancer •  Disable puppet agent on nodes with orchestration •  Revoke certificates for non-canary nodes •  Revoke the CA, generate a new CA and new agent certs for canary nodes only •  Upgrade the master •  Test the master then canary nodes with puppet agent -t
  • 20. Troubleshooting •  Collect logs from the master and canaries •  Look for changed resources, number of resources in catalog •  Revert production environment •  Analyze cause(s) •  Refactor code and data to address issues •  Try again •  Learn from failures, prevent them in the future
  • 21. Upgrade the Agents •  Can often skip on PATCH versions and some MINOR versions (see rel notes) •  puppetlabs/puppet_agent (requirements) updates agents on next check-in •  Orchestration •  Replace nodes with new instances running the new agent •  By hand
  • 22. Repeat •  Relax, enjoy the success of an upgrade! •  Start working on the next version/feature flags •  Repeat the Refactor / Upgrade steps
  • 24. Keeping Up Refactor to take advantage of Puppet 4 language improvements, new tools (ex: r10k -> PE Code Manager), new file locations, etc. •  PE has quarterly upgrades, FOSS more frequent •  The less frequently you do something, the more painful it is. “Upgrade early and upgrade often!” •  Try not to get more than 2 MINORs behind •  Test against puppet version ~>4.0 (latest v4) and run bundle update before manual tests
  • 25. Puppet 4 Language Improvements •  Replace create_resources() with iteration •  Replace validate_*() with data types (including a Sensitive type) •  There is a validate_legacy() helper function available in puppetlabs/stdlib to assist with replacing validate_*() functions (blog) •  Simplified resource wrappers with * and + operators •  Improved default attributes are per-expression •  New template type EPP is available •  Puppet Lookup, Data In Modules, and other hiera improvements •  Use $facts[] instead of global variables to tidy up the namespace and remove ambiguity
  • 26. Tips & Tricks – Puppet Enterprise •  PE includes support, use it for planning/errors •  Puppet Enterprise Upgrade Service to engage Pro Services •  PE Classifier changes over time. Review Preconfigured Node Groups documentation •  pe_puppetserver_gem is out, puppetserver_gem is in •  Do not use PE’s bundled Ruby for other Ruby tasks, conflicts between bundled/downloaded gems. Recommend rbenv/rvm or SCL-equiv instead •  Do not ever do this on your master. EVER!
  • 27. Tips & Tricks - Strings Understand how string conversion works in puppet, hiera, rspec-puppet, and how it has changed: •  rspec-puppet: 'undef' represents an undefined value •  Puppet DSL: it is the string undef! Try :undef, without quotes, instead •  If you have a file resource with a title or path of ${undefvar}/${populatedvar}, rspec will start failing because file { 'undef/etc/app.conf' :} is not valid •  Similar issue with 'true' vs true and 'false' vs false •  Other common issues: input from hiera/ENC, quoted numbers as strings, stringify vs structured facts, unquoted strings in case selectors, etc •  May require acceptance tests/canary nodes to become apparent
  • 28. Tips & Tricks - Hiera •  Hiera eyaml gem is lost during the upgrade to the 4.x puppetserver •  Enable the yaml backend and ensure that the master does not rely on eyaml data •  Run the agent on the master to redeploy the gem (with puppet/hiera or similar) before agents check in •  %{}: used to prevent variable interpolation, as in %%{}{environment} to generate the string %{environment}. In 3.x and in 4.5 resolves to an empty string, in 4.0-4.4 it returned the scope, giving strings like %<#Hiera:7329A802#>{environment}. Use %{::} instead, as in %%{::}{environment}. Affects PE < 2016.2.0 •  datadir: some versions expect :: prepends to variables and others do not. Change %{environment} to %{::environment}. Likely PE < 2016.2.0 as well
  • 29. Tips & Tricks - Other •  Review modules and their supported versions. May be incorrect or weak assumptions (>= 3 but should also include < 4 – check tests) •  Upgrades across major versions mean additional troubleshooting •  Upgrade early – but with caveats •  Many tools to assist with automating version upgrades in your Puppetfile •  ERB scope: prepend most variables with @ (<%= var %> to <%= @var %>) •  Script to detect usage of hardcoded /etc/puppet paths, no longer correct in v4 •  External fact weighting bug: FACT-1413 •  Minimize coupled/entangled changes •  Ask for help! Colleagues, social media, etc.
  • 30. Tools •  Puppet Community Slack / IRC and Mailing Lists •  puppet-ghostbuster helps you find "dead code" that you may want to prune before you start on your refactoring journey. •  rspec-puppet, puppetlabs_spec_helper, and puppet-lint are improving their Puppet 4 support •  A number of catalog diff tools exist (diff generators and a viewer) to inspect the actual catalog differences from active nodes across different versions of Puppet.
  • 31. Links Additional information on Puppet 4 and Migrations •  Official Puppet Upgrade Docs •  Whirlwind Tour of Puppet 4 by R.I. Pienaar •  The Power of Puppet 4 by Martin Alfke •  Puppet - our journey from Puppet 3.8 to Puppet 4 by Jonas Genannt
  • 32. Summary •  Plan the upgrade blueprint •  Have working tests before upgrading •  Step through the new versions / feature flags •  Refactor code to take advantage of the language and tool improvements •  Keep mowing •  Enjoy the journey!