Getting Started with Puppet by Chad Metcalf Wibi Data

Preview:

DESCRIPTION

Getting Started with Puppet by Chad Metcalf Wibi Data

Citation preview

PROJECT

DATE CLIENT01/18/13 PUPPET CAMP SILICON VALLEY

Getting StarteD W/ PuppetChad Metcalf - @METCALFC

Infrastructure Engineer @ WibiDATA4 Years using Puppet - Build and RElease - Hadoop/HBase - InfraStructure - Operations

PUPPET ECOsystemGetting Bigger EVERYDAY

Learning Puppet VMStarting as fast as you can download 580 megs

Which Puppet DistributionIt is a lot like sushi

Which Puppet DistributionYou can roll your own to varying degrees of success

Which Puppet DistributionYou can go to your favorite mega-mart and get some packaged awhile ago along with some fried Chicken

Which Puppet DistributionOr you can go to an actual sushi joint

Puppet Open Source vs Puppet EnterpriseSame Great Taste

EXTERNAL NODE ClassifierFOREMAN - Puppet DASHBOARD - PUPPET ENTERPRISE CONSOLE - Roll YOUR OWN

PuppetDBstoreconfig and inventory service storage

HIERAHierarchical Database - Configuration details out of code

Consider ProvisioningFrom bare metal to Puppet ready

PROof Of ConceptProof of Concepts NEver DIE - Even if you really wished they would

Scaling PuppetNo Easy Answers

Module TIME?When are we going to do some real work?

Configuration AS CODEDOWN TO the MODULES you USE

/etc/puppetlabs/puppet├── modules│ ├── concat│ ├── dhcp│ ├── epel│ ├── hiera│ ├── hiera-puppet│ ├── limits│ ├── mongodb│ ├── mysql│ ├── nodejs│ ├── ntp

Puppet ForgeClearing House for modules you should be using

GithubNot everything is on the forge... yet.

ForkingFork to Eat not to LIVE - aka Stop the fork

Roll your ownDon’t reinvent the wheel

Learning moreDon’t Forget irc #puppet - #puppet-dev - Mailing lists

class boundary {

require boundary::params require boundary::dependencies

$id = $boundary::params::id $apikey = $boundary::params::apikey $collector = $boundary::params::collector $collector_port = $boundary::params::collector_port

file { '/etc/bprobe/': ensure => directory, mode => '0755', owner => 'root', group => 'root', }

package { 'bprobe': ensure => latest, require => File['/etc/bprobe'], }

Puppet has more then a DSLSometimes you just need to write a little ruby

class evil { define loop () { notice("${name}") } loop { ['this', 'is', 'evil']:}}

class{"evil":}

$ puppet apply evil.ppnotice: Scope(Evil::Loop[this]): thisnotice: Scope(Evil::Loop[is]): isnotice: Scope(Evil::Loop[evil]): evil

VagrantLearn to ♥ it

node_config.vm.provision :puppet do |puppet| puppet.manifests_path = 'provision/manifests' puppet.module_path = 'provision/modules'end

QUESTIONS?You Can find me @metcalfc