+ All Categories
Home > Documents > Puppet Camp Berlin 2015: The Power of Puppet 4

Puppet Camp Berlin 2015: The Power of Puppet 4

Date post: 20-Jul-2015
Category:
Upload: puppet-labs
View: 106 times
Download: 6 times
Share this document with a friend
53
Text The Power of Puppet 4 Martin Alfke [email protected] Image: http://praetoris01.deviantart.com/
Transcript
Page 1: Puppet Camp Berlin 2015: The Power of Puppet 4

Text

The Power of Puppet 4Martin Alfke [email protected]

Image: http://praetoris01.deviantart.com/

Page 2: Puppet Camp Berlin 2015: The Power of Puppet 4

Martin Alfke

PL Training Partner

Module Contributor

!

Freelancer / example42

Infrastructure Architect

Page 3: Puppet Camp Berlin 2015: The Power of Puppet 4

Welcome Puppet 4April 15th 2015

https://puppetlabs.com/blog/say-hello-open-source-puppet-4

http://docs.puppetlabs.com/puppet/4.0/reference/index.html

Page 4: Puppet Camp Berlin 2015: The Power of Puppet 4

Puppet Anniversary

founded in 2005

Page 5: Puppet Camp Berlin 2015: The Power of Puppet 4

Puppet Server & Packages

Page 6: Puppet Camp Berlin 2015: The Power of Puppet 4

Puppet Server on JVM

Clojure

Trapperkeeper

JMX & internal metrics (PE only)

Page 7: Puppet Camp Berlin 2015: The Power of Puppet 4

Puppet Packaging

AIO - like PE

New package name

New repository layout

No automatic update

Page 8: Puppet Camp Berlin 2015: The Power of Puppet 4

Environments

Page 9: Puppet Camp Berlin 2015: The Power of Puppet 4

Config environmentsStatic puppet.conf

[production] modulepath = /etc/puppet/production/modules manifests = /etc/puppet/production/manifests/site.pp ![test] modulepath = /etc/puppet/test/modules manifests = /etc/puppet/test/manifests/site.pp

Page 10: Puppet Camp Berlin 2015: The Power of Puppet 4

Config environmentsDynamic puppet.conf

[master] modulepath = /etc/puppet/$environment/modules manifests = /etc/puppet/$environment/manifests/site.pp !

Page 11: Puppet Camp Berlin 2015: The Power of Puppet 4

Directory environmentspuppet.conf

[master] environmentpath = /etc/puppet/environments !File system /etc/puppet/environments/ production/ modules/ manifests/ environment.conf test/ modules/ manifests/

Directory

Page 12: Puppet Camp Berlin 2015: The Power of Puppet 4

Benefits

All environments in one place

Per environment configuration (environment.conf)

config_version = '/usr/bin/git --git-dir /etc/puppet/environments/$environment/.git rev-parse HEAD'

Newly added environments are available immediately

Page 13: Puppet Camp Berlin 2015: The Power of Puppet 4

r10k

Robot 10000

Manage environment in git branches

Puppetfile handles modules and versions

Page 14: Puppet Camp Berlin 2015: The Power of Puppet 4

New language features

Page 15: Puppet Camp Berlin 2015: The Power of Puppet 4

Lambdas

Lambda

“a block of code that has parameters and can be invoked/called with arguments. A single lambda can be passed to a function”

$a = [1,2,3] each($a) |value| {notice $value }

Page 16: Puppet Camp Berlin 2015: The Power of Puppet 4

Lambdas and functions

each - iterating over an array

map - transform an array or hash into a new array

filter - filters an array or hash

reduce - reduces an array or hash to a single value

slice - slices an array or hash into chunks

Page 17: Puppet Camp Berlin 2015: The Power of Puppet 4

Using functions

Standard Puppet way:

function_name(argument) - each($variable)

Ruby way - chaining

argument.function_name - $variable.each

Page 18: Puppet Camp Berlin 2015: The Power of Puppet 4

EPP Template engine

Use Puppet $var instead of Ruby @var

epp(filename)

inline_epp(epp_string)

Page 19: Puppet Camp Berlin 2015: The Power of Puppet 4

HEREDOC support

Like Shell HEREDOC

$multiline_text = @(EOF) # Managed by Puppet intended two spaces starting at beginning of line | intention starts at pipe sign EOF

Page 20: Puppet Camp Berlin 2015: The Power of Puppet 4

HEREDOC control character

- prevents a new line (like erb/epp)

@(“EOF”) - variable substition

@(EOF/tn) - enables char escapes

availabe char escapes: t,s,r,n,u,L,$

Default to off

Page 21: Puppet Camp Berlin 2015: The Power of Puppet 4

Puppet 4.0 Data Bindings

New “hierarchy”:

global data (hiera)

data in environment (environment.conf)

data in modules

Page 22: Puppet Camp Berlin 2015: The Power of Puppet 4

Types, Types, Types

Page 23: Puppet Camp Berlin 2015: The Power of Puppet 4

Why do we need types?class ssh ( $server = true, ) { if $server { include ssh::server } }

Parameterized class with parameter default

Page 24: Puppet Camp Berlin 2015: The Power of Puppet 4

Why do we need types?class ssh ( $server = true, ) { if $server { include ssh::server } } !!class { ‘ssh’: server => ‘false’, }

!!!!!!!!!Usage of parameterised class. But: string instead of boolean !

Page 25: Puppet Camp Berlin 2015: The Power of Puppet 4

Why do we need types?class ssh ( $server = true, ) { if validate_bool($server) { include ssh::server } } !!class { ‘ssh’: server => ‘false’, }

Parameterized class with parameter default !!Now with data validation (from stdlib)

Page 26: Puppet Camp Berlin 2015: The Power of Puppet 4

Why do we need types?users::hash: ‘tom’: gid: ‘123’ home: ‘/home/tom’ managehome: false ‘ben’: gid: ‘124’ home: /home/ben managehome: ‘true’ ‘tim’: gid: 0125 home: ‘home/tim’ managehome: ‘false’

But: how to deal with more complex data? !!Do you see the errors?

Page 27: Puppet Camp Berlin 2015: The Power of Puppet 4

Why do we need types?users::hash: ‘tom’: gid: ‘123’ home: ‘/home/tom’ managehome: false ‘ben’: gid: ‘124’ home: /home/ben managehome: ‘true’ ‘tim’: gid: 0125 home: ‘home/tim’ managehome: ‘false’

But: how to deal with more complex data? !!!!!!Missing quotes String instead of bool !Missing quotes and leading 0 Missing trailing slash String instead of bool

Page 28: Puppet Camp Berlin 2015: The Power of Puppet 4

We need types!class ssh ( Boolean $server = true, ) { if $server { include ssh::server } }

!Types, Types, Types, Types

Page 29: Puppet Camp Berlin 2015: The Power of Puppet 4

We need types!class ssh ( Boolean $server = true, ) { if $server { include ssh::server } } !!class { ‘ssh’: server => ‘false’, } !Error 400 on SERVER: Expected parameter 'server' of 'Class[Ssh]' to have type Boolean, got String

!!!!!!!!!We now get proper error messages.

Page 30: Puppet Camp Berlin 2015: The Power of Puppet 4

We want types!class users ( Hash $hash ) { $userarray = keys($hash) users::user_data { $userarray: } } !define users::user_data ( String $gid = $users::hash[$title][gid], String $home = $users::hash[$title][home], Boolean $managehome = $users::hash[$title][managehome], ) { }

Page 31: Puppet Camp Berlin 2015: The Power of Puppet 4

Available TypesInteger[from, to]

Float[from,to]

Enum[*strings]

Pattern[*patterns]

Regexp[regexp]

Boolean

Array

Hash

Page 32: Puppet Camp Berlin 2015: The Power of Puppet 4

Deprecations

Page 33: Puppet Camp Berlin 2015: The Power of Puppet 4

Node Inheritancenode ‘basenode’ { include base include security } !node ‘www.server.com’ inherits basenode { include webserver }

# Dummy node as default !!!!# Real node inherits from basenode

Page 34: Puppet Camp Berlin 2015: The Power of Puppet 4

Roles & Profilesnode ‘www.server.com’ { include webserver } !!class basenode { include base include security } !class webserver { include basenode }

# No more node inheritance !!!!# Define a class instead

Page 35: Puppet Camp Berlin 2015: The Power of Puppet 4

Empty string comparison

An empty string compares to true instead of false

Page 36: Puppet Camp Berlin 2015: The Power of Puppet 4

Empty string comparison$message = ‘’ !if $message { notify { “Message: ${message}”: } }

Empty string set as default !Check for variable existing and having content

Page 37: Puppet Camp Berlin 2015: The Power of Puppet 4

Empty string comparison$message = ‘’ !if $message and $message != ‘’ { notify { “Message: ${message}”: } }

Empty string set as default !Check for variable existing and not empty string

Page 38: Puppet Camp Berlin 2015: The Power of Puppet 4

Variable naming

A variable may not start with

a capital letter

an underscore (well. yes. it may. but. it’s private.)

Page 39: Puppet Camp Berlin 2015: The Power of Puppet 4

Reference NamingReference deprecation

capital letter on title

empty space between Type reference and title!Class [Ssh] !Class [‘ssh’] !Class[‘ssh’]

!Deprecated capital title !Empty space !Working

Page 40: Puppet Camp Berlin 2015: The Power of Puppet 4

Hyphens in names

No more hyphens in

module name

class name

define name

Page 41: Puppet Camp Berlin 2015: The Power of Puppet 4

Hyphens in names!<modulepath>/syslog-ng/ !<modulepath>/syslog_ng !class syslog-ng { … } !class syslog_ng { … }

!Deprecated !New name required !Deprecated !New name required (obious -> module/class naming convention)

Page 42: Puppet Camp Berlin 2015: The Power of Puppet 4

Ruby DSLPuppet Ticket #18876

Closed 02/04/2013

New Ruby DSL API was revamped: “the number and severity of issues that came up in exploratory testing led us to the conclusion that it was not supportable code” - Puppet Dev ML - 01/26/2013

hostclass ‘ssh’ do end

Page 43: Puppet Camp Berlin 2015: The Power of Puppet 4

More deprecation

Relative resolution of class names - the reason why you want to use double colon - include ::ssh

Importing manifests

Matching numbers with regexp

Search function

Mutating arrays and hashes

Page 44: Puppet Camp Berlin 2015: The Power of Puppet 4

The 4 Powers of Puppet 4

Page 45: Puppet Camp Berlin 2015: The Power of Puppet 4

Performance

Request response times and catalog compile times

!

!

Page 46: Puppet Camp Berlin 2015: The Power of Puppet 4

Scalability

Switch on/off functionality for multi master setup

!

!

!

Page 47: Puppet Camp Berlin 2015: The Power of Puppet 4

Measurability

Page 48: Puppet Camp Berlin 2015: The Power of Puppet 4

Flexibility

Dealing with complex data natively in Puppet DSL

Page 49: Puppet Camp Berlin 2015: The Power of Puppet 4

Upgrading to Puppet 4Breaks old style Puppet DSL code

Read documentation carefully

Run tests

Proposed way: new master

Page 50: Puppet Camp Berlin 2015: The Power of Puppet 4

Text

Support your modulesWrite PR, file bug reports, fix issues

Page 51: Puppet Camp Berlin 2015: The Power of Puppet 4

More information

http://puppet-on-the-edge.blogspot.com/

https://github.com/puppetlabs/puppet-specification

http://camptocamp.com/actualite/getting-code-ready-puppet-4/

Page 52: Puppet Camp Berlin 2015: The Power of Puppet 4

More information

https://docs.puppetlabs.com/puppet/3.7/reference/deprecated_language.html

http://docs.puppetlabs.com/puppet/4.0/reference/index.html

https://puppetlabs.com/blog/welcome-puppet-collections

Page 53: Puppet Camp Berlin 2015: The Power of Puppet 4

Text

The Power of Puppet 4Martin Alfke [email protected]

Image: http://praetoris01.deviantart.com/


Recommended