SlideShare a Scribd company logo
1 of 92
Download to read offline
Beginner Chef Antipatterns
Julian C. Dunn
Senior Consultant
Opscode, Inc.
Wednesday, May 1, 13
I learned Chef the hard way
Wednesday, May 1, 13
Chef can have a steep learning curve
Flickr user: chesterbr
Wednesday, May 1, 13
... which we try to mitigate
• learnchef.com
• docs.opscode.com
• Opscode Public/Private
training classes
• Podcasts (Food Fight Show,
etc.)
• Local user groups
• ChefConf! (and the hallway
track)
Wednesday, May 1, 13
Still, it’s hard to know
when you’re doing
things right.
Wednesday, May 1, 13
Even harder to know when you’re doing
something wrong.
Wednesday, May 1, 13
“Best practices” in the community
are evolving all the time.
Wednesday, May 1, 13
• “I would have liked to see more about best practices ... [o]ur
instructor had to go ‘off topic’ to explain some common pitfalls.”
- feedback from Chef 2-Day Fundamentals
Wednesday, May 1, 13
This talk will give you some best practices to make
you a Master Chef quickly.
Wednesday, May 1, 13
Number one rule
Wednesday, May 1, 13
Wednesday, May 1, 13
Nothing replaces good advance planning
Wednesday, May 1, 13
Advance planning
Wednesday, May 1, 13
Advance planning
• Plan in advance:
Wednesday, May 1, 13
Advance planning
• Plan in advance:
• What cookbooks you’re going to have
Wednesday, May 1, 13
Advance planning
• Plan in advance:
• What cookbooks you’re going to have
• What recipes
Wednesday, May 1, 13
Advance planning
• Plan in advance:
• What cookbooks you’re going to have
• What recipes
• Roles and their names
Wednesday, May 1, 13
Advance planning
• Plan in advance:
• What cookbooks you’re going to have
• What recipes
• Roles and their names
• How many environments
Wednesday, May 1, 13
Advance planning
• Plan in advance:
• What cookbooks you’re going to have
• What recipes
• Roles and their names
• How many environments
• Clusters within those environments
Wednesday, May 1, 13
Advance planning
• Plan in advance:
• What cookbooks you’re going to have
• What recipes
• Roles and their names
• How many environments
• Clusters within those environments
• Data bag hierarchy & naming, data bag item structure
Wednesday, May 1, 13
Advance planning
• Plan in advance:
• What cookbooks you’re going to have
• What recipes
• Roles and their names
• How many environments
• Clusters within those environments
• Data bag hierarchy & naming, data bag item structure
• BTW, if you want to go blind: www.textfiles.com/
underconstruction/
Wednesday, May 1, 13
The Top Ten List of
Antipatterns
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
git://github.com/yourcompany/chef-repo.git
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
git://github.com/yourcompany/chef-repo.git
Why is this bad?
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
• Mixing temporal data (environments, roles) with
versioned data (cookbooks)
• Git philosophy: One Git repo for each thing you’re
versioning independently
• Don’t be afraid of more Git repos!
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
Better:
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
git://github.com/yourcompany/chef-data.git
Better:
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
git://github.com/yourcompany/chef-data.git
Better:
git://github.com/yourcompany-cookbooks/foo.git
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
More reasons to do this:
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
git remote add upstream git://github.com/whatevs/
upstream.git
git fetch upstream
git merge upstream/master
More reasons to do this:
Wednesday, May 1, 13
10. The Giant Git repo for your chef-repo
git remote add upstream git://github.com/whatevs/
upstream.git
git fetch upstream
git merge upstream/master
More reasons to do this:
Also, easy to open-source your
cookbooks just by tweaking ACL
Wednesday, May 1, 13
9. The one giant cookbook for your company
git://github.com/yourcompany-cookbooks/yourco.git
Wednesday, May 1, 13
9. The one giant cookbook for your company
git://github.com/yourcompany-cookbooks/yourco.git
Why is this bad?
Wednesday, May 1, 13
9. The one giant cookbook for your company
Flickr user: ctbto
Wednesday, May 1, 13
9. The one giant cookbook for your company
• Chef cookbooks configure a top-level service
Flickr user: ctbto
Wednesday, May 1, 13
9. The one giant cookbook for your company
• Chef cookbooks configure a top-level service
• The Giant Cookbook mixes & matches things
that don’t go with one another
Flickr user: ctbto
Wednesday, May 1, 13
9. The one giant cookbook for your company
• Chef cookbooks configure a top-level service
• The Giant Cookbook mixes & matches things
that don’t go with one another
• Big blast radius on changes to recipes: leads to
accidents
Flickr user: ctbto
Wednesday, May 1, 13
9. The one giant cookbook for your company
Rather than:
+ cookbooks
+ yourcompany
+ recipes
|
+- mainsite-apache-virtualhost.rb
+- anothersite-apache-virtualhost.rb
+- spring-properties.rb
Wednesday, May 1, 13
9. The one giant cookbook for your company
This:
+ cookbooks
+ mainsite
| + recipes
| +- apache-virtualhost.rb
|
+ anothersite
| + recipes
| +- apache-virtualhost.rb
|
+ springproperties
+ recipes
+- properties.rb
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
• Environments are a logical concept, mapping to your
actual environments
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
• Environments are a logical concept, mapping to your
actual environments
• Don’t be tempted to overload them as “cluster name”
or “data center name” though!
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
mongos = search(:node, “role:mongodb AND
chef_environment:#{node.chef_environment}”)
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
mongos = search(:node, “role:mongodb AND
chef_environment:#{node.chef_environment}”)
Might not be enough if you have more
than one MongoDB cluster in the
“production” environment
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
Better:
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
node.set[‘mongodb’][‘cluster_name’] =
‘mongocluster1’
mongos = search(:node, “role:mongodb AND
chef_environment:#{node.chef_environment
} AND
mongodb.cluster_name=#{node[‘mongodb’]
[‘cluster_name’]}”)
Better:
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
Even Better:
Wednesday, May 1, 13
8. Using Chef Environments for more than just logical environment
node.set[‘globals’][‘data_center’] = ‘portlandia’
node.set[‘mongodb’][‘cluster_name’] =
‘mongocluster1’
mongos = search(:node, “role:mongodb AND
chef_environment:#{node.chef_environment} AND
mongodb.cluster_name=#{node[‘mongodb’]
[‘cluster_name’]} AND
globals.data_center=#{node[‘globals’]
[‘data_center’]}”)
Even Better:
Wednesday, May 1, 13
7. Forking community cookbooks
Wednesday, May 1, 13
7. Forking community cookbooks
• Opscode maintains ~130
cookbooks
Wednesday, May 1, 13
7. Forking community cookbooks
• Opscode maintains ~130
cookbooks
• Others out there are also really
great & well-maintained
(Redis, MongoDB)
Wednesday, May 1, 13
7. Forking community cookbooks
• Opscode maintains ~130
cookbooks
• Others out there are also really
great & well-maintained
(Redis, MongoDB)
• Resist the temptation to fork
cookbooks!
Wednesday, May 1, 13
7. Forking community cookbooks
• Opscode maintains ~130
cookbooks
• Others out there are also really
great & well-maintained
(Redis, MongoDB)
• Resist the temptation to fork
cookbooks!
• You won’t get the benefit of
upstream bugfixes &
enhancements
Wednesday, May 1, 13
7. Forking community cookbooks
• Rather, use application/library cookbook pattern to overlay your changes (thanks,
Bryan Berry)
• Example: SecondMarket’s “wrapper” PostgreSQL cookbook
Wednesday, May 1, 13
7. Forking community cookbooks
• Rather, use application/library cookbook pattern to overlay your changes (thanks,
Bryan Berry)
• Example: SecondMarket’s “wrapper” PostgreSQL cookbook
smpostgresql/recipes/server.rb:
See: github.com/secondmarket-cookbooks/smpostgresql.git
Wednesday, May 1, 13
6. Run list in roles
Wednesday, May 1, 13
6. Run list in roles
• Controversial, I know!
Wednesday, May 1, 13
6. Run list in roles
• Controversial, I know!
• Opscode’s own training material says to put run lists
in roles
Wednesday, May 1, 13
6. Run list in roles
• Controversial, I know!
• Opscode’s own training material says to put run lists
in roles
• But... roles aren’t versioned. Anyway, they are
temporal data.
Wednesday, May 1, 13
6. Run list in roles
• Controversial, I know!
• Opscode’s own training material says to put run lists
in roles
• But... roles aren’t versioned. Anyway, they are
temporal data.
• Hard to deploy run_list changes in a role across
environments without the “nuclear” option
Wednesday, May 1, 13
6. Run list in roles
Instead of:
Wednesday, May 1, 13
6. Run list in roles
"run_list": [
"recipe[selinux::permissive]",
"recipe[rsyslog]",
"recipe[chef-client::config]",
"recipe[chef-client::service]",
"recipe[chef-client::delete_validation]",
"recipe[openssh::iptables]"
]
Instead of:
Wednesday, May 1, 13
6. Run list in roles
"run_list": [
"recipe[selinux::permissive]",
"recipe[rsyslog]",
"recipe[chef-client::config]",
"recipe[chef-client::service]",
"recipe[chef-client::delete_validation]",
"recipe[openssh::iptables]"
]
Instead of:
Do:
Wednesday, May 1, 13
6. Run list in roles
"run_list": [
"recipe[selinux::permissive]",
"recipe[rsyslog]",
"recipe[chef-client::config]",
"recipe[chef-client::service]",
"recipe[chef-client::delete_validation]",
"recipe[openssh::iptables]"
]
Instead of:
% knife cookbook create roles
% vi roles/base.rb
“run_list”: [ “recipe[roles::base]” ]
Do:
Wednesday, May 1, 13
6. Run list in roles
roles/recipes/base.rb:
Wednesday, May 1, 13
6. Run list in roles
include_recipe “selinux::permissive"
include_recipe “rsyslog”
include_recipe “chef-client::config”
include_recipe “chef-client::service”
include_recipe “chef-client::delete_validation”
include_recipe “openssh::iptables”
roles/recipes/base.rb:
Wednesday, May 1, 13
6. Run list in roles
include_recipe “selinux::permissive"
include_recipe “rsyslog”
include_recipe “chef-client::config”
include_recipe “chef-client::service”
include_recipe “chef-client::delete_validation”
include_recipe “openssh::iptables”
roles/recipes/base.rb:
• Write conditionals around these too if you want
• Or set role attributes in the recipe
Wednesday, May 1, 13
5. Disorganized data bags
• Remember what I said about
pre-planning?
Flickr user: macsurak
Wednesday, May 1, 13
5. Disorganized data bags
Wednesday, May 1, 13
5. Disorganized data bags
Wednesday, May 1, 13
5. Disorganized data bags
• Only have two-levels (data bag, and then data bag
item) to work with, so plan ahead!
Wednesday, May 1, 13
5. Disorganized data bags
• Only have two-levels (data bag, and then data bag
item) to work with, so plan ahead!
• Avoid making data bag items enormous JSON
hashes - keep them small for performance
Wednesday, May 1, 13
5. Disorganized data bags
• Only have two-levels (data bag, and then data bag
item) to work with, so plan ahead!
• Avoid making data bag items enormous JSON
hashes - keep them small for performance
• 8 KB JSON x 4 Chef runs/h x 1000 nodes = 5.38
GB/week!
Wednesday, May 1, 13
4. Not knowing about or using the chef-shell
Flickr user: blueridgekitties
Wednesday, May 1, 13
4. Not knowing about or using the chef-shell
• Chef-Shell (formerly
Shef): One of the most
under-utilized tools!
• IRB (Interactive Ruby) +
Chef primitives
• Cookbook development
• Production debugging
Flickr user: blueridgekitties
Wednesday, May 1, 13
4. Not knowing about or using the chef-shell
Wednesday, May 1, 13
4. Not knowing about or using the chef-shell
Wednesday, May 1, 13
29: <% @members.each do |member| -%>
30: <%= member['hostname'] %> IN CNAME
<%= member['ec2']['public_hostname'] %>.
31: <% end -%>
4. Not knowing about or using the chef-shell
Wednesday, May 1, 13
4. Not knowing about or using the chef-shell
[jdunn@dns1 ~]$ chef-shell -z
loading configuration: /etc/chef/client.rb
Session type: client
.
.
chef > echo off
chef > members = search('node', "domain:epicfail.com")
chef > members.each do |m|
chef > pp "#{m['hostname']}, #{m['ec2']['public_hostname']}"
chef ?> end
"host1, ec2-50-17-43-13.compute-1.amazonaws.com"
"host37, ec2-23-23-145-243.compute-1.amazonaws.com"
"host3, "
NoMethodError: undefined method `[]' for nil:NilClass
Wednesday, May 1, 13
4. Not knowing about or using the chef-shell
• Way more stuff than this
• Check out my Slideshare deck: slideshare.net/
JulianDunn/an-introduction-to-shef-the-chef-shell
• Chef Shell will save you time, guaranteed!
Wednesday, May 1, 13
3. Who’s Afraid of the Big Bad LWRP
• Myth: LWRPs are hard to write!
You need to know Ruby!
Flickr user: edenpictures
Wednesday, May 1, 13
catmacros.wordpress.com
Wednesday, May 1, 13
3. Who’s Afraid of the Big Bad LWRP
• Use inline resources
• Basic Ruby classes and methods go a long way
(Array, Hash, String, etc.)
• The LWRP framework is ... lightweight and does a
lot for you
Flickr user: emawebdesign
Wednesday, May 1, 13
3. Who’s Afraid of the Big Bad LWRP
cookbooks/mouse/recipes/default.rb
mouse “Itchy” do
says “Ow, Scratchy cut off my tail”
tail false
action :say
end
Wednesday, May 1, 13
3. Who’s Afraid of the Big Bad LWRP
cookbooks/mouse/resources/default.rb
actions :say
attribute :given_name, :name_attribute => true
attribute :phrase, :default => “squeak”
attribute :tail, :default => true, :kind_of => [TrueClass, FalseClass]
cookbooks/mouse/providers/default.rb
action :say do
log “My name is #{new_resource.given_name}”
log new_resource.phrase unless new_resource.phrase =~ /^squeak$/
log “I #{new_resource.tail ? ‘do’ : ‘do not’ } have a tail
end
Wednesday, May 1, 13
See, it’s that easy!
Wednesday, May 1, 13
2. “Not Invented Here” Syndrome
• Bias against using other people’s code/libraries/
cookbooks
• Temptation to write your own bespoke cookbook
• Instead, do your research, find the best one, and use
it in a library/application cookbook pattern
• Contribute improvements/changes back
Wednesday, May 1, 13
#1 Chef Antipattern...
Wednesday, May 1, 13
Being the only Chef in your shop
Wednesday, May 1, 13
1. The Lone Wolf Chef
• Bus/truck factor of 1
• Chef configures applications
• Developers know applications better than you
• Get them involved in writing & maintaining
cookbooks
• Then, everyone is responsible for production-
readiness!
Wednesday, May 1, 13
Recap: Top Ten List of Antipatterns
• The one giant Git repo for all Chef data
• The one giant cookbook named after your company
• Using Chef Environments for more than just logical environment
• Forking community cookbooks
• Maintaining the run list in your role
• Disorganized data bags
• Not knowing about or using the chef-shell
• Being afraid of LWRPs
• Not Invented Here Syndrome
• The Lone Wolf Chef
Wednesday, May 1, 13
Thanks!
@julian_dunn
github.com/juliandunn
jdunn@opscode.com
We’re hiring like gangbusters! opscode.com/careers
Wednesday, May 1, 13

More Related Content

What's hot

Docker Docker Docker Chef
Docker Docker Docker ChefDocker Docker Docker Chef
Docker Docker Docker ChefSean OMeara
 
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Software, Inc.
 
CLUG 2014-10 - Cookbook CI with Jenkins
CLUG 2014-10 - Cookbook CI with JenkinsCLUG 2014-10 - Cookbook CI with Jenkins
CLUG 2014-10 - Cookbook CI with JenkinsZachary Stevens
 
Chef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation SetupChef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation SetupChef Software, Inc.
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to ChefKnoldus Inc.
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with ChefJonathan Weiss
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Chef
 
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Software, Inc.
 
Building a PaaS using Chef
Building a PaaS using ChefBuilding a PaaS using Chef
Building a PaaS using ChefShaun Domingo
 
Continous delivery with Jenkins and Chef
Continous delivery with Jenkins and ChefContinous delivery with Jenkins and Chef
Continous delivery with Jenkins and Chefdefrag2
 
AWS Meetup - Sydney - February
AWS Meetup - Sydney - February AWS Meetup - Sydney - February
AWS Meetup - Sydney - February markghiasy
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Chef
 
Server Installation and Configuration with Chef
Server Installation and Configuration with ChefServer Installation and Configuration with Chef
Server Installation and Configuration with ChefRaimonds Simanovskis
 
Opscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with ChefOpscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with ChefChef Software, Inc.
 

What's hot (20)

Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
 
Docker Docker Docker Chef
Docker Docker Docker ChefDocker Docker Docker Chef
Docker Docker Docker Chef
 
Chef Jumpstart
Chef JumpstartChef Jumpstart
Chef Jumpstart
 
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
Chef Fundamentals Training Series Module 6: Roles, Environments, Community Co...
 
CLUG 2014-10 - Cookbook CI with Jenkins
CLUG 2014-10 - Cookbook CI with JenkinsCLUG 2014-10 - Cookbook CI with Jenkins
CLUG 2014-10 - Cookbook CI with Jenkins
 
Introduction to chef
Introduction to chefIntroduction to chef
Introduction to chef
 
Chef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation SetupChef Fundamentals Training Series Module 2: Workstation Setup
Chef Fundamentals Training Series Module 2: Workstation Setup
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
 
Configuration management with Chef
Configuration management with ChefConfiguration management with Chef
Configuration management with Chef
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
 
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
Chef Fundamentals Training Series Module 4: The Chef Client Run and Expanding...
 
Building a PaaS using Chef
Building a PaaS using ChefBuilding a PaaS using Chef
Building a PaaS using Chef
 
Continous delivery with Jenkins and Chef
Continous delivery with Jenkins and ChefContinous delivery with Jenkins and Chef
Continous delivery with Jenkins and Chef
 
Ansible ALLTHETHINGS
Ansible ALLTHETHINGSAnsible ALLTHETHINGS
Ansible ALLTHETHINGS
 
Chef introduction
Chef introductionChef introduction
Chef introduction
 
AWS Meetup - Sydney - February
AWS Meetup - Sydney - February AWS Meetup - Sydney - February
AWS Meetup - Sydney - February
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
 
Server Installation and Configuration with Chef
Server Installation and Configuration with ChefServer Installation and Configuration with Chef
Server Installation and Configuration with Chef
 
Opscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with ChefOpscode Webinar: Managing Your VMware Infrastructure with Chef
Opscode Webinar: Managing Your VMware Infrastructure with Chef
 

Viewers also liked

An Introduction to Shef, the Chef Shell
An Introduction to Shef, the Chef ShellAn Introduction to Shef, the Chef Shell
An Introduction to Shef, the Chef ShellJulian Dunn
 
Cookbook refactoring & abstracting logic to Ruby(gems)
Cookbook refactoring & abstracting logic to Ruby(gems)Cookbook refactoring & abstracting logic to Ruby(gems)
Cookbook refactoring & abstracting logic to Ruby(gems)Chef Software, Inc.
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0NIFTY Cloud
 
Using Kanban and Chef: A Case Study – Jeffrey Hulten
Using Kanban and Chef: A Case Study – Jeffrey HultenUsing Kanban and Chef: A Case Study – Jeffrey Hulten
Using Kanban and Chef: A Case Study – Jeffrey HultenChef Software, Inc.
 
ChefConf 2013 Keynote Session – Opscode – Adam Jacob
ChefConf 2013 Keynote Session – Opscode – Adam JacobChefConf 2013 Keynote Session – Opscode – Adam Jacob
ChefConf 2013 Keynote Session – Opscode – Adam JacobChef Software, Inc.
 
Opscode Webinar: Automation for Education May 08-2013
Opscode Webinar: Automation for Education May 08-2013Opscode Webinar: Automation for Education May 08-2013
Opscode Webinar: Automation for Education May 08-2013Chef Software, Inc.
 
Safe Food Practices (97 03)
Safe Food Practices (97 03)Safe Food Practices (97 03)
Safe Food Practices (97 03)guestc243c2
 
公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10
公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10
公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10しょうご すずき
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugTakeshi Komiya
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01Takeshi Komiya
 
プレゼンテーション アンチパターン から見るスタンダードなプレゼン
プレゼンテーション アンチパターン から見るスタンダードなプレゼンプレゼンテーション アンチパターン から見るスタンダードなプレゼン
プレゼンテーション アンチパターン から見るスタンダードなプレゼン真俊 横田
 
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug満徳 関
 
マークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumiマークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumiTakeshi Komiya
 
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2masaaki komori
 
Next Generation Web Application Architecture
Next Generation Web Application ArchitectureNext Generation Web Application Architecture
Next Generation Web Application ArchitectureKoji SHIMADA
 
new Objctive-C literal syntax
new Objctive-C literal syntaxnew Objctive-C literal syntax
new Objctive-C literal syntaxWataru Kimura
 

Viewers also liked (20)

An Introduction to Shef, the Chef Shell
An Introduction to Shef, the Chef ShellAn Introduction to Shef, the Chef Shell
An Introduction to Shef, the Chef Shell
 
The Berkshelf Way
The Berkshelf WayThe Berkshelf Way
The Berkshelf Way
 
Cookbook refactoring & abstracting logic to Ruby(gems)
Cookbook refactoring & abstracting logic to Ruby(gems)Cookbook refactoring & abstracting logic to Ruby(gems)
Cookbook refactoring & abstracting logic to Ruby(gems)
 
クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0クラウド上でのChef活用と ベストプラクティス v0.2.0
クラウド上でのChef活用と ベストプラクティス v0.2.0
 
Using Kanban and Chef: A Case Study – Jeffrey Hulten
Using Kanban and Chef: A Case Study – Jeffrey HultenUsing Kanban and Chef: A Case Study – Jeffrey Hulten
Using Kanban and Chef: A Case Study – Jeffrey Hulten
 
ChefConf 2013 Keynote Session – Opscode – Adam Jacob
ChefConf 2013 Keynote Session – Opscode – Adam JacobChefConf 2013 Keynote Session – Opscode – Adam Jacob
ChefConf 2013 Keynote Session – Opscode – Adam Jacob
 
Opscode tech festa july 2013
Opscode tech festa   july 2013Opscode tech festa   july 2013
Opscode tech festa july 2013
 
Opscode Webinar: Automation for Education May 08-2013
Opscode Webinar: Automation for Education May 08-2013Opscode Webinar: Automation for Education May 08-2013
Opscode Webinar: Automation for Education May 08-2013
 
Safe Food Practices (97 03)
Safe Food Practices (97 03)Safe Food Practices (97 03)
Safe Food Practices (97 03)
 
公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10
公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10
公開資料 バグレポートの改善に向けた問題事例の調査とアンチパターンの作成 Rev10
 
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsugChef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
 
プレゼンテーション アンチパターン から見るスタンダードなプレゼン
プレゼンテーション アンチパターン から見るスタンダードなプレゼンプレゼンテーション アンチパターン から見るスタンダードなプレゼン
プレゼンテーション アンチパターン から見るスタンダードなプレゼン
 
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
 
メッチャ役に立つauto_incrementの話
メッチャ役に立つauto_incrementの話メッチャ役に立つauto_incrementの話
メッチャ役に立つauto_incrementの話
 
マークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumiマークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumi
 
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
 
Next Generation Web Application Architecture
Next Generation Web Application ArchitectureNext Generation Web Application Architecture
Next Generation Web Application Architecture
 
Sinatraのススメ
SinatraのススメSinatraのススメ
Sinatraのススメ
 
new Objctive-C literal syntax
new Objctive-C literal syntaxnew Objctive-C literal syntax
new Objctive-C literal syntax
 

Similar to ChefConf 2013: Beginner Chef Antipatterns

Ab(Using) the MetaCPAN API for Fun and Profit v2013
Ab(Using) the MetaCPAN API for Fun and Profit v2013Ab(Using) the MetaCPAN API for Fun and Profit v2013
Ab(Using) the MetaCPAN API for Fun and Profit v2013Olaf Alders
 
Feature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and ProfitFeature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and ProfitDaniel Schauenberg
 
AppEngine Performance Tuning
AppEngine Performance TuningAppEngine Performance Tuning
AppEngine Performance TuningDavid Chen
 
eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...
eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...
eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...PatrickCrompton
 
Chef Cookbook Testing and Continuous Integration
Chef Cookbook Testing and Continuous IntegrationChef Cookbook Testing and Continuous Integration
Chef Cookbook Testing and Continuous IntegrationJulian Dunn
 
Cooking an Omelette with Chef
Cooking an Omelette with ChefCooking an Omelette with Chef
Cooking an Omelette with Chefctaintor
 
How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)Rodrigo Ayala
 
WordCamp Milwaukee 2012 - Contributing to Open Source
WordCamp Milwaukee 2012 - Contributing to Open SourceWordCamp Milwaukee 2012 - Contributing to Open Source
WordCamp Milwaukee 2012 - Contributing to Open Sourcejclermont
 
Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013Phil Sturgeon
 
Twitter Bootstrap, or why being a PHP Developer is a bad idea
Twitter Bootstrap, or why being a PHP Developer is a bad ideaTwitter Bootstrap, or why being a PHP Developer is a bad idea
Twitter Bootstrap, or why being a PHP Developer is a bad ideaJason Lotito
 
Scaling a Web Site - OSCON Tutorial
Scaling a Web Site - OSCON TutorialScaling a Web Site - OSCON Tutorial
Scaling a Web Site - OSCON Tutorialduleepa
 
Cook Up a Runtime with The New OSGi Resolver - Neil Bartlett
Cook Up a Runtime with The New OSGi Resolver - Neil BartlettCook Up a Runtime with The New OSGi Resolver - Neil Bartlett
Cook Up a Runtime with The New OSGi Resolver - Neil Bartlettmfrancis
 
Cookbook Reusability @ Chef Community summit 2014
Cookbook Reusability @ Chef Community summit 2014Cookbook Reusability @ Chef Community summit 2014
Cookbook Reusability @ Chef Community summit 2014Sean OMeara
 
Cucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet UpCucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet Updimakovalenko
 
Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011dimakovalenko
 
Agile analytics applications on hadoop
Agile analytics applications on hadoopAgile analytics applications on hadoop
Agile analytics applications on hadoopRussell Jurney
 
API Simplicity == Speed; Designing APIs That are Easy and Fun to Use
API Simplicity == Speed; Designing APIs That are Easy and Fun to UseAPI Simplicity == Speed; Designing APIs That are Easy and Fun to Use
API Simplicity == Speed; Designing APIs That are Easy and Fun to UseHarold Madsen
 
Why Wordpress is better than your cms
Why Wordpress is better than your cmsWhy Wordpress is better than your cms
Why Wordpress is better than your cmsMike Ellis
 
Ruby Tuesday Ottawa - Jan 24, 2012
Ruby Tuesday Ottawa - Jan 24, 2012Ruby Tuesday Ottawa - Jan 24, 2012
Ruby Tuesday Ottawa - Jan 24, 2012michaeldwp
 
Contributing to rails
Contributing to railsContributing to rails
Contributing to railsLukas Eppler
 

Similar to ChefConf 2013: Beginner Chef Antipatterns (20)

Ab(Using) the MetaCPAN API for Fun and Profit v2013
Ab(Using) the MetaCPAN API for Fun and Profit v2013Ab(Using) the MetaCPAN API for Fun and Profit v2013
Ab(Using) the MetaCPAN API for Fun and Profit v2013
 
Feature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and ProfitFeature Flagging your Infrastructure for Fun and Profit
Feature Flagging your Infrastructure for Fun and Profit
 
AppEngine Performance Tuning
AppEngine Performance TuningAppEngine Performance Tuning
AppEngine Performance Tuning
 
eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...
eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...
eSynergy Andy Hawkins - Enabling DevOps through next generation configuration...
 
Chef Cookbook Testing and Continuous Integration
Chef Cookbook Testing and Continuous IntegrationChef Cookbook Testing and Continuous Integration
Chef Cookbook Testing and Continuous Integration
 
Cooking an Omelette with Chef
Cooking an Omelette with ChefCooking an Omelette with Chef
Cooking an Omelette with Chef
 
How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)How to be a Chef (Developer Edition)
How to be a Chef (Developer Edition)
 
WordCamp Milwaukee 2012 - Contributing to Open Source
WordCamp Milwaukee 2012 - Contributing to Open SourceWordCamp Milwaukee 2012 - Contributing to Open Source
WordCamp Milwaukee 2012 - Contributing to Open Source
 
Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013Become Master of Your Own Universe - DIBI 2013
Become Master of Your Own Universe - DIBI 2013
 
Twitter Bootstrap, or why being a PHP Developer is a bad idea
Twitter Bootstrap, or why being a PHP Developer is a bad ideaTwitter Bootstrap, or why being a PHP Developer is a bad idea
Twitter Bootstrap, or why being a PHP Developer is a bad idea
 
Scaling a Web Site - OSCON Tutorial
Scaling a Web Site - OSCON TutorialScaling a Web Site - OSCON Tutorial
Scaling a Web Site - OSCON Tutorial
 
Cook Up a Runtime with The New OSGi Resolver - Neil Bartlett
Cook Up a Runtime with The New OSGi Resolver - Neil BartlettCook Up a Runtime with The New OSGi Resolver - Neil Bartlett
Cook Up a Runtime with The New OSGi Resolver - Neil Bartlett
 
Cookbook Reusability @ Chef Community summit 2014
Cookbook Reusability @ Chef Community summit 2014Cookbook Reusability @ Chef Community summit 2014
Cookbook Reusability @ Chef Community summit 2014
 
Cucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet UpCucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet Up
 
Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011
 
Agile analytics applications on hadoop
Agile analytics applications on hadoopAgile analytics applications on hadoop
Agile analytics applications on hadoop
 
API Simplicity == Speed; Designing APIs That are Easy and Fun to Use
API Simplicity == Speed; Designing APIs That are Easy and Fun to UseAPI Simplicity == Speed; Designing APIs That are Easy and Fun to Use
API Simplicity == Speed; Designing APIs That are Easy and Fun to Use
 
Why Wordpress is better than your cms
Why Wordpress is better than your cmsWhy Wordpress is better than your cms
Why Wordpress is better than your cms
 
Ruby Tuesday Ottawa - Jan 24, 2012
Ruby Tuesday Ottawa - Jan 24, 2012Ruby Tuesday Ottawa - Jan 24, 2012
Ruby Tuesday Ottawa - Jan 24, 2012
 
Contributing to rails
Contributing to railsContributing to rails
Contributing to rails
 

More from Julian Dunn

Technical Careers Beyond DevOps
Technical Careers Beyond DevOpsTechnical Careers Beyond DevOps
Technical Careers Beyond DevOpsJulian Dunn
 
Pull, Don't Push! Sensu Summit 2018 Talk
Pull, Don't Push! Sensu Summit 2018 TalkPull, Don't Push! Sensu Summit 2018 Talk
Pull, Don't Push! Sensu Summit 2018 TalkJulian Dunn
 
Now That I Have Choreography, What Do I Do With It?
Now That I Have Choreography, What Do I Do With It?Now That I Have Choreography, What Do I Do With It?
Now That I Have Choreography, What Do I Do With It?Julian Dunn
 
Distributed systems are hard; distributed systems of people are harder
Distributed systems are hard; distributed systems of people are harderDistributed systems are hard; distributed systems of people are harder
Distributed systems are hard; distributed systems of people are harderJulian Dunn
 
Orchestration? You Don't Need Orchestration. What You Want is Choreography.
Orchestration? You Don't Need Orchestration. What You Want is Choreography.Orchestration? You Don't Need Orchestration. What You Want is Choreography.
Orchestration? You Don't Need Orchestration. What You Want is Choreography.Julian Dunn
 
Configuration Management in a Containerized World
Configuration Management in a Containerized WorldConfiguration Management in a Containerized World
Configuration Management in a Containerized WorldJulian Dunn
 
Cooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 EditionCooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 EditionJulian Dunn
 
Automating That "Other" OS
Automating That "Other" OSAutomating That "Other" OS
Automating That "Other" OSJulian Dunn
 
Chef-NYC Announcements July 2014
Chef-NYC Announcements July 2014Chef-NYC Announcements July 2014
Chef-NYC Announcements July 2014Julian Dunn
 
Chef NYC Users' Group - Announcements for June 2014
Chef NYC Users' Group - Announcements for June 2014Chef NYC Users' Group - Announcements for June 2014
Chef NYC Users' Group - Announcements for June 2014Julian Dunn
 
Improving Your Mac Productivity
Improving Your Mac ProductivityImproving Your Mac Productivity
Improving Your Mac ProductivityJulian Dunn
 
Chef Cookbook Governance BoF at ChefConf
Chef Cookbook Governance BoF at ChefConfChef Cookbook Governance BoF at ChefConf
Chef Cookbook Governance BoF at ChefConfJulian Dunn
 
Chef and PowerShell Desired State Configuration
Chef and PowerShell Desired State ConfigurationChef and PowerShell Desired State Configuration
Chef and PowerShell Desired State ConfigurationJulian Dunn
 
What Makes a Good Chef Cookbook? (May 2014 Edition)
What Makes a Good Chef Cookbook? (May 2014 Edition)What Makes a Good Chef Cookbook? (May 2014 Edition)
What Makes a Good Chef Cookbook? (May 2014 Edition)Julian Dunn
 
What Makes a Good Cookbook?
What Makes a Good Cookbook?What Makes a Good Cookbook?
What Makes a Good Cookbook?Julian Dunn
 
Configuration Management Isn't Everything
Configuration Management Isn't EverythingConfiguration Management Isn't Everything
Configuration Management Isn't EverythingJulian Dunn
 
Cooking with Chef on Windows
Cooking with Chef on WindowsCooking with Chef on Windows
Cooking with Chef on WindowsJulian Dunn
 
An Introduction to DevOps with Chef
An Introduction to DevOps with ChefAn Introduction to DevOps with Chef
An Introduction to DevOps with ChefJulian Dunn
 
Chef Workflow Strategies at SecondMarket
Chef Workflow Strategies at SecondMarketChef Workflow Strategies at SecondMarket
Chef Workflow Strategies at SecondMarketJulian Dunn
 

More from Julian Dunn (20)

Technical Careers Beyond DevOps
Technical Careers Beyond DevOpsTechnical Careers Beyond DevOps
Technical Careers Beyond DevOps
 
Pull, Don't Push! Sensu Summit 2018 Talk
Pull, Don't Push! Sensu Summit 2018 TalkPull, Don't Push! Sensu Summit 2018 Talk
Pull, Don't Push! Sensu Summit 2018 Talk
 
Now That I Have Choreography, What Do I Do With It?
Now That I Have Choreography, What Do I Do With It?Now That I Have Choreography, What Do I Do With It?
Now That I Have Choreography, What Do I Do With It?
 
Distributed systems are hard; distributed systems of people are harder
Distributed systems are hard; distributed systems of people are harderDistributed systems are hard; distributed systems of people are harder
Distributed systems are hard; distributed systems of people are harder
 
Orchestration? You Don't Need Orchestration. What You Want is Choreography.
Orchestration? You Don't Need Orchestration. What You Want is Choreography.Orchestration? You Don't Need Orchestration. What You Want is Choreography.
Orchestration? You Don't Need Orchestration. What You Want is Choreography.
 
Chef on AIX
Chef on AIXChef on AIX
Chef on AIX
 
Configuration Management in a Containerized World
Configuration Management in a Containerized WorldConfiguration Management in a Containerized World
Configuration Management in a Containerized World
 
Cooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 EditionCooking with Chef on Windows: 2015 Edition
Cooking with Chef on Windows: 2015 Edition
 
Automating That "Other" OS
Automating That "Other" OSAutomating That "Other" OS
Automating That "Other" OS
 
Chef-NYC Announcements July 2014
Chef-NYC Announcements July 2014Chef-NYC Announcements July 2014
Chef-NYC Announcements July 2014
 
Chef NYC Users' Group - Announcements for June 2014
Chef NYC Users' Group - Announcements for June 2014Chef NYC Users' Group - Announcements for June 2014
Chef NYC Users' Group - Announcements for June 2014
 
Improving Your Mac Productivity
Improving Your Mac ProductivityImproving Your Mac Productivity
Improving Your Mac Productivity
 
Chef Cookbook Governance BoF at ChefConf
Chef Cookbook Governance BoF at ChefConfChef Cookbook Governance BoF at ChefConf
Chef Cookbook Governance BoF at ChefConf
 
Chef and PowerShell Desired State Configuration
Chef and PowerShell Desired State ConfigurationChef and PowerShell Desired State Configuration
Chef and PowerShell Desired State Configuration
 
What Makes a Good Chef Cookbook? (May 2014 Edition)
What Makes a Good Chef Cookbook? (May 2014 Edition)What Makes a Good Chef Cookbook? (May 2014 Edition)
What Makes a Good Chef Cookbook? (May 2014 Edition)
 
What Makes a Good Cookbook?
What Makes a Good Cookbook?What Makes a Good Cookbook?
What Makes a Good Cookbook?
 
Configuration Management Isn't Everything
Configuration Management Isn't EverythingConfiguration Management Isn't Everything
Configuration Management Isn't Everything
 
Cooking with Chef on Windows
Cooking with Chef on WindowsCooking with Chef on Windows
Cooking with Chef on Windows
 
An Introduction to DevOps with Chef
An Introduction to DevOps with ChefAn Introduction to DevOps with Chef
An Introduction to DevOps with Chef
 
Chef Workflow Strategies at SecondMarket
Chef Workflow Strategies at SecondMarketChef Workflow Strategies at SecondMarket
Chef Workflow Strategies at SecondMarket
 

Recently uploaded

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 

Recently uploaded (20)

Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 

ChefConf 2013: Beginner Chef Antipatterns

  • 1. Beginner Chef Antipatterns Julian C. Dunn Senior Consultant Opscode, Inc. Wednesday, May 1, 13
  • 2. I learned Chef the hard way Wednesday, May 1, 13
  • 3. Chef can have a steep learning curve Flickr user: chesterbr Wednesday, May 1, 13
  • 4. ... which we try to mitigate • learnchef.com • docs.opscode.com • Opscode Public/Private training classes • Podcasts (Food Fight Show, etc.) • Local user groups • ChefConf! (and the hallway track) Wednesday, May 1, 13
  • 5. Still, it’s hard to know when you’re doing things right. Wednesday, May 1, 13
  • 6. Even harder to know when you’re doing something wrong. Wednesday, May 1, 13
  • 7. “Best practices” in the community are evolving all the time. Wednesday, May 1, 13
  • 8. • “I would have liked to see more about best practices ... [o]ur instructor had to go ‘off topic’ to explain some common pitfalls.” - feedback from Chef 2-Day Fundamentals Wednesday, May 1, 13
  • 9. This talk will give you some best practices to make you a Master Chef quickly. Wednesday, May 1, 13
  • 12. Nothing replaces good advance planning Wednesday, May 1, 13
  • 14. Advance planning • Plan in advance: Wednesday, May 1, 13
  • 15. Advance planning • Plan in advance: • What cookbooks you’re going to have Wednesday, May 1, 13
  • 16. Advance planning • Plan in advance: • What cookbooks you’re going to have • What recipes Wednesday, May 1, 13
  • 17. Advance planning • Plan in advance: • What cookbooks you’re going to have • What recipes • Roles and their names Wednesday, May 1, 13
  • 18. Advance planning • Plan in advance: • What cookbooks you’re going to have • What recipes • Roles and their names • How many environments Wednesday, May 1, 13
  • 19. Advance planning • Plan in advance: • What cookbooks you’re going to have • What recipes • Roles and their names • How many environments • Clusters within those environments Wednesday, May 1, 13
  • 20. Advance planning • Plan in advance: • What cookbooks you’re going to have • What recipes • Roles and their names • How many environments • Clusters within those environments • Data bag hierarchy & naming, data bag item structure Wednesday, May 1, 13
  • 21. Advance planning • Plan in advance: • What cookbooks you’re going to have • What recipes • Roles and their names • How many environments • Clusters within those environments • Data bag hierarchy & naming, data bag item structure • BTW, if you want to go blind: www.textfiles.com/ underconstruction/ Wednesday, May 1, 13
  • 22. The Top Ten List of Antipatterns Wednesday, May 1, 13
  • 23. 10. The Giant Git repo for your chef-repo git://github.com/yourcompany/chef-repo.git Wednesday, May 1, 13
  • 24. 10. The Giant Git repo for your chef-repo git://github.com/yourcompany/chef-repo.git Why is this bad? Wednesday, May 1, 13
  • 25. 10. The Giant Git repo for your chef-repo • Mixing temporal data (environments, roles) with versioned data (cookbooks) • Git philosophy: One Git repo for each thing you’re versioning independently • Don’t be afraid of more Git repos! Wednesday, May 1, 13
  • 26. 10. The Giant Git repo for your chef-repo Better: Wednesday, May 1, 13
  • 27. 10. The Giant Git repo for your chef-repo git://github.com/yourcompany/chef-data.git Better: Wednesday, May 1, 13
  • 28. 10. The Giant Git repo for your chef-repo git://github.com/yourcompany/chef-data.git Better: git://github.com/yourcompany-cookbooks/foo.git Wednesday, May 1, 13
  • 29. 10. The Giant Git repo for your chef-repo More reasons to do this: Wednesday, May 1, 13
  • 30. 10. The Giant Git repo for your chef-repo git remote add upstream git://github.com/whatevs/ upstream.git git fetch upstream git merge upstream/master More reasons to do this: Wednesday, May 1, 13
  • 31. 10. The Giant Git repo for your chef-repo git remote add upstream git://github.com/whatevs/ upstream.git git fetch upstream git merge upstream/master More reasons to do this: Also, easy to open-source your cookbooks just by tweaking ACL Wednesday, May 1, 13
  • 32. 9. The one giant cookbook for your company git://github.com/yourcompany-cookbooks/yourco.git Wednesday, May 1, 13
  • 33. 9. The one giant cookbook for your company git://github.com/yourcompany-cookbooks/yourco.git Why is this bad? Wednesday, May 1, 13
  • 34. 9. The one giant cookbook for your company Flickr user: ctbto Wednesday, May 1, 13
  • 35. 9. The one giant cookbook for your company • Chef cookbooks configure a top-level service Flickr user: ctbto Wednesday, May 1, 13
  • 36. 9. The one giant cookbook for your company • Chef cookbooks configure a top-level service • The Giant Cookbook mixes & matches things that don’t go with one another Flickr user: ctbto Wednesday, May 1, 13
  • 37. 9. The one giant cookbook for your company • Chef cookbooks configure a top-level service • The Giant Cookbook mixes & matches things that don’t go with one another • Big blast radius on changes to recipes: leads to accidents Flickr user: ctbto Wednesday, May 1, 13
  • 38. 9. The one giant cookbook for your company Rather than: + cookbooks + yourcompany + recipes | +- mainsite-apache-virtualhost.rb +- anothersite-apache-virtualhost.rb +- spring-properties.rb Wednesday, May 1, 13
  • 39. 9. The one giant cookbook for your company This: + cookbooks + mainsite | + recipes | +- apache-virtualhost.rb | + anothersite | + recipes | +- apache-virtualhost.rb | + springproperties + recipes +- properties.rb Wednesday, May 1, 13
  • 40. 8. Using Chef Environments for more than just logical environment Wednesday, May 1, 13
  • 41. 8. Using Chef Environments for more than just logical environment • Environments are a logical concept, mapping to your actual environments Wednesday, May 1, 13
  • 42. 8. Using Chef Environments for more than just logical environment • Environments are a logical concept, mapping to your actual environments • Don’t be tempted to overload them as “cluster name” or “data center name” though! Wednesday, May 1, 13
  • 43. 8. Using Chef Environments for more than just logical environment mongos = search(:node, “role:mongodb AND chef_environment:#{node.chef_environment}”) Wednesday, May 1, 13
  • 44. 8. Using Chef Environments for more than just logical environment mongos = search(:node, “role:mongodb AND chef_environment:#{node.chef_environment}”) Might not be enough if you have more than one MongoDB cluster in the “production” environment Wednesday, May 1, 13
  • 45. 8. Using Chef Environments for more than just logical environment Better: Wednesday, May 1, 13
  • 46. 8. Using Chef Environments for more than just logical environment node.set[‘mongodb’][‘cluster_name’] = ‘mongocluster1’ mongos = search(:node, “role:mongodb AND chef_environment:#{node.chef_environment } AND mongodb.cluster_name=#{node[‘mongodb’] [‘cluster_name’]}”) Better: Wednesday, May 1, 13
  • 47. 8. Using Chef Environments for more than just logical environment Even Better: Wednesday, May 1, 13
  • 48. 8. Using Chef Environments for more than just logical environment node.set[‘globals’][‘data_center’] = ‘portlandia’ node.set[‘mongodb’][‘cluster_name’] = ‘mongocluster1’ mongos = search(:node, “role:mongodb AND chef_environment:#{node.chef_environment} AND mongodb.cluster_name=#{node[‘mongodb’] [‘cluster_name’]} AND globals.data_center=#{node[‘globals’] [‘data_center’]}”) Even Better: Wednesday, May 1, 13
  • 49. 7. Forking community cookbooks Wednesday, May 1, 13
  • 50. 7. Forking community cookbooks • Opscode maintains ~130 cookbooks Wednesday, May 1, 13
  • 51. 7. Forking community cookbooks • Opscode maintains ~130 cookbooks • Others out there are also really great & well-maintained (Redis, MongoDB) Wednesday, May 1, 13
  • 52. 7. Forking community cookbooks • Opscode maintains ~130 cookbooks • Others out there are also really great & well-maintained (Redis, MongoDB) • Resist the temptation to fork cookbooks! Wednesday, May 1, 13
  • 53. 7. Forking community cookbooks • Opscode maintains ~130 cookbooks • Others out there are also really great & well-maintained (Redis, MongoDB) • Resist the temptation to fork cookbooks! • You won’t get the benefit of upstream bugfixes & enhancements Wednesday, May 1, 13
  • 54. 7. Forking community cookbooks • Rather, use application/library cookbook pattern to overlay your changes (thanks, Bryan Berry) • Example: SecondMarket’s “wrapper” PostgreSQL cookbook Wednesday, May 1, 13
  • 55. 7. Forking community cookbooks • Rather, use application/library cookbook pattern to overlay your changes (thanks, Bryan Berry) • Example: SecondMarket’s “wrapper” PostgreSQL cookbook smpostgresql/recipes/server.rb: See: github.com/secondmarket-cookbooks/smpostgresql.git Wednesday, May 1, 13
  • 56. 6. Run list in roles Wednesday, May 1, 13
  • 57. 6. Run list in roles • Controversial, I know! Wednesday, May 1, 13
  • 58. 6. Run list in roles • Controversial, I know! • Opscode’s own training material says to put run lists in roles Wednesday, May 1, 13
  • 59. 6. Run list in roles • Controversial, I know! • Opscode’s own training material says to put run lists in roles • But... roles aren’t versioned. Anyway, they are temporal data. Wednesday, May 1, 13
  • 60. 6. Run list in roles • Controversial, I know! • Opscode’s own training material says to put run lists in roles • But... roles aren’t versioned. Anyway, they are temporal data. • Hard to deploy run_list changes in a role across environments without the “nuclear” option Wednesday, May 1, 13
  • 61. 6. Run list in roles Instead of: Wednesday, May 1, 13
  • 62. 6. Run list in roles "run_list": [ "recipe[selinux::permissive]", "recipe[rsyslog]", "recipe[chef-client::config]", "recipe[chef-client::service]", "recipe[chef-client::delete_validation]", "recipe[openssh::iptables]" ] Instead of: Wednesday, May 1, 13
  • 63. 6. Run list in roles "run_list": [ "recipe[selinux::permissive]", "recipe[rsyslog]", "recipe[chef-client::config]", "recipe[chef-client::service]", "recipe[chef-client::delete_validation]", "recipe[openssh::iptables]" ] Instead of: Do: Wednesday, May 1, 13
  • 64. 6. Run list in roles "run_list": [ "recipe[selinux::permissive]", "recipe[rsyslog]", "recipe[chef-client::config]", "recipe[chef-client::service]", "recipe[chef-client::delete_validation]", "recipe[openssh::iptables]" ] Instead of: % knife cookbook create roles % vi roles/base.rb “run_list”: [ “recipe[roles::base]” ] Do: Wednesday, May 1, 13
  • 65. 6. Run list in roles roles/recipes/base.rb: Wednesday, May 1, 13
  • 66. 6. Run list in roles include_recipe “selinux::permissive" include_recipe “rsyslog” include_recipe “chef-client::config” include_recipe “chef-client::service” include_recipe “chef-client::delete_validation” include_recipe “openssh::iptables” roles/recipes/base.rb: Wednesday, May 1, 13
  • 67. 6. Run list in roles include_recipe “selinux::permissive" include_recipe “rsyslog” include_recipe “chef-client::config” include_recipe “chef-client::service” include_recipe “chef-client::delete_validation” include_recipe “openssh::iptables” roles/recipes/base.rb: • Write conditionals around these too if you want • Or set role attributes in the recipe Wednesday, May 1, 13
  • 68. 5. Disorganized data bags • Remember what I said about pre-planning? Flickr user: macsurak Wednesday, May 1, 13
  • 69. 5. Disorganized data bags Wednesday, May 1, 13
  • 70. 5. Disorganized data bags Wednesday, May 1, 13
  • 71. 5. Disorganized data bags • Only have two-levels (data bag, and then data bag item) to work with, so plan ahead! Wednesday, May 1, 13
  • 72. 5. Disorganized data bags • Only have two-levels (data bag, and then data bag item) to work with, so plan ahead! • Avoid making data bag items enormous JSON hashes - keep them small for performance Wednesday, May 1, 13
  • 73. 5. Disorganized data bags • Only have two-levels (data bag, and then data bag item) to work with, so plan ahead! • Avoid making data bag items enormous JSON hashes - keep them small for performance • 8 KB JSON x 4 Chef runs/h x 1000 nodes = 5.38 GB/week! Wednesday, May 1, 13
  • 74. 4. Not knowing about or using the chef-shell Flickr user: blueridgekitties Wednesday, May 1, 13
  • 75. 4. Not knowing about or using the chef-shell • Chef-Shell (formerly Shef): One of the most under-utilized tools! • IRB (Interactive Ruby) + Chef primitives • Cookbook development • Production debugging Flickr user: blueridgekitties Wednesday, May 1, 13
  • 76. 4. Not knowing about or using the chef-shell Wednesday, May 1, 13
  • 77. 4. Not knowing about or using the chef-shell Wednesday, May 1, 13
  • 78. 29: <% @members.each do |member| -%> 30: <%= member['hostname'] %> IN CNAME <%= member['ec2']['public_hostname'] %>. 31: <% end -%> 4. Not knowing about or using the chef-shell Wednesday, May 1, 13
  • 79. 4. Not knowing about or using the chef-shell [jdunn@dns1 ~]$ chef-shell -z loading configuration: /etc/chef/client.rb Session type: client . . chef > echo off chef > members = search('node', "domain:epicfail.com") chef > members.each do |m| chef > pp "#{m['hostname']}, #{m['ec2']['public_hostname']}" chef ?> end "host1, ec2-50-17-43-13.compute-1.amazonaws.com" "host37, ec2-23-23-145-243.compute-1.amazonaws.com" "host3, " NoMethodError: undefined method `[]' for nil:NilClass Wednesday, May 1, 13
  • 80. 4. Not knowing about or using the chef-shell • Way more stuff than this • Check out my Slideshare deck: slideshare.net/ JulianDunn/an-introduction-to-shef-the-chef-shell • Chef Shell will save you time, guaranteed! Wednesday, May 1, 13
  • 81. 3. Who’s Afraid of the Big Bad LWRP • Myth: LWRPs are hard to write! You need to know Ruby! Flickr user: edenpictures Wednesday, May 1, 13
  • 83. 3. Who’s Afraid of the Big Bad LWRP • Use inline resources • Basic Ruby classes and methods go a long way (Array, Hash, String, etc.) • The LWRP framework is ... lightweight and does a lot for you Flickr user: emawebdesign Wednesday, May 1, 13
  • 84. 3. Who’s Afraid of the Big Bad LWRP cookbooks/mouse/recipes/default.rb mouse “Itchy” do says “Ow, Scratchy cut off my tail” tail false action :say end Wednesday, May 1, 13
  • 85. 3. Who’s Afraid of the Big Bad LWRP cookbooks/mouse/resources/default.rb actions :say attribute :given_name, :name_attribute => true attribute :phrase, :default => “squeak” attribute :tail, :default => true, :kind_of => [TrueClass, FalseClass] cookbooks/mouse/providers/default.rb action :say do log “My name is #{new_resource.given_name}” log new_resource.phrase unless new_resource.phrase =~ /^squeak$/ log “I #{new_resource.tail ? ‘do’ : ‘do not’ } have a tail end Wednesday, May 1, 13
  • 86. See, it’s that easy! Wednesday, May 1, 13
  • 87. 2. “Not Invented Here” Syndrome • Bias against using other people’s code/libraries/ cookbooks • Temptation to write your own bespoke cookbook • Instead, do your research, find the best one, and use it in a library/application cookbook pattern • Contribute improvements/changes back Wednesday, May 1, 13
  • 89. Being the only Chef in your shop Wednesday, May 1, 13
  • 90. 1. The Lone Wolf Chef • Bus/truck factor of 1 • Chef configures applications • Developers know applications better than you • Get them involved in writing & maintaining cookbooks • Then, everyone is responsible for production- readiness! Wednesday, May 1, 13
  • 91. Recap: Top Ten List of Antipatterns • The one giant Git repo for all Chef data • The one giant cookbook named after your company • Using Chef Environments for more than just logical environment • Forking community cookbooks • Maintaining the run list in your role • Disorganized data bags • Not knowing about or using the chef-shell • Being afraid of LWRPs • Not Invented Here Syndrome • The Lone Wolf Chef Wednesday, May 1, 13
  • 92. Thanks! @julian_dunn github.com/juliandunn jdunn@opscode.com We’re hiring like gangbusters! opscode.com/careers Wednesday, May 1, 13