Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Hand Crafted Artisinal Chef Resources
someara
February 02, 2016
Technology
0
270
Hand Crafted Artisinal Chef Resources
Configuration Management Camp
Ghent Belgium
February 2016
someara
February 02, 2016
Tweet
Share
More Decks by someara
See All by someara
Docker Docker Docker Chef
someara
0
190
Configuration Management Camp 2015
someara
1
270
Cookbook Reusability
someara
0
240
TDI with ChefDK 0.0.1
someara
2
320
Configuration Management 101 @ Scale12x
someara
2
590
Configuration Management 101
someara
3
510
Introduction to Chef - Scale 10x
someara
2
350
Introduction to Chef - NYLUG Jan 2012
someara
2
240
Introduction to Chef - LISA11
someara
10
6k
Other Decks in Technology
See All in Technology
YAMLを書くだけで構築できる分散ストレージ
sat
PRO
0
190
New Features in C# 10/11
chack411
0
950
THETA Xの登場はジオ業界を変えるか?
furuhashilab
0
170
キャッチアップ Android 13 / Catch up Android 13
yanzm
2
1.2k
プロダクション環境の信頼性を損ねず観測する技術
egmc
4
570
AWS CLI入門_20220513
suzakiyoshito
0
3.9k
Poolにおける足を止めないシステム基盤構築
winebarrel
3
870
LINEスタンプの実例紹介 小さく始める障害検知・対応・振り返りの 改善プラクティス
line_developers
PRO
3
1.6k
1年間のポストモーテム運用とそこから生まれたツール sre-advisor / SRE NEXT 2022
fujiwara3
6
3.3k
CTOのためのQAのつくりかた #scrumniigata / SigSQA How to create QA for CTOs and VPoEs
caori_t
0
270
ドキュメントの翻訳に必要なこと
mayukosawai
0
170
LINE WORKS API 2.0について
mmclsntr
0
120
Featured
See All Featured
Faster Mobile Websites
deanohume
294
28k
Designing with Data
zakiwarfel
91
3.9k
YesSQL, Process and Tooling at Scale
rocio
157
12k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
151
12k
A Modern Web Designer's Workflow
chriscoyier
689
180k
How to Ace a Technical Interview
jacobian
265
21k
Bash Introduction
62gerente
596
210k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
5 minutes of I Can Smell Your CMS
philhawksworth
196
18k
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
52k
Agile that works and the tools we love
rasmusluckow
319
19k
The World Runs on Bad Software
bkeepers
PRO
56
5.2k
Transcript
Hand Crafted Artisanal Chef Resources
Config Management Camp Ghent, Belgium February 2016
Sean OMeara sean@chef.io @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