Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Pupp...
$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user
Ju...
inuits.eu
IntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIn...
Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetm...
Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 -...
Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 -...
Puppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPup...
Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Pu...
The big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureTh...
A new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new...
Domain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDo...
The new DSL gets closer to other
programming languages: types,
iterations, predictive ordering…
OrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOr...
order.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.ppor...
Puppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPu...
Puppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPu...
OrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOr...
Puppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPup...
(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native)...
Data types are not newData types are not newData types are not newData types are not newData types are not newData types a...
Data TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesDa...
StringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringString
String Any string
S...
NumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumeric
Nu...
HashHashHashHashHashHashHashHashHashHashHashHashHashHashHashHashHash
Hash
A Hash (key, value pairs)
Hash[String, String]
H...
ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray
Array
An array (list)
Array[String]
...
UndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndef
Eventually! A clear type for Undef (...
Abstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract...
OptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOp...
NotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNo...
VariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariant
Va...
PatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPattern
Pa...
EnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnum
Enum["true", "false"]: "true" or
"false" (strings)
TupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTuple
Tuple[Integer, String]: An array
lik...
StructStructStructStructStructStructStructStructStructStructStructStructStructStructStructStructStruct
Advanced hash.
Stru...
ScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalar
Same as Variant[Num...
DataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataData
Same as Variant[Scalar, Undef,
Array[Data], Hash[Scal...
AnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAny
Anything
Playing with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with t...
Types in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in...
Types in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTy...
Types in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in...
Type checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType ...
Array, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArr...
HashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashes
$mascot1 = { ’ l i ...
ArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArrays
$ d i s t r o = [ ’...
MergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMerges
• NNNNNNNNNNNNNNNNN...
FunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunct...
Puppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPup...
Puppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPup...
Loops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in fun...
Loops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLo...
Loops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashL...
Loops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops...
with: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" s...
filterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilter
class vhosts (Hash[...
access resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource pa...
ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ru...
HEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOC
# ...
TemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTempl...
TemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTempl...
EPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP t...
EPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP t...
All-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One pac...
All-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: Fa...
All-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAl...
All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)Al...
All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)Al...
Batteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries incl...
The case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of Fe...
Migration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and ...
PuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPu...
Prepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yo...
Update your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate y...
Everything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is ...
ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionCo...
Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Go...
Regarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new...
Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it ti...
The new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLT...
Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Pu...
Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Q...
BioBioBioBioBioBioBioBioBioBioBioBioBioBioBioBioBio
• hhhhhhhhhhhhhhhhhttp://puppet-on-the-edge.blogspot.com/
• hhhhhhhhhh...
ContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContact
Ju...
Upcoming SlideShare
Loading in …5
×

Dive into Puppet 4

2,219 views

Published on

Talk given for the Belgian Puppet user group about new features of Puppet 4.

Published in: Technology
  • Be the first to comment

Dive into Puppet 4

  1. 1. Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4Dive into Puppet 4 A new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetizeA new way to puppetize Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto Belgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User GroupBelgian Puppet User Group September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015September 10, 2015
  2. 2. $::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user$::user Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto • Open-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.euOpen-Source consultant at inuits.eu • Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011Puppet User since 2011 • Speaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at PuppetcampsSpeaker/attendee at Puppetcamps • Member of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUGMember of the Belgian PUG • Puppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributorPuppet core contributor • Puppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributorPuppet(labs) modules contributor • @roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie on irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/githubon irc/twitter/github
  3. 3. inuits.eu
  4. 4. IntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroductionIntroduction
  5. 5. Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011Puppetmaster since 2011 • PPPPPPPPPPPPPPPPPuppet 2.6/2.7 • RRRRRRRRRRRRRRRRReports stored with activerecord • PPPPPPPPPPPPPPPPPuppet Dashboard • NNNNNNNNNNNNNNNNNo hiera • NNNNNNNNNNNNNNNNNo PuppetDB
  6. 6. Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011Puppet 2.7 - June 2011 • RRRRRRRRRRRRRRRRRuby 1.9 support • AAAAAAAAAAAAAAAAApache 2.0 Licence • TTTTTTTTTTTTTTTTThe end of "random" catalog order • SSSSSSSSSSSSSSSSSupport for network devices • DDDDDDDDDDDDDDDDDeprecation of dynamic variables
  7. 7. Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012Puppet 3.0.0 - October 2012 • SSSSSSSSSSSSSSSSSupport for 3rd parties gems • NNNNNNNNNNNNNNNNNative hiera support • AAAAAAAAAAAAAAAAAutomatic hiera lookups • RRRRRRRRRRRRRRRRRemove dynamic scope lookup • SSSSSSSSSSSSSSSSSemantic versioning
  8. 8. Puppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x seriesPuppet 3.x series • FFFFFFFFFFFFFFFFFuture parser (3.2.0) • """""""""""""""""contain" keyword (3.4.0) • dddddddddddddddddirectory environments (3.5.0)
  9. 9. Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4 Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/mujitra/4421810399
  10. 10. The big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big pictureThe big picture • NNNNNNNNNNNNNNNNNew DSL language • AAAAAAAAAAAAAAAAAll-in-one Package • PPPPPPPPPPPPPPPPPuppetserver
  11. 11. A new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSLA new DSL Apache 2.0 License https://github.com/ke4qqq/puppet-cloudstack
  12. 12. Domain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific LanguageDomain Specific Language The goal of the Puppet DSL stays the same: describe the final state of your infrastructure.
  13. 13. The new DSL gets closer to other programming languages: types, iterations, predictive ordering…
  14. 14. OrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrdering Licensed under a Creative Commons Attribution-ShareAlike 2.0 License https://www.flickr.com/photos/lambertclement/19543885696
  15. 15. order.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pporder.pp notify { ’ B e l g i a n ’ : } notify { ’ Puppet ’ : } notify { ’ User ’ : } notify { ’ Group ’ : }
  16. 16. Puppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.xPuppet 3.x Notice: Compiled catalog for nitrogen in environment production in 0.02 seconds Notice: User Notice: /Stage[main]/Main/Notify[User]/message: defined 'message ' as 'User ' Notice: Belgian Notice: /Stage[main]/Main/Notify[Belgian]/message: defined 'message ' as 'Belgian ' Notice: Group Notice: /Stage[main]/Main/Notify[Group]/message: defined 'message ' as 'Group ' Notice: Puppet Notice: /Stage[main]/Main/Notify[Puppet]/message: defined 'message ' as 'Puppet ' Notice: Finished catalog run in 0.02 seconds
  17. 17. Puppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.xPuppet 4.x Notice: Compiled catalog for nitrogen in environment production in 0.23 seconds Notice: Belgian Notice: /Stage[main]/Main/Notify[Belgian]/message: defined 'message ' as 'Belgian ' Notice: Puppet Notice: /Stage[main]/Main/Notify[Puppet]/message: defined 'message ' as 'Puppet ' Notice: User Notice: /Stage[main]/Main/Notify[User]/message: defined 'message ' as 'User ' Notice: Group Notice: /Stage[main]/Main/Notify[Group]/message: defined 'message ' as 'Group ' Notice: Applied catalog in 0.01 seconds
  18. 18. OrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrderingOrdering • AAAAAAAAAAAAAAAAAlways the same order • PPPPPPPPPPPPPPPPPuppet 3.x: based on title-hash • PPPPPPPPPPPPPPPPPuppet 4.x: order seen in the manifest
  19. 19. Puppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 orderingPuppet 4 ordering • TTTTTTTTTTTTTTTTTime saver • """""""""""""""""Hides" complexity • AAAAAAAAAAAAAAAAAlign with other languages • SSSSSSSSSSSSSSSSStill supports Require, Notify, … • """""""""""""""""real" dependencies should still be explicitely set (e.g cron job only installed if packages is installed)
  20. 20. (Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types(Native) Data Types Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/ionics/6338281766
  21. 21. Data types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not newData types are not new • PPPPPPPPPPPPPPPPPreviously included in stdlib, 3rd party module • ssssssssssssssssstdlib contains functions to convert data types, check data types • NNNNNNNNNNNNNNNNNothing in Puppet Core • DDDDDDDDDDDDDDDDDifficult to check the type of all the parameters
  22. 22. Data TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData TypesData Types String Numeric: Integer, Float Boolean Array Hash Regexp Undef Catalogentry: Class, Resource
  23. 23. StringStringStringStringStringStringStringStringStringStringStringStringStringStringStringStringString String Any string String[2] Any string with at least 2 characters String[0,2] A string with at most 2 characters String[4,6] A string with at least 4 and at most 6 characters String[5,5] A string with 5 characters Convert to string with: "${myvariable}"
  24. 24. NumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumericNumeric Numeric Float or integer Numeric[-1,1] Float or Integer between -1 and 1 (incl) Integer Any integer (from −∞ to ∞) Integer[0] Positive Integer Integer[default, 0] Negative Integer Integer[-1,1] Integer between -1 and 1 (incl) Float Floating point number Float[-3,3.14] Float between -3 and 3.14 (incl) Convert to Integer with the scanf function or 0+$variable
  25. 25. HashHashHashHashHashHashHashHashHashHashHashHashHashHashHashHashHash Hash A Hash (key, value pairs) Hash[String, String] Hash with String as keys and values Hash[String, Integer] String as keys, Integer as values Hash[String, Integer, 1] Non empty hash Hash[String, Integer, default, 5] Hash with at most 5 entries
  26. 26. ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray Array An array (list) Array[String] Array with String Array[String, 1] Non empty Array Array[String, default, 5] Array with at most 5 entries
  27. 27. UndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndefUndef Eventually! A clear type for Undef (was very confusing in the past: nil? string? symbol?)
  28. 28. Abstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data TypesAbstract Data Types Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/webtreatsetc/4666231979
  29. 29. OptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptionalOptional Optional[String]: String or Undef Optional[Integer]: Integer or Undef
  30. 30. NotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndefNotUndef Everything but Undef. NotUndef[Data]: Anything that matches Data but not Undef. Example: [Undef]
  31. 31. VariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariantVariant Variant[Integer, String]: An Integer or a String
  32. 32. PatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPatternPattern Pattern[Regex, Regex]: Strings match regexes
  33. 33. EnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnumEnum Enum["true", "false"]: "true" or "false" (strings)
  34. 34. TupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTupleTuple Tuple[Integer, String]: An array like [1, "a"]
  35. 35. StructStructStructStructStructStructStructStructStructStructStructStructStructStructStructStructStruct Advanced hash. Struct[{"username" => String, "uid" => Integer[0]}] Matches {"username" => "tux", "uid" => 1}
  36. 36. ScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalarScalar Same as Variant[Numeric, String, Boolean, Regex]
  37. 37. DataDataDataDataDataDataDataDataDataDataDataDataDataDataDataDataData Same as Variant[Scalar, Undef, Array[Data], Hash[Scalar, Variant[Data]]
  38. 38. AnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAnyAny Anything
  39. 39. Playing with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with typesPlaying with types Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/jdhancock/7439512656
  40. 40. Types in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditionsTypes in conditions # Comparison i f $m =~ Boolean { $manage = $m } e l s i f $m !~ Enum [ ’ t r u e ’ , ’ f a l s e ’ ] { f a i l ( ’ Bad v a l u e ’ ) }
  41. 41. Types in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statementsTypes in case statements case $user { I n t e g e r : { $uid = $user } Boolean : { $ c r e a t e = $user } d e f a u l t : { f a i l ( ’ Bad Data Type ’ ) } }
  42. 42. Types in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parametersTypes in parameters class p r o f i l e _ m y s q l ( Boolean $manage_service, Enum [ ’ mysql ’ , ’ mariadb ’ ] $service_name, Optional [ S t r i n g [ 8 ] ] $root_password, ) { }
  43. 43. Type checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checkingType checking # NOT CORRECT: S t r i n g $runmode = $ f a c t s [ ’ runmode ’ ] # Corre ct : $runmode = a s s e r t _ t y p e ( S t r i n g , $ f a c t s [ ’ runmode ’ ] )
  44. 44. Array, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash mergeArray, Hash merge Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/willmx/2295022876
  45. 45. HashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashesHashes $mascot1 = { ’ l i n u x ’ => ’ tux ’ } $mascot2 = { ’ bsd ’ => ’ b e a s t i e ’ } $mascots = $mascot1 + $mascot2 # { ’ l i n u x ’ => ’ tux ’ , ’ bsd ’ => ’ b e a s t i e ’ }
  46. 46. ArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArraysArrays $ d i s t r o = [ ’ Larry ’ , ’ Geeko ’ ] $misc = [ ’ b l i n k y ’ , ’ f r e d ’ ] $ a l l = $ d i s t r o + $misc # [ ’ Larry ’ , ’ Geeko ’ , ’ b l i n k y ’ , ’ f r e d ’ ]
  47. 47. MergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMergesMerges • NNNNNNNNNNNNNNNNNo more need for stdlib • CCCCCCCCCCCCCCCCCleaner code
  48. 48. FunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctionsFunctions Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/zzpza/3269784239
  49. 49. Puppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 Function # http :// puppet−on−the−edge . blogspot . se Puppet : : Functions . c r e a t e _ f u n c t i o n ( : min ) do d i s p a t c h : min do param ’ Numeric ’ , : a param ’ Numeric ’ , : b end def min ( x , y ) x <= y ? x : y end end
  50. 50. Puppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 FunctionPuppet 4 Function # http :// puppet−on−the−edge . blogspot . se Puppet : : Functions . create_function ( : min) do dispatch : min do param ’ Numeric ’ , : a param ’ Numeric ’ , : b end dispatch : min_s do param ’ String ’ , : s1 param ’ String ’ , : s2 end def min(x , y) x <= y ? x : y end def min_s(x , y) cmp = (x . downcase <=> y . downcase ) cmp <= 0 ? x : y end end
  51. 51. Loops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functionsLoops and new built-in functions Licensed under a Creative Commons Attribution-ShareAlike 2.0 License https://www.flickr.com/photos/squeaks2569/8114399667
  52. 52. Loops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: ArrayLoops: Array class vh o s t s ( Array [ S t r i n g ] $packages, ) { $packages . each | S t r i n g $package | { package { ” vhost−${package} ” : ensure => p r e s e n t , } } }
  53. 53. Loops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: HashLoops: Hash class vhosts (Hash[String, String] $packages,){ $packages.each | String $package, String $version | { package { "vhost−${package}": ensure => $version, } } }
  54. 54. Loops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduceLoops: reduce $total = reduce([1,2,3]) |$result, $value| { $result + $value } # $total = 6
  55. 55. with: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scopewith: "private" scope # ’ p r i v a t e ’ v a r i a b l e s with ( ’ ldap ’ , ’ s e c r e t ’ ) | $ u s e r , $password | { f i l e { ’ / etc / s e c r e t s ’ : content => ” ${user} : $ { s e c r e t } ” , } }
  56. 56. filterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilterfilter class vhosts (Hash[String, String] $packages,){ $packages.filter | String $package, String $version | { $version != 'latest' }.each | String $package, String $version | { package { "vhost−${package}": ensure => $version, } } }
  57. 57. access resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parametersaccess resource parameters class vhosts (Hash[String, String] $packages,){ $packages.filter | String $package, String $version | { $version != 'latest' }.each | String $package, String $version | { package { "vhost−${package}": ensure => $version, } } $foo_version = Package["foo"]["version"] }
  58. 58. ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining)ruby-style . syntax (chaining) $a = join(['foo', 'bar'], ',') $b = ['foo', 'bar'].join(',')
  59. 59. HEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOCHEREDOC # HEREDOC $longstring = @(EOM) This item is managed by Puppet EOM # Remove tabs $longstring_notabs = @(EOM) This item is managed by Puppet | EOM # Remove new lines + trailing line $longstring_nonewline = @(EOM) This item is managed by Puppet |− EOM # Syntax check $longstring_nonewline = @(EOM:json) ["This item is managed by Puppet"] |− EOM
  60. 60. TemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplates Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/mrbill/3267227227
  61. 61. TemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplatesTemplates • CCCCCCCCCCCCCCCCCan be written in Puppet Code (EPP) • GGGGGGGGGGGGGGGGGets their own variables • OOOOOOOOOOOOOOOOOnly useful since the new DSL • fffffffffffffffffunction epp and inline_epp
  62. 62. EPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templates f i l e { ’ pt−heartbeat −c o n f i g ’ : show_diff => f a l s e , content => epp ( ’ pth / pth . epp ’ , { database => $ d a t a b a s e , socket => $ s o c k e t , u s e r => $ u s e r , password => $password, } ) , }
  63. 63. EPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templatesEPP templates <%− | S t r i n g $database , S t r i n g $password , S t r i n g $socket , S t r i n g $user , | −%> u s e r=<%= $user %> password=<%= $password %> socket=<%= $socket %> database=<%= $database %> host=l o c a l h o s t create −t a b l e
  64. 64. All-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One packageAll-in-One package Licensed under a Creative Commons Attribution 2.0 License https://www.flickr.com/photos/creative_tools/5299374697
  65. 65. All-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: FactsAll-in-One package: Facts • AAAAAAAAAAAAAAAAAll the client is in one RPM • RRRRRRRRRRRRRRRRRepository is called PC1 • PPPPPPPPPPPPPPPPPuppet Collection 1 • pppppppppppppppppuppet-agent RPM contains ruby and all the deps • EEEEEEEEEEEEEEEEEverything is under /etc/puppetlabs, /opt/puppetlabs, …
  66. 66. All-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: ProsAll-in-One package: Pros • EEEEEEEEEEEEEEEEEveryone gets the same ruby version • OOOOOOOOOOOOOOOOOne RPM, one repository • EEEEEEEEEEEEEEEEEverything can be optimized • OOOOOOOOOOOOOOOOOnly one version to check for consistency
  67. 67. All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2)All-in-One package: Cons (1/2) • NNNNNNNNNNNNNNNNNot rebuildable (toolchain (ezbake/vanagon) not released/not open-source) • PPPPPPPPPPPPPPPPPL can patch Ruby, preventing people that use other methods to get the same behaviour • WWWWWWWWWWWWWWWWWe are dependent on PL for updates (e.g OpenSSL) • HHHHHHHHHHHHHHHHHidden version numbers (Puppet-agent version is semantic but abstract) • NNNNNNNNNNNNNNNNNot reusing shared libs
  68. 68. All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2)All-in-One package: Cons (2/2) • HHHHHHHHHHHHHHHHHow can we guess such paths? /opt/puppetlabs/puppet/cache should have been at least /var/opt/puppetlabs/puppet
  69. 69. Batteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries includedBatteries included • HHHHHHHHHHHHHHHHHiera, Augeas • FFFFFFFFFFFFFFFFFacter, CFacter • MMMMMMMMMMMMMMMMMcollective • OOOOOOOOOOOOOOOOOpenSSL • RRRRRRRRRRRRRRRRRuby and gem dependencies
  70. 70. The case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of FedoraThe case of Fedora • FFFFFFFFFFFFFFFFFedora 23 ships Puppet 4 • NNNNNNNNNNNNNNNNNOT using the AIO package • MMMMMMMMMMMMMMMMMight be rebuilt one day for EL
  71. 71. Migration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuffMigration and stuff Licensed under a Creative Commons Attribution-ShareAlike 2.0 License https://www.flickr.com/photos/photos/26116471@N03/6362329323
  72. 72. PuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserverPuppetserver • AAAAAAAAAAAAAAAAA Puppet master written in clojure • RRRRRRRRRRRRRRRRRuns on top of a jvm • PPPPPPPPPPPPPPPPPut it behind a reverse proxy • SSSSSSSSSSSSSSSSSlow start but better performances • NNNNNNNNNNNNNNNNNot much to say, it stays out of my way so it's good • PPPPPPPPPPPPPPPPPuppetserver 2.1 is compatible with Puppet 3 and 4 clients
  73. 73. Prepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourselfPrepare yourself • UUUUUUUUUUUUUUUUUpdate to latest Puppet 3.x • UUUUUUUUUUUUUUUUUse the Future parser • UUUUUUUUUUUUUUUUUpdate to latest Puppetserver
  74. 74. Update your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clientsUpdate your clients • hhhhhhhhhhhhhhhhhttps://github.com/puppetlabs/puppetlabs- puppet_agent • DDDDDDDDDDDDDDDDDo not forget to edit your cronjobs (change PATH to /usr/bin:/opt/puppetlabs/bin) • pppppppppppppppppuppet will be in /opt/puppetlabs/bin
  75. 75. Everything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yetEverything is not there yet • PPPPPPPPPPPPPPPPPuppetboard and Foreman does not work yet (new PuppetDB API) • GGGGGGGGGGGGGGGGGood news: Puppetexplorer does (I have not tested)
  76. 76. ConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusionConclusion Licensed under a Creative Commons Attribution-ShareAlike 2.0 License https://www.flickr.com/photos/olivierpechenet/19824185788
  77. 77. Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-)Good job :-) • GGGGGGGGGGGGGGGGGood job, Puppetlabs (and community) • TTTTTTTTTTTTTTTTThe new DSL was a hard work • IIIIIIIIIIIIIIIIIt works well • IIIIIIIIIIIIIIIII have seen only minor bugs • IIIIIIIIIIIIIIIIIt is still a lot backward-compatible (with clean code…) • PPPPPPPPPPPPPPPPPlease open-source the toolchain
  78. 78. Regarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSLRegarding the new DSL • AAAAAAAAAAAAAAAAA lot of new powers • IIIIIIIIIIIIIIIIIt's a language • TTTTTTTTTTTTTTTTTime to write new recommendations, best practices • IIIIIIIIIIIIIIIIIt can look awesome or horrible • PPPPPPPPPPPPPPPPPuppet lint and code review to the rescue!
  79. 79. Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move?Is it time to move? • IIIIIIIIIIIIIIIIIf you have a test environment, yes • OOOOOOOOOOOOOOOOOtherwise I would still wait for more bugfixes • BBBBBBBBBBBBBBBBBut we are already at 4.2.1 • YYYYYYYYYYYYYYYYYou should a least prepare yourself • IIIIIIIIIIIIIIIII recommend github.com/theforeman/puppet-puppet to manage puppet
  80. 80. The new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSLThe new DSL • WWWWWWWWWWWWWWWWWill not be everywhere • AAAAAAAAAAAAAAAAA lot of stuff could be done with stdlib • FFFFFFFFFFFFFFFFFirst in roles, profiles, node manifests • WWWWWWWWWWWWWWWWWaiting for PL to decomission 3.x for the rest • MMMMMMMMMMMMMMMMMaybe we will see puppet4-only modules (but is that what we want?)
  81. 81. Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4Puppet 4 • FFFFFFFFFFFFFFFFFull of new features • NNNNNNNNNNNNNNNNNow has a powerful DSL • SSSSSSSSSSSSSSSSStays declarative • IIIIIIIIIIIIIIIIIs more predictive
  82. 82. Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?Any Question?
  83. 83. BioBioBioBioBioBioBioBioBioBioBioBioBioBioBioBioBio • hhhhhhhhhhhhhhhhhttp://puppet-on-the-edge.blogspot.com/ • hhhhhhhhhhhhhhhhhttps://www.devco.net/ • hhhhhhhhhhhhhhhhhttp://docs.puppetlabs.com/
  84. 84. ContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContactContact Julien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien PivottoJulien Pivotto julien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eujulien@inuits.eu @roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie@roidelapluie inuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuitsinuits https://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.euhttps://inuits.eu info@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.euinfo@inuits.eu +32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636+32 473 441 636

×