Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Cookbook Reusability
Search
someara
October 02, 2014
Technology
830
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cookbook Reusability
Chef Summit 2014
someara
October 02, 2014
More Decks by someara
See All by someara
Docker Docker Docker Chef
someara
0
550
Hand Crafted Artisinal Chef Resources
someara
0
630
Configuration Management Camp 2015
someara
1
590
TDI with ChefDK 0.0.1
someara
2
900
Configuration Management 101 @ Scale12x
someara
2
940
Configuration Management 101
someara
3
820
Introduction to Chef - Scale 10x
someara
2
480
Introduction to Chef - NYLUG Jan 2012
someara
2
330
Introduction to Chef - LISA11
someara
10
6.2k
Other Decks in Technology
See All in Technology
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
1
200
Account Factory for Terraformによる 標準化されたアカウント発行の自動化
pensuke628
0
110
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
410
キャリアLT今日までそして明日から
kentapapa
1
100
猫でもわかるKiro Web
kentapapa
1
150
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
140
メルカリにおけるAI時代の高速プロトタイピング基盤「Arca」
ryotarai
17
13k
AI臭い文章とは何なのか
nasuvitz
35
68k
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
220
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
170
AIに賢く動いてもらうためのコンテキスト〜Snowflake女子会 vol.8
snowwmn0824
0
190
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
170
Featured
See All Featured
The Invisible Side of Design
smashingmag
301
52k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Typedesign – Prime Four
hannesfritz
42
3.2k
Marketing to machines
jonoalderson
1
5.8k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
540
Into the Great Unknown - MozCon
thekraken
41
2.7k
Code Review Best Practice
trishagee
74
20k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Building the Perfect Custom Keyboard
takai
2
890
Transcript
Cookbook Reusability! Chef Community Summit 2014
Sean OMeara!
[email protected]
! @someara
whoami
A Year in Review
Diversification
7zip! apache2! ark! application*! couchdb! Imagemagick! java
logrotate! mercurial! munin! nagios! nginx! ntp! openvpn
pacman! postgresql! python! reprepro! rabbitmq! runit! supervisor
selinux! tmux! varnish ! wordpress!
Supermarket https://www.flickr.com/photos/mobilestreetlife/10885044043
• Escaped the tyranny of JIRA! • Moved to Github
Issues! • Automated CLA checking! • OSS Artifact Repository
Rewrites
2009 0.5.2 Chef Vagrant ChefSpec 0.1.0 0.0.2 Minitest-Chef Berkshelf Test
Kitchen 2010 0.9.0 2011 0.10.0 2012 10.12.0 1.0.0 0.2.0 1.0.0 0.7.0 1.0.0 2013 2014 1.0.0 2.0.0 1.0.0 2.0.0 1.4.0 11.0.0 12.0.0 1.6.5 3.0.0 3.0.0 1.2.2 ServerSpec ChefDK 0.0.1 2.0.0 0.2.2 TDI Capability 0.8.0
yum! yum-*! jenkins! mysql! httpd
The Evolution of a Chef Cookbook
Stage 1 - Paradise https://www.flickr.com/photos/nattu/1385100375/
None
test / repair test / repair test / repair
Easy to read Easy to grok Easy to test }
Stage 2 - if statements
logic compiled into resource collection
Resource DSL } Just Ruby }
Resource DSL } Just Ruby } }Chef
Stage 3 - Crazytown https://www.flickr.com/photos/kwl/4595324641
None
wat
Why?
Reusable is useful
Cross-platform is useful
We desire useful things
Platform idioms are hard
Keeping the Dream Alive https://www.flickr.com/photos/kalexanderson/7014655351/
Most people just write their own cookbooks from scratch
I really really really want reusable cross-platform cookbooks
Lessons Learned
Attributes are routinely abused https://www.flickr.com/photos/jabberwocky381/2828863789
None
Attributes are an interface
Attributes are tunable knobs
None
You probably just want a variable
None
Or even a method
None
Using an attribute to track state during a Chef run
causes tears and sorrow
Prefer resource parameters
None
None
Primitives are more useful than opinionated policy
“They’re Just Resources”! ! LWRP is Googleable
Zoom out a level! ! Think about services and runtimes,
not files and processes
Singleton resources are good but confusing. Possibly even dangerous.! !
Multiple instance support is better! ! Cross-platform resources are best
None
BDD / TDD yields high quality cookbooks https://www.flickr.com/photos/glenirah/4376553184
Test Kitchen! ServerSpec / Minitest / Bats! ChefSpec
2009 0.5.2 Chef Vagrant ChefSpec 0.1.0 0.0.2 Minitest-Chef Berkshelf Test
Kitchen 2010 0.9.0 2011 0.10.0 2012 10.12.0 1.0.0 0.2.0 1.0.0 0.7.0 1.0.0 2013 2014 1.0.0 2.0.0 1.0.0 2.0.0 1.4.0 11.0.0 12.0.0 1.6.5 3.0.0 3.0.0 1.2.2 ServerSpec ChefDK 0.0.1 2.0.0 0.2.2 This Slide Again 0.8.0
Full test coverage is tedious
Full test coverage is totally worth it
Let users bring their own configurations
It is better to add to a resource_collection than to
monkey patch it
Configuration files are the brains of a service
Manage minimal configuration to get a service running
Offload further configuration to the user
conf.d is your friend
Hide everything else inside a resource
Add resource parameters when appropriate
None
None
Cross-platform cookbooks are hard https://www.flickr.com/photos/glenirah/4376553184
Cross-platform resources are even harder
They can be done!
Create a resource
None
Create a provider
None
Subclass platform providers
None
None
None
None
None
Set provider default for platforms
None
Do Repeat Yourself
Some resources are often the duplicated across providers
That’s fine. It’s the pattern as a whole that’s important
Maximize for grokability
People will be reading your code for the first time
during operations work
Init systems are annoying
Using a service resource usually requires file or template resources
in addition to service[thingd]
Debconf! Docker! LaunchD! Runit! SMF! Simple! SystemD! Sysvinit! Upstart! Windows
Services
Subclassing is awesome
None
Customize before recipe compilation
Going Forward
Cookbooks that ship resource primitives
More examples to copy
More breaking backwards compatibility (sorry)
Providers implemented with Docker containers (why not?)
chef-metal
Tell me what you think
Please don’t hurt me =)
None