Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Types, speed and migration
Search
Daniele Sluijters
February 05, 2016
Technology
0
52
Types, speed and migration
An introduction to Puppet 4 and how to upgrade given at Puppet Camp Amsterdam 2016.
Daniele Sluijters
February 05, 2016
Tweet
Share
Other Decks in Technology
See All in Technology
Webhook best practices for rock solid and resilient deployments
glaforge
1
280
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
550
[CV勉強会@関東 World Model 読み会] Orbis: Overcoming Challenges of Long-Horizon Prediction in Driving World Models (Mousakhan+, NeurIPS 2025)
abemii
0
130
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
370
セキュリティについて学ぶ会 / 2026 01 25 Takamatsu WordPress Meetup
rocketmartue
1
300
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.3k
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.5k
IaaS/SaaS管理における SREの実践 - SRE Kaigi 2026
bbqallstars
4
2.2k
OpenShiftでllm-dを動かそう!
jpishikawa
0
100
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
1.8k
Amazon S3 Vectorsを使って資格勉強用AIエージェントを構築してみた
usanchuu
3
450
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.8k
Featured
See All Featured
Speed Design
sergeychernyshev
33
1.5k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
450
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
92
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
240
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
440
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
200
Paper Plane
katiecoart
PRO
0
46k
How to make the Groovebox
asonas
2
1.9k
Transcript
Types, speed and migration An introduction to Puppet 4 and
how to upgrade.
I am that guy ‣Daenney ‣Puppet for ~5 years ‣puppetlabs/apt
‣pypuppetdb & Puppetboard ‣“You broke the tests” ‣Vox Pupuli
Vox Pupuli 60 Modules & tooling 50 Puppeteers Join the
revolution!
Types
Puppet 0.24 - 3.8 It’s whatever I feel like.
notice(md5("240610708") == md5("QNKCDZO")) md5('QNKCDZO'): 0e830400451993494058024219903391 md5('240610708'): 0e462097431906509019562988736854
Puppet 4 It’s exactly what it is supposed to be.
Untyped class parameters Are of type "Any"
class a ( $maven_version = [] ) { notice($maven_version) }
class { 'a': maven_version => '1.0.3', } Notice: Scope(Class[A]): 1.0.3
Typed class parameters
class a ( Array $maven_version = [] ) { notice($maven_version)
} class { 'a': maven_version => '1.0.3', } Error: Expected parameter 'maven_version' of 'Class[A]' to have type Array[Data], got String.
Variables Are typed to their value
class a { $var = {} case $var { Hash:
{ notice('a hash')} default: { notice('not a hash')} } } Notice: Scope(Class[A]): a hash
$array_of_things.each | Integer $index, Variant[String, Hash] $value | { …
}
case $magic_thingy { Undef: { $_magic_thingy = [] } Array:
{ $_magic_thingy = $_magic_thingy } Hash: { $_magic_thingy = [$_magic_thingy] } String: { $_magic_thingy = [$_magic_thingy] } default: { fail('magic_thingy can only be: String, Array, Hash or unset') } }
Complex Types
Struct[{ policy => Enum[changed, always, daily, weekly], timeout => Optional[Integer],
]} $update = { 'policy' => 'changed' }
Splat
$p_opts = { 'ensure' => 'latest', } package { 'fish':
* => $p_opts, require => Apt::Source['fish'], }
Docs https://docs.puppetlabs.com/puppet/ 4.3/reference/lang_data.html
Speed Comes in two forms
Development speed Early, accurate feedback.
Compilation speed 15 - 40% faster since 4.2.0
Staying compatible with 3 and 4 is frustrating.
This is how we did it. With >10k nodes.
Step 1: breathe
Step 2: get to 3.8
Step 2.5: upgrade modules Vox Pupuli and Puppetlabs modules Just
Work™
Step 3: future parser Do not enable this on Puppet
< 3.7.4
http://entroz.deviantart.com/art/You-Shall-Not-Pass-330127651
Step 4: upgrade to 4
Step 5: …
https://flic.kr/p/7h9HWP
Spin up a new master Point agents to the new
master and babysit them.
Pre-compile and compare catalogs Catalog Preview: http://is.gd/mod_catalog_preview Puppet Catalog differ:
http://is.gd/catalog_diff Puppet Catalog diff viewer: http://is.gd/catalog_diff_viewer
We did it in… 1 — 2 weeks of prep
1 week of rollout 2 — 3 days of cleanup 0 production incidents
But… we cheated Migrated to future parser over a year
go :-).
Q? Maybe A.