79
Ryan Coleman Writing Better Modules @ryanycoleman | [email protected]

Puppet Module Best Practices - Puppet Camp Silicon Valley

Embed Size (px)

DESCRIPTION

Ryan Coleman presents "Puppet Module Best Practices" at Puppet Camp Silicon Valley 2014

Citation preview

Page 1: Puppet Module Best Practices - Puppet Camp Silicon Valley

Ryan ColemanWriting Better

Modules@ryanycoleman | [email protected]

Page 2: Puppet Module Best Practices - Puppet Camp Silicon Valley

Where I Came From

• Penn Stater

• Professional Traveler

• Blacksmith

#PuppetCamp

Page 3: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 4: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 5: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 6: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 7: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 8: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 9: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 10: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 11: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 12: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 13: Puppet Module Best Practices - Puppet Camp Silicon Valley

Writing Better Modules

#PuppetCamp

Page 14: Puppet Module Best Practices - Puppet Camp Silicon Valley

Why Share?

Page 15: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 16: Puppet Module Best Practices - Puppet Camp Silicon Valley

Keep it modular

Page 17: Puppet Module Best Practices - Puppet Camp Silicon Valley

Dependencies can be your friend

Page 18: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 19: Puppet Module Best Practices - Puppet Camp Silicon Valley

PL Style Guide#PuppetCamp

Page 20: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 21: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 22: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 23: Puppet Module Best Practices - Puppet Camp Silicon Valley

#PuppetCamp

Page 24: Puppet Module Best Practices - Puppet Camp Silicon Valley

Development Tools

Page 25: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 26: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 27: Puppet Module Best Practices - Puppet Camp Silicon Valley

Vim

•vim-pathogen or vundle (for plugins)

•snipmate (like TextMate)

•tabular

•syntastic

•mv-vim-puppet

Page 28: Puppet Module Best Practices - Puppet Camp Silicon Valley

Class Layout & Parameter Naming

Page 29: Puppet Module Best Practices - Puppet Camp Silicon Valley

Text

http://ruth-tay.deviantart.com/art/Hydra-121089045

Page 30: Puppet Module Best Practices - Puppet Camp Silicon Valley

VS

Page 31: Puppet Module Best Practices - Puppet Camp Silicon Valley

Private classes should be discrete

Page 32: Puppet Module Best Practices - Puppet Camp Silicon Valley

Validate your input

Page 33: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 34: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 35: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 36: Puppet Module Best Practices - Puppet Camp Silicon Valley

https://github.com/stdmod/puppet-modules

A community-driven effort to standardize on param names

Page 37: Puppet Module Best Practices - Puppet Camp Silicon Valley

Roles & Profiles

Page 38: Puppet Module Best Practices - Puppet Camp Silicon Valley

Roles are the service to be offered, roll-up profiles

Profiles merge tech modules with business logic

Page 39: Puppet Module Best Practices - Puppet Camp Silicon Valley

Containment

Page 40: Puppet Module Best Practices - Puppet Camp Silicon Valley

Anchor Pattern

Page 41: Puppet Module Best Practices - Puppet Camp Silicon Valley

Contain (Puppet 3.4+)

Page 42: Puppet Module Best Practices - Puppet Camp Silicon Valley

Documentationthe most important part!

Page 43: Puppet Module Best Practices - Puppet Camp Silicon Valley

Answer these questions

•What technology does your module manage?

•What does it intend to do?

•How does it do it? (impact on the system)

•How should one use it?

Page 44: Puppet Module Best Practices - Puppet Camp Silicon Valley

http://docs.puppetlabs.com/puppet/3/reference/modules_documentation.html

Page 45: Puppet Module Best Practices - Puppet Camp Silicon Valley

Versioning

Page 46: Puppet Module Best Practices - Puppet Camp Silicon Valley

Semantic Versioning

•Based on Major.Minor.Patch scheme

•X.0.0 Major version for breaking change

•0.X.0 Minor version for new non-breaking functionality

•0.0.X Patch version for backwards compatible bug fixes

Page 47: Puppet Module Best Practices - Puppet Camp Silicon Valley

http://links.puppetlabs.com/bgtm

Page 48: Puppet Module Best Practices - Puppet Camp Silicon Valley

Data & Modules

Page 49: Puppet Module Best Practices - Puppet Camp Silicon Valley

Why separate?

Page 50: Puppet Module Best Practices - Puppet Camp Silicon Valley

Two Types of Data

•Site

•Which port do I bind to?

•Logistics

•Which package for this OS?

Page 51: Puppet Module Best Practices - Puppet Camp Silicon Valley

Logistics

•params.pp

•ripienaar/module_data

Page 52: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 53: Puppet Module Best Practices - Puppet Camp Silicon Valley

Params.pp

./data/operatingsystem/Amazon.yaml

http://forge.puppetlabs.com/ripienaar/module_data

http://forge.puppetlabs.com/ripienaar/module_data

Page 54: Puppet Module Best Practices - Puppet Camp Silicon Valley

Site

•node definitions

•ENC

Page 55: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 56: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 57: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 58: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 59: Puppet Module Best Practices - Puppet Camp Silicon Valley

Automatic Data Lookup

Built into Puppet 3

Page 60: Puppet Module Best Practices - Puppet Camp Silicon Valley

Here’s the magic!

Page 61: Puppet Module Best Practices - Puppet Camp Silicon Valley

Data Lookup Order•Use explicit class declaration

values

•Query Data Binding

•Use the default value from class.

• Fail compilation with an error if no value can be found.

Page 62: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 63: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 64: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 65: Puppet Module Best Practices - Puppet Camp Silicon Valley

Module TestingA Brief Overview

Page 66: Puppet Module Best Practices - Puppet Camp Silicon Valley

Smoke Testing

http://www.dsrsd.com/img/img_wwrw/Sewer_Web.png

Page 67: Puppet Module Best Practices - Puppet Camp Silicon Valley

puppet apply ./tests/apache.pp

Page 68: Puppet Module Best Practices - Puppet Camp Silicon Valley

Unit Testing

http://www.pieterg.com/Media/277

Page 69: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 70: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 71: Puppet Module Best Practices - Puppet Camp Silicon Valley

Integration Testing

http://robots.thoughtbot.com/post/33771089985/rspec-integration-tests-with-capybara

Page 72: Puppet Module Best Practices - Puppet Camp Silicon Valley

rspec-system

Page 73: Puppet Module Best Practices - Puppet Camp Silicon Valley

Acceptance Testing

Page 74: Puppet Module Best Practices - Puppet Camp Silicon Valley

Beaker

Page 75: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 76: Puppet Module Best Practices - Puppet Camp Silicon Valley

Writing Better Modules

•Keep them simple & modular

•Consistent Style

•Useful Documentation

•Separate Code From Data

•Test Against Regressions

Page 77: Puppet Module Best Practices - Puppet Camp Silicon Valley

Want to help?

#PuppetCamp

Page 78: Puppet Module Best Practices - Puppet Camp Silicon Valley
Page 79: Puppet Module Best Practices - Puppet Camp Silicon Valley

Thank You!

Feel free to email or tweet anytime RE: Forge!

[email protected] - @ryanycoleman

forge.puppetlabs.com

#PuppetCamp