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
51
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
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
220
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
2
560
AWSで始める実践Dagster入門
kitagawaz
1
620
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
5
1.6k
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
310
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
870
Webブラウザ向け動画配信プレイヤーの 大規模リプレイスから得た知見と学び
yud0uhu
0
230
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
260
Agile PBL at New Grads Trainings
kawaguti
PRO
1
430
Evolución del razonamiento matemático de GPT-4.1 a GPT-5 - Data Aventura Summit 2025 & VSCode DevDays
lauchacarro
0
200
「どこから読む?」コードとカルチャーに最速で馴染むための実践ガイド
zozotech
PRO
0
450
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
830
Featured
See All Featured
Speed Design
sergeychernyshev
32
1.1k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
The World Runs on Bad Software
bkeepers
PRO
70
11k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Site-Speed That Sticks
csswizardry
10
820
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
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.