SlideShare a Scribd company logo
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

Cooking with Chef
Cooking with ChefCooking with Chef
Cooking with Chef
Ken Robertson
 
Docker Docker Docker Chef
Docker Docker Docker ChefDocker Docker Docker Chef
Docker Docker Docker Chef
Sean OMeara
 
Chef Jumpstart
Chef JumpstartChef Jumpstart
Chef Jumpstart
Kimball Johnson
 
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 Jenkins
Zachary Stevens
 
Introduction to chef
Introduction to chefIntroduction to chef
Introduction to chef
Damith Kothalawala
 
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
Chef Software, Inc.
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
Knoldus Inc.
 
Infrastructure Automation with Chef
Infrastructure Automation with ChefInfrastructure Automation with Chef
Infrastructure Automation with Chef
Jonathan Weiss
 
Configuration management with Chef
Configuration management with ChefConfiguration management with Chef
Configuration management with Chef
Juan Vicente Herrera Ruiz de Alejo
 
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
 
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 Chef
Shaun Domingo
 
Continous delivery with Jenkins and Chef
Continous delivery with Jenkins and ChefContinous delivery with Jenkins and Chef
Continous delivery with Jenkins and Chef
defrag2
 
Ansible ALLTHETHINGS
Ansible ALLTHETHINGSAnsible ALLTHETHINGS
Ansible ALLTHETHINGS
Dan Chuparkoff
 
Chef introduction
Chef introductionChef introduction
Chef introduction
FENG Zhichao
 
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 5
Chef
 
Server Installation and Configuration with Chef
Server Installation and Configuration with ChefServer Installation and Configuration with Chef
Server Installation and Configuration with Chef
Raimonds 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 Chef
Chef 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 Shell
Julian Dunn
 
The Berkshelf Way
The Berkshelf WayThe Berkshelf Way
The Berkshelf Way
Chef Software, Inc.
 
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 Hulten
Chef 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 Jacob
Chef Software, Inc.
 
Opscode tech festa july 2013
Opscode tech festa   july 2013Opscode tech festa   july 2013
Opscode tech festa july 2013
Chef 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-2013
Chef 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
ドキュメントの話、しませんか? #428rk01
Takeshi Komiya
 
プレゼンテーション アンチパターン から見るスタンダードなプレゼン
プレゼンテーション アンチパターン から見るスタンダードなプレゼンプレゼンテーション アンチパターン から見るスタンダードなプレゼン
プレゼンテーション アンチパターン から見るスタンダードなプレゼン
真俊 横田
 
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
今さら聞けないプロダクトオーナー アンチパターン入門 - XP祭り2015 #xpjug
満徳 関
 
メッチャ役に立つauto_incrementの話
メッチャ役に立つauto_incrementの話メッチャ役に立つauto_incrementの話
メッチャ役に立つauto_incrementの話
株式会社シャーロック
 
マークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumiマークアップ言語の拡張 メリットとデメリット #hankumi
マークアップ言語の拡張 メリットとデメリット #hankumi
Takeshi Komiya
 
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
masaaki komori
 
Next Generation Web Application Architecture
Next Generation Web Application ArchitectureNext Generation Web Application Architecture
Next Generation Web Application Architecture
Koji SHIMADA
 
new Objctive-C literal syntax
new Objctive-C literal syntaxnew Objctive-C literal syntax
new Objctive-C literal syntax
Wataru 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 v2013
Olaf 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 Profit
Daniel Schauenberg
 
AppEngine Performance Tuning
AppEngine Performance TuningAppEngine Performance Tuning
AppEngine Performance Tuning
David 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 Integration
Julian Dunn
 
Cooking an Omelette with Chef
Cooking an Omelette with ChefCooking an Omelette with Chef
Cooking an Omelette with Chef
ctaintor
 
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 Source
jclermont
 
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
Phil 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 idea
Jason Lotito
 
Scaling a Web Site - OSCON Tutorial
Scaling a Web Site - OSCON TutorialScaling a Web Site - OSCON Tutorial
Scaling a Web Site - OSCON Tutorial
duleepa
 
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
mfrancis
 
Cookbook Reusability @ Chef Community summit 2014
Cookbook Reusability @ Chef Community summit 2014Cookbook Reusability @ Chef Community summit 2014
Cookbook Reusability @ Chef Community summit 2014
Sean OMeara
 
Cucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet UpCucumber Presentation Kiev Meet Up
Cucumber Presentation Kiev Meet Up
dimakovalenko
 
Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011Selenium and Cucumber Selenium Conf 2011
Selenium and Cucumber Selenium Conf 2011
dimakovalenko
 
Agile analytics applications on hadoop
Agile analytics applications on hadoopAgile analytics applications on hadoop
Agile analytics applications on hadoop
Russell 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 Use
Harold 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 cms
Mike Ellis
 
Ruby Tuesday Ottawa - Jan 24, 2012
Ruby Tuesday Ottawa - Jan 24, 2012Ruby Tuesday Ottawa - Jan 24, 2012
Ruby Tuesday Ottawa - Jan 24, 2012
michaeldwp
 
Contributing to rails
Contributing to railsContributing to rails
Contributing to rails
Lukas 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 DevOps
Julian 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 Talk
Julian 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 harder
Julian 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
 
Chef on AIX
Chef on AIXChef on AIX
Chef on AIX
Julian Dunn
 
Configuration Management in a Containerized World
Configuration Management in a Containerized WorldConfiguration Management in a Containerized World
Configuration Management in a Containerized World
Julian 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 Edition
Julian Dunn
 
Automating That "Other" OS
Automating That "Other" OSAutomating That "Other" OS
Automating That "Other" OS
Julian Dunn
 
Chef-NYC Announcements July 2014
Chef-NYC Announcements July 2014Chef-NYC Announcements July 2014
Chef-NYC Announcements July 2014
Julian 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 2014
Julian Dunn
 
Improving Your Mac Productivity
Improving Your Mac ProductivityImproving Your Mac Productivity
Improving Your Mac Productivity
Julian Dunn
 
Chef Cookbook Governance BoF at ChefConf
Chef Cookbook Governance BoF at ChefConfChef Cookbook Governance BoF at ChefConf
Chef Cookbook Governance BoF at ChefConf
Julian Dunn
 
Chef and PowerShell Desired State Configuration
Chef and PowerShell Desired State ConfigurationChef and PowerShell Desired State Configuration
Chef and PowerShell Desired State Configuration
Julian 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 Everything
Julian Dunn
 
Cooking with Chef on Windows
Cooking with Chef on WindowsCooking with Chef on Windows
Cooking with Chef on Windows
Julian Dunn
 
An Introduction to DevOps with Chef
An Introduction to DevOps with ChefAn Introduction to DevOps with Chef
An Introduction to DevOps with Chef
Julian Dunn
 
Chef Workflow Strategies at SecondMarket
Chef Workflow Strategies at SecondMarketChef Workflow Strategies at SecondMarket
Chef Workflow Strategies at SecondMarket
Julian 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

From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
Sease
 
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdfLee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
leebarnesutopia
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
Ortus Solutions, Corp
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
DianaGray10
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
Miro Wengner
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
Ivo Velitchkov
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
UiPathCommunity
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
operationspcvita
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
c5vrf27qcz
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
Fwdays
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
Ajin Abraham
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
Fwdays
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
BibashShahi
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
christinelarrosa
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
FilipTomaszewski5
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Neo4j
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
UiPathCommunity
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
DianaGray10
 

Recently uploaded (20)

From Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMsFrom Natural Language to Structured Solr Queries using LLMs
From Natural Language to Structured Solr Queries using LLMs
 
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdfLee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
Lee Barnes - Path to Becoming an Effective Test Automation Engineer.pdf
 
Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!Introducing BoxLang : A new JVM language for productivity and modularity!
Introducing BoxLang : A new JVM language for productivity and modularity!
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving | Nameplate Manufacturing Process - 2024
Northern Engraving | Nameplate Manufacturing Process - 2024
 
What is an RPA CoE? Session 1 – CoE Vision
What is an RPA CoE?  Session 1 – CoE VisionWhat is an RPA CoE?  Session 1 – CoE Vision
What is an RPA CoE? Session 1 – CoE Vision
 
JavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green MasterplanJavaLand 2024: Application Development Green Masterplan
JavaLand 2024: Application Development Green Masterplan
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
 
Session 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdfSession 1 - Intro to Robotic Process Automation.pdf
Session 1 - Intro to Robotic Process Automation.pdf
 
The Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptxThe Microsoft 365 Migration Tutorial For Beginner.pptx
The Microsoft 365 Migration Tutorial For Beginner.pptx
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
 
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba"NATO Hackathon Winner: AI-Powered Drug Search",  Taras Kloba
"NATO Hackathon Winner: AI-Powered Drug Search", Taras Kloba
 
AppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSFAppSec PNW: Android and iOS Application Security with MobSF
AppSec PNW: Android and iOS Application Security with MobSF
 
"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota"Choosing proper type of scaling", Olena Syrota
"Choosing proper type of scaling", Olena Syrota
 
Principle of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptxPrinciple of conventional tomography-Bibash Shahi ppt..pptx
Principle of conventional tomography-Bibash Shahi ppt..pptx
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
 
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeckPoznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
Poznań ACE event - 19.06.2024 Team 24 Wrapup slidedeck
 
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid ResearchHarnessing the Power of NLP and Knowledge Graphs for Opioid Research
Harnessing the Power of NLP and Knowledge Graphs for Opioid Research
 
Day 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio FundamentalsDay 2 - Intro to UiPath Studio Fundamentals
Day 2 - Intro to UiPath Studio Fundamentals
 
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectorsConnector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
Connector Corner: Seamlessly power UiPath Apps, GenAI with prebuilt connectors
 

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