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
Hand Crafted Artisinal Chef Resources
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
someara
February 02, 2016
Technology
630
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Hand Crafted Artisinal Chef Resources
Configuration Management Camp
Ghent Belgium
February 2016
someara
February 02, 2016
More Decks by someara
See All by someara
Docker Docker Docker Chef
someara
0
550
Configuration Management Camp 2015
someara
1
590
Cookbook Reusability
someara
0
830
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
AgentCoreで実践するハーネスエンジニアリング
yakumo
0
140
猫でもわかるKiro Web
kentapapa
1
160
個別開発で終わらせない。 現場の課題をプロダクトの強さに変える StockmarkのFDE
ktkrhr
0
520
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
280
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
110
キャリアLT今日までそして明日から
kentapapa
1
140
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
620
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
0
460
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
sanghyuk
0
250
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
1
140
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
1
560
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Unsuck your backbone
ammeep
672
58k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Prompt Engineering for Job Search
mfonobong
0
470
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
860
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
750
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
Hand Crafted Artisanal Chef Resources
Config Management Camp Ghent, Belgium February 2016
Sean OMeara
[email protected]
@someara
whoami
Part 1
Writing library cookbooks An opinionated workflow Step by step
Step 1 - Disregard dogma “Unit tests first” is a
dirty lie https://flic.kr/p/aTSiXF
Step 2 - Make things up Then work backwards https://flic.kr/p/dXkQ5s
Contrived examples are the best examples
None
Place this off to the side, we will come back
for it later.
Step 3 - Create a cookbook By hand. Be a
wizard. https://flic.kr/p/3mMW6e
mkdir -p ~/src/custom-resources-tutorial cd ~/src/custom-resources-tutorial emacs metadata.rb
None
Step 4 - Embed a test cookbook. By hand. Be
a wizard. Again. https://flic.kr/p/ai36NG
mkdir -p test/cookbooks/my_file_test cd test/cookbooks/my_file_test echo “test cookbook” > README.md
mkdir recipes touch recipes/default.rb emacs metadata.rb
None
Step 5 - Tell Berkshelf about it https://flic.kr/p/k5jmja
cd ~/src/custom-resources-tutorial emacs Berksfile
None
Step 6 - Configure Test Kitchen https://flic.kr/p/r38F5c
emacs .kitchen.yml
None
kitchen test ; echo $?
Step 7 - Save game https://flic.kr/p/6ZJ4G7
cd ~/src/custom-resources-tutorial cp ~/src/chef-cookbooks/docker/.gitignore . cp ~/src/chef-cookbooks/docker/.rubocop.yml .
rubocop -a git init git add . git commit -a
-m 'v0.0.1 - cookbook skeleton' git tag v0.0.1
Step 8 - Use resource in test recipe https://flic.kr/p/8MuUAX
emacs test/cookbooks/my_file_test/recipes/ default.rb
None
kitchen converge ; echo $?
Step 9 - Implement resource https://flic.kr/p/bkVKRb
cd ~/src/custom-resources-tutorial mkdir libraries emacs libraries/my_file.rb
None
kitchen converge ; echo $? kitchen converge ; echo $?
Step 10 - Test for behavior https://i.ytimg.com/vi/1y8Rqvz-Jcg/ maxresdefault.jpgz
mkdir -p test/integration/my_file/inspec emacs -p test/integration/my_file/inspec/ run_spec.rb
None
kitchen verify ; echo $?
Step 11 - Add specs and commit https://flic.kr/p/rrgfZh
cd ~/src/custom-resources-tutorial mkdir spec emacs spec/spec_helper.rb
None
emacs spec/my_file_spec.rb
None
rubocop -a rspec ; echo $? git add . git
commit -a -m “v0.1.0 - my_file resource” git tag v0.1.0
stove 0.1.0
Step 12 - Iterate indefinitely https://flic.kr/p/8Ny8Jt
Congratulations, you have now written one software.
You must now maintain it forever.
muahaha.
None
Part 2
Custom Resources Tips and Tricks
Be explicit https://flic.kr/p/pz1JAo
None
None
None
None
Converge twice during development Use markers for “negative” actions https://flic.kr/p/pqwd5U
None
None
Tests let you refactor with confidence https://flic.kr/p/4WnjM4
None
STAR WIPE
None
Pure Ruby resources https://flic.kr/p/5km2fM
Pure Ruby resources utilize - The Ruby Standard Library -
Chef helper libs (mixlib-shellout) - Ruby gems
None
It might make sense to vendor gems
load_current_value - Runs at converge time - Just before the
action body - Loads desired state values
None
converge_if_changed - Runs if any desired_state: true property differs from
user input - desired_state: false avoids comparison
None
coerce transforms values - Called when property is set -
Called when property is read - Use this to raise errors on bad input
The docker_container resource uses coercion heavily https://github.com/chef-cookbooks/ docker/blob/master/libraries/ docker_container.rb
lazy defaults - Delays evaluation until used - Useful for
calculated values
None
Composite resources https://flic.kr/p/fm58oo
Composite resources - Reuse Chef resources - Actions look like
recipes - Do not use load_current_value
etcd_installation_binary :create
httpd_config_rhel :create
Avoid leaky abstractions https://flic.kr/p/7d1kDc
Resources should be minimalist
Early versions might be simple
None
They rarely stay that way
Iterate and add more features Break down into smaller resources
Use naming semantics to describe strategy
etcd_installation_binary etcd_installation_docker etcd_installation_package etcd_service_manager_docker etcd_service_manager_execute etcd_service_manager_systemd etcd_service_manager_sysvinit etcd_service_manager_upstart
Recycle patterns as they emerge
docker_installation_binary docker_installation_package docker_installation_script docker_service_manager_execute docker_service_manager_systemd docker_service_manager_sysvinit docker_service_manager_upstart
Chef selects defaults with the provider resolution system
…
…
Compose resources Most specific to least specific
None
Enjoy
fin