Writing and Sharing Great Modules with the Puppet Forge

Preview:

DESCRIPTION

Ryan Coleman's talk on "Writing and Sharing Great Modules with the Puppet Forge" at Puppet Camp Baltimore, Atlanta, and Chicago 2013. Learn about upcoming Puppet Camps at http://puppetlabs.com/community/puppet-camp/

Citation preview

@ryanycoleman - Product Owner - Puppet Forge

Writing and Sharing Great Modules with the Puppet Forge

About Me

#PuppetCamp

Ryan was a RedHat sysadmin for Penn State before joining Puppet Labsas a professional services engineer. Now is product owner for the Forge.

#PuppetCamp

The Puppet Forge is a community driven web service for contributing and finding Puppet modules.

#PuppetCampWord cloud made from forge module names. Size = frequency

#PuppetCampThe following are examples of what you will find on the Forge.

#PuppetCamp

0

1000

2000

3000

4000

End Q3 End Q4 ~End Q1 ~End Q2 ~End Q3 ~End Q4

Forge Module Count

#PuppetCamp

#PuppetCamp

#PuppetCamp

#PuppetCamp

Best Good Practices

#PuppetCamp

PL Style Guide#PuppetCamp

#PuppetCamp

#PuppetCamp

#PuppetCamp

#PuppetCamp

Code VS Data

#PuppetCamp

As you get further along with your Puppet Deployments, separating your code (puppet resources) from the data (what package, what version) becomes increasingly important.

Imagine that you’re doing a research project in the library.

You’ve got some books that help accomplish your goal.

Separate

Code From

Data

But you don’t write in those books. You keep your notes -- your data -- separate.

So where do you express your data and how does Puppet find it?

Automatic Data LookupBuilt into Puppet 3

The answer, use Hiera!

Seriously, these docs rock. Read them. http://docs.puppetlabs.com/hiera/1/index.html

It’s MAGICBut also, it’s not...

#PuppetCamp

But first, let’s take a closer look at a Puppet run.

Hello! I’m James_Bond running the RedHat

license to kill downtime.

Good to know!

Hmm, what does James_Bond need to

enforce?.

James_Bond?

External Node Classifier

Enforce Forge

Modules

OK, what do I need for Forge?

Modules

Modules Modules

forge::package?

Data Bindings

Hiera

YAMLJSON

MySQL Foreman

Backends$clientcert

$operatingsystem

common

Hiearchy

The Puppet Master needs forge::package. To get this data...- It consults its data bindings terminus (abstraction for looking up data)- Default lookup to Hiera (key/value store for data)- Hiera consults its back-end data stores (defaults to yaml)- Hiera returns result of lookup to master (key/value or could not find)

It’s screen!

forge::package?

Data Bindings

Hiera

YAMLJSON

MySQL Redis

Backends$clientcert

$operatingsystem

common

Hiearchy

The Puppet Master needs forge::package. To get this data...- It consults its data bindings terminus (abstraction for looking up data)- Default lookup to Hiera (key/value store for data)- Hiera consults its back-end data stores (defaults to yaml)- Hiera returns result of lookup to master (key/value or could not find)

? $forge::package

$clientcert

$operatingsystem

common

Hiearchy

$james_bond

$RedHat

common

Hiera will examine the lookup order of its data backends and its lookup hierarchy. If you specified a variable lookup in your hierarchy, Hiera will use available facts when choosing the backend file to lookup.

Expressing the configuration of hieradata backends and lookup hierarchy

Hiera lets you express data in some structured format (which is pluggable).

You then establish a hierarchy of lookup, however you like, usually based on facts.

Ok, so how do I use it with my Puppet

classes?

#PuppetCamp

Thankfully, Puppet 3 has made implementing Hiera really simple.

In the early days...

Please don’t use the hiera() function. Consider it legacy.

In the early days...

This is better, as the user can override this default parameter value.

With this, you’re locked into hiera.

Here’s the magic!

But really, just get yourself onto Puppet 3 and take advantage of automatic Hiera!

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.

This slide could be more visual vs text-based

Data Bindingsdon’t lock yourself in

#PuppetCamp

Additionally, protect yourself from a potential loss of Hiera.

Built into Puppet 3

data_bindings were implemented to be an abstraction for data lookup, defaulting to hiera for now

There’s already an alternative out there, for consulting foreman as your data backend

But really, just get yourself onto Puppet 3 and take advantage of automatic Hiera!

Hiera backends are pluggable too. Here are two examples.

Best Practices

• Confirm to the Style Guide

• Use Parameterized Classes

• Don’t use hiera() directly

#PuppetCamp

Re-cap.

The Team

What have we been up to?

• Re-launch and Re-design

Though we’re small, we’ve been really busy!

Lots of little features add up to a substantially nicer to use Forge.

What have we been up to?

• Re-launch and Re-design

• PMT Fixes (prep for publish)

• Download Counts

Download counts, now in your search results!

What’s Next?

GitHub PublishEdit your Modulefile, push your commit and we’ll do the publishing! Coming soon to a repository near you.

A Full & Public API

What’s Next?

Also coming soon, an actual API for doing all sorts of things with the Forge.

What’s Next?

Just an experimental mock-up of search results. Actual feature will absolutely look and behave differently.

On-Premise Forge?

Private Forge has been a common request. The requests I get are two-fold.

A) How can I install public Forge content on a master that can’t reach the outside.B) How can I contribute company-specific content to a Forge-like thing inside my firewall

On-Premise Forge?

Private Forge has been a common request. The requests I get are two-fold.

A) How can I install public Forge content on a master that can’t reach the outside.B) How can I contribute company-specific content to a Forge-like thing inside my firewall

On-Premise Forge?

Private Forge has been a common request. The requests I get are two-fold.

A) How can I install public Forge content on a master that can’t reach the outside.B) How can I contribute company-specific content to a Forge-like thing inside my firewall

On-Premise Forge?

Private Forge has been a common request. The requests I get are two-fold.

A) How can I install public Forge content on a master that can’t reach the outside.B) How can I contribute company-specific content to a Forge-like thing inside my firewall

On-Premise Forge?

Private Forge has been a common request. The requests I get are two-fold.

A) How can I install public Forge content on a master that can’t reach the outside.B) How can I contribute company-specific content to a Forge-like thing inside my firewall

On-Premise Forge?

Private Forge has been a common request. The requests I get are two-fold.

A) How can I install public Forge content on a master that can’t reach the outside.B) How can I contribute company-specific content to a Forge-like thing inside my firewall

PulpProject.org

RedHat’s Pulp Project is repository management software that recently added support for Puppet Modules.

• Manage Modules on-premise

• Mirror Public Forge

• BUT, please work with me on this

• Email me or comment on #5033

If you’re interested in this, email ryan@puppetlabs.com or add your thoughts to https://projects.puppetlabs.com/issues/5033.

We’re going to do something in this space, but want to hear more from you on what you need.

Want to help?

#PuppetCamp

If you want to add your influence to our products, join the Puppet Labs Test Pilots program!

https://puppetlabs.com/community/puppet-test-pilots-program/

• Sharpen your skills

• Get Certified

• Online learning on the way

• puppetlabs.com/education

Puppet Advanced Training in Atlanta - June 11http://puppet-advanced-training-atlanta-

june-2013-eorg.eventbrite.com/

#PuppetCamp

Our education courses are carefully crafted and delivered by our fabulous education team and professional services team.

Advanced course coming to LA 3/19

Browse upcoming events at http://puppetlabs.eventbrite.com/

WE’RE HIRING!

• Puppet Forge Module Engineer

• http://bit.ly/15wdruk

• Software Engineers

• puppetlabs.com/jobs

#PuppetCamp

Seriously, join our team. It’ll be awesome.

Thank You!

Please email (or tweet) feedback and questions

ryan@puppetlabs.com - @ryanycoleman

forge.puppetlabs.com

puppetlabs.com/jobs

#PuppetCamp

Seriously, join our team. It’ll be awesome.

Recommended