Top Banner
Modern Module Development Morgan Haskel | Puppet Labs @KnittyNerd
30

Modern Module Development

Jul 15, 2015

Download

Technology

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: Modern Module Development

Modern Module Development

Morgan Haskel | Puppet Labs @KnittyNerd

Page 2: Modern Module Development

Definitions

• ‘Module’ - code to install and configure a single piece of software

• ‘Roles and Profiles’ - code to compose modules in a more site-specific manner

Page 3: Modern Module Development

How Did We Get Here?

• Before the forge

• Early forge

• Today

Page 4: Modern Module Development

What Now?

• Deploying a new technology != writing a new module

• Start with the Puppet Forge

• Check GitHub

Page 5: Modern Module Development

Module Evaluation

Page 6: Modern Module Development

Supported Modules

• Extensively tested

• Platform compatibility

• Widely used

• Actively maintained

Page 7: Modern Module Development

Approved Modules• Nominated by module authors or community

members

• Nominations reviewed by modules team

• Checked for functionality and following best practices

• Evaluated against comparable modules

• Nominate a module you love today!

Page 8: Modern Module Development

Module Scoring System

• Lint checking

• Puppet compatibility

• Metadata checking

• Community ratings

Page 9: Modern Module Development

Does It Work For You?

• Check the module documentation

• See if the module can generate your existing configuration

• How customizable is it?

Page 10: Modern Module Development

Other Checks

• Is the module actively maintained?

• Are issues and pull requests responded to?

• Can the module get you close to your configuration?

• Does the module follow best practices?

Page 11: Modern Module Development

Starting From Scratch

Page 12: Modern Module Development

Write The Module You Want

• Writing generic modules is hard

• Iterative development helps

• You don’t have to do it alone

Page 13: Modern Module Development

Scoping, Scoping, Scoping

• Only manage a single thing

• Avoid monolithic modules

• Tighter scope == greater flexibility

Page 14: Modern Module Development

Checking Your Work

• Unit and acceptance tests for all new modules

• Unit tests for most new features

• Acceptance tests for new big features

Page 15: Modern Module Development

• Lower overhead

• Verify against catalog

• Test for compilation

• Exercise parameters

• More overhead

• Verify against running system

• Full path test of software

• Check for config correctness

Unit Tests Acceptance Tests

Page 16: Modern Module Development

Danger Zone

Do not run acceptance tests anywhere but on a test system or virtual machine.

Acceptance tests occasionally have bugs that can be very destructive (rm -rf /)

Page 17: Modern Module Development

Upkeep• Test new code and

updates to existing code

• Regression tests are important

Page 18: Modern Module Development

Documentation

• Especially important with shared code

• Don’t forget in code comments

Page 19: Modern Module Development

Life After ReleaseModule work isn’t done yet.

Page 20: Modern Module Development

puppet-community

• GitHub organization

• Modules and tooling maintained by and for the Puppet community

• Reach out to @daenney and @hirojin if you need more information!

Page 21: Modern Module Development

Development Toolkit

• Brand New Puppet Language Style Guide

• Consistency with ModuleSync

• #puppet-dev on freenode

Page 22: Modern Module Development

Roles and Profiles

Page 23: Modern Module Development

Putting It All Together

When in doubt, add additional layers of abstraction.

Page 24: Modern Module Development

• Each node has a single role

• Each role is composed of one or many profiles

• Each profile is composed of other profiles or modules

Page 25: Modern Module Development

An Example

Page 26: Modern Module Development
Page 27: Modern Module Development
Page 28: Modern Module Development

Improving the Ecosystem

Find and get involved in a local Puppet User Group!

Page 29: Modern Module Development

Links!• Nominate approved: https://tickets.puppetlabs.com/browse/

MODULES/component/12141

• Style Guide: https://docs.puppetlabs.com/guides/style_guide.html

• ModuleSync: https://github.com/puppetlabs/modulesync

• puppet-community: http://puppet-community.github.io/

• Roles and Profiles: http://www.craigdunn.org/2012/05/239/

• Puppet User Group: http://puppetlabs.com/community/PUG

Page 30: Modern Module Development

Questions?