Top Banner
Cookbook Reusability Chef Community Summit 2014
103

Cookbook Reusability @ Chef Community summit 2014

Nov 29, 2014

Download

Technology

Sean OMeara

Cookbook Reusability presented at Chef Community summit 2014
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cookbook Reusability @ Chef Community summit 2014

Cookbook Reusability!Chef Community Summit

2014

Page 2: Cookbook Reusability @ Chef Community summit 2014

Sean [email protected]!

@someara

Page 3: Cookbook Reusability @ Chef Community summit 2014

whoami

Page 4: Cookbook Reusability @ Chef Community summit 2014

A Year in Review

Page 5: Cookbook Reusability @ Chef Community summit 2014

Diversification

Page 6: Cookbook Reusability @ Chef Community summit 2014

7zip!apache2!ark!application*!couchdb!Imagemagick!java

Page 7: Cookbook Reusability @ Chef Community summit 2014

logrotate!mercurial!munin!nagios!nginx!ntp!openvpn

Page 8: Cookbook Reusability @ Chef Community summit 2014

pacman!postgresql!python!reprepro!rabbitmq!runit!supervisor

Page 9: Cookbook Reusability @ Chef Community summit 2014

selinux!tmux!varnish !wordpress!

Page 10: Cookbook Reusability @ Chef Community summit 2014

Supermarket

https://www.flickr.com/photos/mobilestreetlife/10885044043

Page 11: Cookbook Reusability @ Chef Community summit 2014

• Escaped the tyranny of JIRA!

• Moved to Github Issues!

• Automated CLA checking!

• OSS Artifact Repository

Page 12: Cookbook Reusability @ Chef Community summit 2014

Rewrites

Page 13: Cookbook Reusability @ Chef Community summit 2014

2009

0.5.2Chef

Vagrant

ChefSpec

0.1.0

0.0.2

Minitest-Chef

Berkshelf

Test Kitchen

2010

0.9.0

2011

0.10.0

2012

10.12.0

1.0.0

0.2.0

1.0.0

0.7.0

1.0.0

2013 2014

1.0.0

2.0.0

1.0.0

2.0.0

1.4.0

11.0.0 12.0.0

1.6.5

3.0.0

3.0.0

1.2.2

ServerSpec

ChefDK

0.0.1 2.0.0

0.2.2TDI Capability

0.8.0

Page 14: Cookbook Reusability @ Chef Community summit 2014

yum!yum-*!jenkins!mysql!httpd

Page 15: Cookbook Reusability @ Chef Community summit 2014

The Evolution of a Chef Cookbook

Page 16: Cookbook Reusability @ Chef Community summit 2014

Stage 1 - Paradise

https://www.flickr.com/photos/nattu/1385100375/

Page 17: Cookbook Reusability @ Chef Community summit 2014
Page 18: Cookbook Reusability @ Chef Community summit 2014

test / repair

test / repair

test / repair

Page 19: Cookbook Reusability @ Chef Community summit 2014

Easy to read Easy to grok Easy to test}

Page 20: Cookbook Reusability @ Chef Community summit 2014

Stage 2 - if statements

Page 21: Cookbook Reusability @ Chef Community summit 2014

logic

compiled into resource collection

Page 22: Cookbook Reusability @ Chef Community summit 2014

Resource DSL}

Just Ruby}

Page 23: Cookbook Reusability @ Chef Community summit 2014

Resource DSL}

Just Ruby} }Chef

Page 24: Cookbook Reusability @ Chef Community summit 2014

Stage 3 - Crazytown

https://www.flickr.com/photos/kwl/4595324641

Page 25: Cookbook Reusability @ Chef Community summit 2014
Page 26: Cookbook Reusability @ Chef Community summit 2014

wat

Page 27: Cookbook Reusability @ Chef Community summit 2014

Why?

Page 28: Cookbook Reusability @ Chef Community summit 2014

Reusable is useful

Page 29: Cookbook Reusability @ Chef Community summit 2014

Cross-platform is useful

Page 30: Cookbook Reusability @ Chef Community summit 2014

We desire useful things

Page 31: Cookbook Reusability @ Chef Community summit 2014

Platform idioms are hard

Page 32: Cookbook Reusability @ Chef Community summit 2014

Keeping the Dream Alive

https://www.flickr.com/photos/kalexanderson/7014655351/

Page 33: Cookbook Reusability @ Chef Community summit 2014

Most people just write their own cookbooks from scratch

Page 34: Cookbook Reusability @ Chef Community summit 2014

I really really really want reusable cross-platform cookbooks

Page 35: Cookbook Reusability @ Chef Community summit 2014

Lessons Learned

Page 36: Cookbook Reusability @ Chef Community summit 2014

Attributes are routinely abused

https://www.flickr.com/photos/jabberwocky381/2828863789

Page 37: Cookbook Reusability @ Chef Community summit 2014
Page 38: Cookbook Reusability @ Chef Community summit 2014

Attributes are an interface

Page 39: Cookbook Reusability @ Chef Community summit 2014

Attributes are tunable knobs

Page 40: Cookbook Reusability @ Chef Community summit 2014
Page 41: Cookbook Reusability @ Chef Community summit 2014

You probably just want a variable

Page 42: Cookbook Reusability @ Chef Community summit 2014
Page 43: Cookbook Reusability @ Chef Community summit 2014

Or even a method

Page 44: Cookbook Reusability @ Chef Community summit 2014
Page 45: Cookbook Reusability @ Chef Community summit 2014

Using an attribute to track state during a Chef run causes tears and sorrow

Page 46: Cookbook Reusability @ Chef Community summit 2014

Prefer resource parameters

Page 47: Cookbook Reusability @ Chef Community summit 2014
Page 48: Cookbook Reusability @ Chef Community summit 2014
Page 49: Cookbook Reusability @ Chef Community summit 2014

Primitives are more useful than opinionated policy

Page 50: Cookbook Reusability @ Chef Community summit 2014

“They’re Just Resources”!!

LWRP is Googleable

Page 51: Cookbook Reusability @ Chef Community summit 2014

Zoom out a level!!

Think about services and runtimes, not files and processes

Page 52: Cookbook Reusability @ Chef Community summit 2014

Singleton resources are good but confusing. Possibly even dangerous.!!

Multiple instance support is better!!

Cross-platform resources are best

Page 53: Cookbook Reusability @ Chef Community summit 2014
Page 54: Cookbook Reusability @ Chef Community summit 2014

BDD / TDD yields high quality cookbooks

https://www.flickr.com/photos/glenirah/4376553184

Page 55: Cookbook Reusability @ Chef Community summit 2014

Test Kitchen!ServerSpec / Minitest / Bats!ChefSpec

Page 56: Cookbook Reusability @ Chef Community summit 2014

2009

0.5.2Chef

Vagrant

ChefSpec

0.1.0

0.0.2

Minitest-Chef

Berkshelf

Test Kitchen

2010

0.9.0

2011

0.10.0

2012

10.12.0

1.0.0

0.2.0

1.0.0

0.7.0

1.0.0

2013 2014

1.0.0

2.0.0

1.0.0

2.0.0

1.4.0

11.0.0 12.0.0

1.6.5

3.0.0

3.0.0

1.2.2

ServerSpec

ChefDK

0.0.1 2.0.0

0.2.2This Slide Again

0.8.0

Page 57: Cookbook Reusability @ Chef Community summit 2014

Full test coverage is tedious

Page 58: Cookbook Reusability @ Chef Community summit 2014

Full test coverage is totally worth it

Page 59: Cookbook Reusability @ Chef Community summit 2014

Let users bring their own configurations

Page 60: Cookbook Reusability @ Chef Community summit 2014

It is better to add to a resource_collection than to monkey patch it

Page 61: Cookbook Reusability @ Chef Community summit 2014

Configuration files are the brains of a service

Page 62: Cookbook Reusability @ Chef Community summit 2014

Manage minimal configuration to get a service running

Page 63: Cookbook Reusability @ Chef Community summit 2014

Offload further configuration to the user

Page 64: Cookbook Reusability @ Chef Community summit 2014

conf.d is your friend

Page 65: Cookbook Reusability @ Chef Community summit 2014

Hide everything else inside a resource

Page 66: Cookbook Reusability @ Chef Community summit 2014

Add resource parameters when appropriate

Page 67: Cookbook Reusability @ Chef Community summit 2014
Page 68: Cookbook Reusability @ Chef Community summit 2014
Page 69: Cookbook Reusability @ Chef Community summit 2014

Cross-platform cookbooks are hard

https://www.flickr.com/photos/glenirah/4376553184

Page 70: Cookbook Reusability @ Chef Community summit 2014

Cross-platform resources are even harder

Page 71: Cookbook Reusability @ Chef Community summit 2014

They can be done!

Page 72: Cookbook Reusability @ Chef Community summit 2014

Create a resource

Page 73: Cookbook Reusability @ Chef Community summit 2014
Page 74: Cookbook Reusability @ Chef Community summit 2014

Create a provider

Page 75: Cookbook Reusability @ Chef Community summit 2014
Page 76: Cookbook Reusability @ Chef Community summit 2014

Subclass platform providers

Page 77: Cookbook Reusability @ Chef Community summit 2014
Page 78: Cookbook Reusability @ Chef Community summit 2014
Page 79: Cookbook Reusability @ Chef Community summit 2014
Page 80: Cookbook Reusability @ Chef Community summit 2014
Page 81: Cookbook Reusability @ Chef Community summit 2014
Page 82: Cookbook Reusability @ Chef Community summit 2014

Set provider default for platforms

Page 83: Cookbook Reusability @ Chef Community summit 2014
Page 84: Cookbook Reusability @ Chef Community summit 2014

Do Repeat Yourself

Page 85: Cookbook Reusability @ Chef Community summit 2014

Some resources are often the duplicated across providers

Page 86: Cookbook Reusability @ Chef Community summit 2014

That’s fine. It’s the pattern as a whole that’s important

Page 87: Cookbook Reusability @ Chef Community summit 2014

Maximize for grokability

Page 88: Cookbook Reusability @ Chef Community summit 2014

People will be reading your code for the first time during operations work

Page 89: Cookbook Reusability @ Chef Community summit 2014

Init systems are annoying

Page 90: Cookbook Reusability @ Chef Community summit 2014

Using a service resource usually requires file or template resources in addition to service[thingd]

Page 91: Cookbook Reusability @ Chef Community summit 2014

Debconf!Docker!LaunchD!Runit!SMF!Simple!SystemD!Sysvinit!Upstart!Windows Services

Page 92: Cookbook Reusability @ Chef Community summit 2014

Subclassing is awesome

Page 93: Cookbook Reusability @ Chef Community summit 2014
Page 94: Cookbook Reusability @ Chef Community summit 2014

Customize before recipe compilation

Page 95: Cookbook Reusability @ Chef Community summit 2014

Going Forward

Page 96: Cookbook Reusability @ Chef Community summit 2014

Cookbooks that ship resource primitives

Page 97: Cookbook Reusability @ Chef Community summit 2014

More examples to copy

Page 98: Cookbook Reusability @ Chef Community summit 2014

More breaking backwards compatibility (sorry)

Page 99: Cookbook Reusability @ Chef Community summit 2014

Providers implemented with Docker containers (why not?)

Page 100: Cookbook Reusability @ Chef Community summit 2014

chef-metal

Page 101: Cookbook Reusability @ Chef Community summit 2014

Tell me what you think

Page 102: Cookbook Reusability @ Chef Community summit 2014

Please don’t hurt me =)

Page 103: Cookbook Reusability @ Chef Community summit 2014