Forging Great Modules: Standards, Tools and Patterns - PuppetConf 2013

4,508 views

Published on

"Forging Great Modules: Standards, Tools and Patterns" by Ryan Coleman, Product Owner, Puppet Labs.

Presentation Overview: Your entire datacenter doesn't need to be lovingly hand-crafted Puppet manifests. Focus your time and energy on the specific, business enabling challenges. Puppet Labs runs the Puppet Forge, a community-driven collection of modules that let you do anything from build an entire OpenStack PaaS to provide you with an awesome new resource type. Come learn what the Forge is all about, where it's headed and how to build the next great module that will live amongst the 1300+ contributed by your peers.

Ryan will cover the following and a little more.
- What the Puppet Forge is and what you'll find there.
- Module Design Patterns (e.g., parameter naming & puppet-lint)
- Module Testing Frameworks and Practical Examples (e.g., rspec-puppet)
- Iterative Development Tools and Practices
- Forge Publishing Workflows (e.g., versioning & github)

Speaker Bio: Ryan is a product owner at Puppet Labs, responsible for the Puppet Forge. He used Puppet at Penn State to keep up with demands in Penn State's central infrastructure teams before joining Puppet Labs as a professional services engineer. He has tackled building services like Shibboleth, MIT Kerberos, Samba and Zimbra across distributed environments on top of IBM's GPFS file system and would love to chat with you about solving problems with Puppet.

Published in: Technology
  • Be the first to comment

Forging Great Modules: Standards, Tools and Patterns - PuppetConf 2013

  1. 1. Forging Great Modules: Standards,Tools and Patterns Ryan Coleman Product Owner | Puppet Labs @ryanycoleman Friday, August 23, 13
  2. 2. puppetconf.com #puppetconf Outline • What’s Forge & What’s There • Where the Forge is Going • Module Writing Practices and Tips Friday, August 23, 13
  3. 3. What is the Puppet Forge? Just the basics Friday, August 23, 13
  4. 4. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  5. 5. puppetconf.com #puppetconf #PuppetCamp $ puppet help module Friday, August 23, 13
  6. 6. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  7. 7. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  8. 8. puppetconf.com #puppetconf Friday, August 23, 13
  9. 9. The Puppet Forge Team Professional Blacksmiths Friday, August 23, 13
  10. 10. puppetconf.com #puppetconf Ryan Coleman Product Owner Friday, August 23, 13
  11. 11. puppetconf.com #puppetconf Melinda Campbell User Experience Designer Friday, August 23, 13
  12. 12. puppetconf.com #puppetconf Alex Dreyer Pieter Van De Brugen Forge Engineering Friday, August 23, 13
  13. 13. puppetconf.com #puppetconf Hunter Haugen Ashley Penney Forge Module Engineering Friday, August 23, 13
  14. 14. Recent Updates Slowly but surely, we’re getting there! Friday, August 23, 13
  15. 15. puppetconf.com #puppetconf Friday, August 23, 13
  16. 16. puppetconf.com #puppetconf Friday, August 23, 13
  17. 17. puppetconf.com #puppetconf Friday, August 23, 13
  18. 18. puppetconf.com #puppetconf Friday, August 23, 13
  19. 19. puppetconf.com #puppetconf Top Ten Search Terms Friday, August 23, 13
  20. 20. puppetconf.com #puppetconf Puppet Labs Module Engineering Friday, August 23, 13
  21. 21. Coming Soon to a forge near you Friday, August 23, 13
  22. 22. puppetconf.com #puppetconf Quality Over Quantity Friday, August 23, 13
  23. 23. puppetconf.com #puppetconf Friday, August 23, 13
  24. 24. puppetconf.com #puppetconf • Module Quality Design Jam • Friday 4:20 - 6:00 • Hunt (Mezzanine Level) • http://sched.co/ 17fAJn7 Friday, August 23, 13
  25. 25. puppetconf.com #puppetconf Friday, August 23, 13
  26. 26. puppetconf.com #puppetconf Tools built with the Forge API • Geppetto IDE • librarian-puppet • `puppet module` • R10K • MaestroDev Blacksmith Friday, August 23, 13
  27. 27. Email me or talk to me about the API! ryan@puppetlabs.com Friday, August 23, 13
  28. 28. puppetconf.com #puppetconf Email ryan@puppetlabs.com for a Travis-driven preview Friday, August 23, 13
  29. 29. puppetconf.com #puppetconf GitHub Flavored Markdown on Forge! Friday, August 23, 13
  30. 30. puppetconf.com #puppetconf Supported Puppet Labs Modules Friday, August 23, 13
  31. 31. The Puppet Forge Extended Family Artisan and Apprentice Blacksmiths Friday, August 23, 13
  32. 32. puppetconf.com #puppetconf Friday, August 23, 13
  33. 33. puppetconf.com #puppetconf Friday, August 23, 13
  34. 34. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  35. 35. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  36. 36. puppetconf.com #puppetconf Friday, August 23, 13
  37. 37. puppetconf.com #puppetconf Friday, August 23, 13
  38. 38. puppetconf.com #puppetconf Friday, August 23, 13
  39. 39. puppetconf.com #puppetconf Friday, August 23, 13
  40. 40. puppetconf.com #puppetconf Friday, August 23, 13
  41. 41. puppetconf.com #puppetconf Friday, August 23, 13
  42. 42. puppetconf.com #puppetconf CLI! Ruby Code! Functions! Oh My! Friday, August 23, 13
  43. 43. Development Tools Friday, August 23, 13
  44. 44. Friday, August 23, 13
  45. 45. puppetconf.com #puppetconf TextMate w/Puppet! Friday, August 23, 13
  46. 46. puppetconf.com #puppetconf Vim • vim-pathogen or vundle (for plugins) • snipmate (like TextMate) • tabular • syntastic • mv-vim-puppet Friday, August 23, 13
  47. 47. Module Design Patterns Some thoughts to guide you in the right direction Friday, August 23, 13
  48. 48. puppetconf.com #puppetconf Keep it modular Friday, August 23, 13
  49. 49. An Example: PuppetDB Friday, August 23, 13
  50. 50. Class Layout and Naming the boring stuff Friday, August 23, 13
  51. 51. puppetconf.com #puppetconf Text http://ruth-tay.deviantart.com/art/Hydra-121089045 Friday, August 23, 13
  52. 52. Public vs (pseudo) Private Classes Friday, August 23, 13
  53. 53. puppetconf.com #puppetconf Private classes should be discrete Friday, August 23, 13
  54. 54. puppetconf.com #puppetconf Public classes are for parameters, validation and interacting with private classes. Friday, August 23, 13
  55. 55. https://github.com/stdmod/puppet-modules A community-driven effort to standardize on param names Friday, August 23, 13
  56. 56. Friday, August 23, 13
  57. 57. puppetconf.com #puppetconf #PuppetCamp The Style Guide Friday, August 23, 13
  58. 58. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  59. 59. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  60. 60. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  61. 61. puppetconf.com #puppetconf #PuppetCamp Friday, August 23, 13
  62. 62. Style Guide Update Soon! Email suggestions/feedback to ryan@puppetlabs.com Friday, August 23, 13
  63. 63. Documentation the most important part! Friday, August 23, 13
  64. 64. puppetconf.com #puppetconf 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? Friday, August 23, 13
  65. 65. http://docs.puppetlabs.com/puppet/3/reference/ modules_documentation.html Friday, August 23, 13
  66. 66. Module Testing become a mad scientist! Friday, August 23, 13
  67. 67. puppetconf.com #puppetconf http://www.dsrsd.com/img/img_wwrw/Sewer_Web.png Smoke Testing Friday, August 23, 13
  68. 68. puppetconf.com #puppetconf puppet apply ./tests/apache.pp Friday, August 23, 13
  69. 69. puppetconf.com #puppetconf http://www.pieterg.com/Media/277 Unit Testing Friday, August 23, 13
  70. 70. puppetconf.com #puppetconf Friday, August 23, 13
  71. 71. puppetconf.com #puppetconf Friday, August 23, 13
  72. 72. puppetconf.com #puppetconf http://robots.thoughtbot.com/post/33771089985/rspec-integration-tests-with-capybara Integration Testing Friday, August 23, 13
  73. 73. puppetconf.com #puppetconf Friday, August 23, 13
  74. 74. Versioning & Releasing Friday, August 23, 13
  75. 75. puppetconf.com #puppetconf 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 Friday, August 23, 13
  76. 76. Data In-Modules Overview & Call To Action Friday, August 23, 13
  77. 77. puppetconf.com #puppetconf Params.pp Meet Hiera Data ./data/operatingsystem/ Amazon.yaml Friday, August 23, 13
  78. 78. puppetconf.com #puppetconf Why put Hiera in modules? • Eliminate the params.pp pattern • Allow for swappable data sets • Introspect data in ruby code • ??? <--- we need your help Friday, August 23, 13
  79. 79. http://links.puppetlabs.com/bgtm Friday, August 23, 13
  80. 80. Friday, August 23, 13
  81. 81. puppetconf.com #puppetconf Network Too! Friday, August 23, 13
  82. 82. puppetconf.com #puppetconf • forge.puppetlabs.com/puppetlabs/gce_compute • certname == GCE project ID • Friday, August 23, 13
  83. 83. Thank You Ryan Coleman Product Owner | Puppet Labs @ryanycoleman Collaborate. Automate. Ship. Friday, August 23, 13
  84. 84. puppetconf.com #puppetconf Don’t Forget... • Beginners Guide to Writing Modules! • links.puppetlabs.com/bgtm • Design Jam on Module Quality • http://sched.co/16C7ET3 • Spend your GCE Credit with our Module! • http://forge.puppetlabs.com/puppetlabs/gce_compute • forge.puppetlabs.com Ryan Coleman Product Owner | Puppet Forge @ryanycoleman ryan@puppetlabs.com Friday, August 23, 13

×