SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
Puppet 4: The Low WAT-tage
Edition
Nick Fagerlund, Puppet
nickf@puppet.com
@nfagerlund
nfagerlund.net
2
Hi, I’m Nick Fagerlund!!!!
I’ve seen things you people wouldn’t believe
My 2013 talk: https://www.youtube.com/watch?v=aU7vjKYqMUo
My much smarter inspiration: https://www.destroyallsoftware.com/talks/wat
3
Agenda
4
Agenda
1. Fundamental Chaos
2. Slapstick
3. Elegance
5
1. Fundamental Chaos
6
Relative Namespacing
class profile::apache {
include apache
}
7
Relative Namespacing
class profile::apache {
class {'apache':}
}
8
Relative Namespacing
include apache meant…
• <CURRENT NAMESPACE>::apache
• <PARENT OF CURRENT NAMESPACE>::apache
• etc. and so on
• Eventually, ::apache
https://projects.puppetlabs.com/issues/2053
https://tickets.puppetlabs.com/browse/PUP-121
9
Relative Namespacing
class profile::apache {
include ::apache
}
10
Is Truth Beauty, and Beauty Truth?
Facts:
architecture => x86_64
domain => local
facterversion => 2.4.2
fqdn => "treepie.local"
gid => staff
hardwareisa => i386
hardwaremodel => x86_64
hostname => treepie
11
Is Truth Beauty, and Beauty Truth?
if $::is_virtual {
# do something
}
12
Is Truth Beauty, and Beauty Truth?
“false”
13
Is Truth Beauty, and Beauty Truth?
if $::is_virtual == 'true' { ... }
# or:
if str2bool($::is_virtual) { ... }
# with the str2bool() function
from puppetlabs/stdlib
14
Is Truth Beauty, and Beauty Truth?
$interfaces =
lo0,gif0,stf0,en0,en1,en2,p2p0,awdl0,
bridge0,utun0
$macaddress_en0 = 72:00:04:eb:7a:93
...etc.
15
2. Slapstick
16
Data Type Nonsense
$myvar = /^# @.*$/
notice($myvar)
# Error: …Syntax error at
'/' at /root/test.pp:1
17
Data Type Nonsense
$one = 1
# String
$one_times_one = 1*1
# Fixnum
$an_undef = undef
# NilClass
$multi_undefs = [undef, undef]
# Symbol (:undef)
18
Interpolation Shenanigans
notice("Twenty plus eighty is ${20 + 80}.")
# Error: left operand of + is not a number at
/root/test.pp:15
19
Interpolation Shenanigans
notice("Twenty plus eighty is ${'20' + 80}.")
# Notice: Scope(Class[main]): Twenty plus
eighty is 100.
20
Interpolation Shenanigans
• Single bare word:
• ${variable}
• Bare word plus chained function call:
• ${variable.split(‘,’)}
• That’s it. Otherwise it’s an expression.
21
Inconsistent Comparisons
notice( 'eat' == 'EAt' ) # true
notice( 'eat' in 'EAten' ) # false
22
The Great Escape
$greeting = 'How's it going?'
23
The Great Escape
$s32path = 'C:WindowsSystem32'
notice($s32path)
# Error: Unclosed quote after ''
in 'C:WindowsSystem32'
24
The Great Escape
$s32path = 'C:WindowsSystem32'
notice($s32path)
# Notice: Scope(Class[main]):
C:WindowsSystem32
>:c
25
The Great Escape
$gitconfig = @("GITCONFIG"/L)
[user]
name = ${displayname}
email = ${email}
[alias]
lg = "log —pretty=format:’%C(yellow)%h
%C(reset) %s%C(cyan)%cr%C(reset) %C(blue)%an
%C(reset) %C(green)%d%C(reset)’ --graph"
| GITCONFIG
26
The Great Escape
$s32path = @(MYPATH)
C:WindowsSystem32
-MYPATH
notice($s32path)
# Notice: Scope(Class[main]):
C:WindowsSystem32
27
Class Class
class class {
notify {'hey it worked':}
}
include class
# Error: Syntax error at 'class' at
/root/test.pp:5
28
Class Class
class class {
notify {'hey it worked':}
}
include "class"
# Notice: hey it worked
# Notice: /Stage[main]/Class/Notify[hey it
worked]/message: defined 'message' as 'hey it
worked'
29
Class Class
class class {
notify {'hey it worked':}
}
include "class"
# Error: 'class' is not a valid classname
at /Users/nick/Desktop/test.pp:1:7
30
3. Elegance
31
Data Type Annotations
class ntp (
$autoupdate = $ntp::params::autoupdate,
$config = $ntp::params::config,
$config_template = $ntp::params::config_template,
$disable_monitor = $ntp::params::disable_monitor,
$driftfile = $ntp::params::driftfile,
$logfile = $ntp::params::logfile,
$iburst_enable = $ntp::params::iburst_enable,
$keys_enable = $ntp::params::keys_enable,
$keys_file = $ntp::params::keys_file,
$keys_controlkey = $ntp::params::keys_controlkey,
$keys_requestkey = $ntp::params::keys_requestkey,
$keys_trusted = $ntp::params::keys_trusted,
$package_ensure = $ntp::params::package_ensure,
$package_name = $ntp::params::package_name,
$panic = $ntp::params::panic,
$preferred_servers = $ntp::params::preferred_servers,
$restrict = $ntp::params::restrict,
$interfaces = $ntp::params::interfaces,
$servers = $ntp::params::servers,
$service_enable = $ntp::params::service_enable,
$service_ensure = $ntp::params::service_ensure,
$service_manage = $ntp::params::service_manage,
$service_name = $ntp::params::service_name,
$udlc = $ntp::params::udlc
) inherits ntp::params {
...
32
...
validate_absolute_path($config)
validate_string($config_template)
validate_bool($disable_monitor)
validate_absolute_path($driftfile)
if $logfile { validate_absolute_path($logfile) }
validate_bool($iburst_enable)
validate_bool($keys_enable)
validate_re($keys_controlkey, ['^d+$', ''])
validate_re($keys_requestkey, ['^d+$', ''])
validate_array($keys_trusted)
validate_string($package_ensure)
validate_array($package_name)
validate_bool($panic)
validate_array($preferred_servers)
validate_array($restrict)
validate_array($interfaces)
validate_array($servers)
validate_bool($service_enable)
validate_string($service_ensure)
validate_bool($service_manage)
validate_string($service_name)
validate_bool($udlc)
Data Type Annotations
~~~~ 👀 ZOOM AND ENHANCE 👀 ~~~~
class ntp (
$config_template = $ntp::params::config_template,
$disable_monitor = $ntp::params::disable_monitor,
...
) inherits ntp::params {
...
validate_string($config_template)
validate_bool($disable_monitor)
33
Data Type Annotations
class ntp (
Boolean $disable_monitor =
$ntp::params::disable_monitor,
Pattern[/^d+$/] $keys_controlkey =
$ntp::params::keys_controlkey,
Integer $keys_requestkey =
$ntp::params::keys_requestkey,
Array $keys_trusted =
$ntp::params::keys_trusted,
String $package_ensure =
$ntp::params::package_ensure,
34
Iteration
•Old Ruby DSL?
•Do-nothing defined types?
•create_resources function?
35
Data Type Annotations
# in Hiera data:
admin_users:
casey:
uid: '1330'
gid: allstaff
shell: zsh
groups:
- developers
- release
leslie:
uid: '1308'
gid: allstaff
groups:
- prosvc
36
# in Puppet manifest:
class puppet_ops::users::virtual {
create_resources(
'@user',
lookup('admin_users'),
{ # defaults
ensure => present,
purge_ssh_keys => true,
}
)
}
Iteration
$binaries = ['facter', 'hiera', 'mco', ‘puppet',
'puppetserver']
$binaries.each |String $binary| {
file { "/usr/bin/${binary}":
ensure => link,
target => "/opt/puppetlabs/bin/${binary}",
}
}
37
EPP Templates
<%- | Boolean $keys_enable,
String $keys_file,
Array $keys_trusted,
String $keys_requestkey,
String $keys_controlkey
| -%>
<%# Parameter tag ↑ -%>
<%# Non-printing tag ↓ -%>
<% if $keys_enable { -%>
<%# Expression-printing tag ↓ -%>
keys <%= $keys_file %>
38
<% unless $keys_trusted =~ Array[Data,0,0]
{ -%>
trustedkey <%= $keys_trusted.join(' ') %>
<% } -%>
<% if $keys_requestkey =~ String[1] { -%>
requestkey <%= $keys_requestkey %>
<% } -%>
<% if $keys_controlkey =~ String[1] { -%>
controlkey <%= $keys_controlkey %>
<% } -%>
<% } -%>
Thanks
39
Questions?
nickf@puppet.com
@nfagerlund
nfagerlund.net
40
PuppetConf 2016: Puppet 4.x: The Low WAT-tage Edition – Nick Fagerlund, Puppet

Mais conteúdo relacionado

Mais procurados

The Dirty Little Secrets They Didn’t Teach You In Pentesting Class
The Dirty Little Secrets They Didn’t Teach You In Pentesting ClassThe Dirty Little Secrets They Didn’t Teach You In Pentesting Class
The Dirty Little Secrets They Didn’t Teach You In Pentesting ClassRob Fuller
 
DNN Upgrades Made Simple (DNN Summit 2019)
DNN Upgrades Made Simple (DNN Summit 2019)DNN Upgrades Made Simple (DNN Summit 2019)
DNN Upgrades Made Simple (DNN Summit 2019)Will Strohl
 
Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4Ilya Haykinson
 
Metasploit magic the dark coners of the framework
Metasploit magic   the dark coners of the frameworkMetasploit magic   the dark coners of the framework
Metasploit magic the dark coners of the frameworkRob Fuller
 
Write book in markdown
Write book in markdownWrite book in markdown
Write book in markdownLarry Cai
 
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionCool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionSchalk Cronjé
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierCarlos Sanchez
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and AgentRanjit Avasarala
 
Drupal, Memcache and Solr on Windows
Drupal, Memcache and Solr on WindowsDrupal, Memcache and Solr on Windows
Drupal, Memcache and Solr on WindowsAlessandro Pilotti
 
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013Puppet
 
PHP: The Beginning and the Zend
PHP: The Beginning and the ZendPHP: The Beginning and the Zend
PHP: The Beginning and the Zenddoublecompile
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to productionSean Hess
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 

Mais procurados (20)

The Dirty Little Secrets They Didn’t Teach You In Pentesting Class
The Dirty Little Secrets They Didn’t Teach You In Pentesting ClassThe Dirty Little Secrets They Didn’t Teach You In Pentesting Class
The Dirty Little Secrets They Didn’t Teach You In Pentesting Class
 
DNN Upgrades Made Simple (DNN Summit 2019)
DNN Upgrades Made Simple (DNN Summit 2019)DNN Upgrades Made Simple (DNN Summit 2019)
DNN Upgrades Made Simple (DNN Summit 2019)
 
C++ for the Web
C++ for the WebC++ for the Web
C++ for the Web
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Puppet evolutions
Puppet evolutionsPuppet evolutions
Puppet evolutions
 
Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4Why and How Powershell will rule the Command Line - Barcamp LA 4
Why and How Powershell will rule the Command Line - Barcamp LA 4
 
Metasploit magic the dark coners of the framework
Metasploit magic   the dark coners of the frameworkMetasploit magic   the dark coners of the framework
Metasploit magic the dark coners of the framework
 
Write book in markdown
Write book in markdownWrite book in markdown
Write book in markdown
 
Migration from ASP to ASP.NET
Migration from ASP to ASP.NETMigration from ASP to ASP.NET
Migration from ASP to ASP.NET
 
Lviv 2013 d7 vs d8
Lviv 2013   d7 vs d8Lviv 2013   d7 vs d8
Lviv 2013 d7 vs d8
 
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers VersionCool Jvm Tools to Help you Test - Aylesbury Testers Version
Cool Jvm Tools to Help you Test - Aylesbury Testers Version
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
Installaling Puppet Master and Agent
Installaling Puppet Master and AgentInstallaling Puppet Master and Agent
Installaling Puppet Master and Agent
 
Drupal, Memcache and Solr on Windows
Drupal, Memcache and Solr on WindowsDrupal, Memcache and Solr on Windows
Drupal, Memcache and Solr on Windows
 
Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013Vagrant + Rouster at salesforce.com - PuppetConf 2013
Vagrant + Rouster at salesforce.com - PuppetConf 2013
 
C make tutorial
C make tutorialC make tutorial
C make tutorial
 
PHP: The Beginning and the Zend
PHP: The Beginning and the ZendPHP: The Beginning and the Zend
PHP: The Beginning and the Zend
 
How to deploy node to production
How to deploy node to productionHow to deploy node to production
How to deploy node to production
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 

Destaque

PuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, Puppet
PuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, PuppetPuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, Puppet
PuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, PuppetPuppet
 
PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...
PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...
PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...Puppet
 
PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...
PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...
PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...Puppet
 
Puppet at GitHub
Puppet at GitHubPuppet at GitHub
Puppet at GitHubPuppet
 
Configuration Changes Don't Have to be Scary: Testing with containers
Configuration Changes Don't Have to be Scary: Testing with containersConfiguration Changes Don't Have to be Scary: Testing with containers
Configuration Changes Don't Have to be Scary: Testing with containersAndy Henroid
 
Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014
Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014
Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014Rob Reynolds
 
Introducion to Puppet Enterprise
Introducion to Puppet EnterpriseIntroducion to Puppet Enterprise
Introducion to Puppet EnterprisePuppet
 
PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...
PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...
PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...Puppet
 
PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...
PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...
PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...Puppet
 
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...Puppet
 
Pro Puppet
Pro PuppetPro Puppet
Pro Puppetdsadas
 
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, PuppetPuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, PuppetPuppet
 
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, PuppetPuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, PuppetPuppet
 
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...Puppet
 
PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...
PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...
PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...Puppet
 
Introduction to Puppet Enterprise
Introduction to Puppet EnterpriseIntroduction to Puppet Enterprise
Introduction to Puppet EnterprisePuppet
 

Destaque (17)

PuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, Puppet
PuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, PuppetPuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, Puppet
PuppetConf 2016: Testing and Delivering Puppet – Michael Stahnke, Puppet
 
PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...
PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...
PuppetConf 2016: Easily Manage Software on Windows with Chocolatey – Rob Reyn...
 
PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...
PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...
PuppetConf 2016: Collaboration and Empowerment: Driving Change in Infrastruct...
 
Puppet at GitHub
Puppet at GitHubPuppet at GitHub
Puppet at GitHub
 
Configuration Changes Don't Have to be Scary: Testing with containers
Configuration Changes Don't Have to be Scary: Testing with containersConfiguration Changes Don't Have to be Scary: Testing with containers
Configuration Changes Don't Have to be Scary: Testing with containers
 
Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014
Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014
Plugging Chocolatey into your Puppet Infrastructure PuppetConf2014
 
Introducion to Puppet Enterprise
Introducion to Puppet EnterpriseIntroducion to Puppet Enterprise
Introducion to Puppet Enterprise
 
PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...
PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...
PuppetConf 2016: An Introduction to Measuring and Tuning PE Performance – Cha...
 
Canadian Cyber Cecurity
Canadian Cyber CecurityCanadian Cyber Cecurity
Canadian Cyber Cecurity
 
PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...
PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...
PuppetConf 2016: Best Practices for Puppet in the Cloud – Randall Hunt, Amazo...
 
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
PuppetConf 2016: The Long, Twisty Road to Automation: Implementing Puppet at ...
 
Pro Puppet
Pro PuppetPro Puppet
Pro Puppet
 
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, PuppetPuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
PuppetConf 2016: High Availability for Puppet – Russ Mull & Zack Smith, Puppet
 
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, PuppetPuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
PuppetConf. 2016: Puppet Best Practices: Roles & Profiles – Gary Larizza, Puppet
 
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
PuppetConf 2016: Successful Puppet Implementation in Large Organizations – Ja...
 
PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...
PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...
PuppetConf 2016: Puppet and vRealize Automation: The Next Generation – Ganesh...
 
Introduction to Puppet Enterprise
Introduction to Puppet EnterpriseIntroduction to Puppet Enterprise
Introduction to Puppet Enterprise
 

Semelhante a PuppetConf 2016: Puppet 4.x: The Low WAT-tage Edition – Nick Fagerlund, Puppet

Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011
Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011
Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011camp_drupal_ua
 
Chef for beginners module 2
Chef for beginners   module 2Chef for beginners   module 2
Chef for beginners module 2Chef
 
Drush. Why should it be used?
Drush. Why should it be used?Drush. Why should it be used?
Drush. Why should it be used?Sergei Stryukov
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Puppet
 
Writing your own augeasproviders
Writing your own augeasprovidersWriting your own augeasproviders
Writing your own augeasprovidersDominic Cleal
 
David Convent - Theme It Yourself
David Convent - Theme It YourselfDavid Convent - Theme It Yourself
David Convent - Theme It Yourselfdavconvent
 
Puppet Troubleshooting
Puppet TroubleshootingPuppet Troubleshooting
Puppet TroubleshootingPuppet
 
Writing and Publishing Puppet Modules - PuppetConf 2014
Writing and Publishing Puppet Modules - PuppetConf 2014Writing and Publishing Puppet Modules - PuppetConf 2014
Writing and Publishing Puppet Modules - PuppetConf 2014Puppet
 
Puppet Design Patterns - PuppetConf
Puppet Design Patterns - PuppetConfPuppet Design Patterns - PuppetConf
Puppet Design Patterns - PuppetConfDavid Danzilio
 
Learn flask in 90mins
Learn flask in 90minsLearn flask in 90mins
Learn flask in 90minsLarry Cai
 
Growing pains - PosKeyErrors and other malaises
Growing pains - PosKeyErrors and other malaisesGrowing pains - PosKeyErrors and other malaises
Growing pains - PosKeyErrors and other malaisesPhilip Bauer
 
Containerize spring boot application with docker
Containerize spring boot application with dockerContainerize spring boot application with docker
Containerize spring boot application with dockerSunil kumar Mohanty
 
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...Puppet
 
Auto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK NodesAuto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK Nodesnihiliad
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using SwiftDiego Freniche Brito
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleStein Inge Morisbak
 
Puppet Node Classifiers Talk - Patrick Buckley
Puppet Node Classifiers Talk - Patrick BuckleyPuppet Node Classifiers Talk - Patrick Buckley
Puppet Node Classifiers Talk - Patrick BuckleyChristian Mague
 

Semelhante a PuppetConf 2016: Puppet 4.x: The Low WAT-tage Edition – Nick Fagerlund, Puppet (20)

Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011
Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011
Sergei Stryukov.Drush.Why it should be used.DrupalCamp Kyiv 2011
 
Chef for beginners module 2
Chef for beginners   module 2Chef for beginners   module 2
Chef for beginners module 2
 
Drush. Why should it be used?
Drush. Why should it be used?Drush. Why should it be used?
Drush. Why should it be used?
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014
 
Ext 0523
Ext 0523Ext 0523
Ext 0523
 
Writing your own augeasproviders
Writing your own augeasprovidersWriting your own augeasproviders
Writing your own augeasproviders
 
David Convent - Theme It Yourself
David Convent - Theme It YourselfDavid Convent - Theme It Yourself
David Convent - Theme It Yourself
 
Puppet Troubleshooting
Puppet TroubleshootingPuppet Troubleshooting
Puppet Troubleshooting
 
Troubleshooting Puppet
Troubleshooting PuppetTroubleshooting Puppet
Troubleshooting Puppet
 
Intro to-puppet
Intro to-puppetIntro to-puppet
Intro to-puppet
 
Writing and Publishing Puppet Modules - PuppetConf 2014
Writing and Publishing Puppet Modules - PuppetConf 2014Writing and Publishing Puppet Modules - PuppetConf 2014
Writing and Publishing Puppet Modules - PuppetConf 2014
 
Puppet Design Patterns - PuppetConf
Puppet Design Patterns - PuppetConfPuppet Design Patterns - PuppetConf
Puppet Design Patterns - PuppetConf
 
Learn flask in 90mins
Learn flask in 90minsLearn flask in 90mins
Learn flask in 90mins
 
Growing pains - PosKeyErrors and other malaises
Growing pains - PosKeyErrors and other malaisesGrowing pains - PosKeyErrors and other malaises
Growing pains - PosKeyErrors and other malaises
 
Containerize spring boot application with docker
Containerize spring boot application with dockerContainerize spring boot application with docker
Containerize spring boot application with docker
 
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
PuppetConf 2016: Deconfiguration Management: Making Puppet Clean Up Its Own M...
 
Auto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK NodesAuto-loading of Drupal CCK Nodes
Auto-loading of Drupal CCK Nodes
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Puppet Node Classifiers Talk - Patrick Buckley
Puppet Node Classifiers Talk - Patrick BuckleyPuppet Node Classifiers Talk - Patrick Buckley
Puppet Node Classifiers Talk - Patrick Buckley
 

Mais de Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyamlPuppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)Puppet
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscodePuppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twentiesPuppet
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codePuppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approachPuppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationPuppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliancePuppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowPuppet
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppetPuppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkPuppet
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping groundPuppet
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy SoftwarePuppet
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User GroupPuppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsPuppet
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyPuppet
 

Mais de Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Último

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 

Último (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 

PuppetConf 2016: Puppet 4.x: The Low WAT-tage Edition – Nick Fagerlund, Puppet

  • 1. Puppet 4: The Low WAT-tage Edition Nick Fagerlund, Puppet
  • 3. I’ve seen things you people wouldn’t believe My 2013 talk: https://www.youtube.com/watch?v=aU7vjKYqMUo My much smarter inspiration: https://www.destroyallsoftware.com/talks/wat 3
  • 5. Agenda 1. Fundamental Chaos 2. Slapstick 3. Elegance 5
  • 9. Relative Namespacing include apache meant… • <CURRENT NAMESPACE>::apache • <PARENT OF CURRENT NAMESPACE>::apache • etc. and so on • Eventually, ::apache https://projects.puppetlabs.com/issues/2053 https://tickets.puppetlabs.com/browse/PUP-121 9
  • 11. Is Truth Beauty, and Beauty Truth? Facts: architecture => x86_64 domain => local facterversion => 2.4.2 fqdn => "treepie.local" gid => staff hardwareisa => i386 hardwaremodel => x86_64 hostname => treepie 11
  • 12. Is Truth Beauty, and Beauty Truth? if $::is_virtual { # do something } 12
  • 13. Is Truth Beauty, and Beauty Truth? “false” 13
  • 14. Is Truth Beauty, and Beauty Truth? if $::is_virtual == 'true' { ... } # or: if str2bool($::is_virtual) { ... } # with the str2bool() function from puppetlabs/stdlib 14
  • 15. Is Truth Beauty, and Beauty Truth? $interfaces = lo0,gif0,stf0,en0,en1,en2,p2p0,awdl0, bridge0,utun0 $macaddress_en0 = 72:00:04:eb:7a:93 ...etc. 15
  • 17. Data Type Nonsense $myvar = /^# @.*$/ notice($myvar) # Error: …Syntax error at '/' at /root/test.pp:1 17
  • 18. Data Type Nonsense $one = 1 # String $one_times_one = 1*1 # Fixnum $an_undef = undef # NilClass $multi_undefs = [undef, undef] # Symbol (:undef) 18
  • 19. Interpolation Shenanigans notice("Twenty plus eighty is ${20 + 80}.") # Error: left operand of + is not a number at /root/test.pp:15 19
  • 20. Interpolation Shenanigans notice("Twenty plus eighty is ${'20' + 80}.") # Notice: Scope(Class[main]): Twenty plus eighty is 100. 20
  • 21. Interpolation Shenanigans • Single bare word: • ${variable} • Bare word plus chained function call: • ${variable.split(‘,’)} • That’s it. Otherwise it’s an expression. 21
  • 22. Inconsistent Comparisons notice( 'eat' == 'EAt' ) # true notice( 'eat' in 'EAten' ) # false 22
  • 23. The Great Escape $greeting = 'How's it going?' 23
  • 24. The Great Escape $s32path = 'C:WindowsSystem32' notice($s32path) # Error: Unclosed quote after '' in 'C:WindowsSystem32' 24
  • 25. The Great Escape $s32path = 'C:WindowsSystem32' notice($s32path) # Notice: Scope(Class[main]): C:WindowsSystem32 >:c 25
  • 26. The Great Escape $gitconfig = @("GITCONFIG"/L) [user] name = ${displayname} email = ${email} [alias] lg = "log —pretty=format:’%C(yellow)%h %C(reset) %s%C(cyan)%cr%C(reset) %C(blue)%an %C(reset) %C(green)%d%C(reset)’ --graph" | GITCONFIG 26
  • 27. The Great Escape $s32path = @(MYPATH) C:WindowsSystem32 -MYPATH notice($s32path) # Notice: Scope(Class[main]): C:WindowsSystem32 27
  • 28. Class Class class class { notify {'hey it worked':} } include class # Error: Syntax error at 'class' at /root/test.pp:5 28
  • 29. Class Class class class { notify {'hey it worked':} } include "class" # Notice: hey it worked # Notice: /Stage[main]/Class/Notify[hey it worked]/message: defined 'message' as 'hey it worked' 29
  • 30. Class Class class class { notify {'hey it worked':} } include "class" # Error: 'class' is not a valid classname at /Users/nick/Desktop/test.pp:1:7 30
  • 32. Data Type Annotations class ntp ( $autoupdate = $ntp::params::autoupdate, $config = $ntp::params::config, $config_template = $ntp::params::config_template, $disable_monitor = $ntp::params::disable_monitor, $driftfile = $ntp::params::driftfile, $logfile = $ntp::params::logfile, $iburst_enable = $ntp::params::iburst_enable, $keys_enable = $ntp::params::keys_enable, $keys_file = $ntp::params::keys_file, $keys_controlkey = $ntp::params::keys_controlkey, $keys_requestkey = $ntp::params::keys_requestkey, $keys_trusted = $ntp::params::keys_trusted, $package_ensure = $ntp::params::package_ensure, $package_name = $ntp::params::package_name, $panic = $ntp::params::panic, $preferred_servers = $ntp::params::preferred_servers, $restrict = $ntp::params::restrict, $interfaces = $ntp::params::interfaces, $servers = $ntp::params::servers, $service_enable = $ntp::params::service_enable, $service_ensure = $ntp::params::service_ensure, $service_manage = $ntp::params::service_manage, $service_name = $ntp::params::service_name, $udlc = $ntp::params::udlc ) inherits ntp::params { ... 32 ... validate_absolute_path($config) validate_string($config_template) validate_bool($disable_monitor) validate_absolute_path($driftfile) if $logfile { validate_absolute_path($logfile) } validate_bool($iburst_enable) validate_bool($keys_enable) validate_re($keys_controlkey, ['^d+$', '']) validate_re($keys_requestkey, ['^d+$', '']) validate_array($keys_trusted) validate_string($package_ensure) validate_array($package_name) validate_bool($panic) validate_array($preferred_servers) validate_array($restrict) validate_array($interfaces) validate_array($servers) validate_bool($service_enable) validate_string($service_ensure) validate_bool($service_manage) validate_string($service_name) validate_bool($udlc)
  • 33. Data Type Annotations ~~~~ 👀 ZOOM AND ENHANCE 👀 ~~~~ class ntp ( $config_template = $ntp::params::config_template, $disable_monitor = $ntp::params::disable_monitor, ... ) inherits ntp::params { ... validate_string($config_template) validate_bool($disable_monitor) 33
  • 34. Data Type Annotations class ntp ( Boolean $disable_monitor = $ntp::params::disable_monitor, Pattern[/^d+$/] $keys_controlkey = $ntp::params::keys_controlkey, Integer $keys_requestkey = $ntp::params::keys_requestkey, Array $keys_trusted = $ntp::params::keys_trusted, String $package_ensure = $ntp::params::package_ensure, 34
  • 35. Iteration •Old Ruby DSL? •Do-nothing defined types? •create_resources function? 35
  • 36. Data Type Annotations # in Hiera data: admin_users: casey: uid: '1330' gid: allstaff shell: zsh groups: - developers - release leslie: uid: '1308' gid: allstaff groups: - prosvc 36 # in Puppet manifest: class puppet_ops::users::virtual { create_resources( '@user', lookup('admin_users'), { # defaults ensure => present, purge_ssh_keys => true, } ) }
  • 37. Iteration $binaries = ['facter', 'hiera', 'mco', ‘puppet', 'puppetserver'] $binaries.each |String $binary| { file { "/usr/bin/${binary}": ensure => link, target => "/opt/puppetlabs/bin/${binary}", } } 37
  • 38. EPP Templates <%- | Boolean $keys_enable, String $keys_file, Array $keys_trusted, String $keys_requestkey, String $keys_controlkey | -%> <%# Parameter tag ↑ -%> <%# Non-printing tag ↓ -%> <% if $keys_enable { -%> <%# Expression-printing tag ↓ -%> keys <%= $keys_file %> 38 <% unless $keys_trusted =~ Array[Data,0,0] { -%> trustedkey <%= $keys_trusted.join(' ') %> <% } -%> <% if $keys_requestkey =~ String[1] { -%> requestkey <%= $keys_requestkey %> <% } -%> <% if $keys_controlkey =~ String[1] { -%> controlkey <%= $keys_controlkey %> <% } -%> <% } -%>