9. At a High Level...
http://www.flickr.com/photos/asten/2159525309/sizes/l/
10. At a High Level...
• A library for configuration management
http://www.flickr.com/photos/asten/2159525309/sizes/l/
11. At a High Level...
• A library for configuration management
• A configuration management system
http://www.flickr.com/photos/asten/2159525309/sizes/l/
12. At a High Level...
• A library for configuration management
• A configuration management system
• A systems integration platform
http://www.flickr.com/photos/asten/2159525309/sizes/l/
13. At a High Level...
• A library for configuration management
• A configuration management system
• A systems integration platform
• An API for your entire Infrastructure
http://www.flickr.com/photos/asten/2159525309/sizes/l/
21. The world moves
pretty fast
• Primitives
http://www.flickr.com/photos/gi/518613153/sizes/o/
22. The world moves
pretty fast
• Primitives
• Enable you to solve your
problems
http://www.flickr.com/photos/gi/518613153/sizes/o/
23. The world moves
pretty fast
• Primitives
• Enable you to solve your
problems
• Your best skill is knowing
your systems
http://www.flickr.com/photos/gi/518613153/sizes/o/
25. So you better be ready
• You need a 3rd generation
language
http://www.flickr.com/photos/gi/518613153/sizes/o/
26. So you better be ready
• You need a 3rd generation
language
• You’re already a
programmer
http://www.flickr.com/photos/gi/518613153/sizes/o/
27. So you better be ready
• You need a 3rd generation
language
• You’re already a
programmer
• You’ve just been lied to
http://www.flickr.com/photos/gi/518613153/sizes/o/
28. Chef enables
Infrastructure as Code
Manage configuration as idempotent Resources.
Put them together in Recipes.
Track it like source code.
Configure your servers.
37. Wax Philosophical
• We are craftsmen and artists
• You need great brushes and tools
• But nobody remembers Gaudi’s hammer
http://www.flickr.com/photos/vgm8383/2686128924/sizes/l/
38. • Can only be
measured
by the final
solution
http://www.flickr.com/photos/aloshbennett/619307160/sizes/l/
57. A Resource...
Is a declarative description of the state you desire a part
of your node to be in.
http://www.flickr.com/photos/xiaming/382205902/sizes/l/
58. A Resource...
Is a declarative description of the state you desire a part
of your node to be in.
http://www.flickr.com/photos/xiaming/382205902/sizes/l/
59. A Resource...
• Is of a given type.
Is a declarative description of the state you desire a part
of your node to be in.
http://www.flickr.com/photos/xiaming/382205902/sizes/l/
60. A Resource...
• Is of a given type.
• Has a name.
Is a declarative description of the state you desire a part
of your node to be in.
http://www.flickr.com/photos/xiaming/382205902/sizes/l/
61. A Resource...
• Is of a given type.
• Has a name.
• Has attributes.
Is a declarative description of the state you desire a part
of your node to be in.
http://www.flickr.com/photos/xiaming/382205902/sizes/l/
62. A Resource...
• Is of a given type.
• Has a name.
• Has attributes.
• Takes actions to
bring the resource to
a declared state.
Is a declarative description of the state you desire a part
of your node to be in.
http://www.flickr.com/photos/xiaming/382205902/sizes/l/
65. A Provider...
Knows how to actually perform the actions specified by a resource.
http://www.flickr.com/photos/affableslinky/562950216/
66. A Provider...
Knows how to actually perform the actions specified by a resource.
Apt,Yum, Rubygems,
Multiple providers
per resource type.
Portage, Macports,
FreeBSD Ports, etc.
http://www.flickr.com/photos/affableslinky/562950216/
67. A Provider...
Knows how to actually perform the actions specified by a resource.
Apt,Yum, Rubygems,
Multiple providers
per resource type.
Portage, Macports,
FreeBSD Ports, etc.
Can be overridden
with the provider
attribute on a
resource.
http://www.flickr.com/photos/affableslinky/562950216/
71. A Recipe...
Applies resources in the order they are specified
http://www.flickr.com/photos/roadsidepictures/2478953342/sizes/o/
72. A Recipe...
Applies resources in the order they are specified
http://www.flickr.com/photos/roadsidepictures/2478953342/sizes/o/
73. A Recipe...
Applies resources in the order they are specified
1
• Evaluates resources
in the order they
appear.
2
http://www.flickr.com/photos/roadsidepictures/2478953342/sizes/o/
74. A Recipe...
Applies resources in the order they are specified
• Evaluates resources
in the order they
appear. 1
2
• Adds each resource
object to the
Resource Collection
http://www.flickr.com/photos/roadsidepictures/2478953342/sizes/o/
75. A Recipe...
Applies resources in the order they are specified
http://www.flickr.com/photos/roadsidepictures/2478953342/sizes/o/
76. A Recipe...
Applies resources in the order they are specified
• Can include other
recipes.
http://www.flickr.com/photos/roadsidepictures/2478953342/sizes/o/
77. A Recipe...
Applies resources in the order they are specified
• Can include other
recipes.
• Is just Ruby.
http://www.flickr.com/photos/roadsidepictures/2478953342/sizes/o/
The abstraction over the commands to run for this platform.
Platform determines provider, but has sane defaults otherwise
Cookbooks encapsulate all the components needed to configure the infrastructure.
Distribute cookbooks as tarballs either to/from server, with solo, or share with others
They contain the code and assets that configure infrastructure
Keep them in a version control repository
Distribute cookbooks as tarballs either to/from server, with solo, or share with others
They contain the code and assets that configure infrastructure
Keep them in a version control repository
Distribute cookbooks as tarballs either to/from server, with solo, or share with others
They contain the code and assets that configure infrastructure
Keep them in a version control repository
Cookbooks are a directory of code components
Cookbooks are a directory of code components
Cookbooks are a directory of code components
Cookbooks are a directory of code components
Cookbook directory with common components.
- metadata can be written in ruby DSL, converted to JSON.
non-dynamic, like tarballs or graphics
remote_file resource
file specificity based on node’s FQDN, platform, or default
non-dynamic, like tarballs or graphics
remote_file resource
file specificity based on node’s FQDN, platform, or default
Attributes in cookbooks apply to the node object directly.
Two ways to set in cookbooks, ‘set’ - the cookbook is authoritative, ‘set_unless’ - node is authoritative
Attributes in cookbooks apply to the node object directly.
Two ways to set in cookbooks, ‘set’ - the cookbook is authoritative, ‘set_unless’ - node is authoritative
Metadata provides hints about the cookbook like packaging system’s. Primarily, used to distribute dependencies. Metadata as Ruby code, converted to JSON to upload.
Metadata provides hints about the cookbook like packaging system’s. Primarily, used to distribute dependencies. Metadata as Ruby code, converted to JSON to upload.
Metadata provides hints about the cookbook like packaging system’s. Primarily, used to distribute dependencies. Metadata as Ruby code, converted to JSON to upload.
Other components of cookbooks that are very useful but not commonly used
Other components of cookbooks that are very useful but not commonly used