puppetcamp melbourne - puppetdb

60
Node Collaboration with PuppetDB Michael Richardson @m_richo

Upload: mrichardson

Post on 02-Jul-2015

335 views

Category:

Technology


2 download

DESCRIPTION

My Talk from PuppetCamp Melbourne 2014. Using PuppetDB as a source of data to configure your systems.

TRANSCRIPT

Page 1: Puppetcamp Melbourne - puppetdb

Node

Collaboration with

PuppetDB

Michael Richardson @m_richo

Page 2: Puppetcamp Melbourne - puppetdb

Agenda

1. Who am i

2. The challenges we face

3. What is PuppetDB

4. How can PuppetDB help

5. Examples

Page 3: Puppetcamp Melbourne - puppetdb

$ whoami

• Michael Richardson @m_richo

• engineer at Odecee

• Solaris/Linux Sys Admin

• currently battling Windows

• coffee consumer

• devops enthusiast

• puppet certified

Page 4: Puppetcamp Melbourne - puppetdb

The Challenge

Page 5: Puppetcamp Melbourne - puppetdb

The Challenge

Faster

provisioning

Page 6: Puppetcamp Melbourne - puppetdb

The Challenge

Faster

provisioning

Page 7: Puppetcamp Melbourne - puppetdb

The Challenge

more environments

Faster

provisioning

Page 8: Puppetcamp Melbourne - puppetdb

The Challenge

more environments

Faster

provisioning

Page 9: Puppetcamp Melbourne - puppetdb

The Challenge

more environments

Faster

provisioning

Page 10: Puppetcamp Melbourne - puppetdb

The Challenge

micro-services

more environments

Faster

provisioning

Page 11: Puppetcamp Melbourne - puppetdb

The Challenge

micro-services

more environments

Faster

provisioning

Page 12: Puppetcamp Melbourne - puppetdb

Tools like Puppet have

become essential

Page 13: Puppetcamp Melbourne - puppetdb

The need for

automated, repeatable, versioned

provisioning and configuration

management of infrastructure and

services

Page 14: Puppetcamp Melbourne - puppetdb

We need

automated, repeatable, versioned

learning, reactive and adaptive

provisioning and configuration

management of infrastructure and

services

Let’s raise the bar

Page 15: Puppetcamp Melbourne - puppetdb

This is where

PuppetDB

and tools can help

Page 16: Puppetcamp Melbourne - puppetdb

So what is PuppetDB?

Page 17: Puppetcamp Melbourne - puppetdb

So what is PuppetDB?

1. PuppetLabs product.

2. Storage service for Puppet produced

data.

3. Written in Clojure.

4. Persists data to a Postgres DB

5. Supports Puppet Enterprise and Puppet

Open Source environments.

Page 18: Puppetcamp Melbourne - puppetdb

PuppetDB

PuppetDBPuppetMaster

agent agent agent agent

Postgres

Page 19: Puppetcamp Melbourne - puppetdb

PuppetDB

PuppetDBPuppetMaster

agent agent agent agent

Postgres

Page 20: Puppetcamp Melbourne - puppetdb

PuppetDB

PuppetDBPuppetMaster

agent agent agent agent

Postgres

PuppetDBPuppetMaster

Load balancer

Page 21: Puppetcamp Melbourne - puppetdb

What data goes in PuppetDB

Page 22: Puppetcamp Melbourne - puppetdb

Node Facts

Page 23: Puppetcamp Melbourne - puppetdb

Node Facts

ipaddress network

FQDN

macaddress

operatingsystemrelease

osfamilysshrsakey kernel

Page 24: Puppetcamp Melbourne - puppetdb

Node Catalog’s

Page 25: Puppetcamp Melbourne - puppetdb

Node Catalog’s

Page 26: Puppetcamp Melbourne - puppetdb

CMDB??So much useful data

Facts about every node

Catalog for every node

Page 27: Puppetcamp Melbourne - puppetdb

How do we access it?

Page 28: Puppetcamp Melbourne - puppetdb

PuppetDB has an API

Page 29: Puppetcamp Melbourne - puppetdb

PuppetDB API

PuppetDB REST API has the following endpoints:

• Nodes

• Catalogs

• Facts

• Fact-names

• Resources

• Environments

• Metrics

• Reports

• Events

• And more

Page 30: Puppetcamp Melbourne - puppetdb

Query PuppetDB

Query all the nodes

Page 31: Puppetcamp Melbourne - puppetdb

Query PuppetDB

Query nodes and filter results

Page 32: Puppetcamp Melbourne - puppetdb

Query PuppetDB

Query all facts for a given node

Page 33: Puppetcamp Melbourne - puppetdb

Query PuppetDB

Query an individual fact for a given node

Page 34: Puppetcamp Melbourne - puppetdb

Sick of running curl?

Page 35: Puppetcamp Melbourne - puppetdb

Check out Puppet Explorer

thank you Erik Dalén and

Page 36: Puppetcamp Melbourne - puppetdb

Check out Puppetboard

thank you Daniele Sluijters

Page 37: Puppetcamp Melbourne - puppetdb

Dashboards are lovely.

But how can we use

this data to allow

node collaboration

Page 38: Puppetcamp Melbourne - puppetdb

Introducing

PuppetDBquery module

Again, thank you Erik Dalén

https://forge.puppetlabs.com/dalen/puppetdbquery

Page 39: Puppetcamp Melbourne - puppetdb

PuppetDB query

Provides

1. CLI commands

2. PuppetDB Hiera backend

3. PuppetDB functions

Page 40: Puppetcamp Melbourne - puppetdb

PuppetDB query

Provides

1. CLI commands

2. PuppetDB Hiera backend

3. PuppetDB functions

Page 41: Puppetcamp Melbourne - puppetdb

PuppetDB query

Provides

1. CLI commands

2. PuppetDB Hiera backend

3. PuppetDB functions

o query_nodes

o query_facts

Page 42: Puppetcamp Melbourne - puppetdb

Puppet run

PuppetMaster

agent

facts

Puppet code

Hiera data

catalog

report

Page 43: Puppetcamp Melbourne - puppetdb

Puppet run with puppetdbquery

PuppetDB

PuppetMaster

agent

facts

Puppet code

Hiera data

catalog

report

Page 44: Puppetcamp Melbourne - puppetdb

query_nodesAccepts 2 arguments 1. Query to filter nodes

2. Fact to return (optional)

Page 45: Puppetcamp Melbourne - puppetdb

query_nodesAccepts 2 arguments 1. Query to filter nodes

2. Fact to return (optional)

Returns an array of results

webservers = [‘node2.local’, ‘node3.local’]

foo_db_ip = [‘10.10.40.12’]

Page 46: Puppetcamp Melbourne - puppetdb

query_factsAccepts 2 arguments

1. Query to filter nodes

2. List of facts to return

Page 47: Puppetcamp Melbourne - puppetdb

query_factsAccepts 2 arguments

1. Query to filter nodes

2. List of facts to return

Returns nested hash of resultswebserver_network = {"node2.local"=>{"macaddress”

=>"08:00:27:99:4B:CB", "ipaddress"=>"10.0.2.15"},

"node3.local"=>{"macaddress"=>"08:00:27:99:4B:CB",

"ipaddress"=>"10.0.2.15"}}

Page 48: Puppetcamp Melbourne - puppetdb

What’s this give us?

Page 49: Puppetcamp Melbourne - puppetdb

What’s this give us?

The ability to dynamically configure a system based on the state of other systems in

the infrastructure.

Page 50: Puppetcamp Melbourne - puppetdb

Examples

Page 51: Puppetcamp Melbourne - puppetdb

populate files with query results

Page 52: Puppetcamp Melbourne - puppetdb

populate files with query results

Page 53: Puppetcamp Melbourne - puppetdb

populate files with query results

Page 54: Puppetcamp Melbourne - puppetdb

Examples – load balancer

Page 55: Puppetcamp Melbourne - puppetdb

Examples – whitelist addresses

Page 56: Puppetcamp Melbourne - puppetdb

Examples – search for service

Page 57: Puppetcamp Melbourne - puppetdb

Summary

• PuppetDB has a wealth of information

about your systems. Start using it!

• Populate dynamic configuration based on

PuppetDB data.

• Allow hosts and services to simply be

discovered by their peers.

Page 58: Puppetcamp Melbourne - puppetdb

Thank you.

#protip

Go buy this book now

By Alessandro Franceschi

It is EXCELLENT!

Page 59: Puppetcamp Melbourne - puppetdb

Thank you.

For folks from Sydney

Sydney Puppet User Group

http://www.meetup.com/Sydney-Puppet-User-Group/

Come along

Page 60: Puppetcamp Melbourne - puppetdb

Thank you

Any Questions?

Michael Richardson @m_richo