power of puppet 4

52
Text The Power of Puppet 4 Martin Alfke [email protected]

Upload: martin-alfke

Post on 16-Jul-2015

2.903 views

Category:

Technology


2 download

TRANSCRIPT

Text

The Power of Puppet 4Martin Alfke [email protected]

About me

PL Training Partner

Module Contributor

Automation Enthusiast

Puppet Server & Packaging

Environments

New language features

Types, Types, Types

Deprecations

The 4 Powers of Puppet 4

Puppet Server & Packages

Puppet Server on JVM

Closure

Trapperkeeper

JMX & internal metrics (PE only)

Puppet Packaging

AIO - like PE

New package name

Discussion on mailinglist

Environments

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

Config environmentsDynamic puppet.conf

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

Directory environmentspuppet.conf

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

Directory

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

r10k

Robot 10000

Manage environment in git branches

Puppetfile handles modules and versions

New language features

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 }

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

Using functions

Standard Puppet way:

function_name(argument) - each($variable)

Ruby way - chaining

argument.function_name - $variable.each

EPP Template engine

Use Puppet $var instead of Ruby @var

epp(filename)

inline_epp(epp_string)

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

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

HEREDOC syntax check@(EOF:json)

Can be used by e.g. Gepetto or any other Puppet plugin

Built in : json

$var = @(EOF:json) { “Puppet”: ‘awesome’ } - EOF

Types, Types, Types

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

Parameterized class with parameter default

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 !

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)

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

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

!Types, Types, Types, Types

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.

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], ) { }

Available TypesInteger[from, to]

Float[from,to]

Enum[*strings]

Pattern[*patterns]

Regexp[regexp]

Boolean

Array

Hash

Deprecations

DeprecationsNode inheritance

Empty string comparison

Variable naming

Reference syntax

Hyphens in names

Ruby DSL

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

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

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

Empty string comparison

An empty string compares to true instead of false

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

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

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

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

Variable naming

A variable may not start with

a capital letter

an underscore

Reference syntaxReference deprecation

capital letter on title

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

!Deprecated capital title !Empty space !Working

Hyphens in names

No more hyphens in

module name

class name

define name

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)

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

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

The 4 Powers of Puppet 4

Performance

Request response times and catalog compile times

!

!

Scalability

Switch on/off functionality for multi master setup

!

!

!

Measurability

Flexibility

Dealing with complex data natively in Puppet DSL

Upgrading to Puppet 4

Breaks old style Puppet DSL code

Read documentation carefully

Run tests

More information

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

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

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

Text

Support your modulesWrite PR, file bug reports, fix issues

Thank youMartin Alfke !

Co-Founder & CEO example42 GmbH i.G.