The document discusses software distribution and the challenges involved. It covers topics like artifacts, dependencies, packaging, repositories, and integration with configuration management tools like Puppet and Chef. Artifacts need to have consistency checks, file lists, resolved dependencies, versioning, and be reproducible. Dependencies require testing, distribution from upstream repositories, and limiting their number. Packaging helps with signing, repositories, and configuration management integration.
Presentation on how to chat with PDF using ChatGPT code interpreter
Puppet and Software Delivery with Puppet Code
1. Puppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software deliveryPuppet and Software delivery
Shipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet codeShipping your product with Puppet code
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
March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015March 17, 2015
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
4. Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015Welcome in 2015
• VVVVVVVVVVVVVVVVVirtualization
• CCCCCCCCCCCCCCCCContainers
• CCCCCCCCCCCCCCCCCloud
• SSSSSSSSSSSSSSSSStateless software
• SSSSSSSSSSSSSSSSScalable daemons
6. Real WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal WorldReal World
Licensed under a Creative Commons Attribution 2.0 License
https://www.flickr.com/photos/kwarz/13293732384/
7. Welcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my worldWelcome in my world
• CCCCCCCCCCCCCCCCComplex SW
• SSSSSSSSSSSSSSSSSelf-hosting
• SSSSSSSSSSSSSSSSStateless software
• SSSSSSSSSSSSSSSSScalable daemons
8. Software distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distributionSoftware distribution
• SSSSSSSSSSSSSSSSSoftware (Source code or binaries)
• UUUUUUUUUUUUUUUUUser guide
• IIIIIIIIIIIIIIIIInstallation guide
• PPPPPPPPPPPPPPPPPeople who install the software
9. Challenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distributionChallenges of SW distribution
• AAAAAAAAAAAAAAAAArtifacts
• SSSSSSSSSSSSSSSSSecurity
• HHHHHHHHHHHHHHHHHW requirements
• SSSSSSSSSSSSSSSSSW requirements
• UUUUUUUUUUUUUUUUUpgrades
• MMMMMMMMMMMMMMMMMaintenance
• MMMMMMMMMMMMMMMMMonitoring
12. DependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependenciesDependencies
• Use packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages alsoUse packages also
• Version your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositoriesVersion your repositories
• Test your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependenciesTest your dependencies
• Distribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packagesDistribution, Upstream packages
• Mirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream reposMirror and cherry pick from upstream repos
• Limit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependenciesLimit the number of dependencies
18. What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?What to automate?
Application
Reverse Proxy / Databases
Monitoring
Operation System
Platform
19. To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?To manage or not?
You have to be able to chose which
part you will setup with Puppet.
20. Use Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modulesUse Puppet modules
Use separate meta-modules for OS,
Dependencies, Monitoring,
Application… And include them only
of needed.
21. Yes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noopYes, no or noop
• IIIIIIIIIIIIIIIIInclude or not each class
• YYYYYYYYYYYYYYYYYou can put a whole class in no-op
• include myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_osinclude myapp_os
• class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}class {'myapp_os': noop => true,}
23. External modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modulesExternal modules
• PPPPPPPPPPPPPPPPPick the best ones
• PPPPPPPPPPPPPPPPPuppetlabs modules
• UUUUUUUUUUUUUUUUUpstream modules
• MMMMMMMMMMMMMMMMModules active on Github
• FFFFFFFFFFFFFFFFForge rating
• TTTTTTTTTTTTTTTTTesting, doc
• MMMMMMMMMMMMMMMMModules that fit your usecase
24. Review the modules you plan to include. You
do not want bad code in your app, why
would you want it in the code that deploys
your app?
25. Contribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute backContribute back
• GGGGGGGGGGGGGGGGGet feedback (peer review)
• EEEEEEEEEEEEEEEEEasier to maintain in long term
• FFFFFFFFFFFFFFFFForces you to write tests
• HHHHHHHHHHHHHHHHHelp other people
• PPPPPPPPPPPPPPPPPuppet is not your core business
26. Your modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modulesYour modules
• EEEEEEEEEEEEEEEEEveryone has write access
• FFFFFFFFFFFFFFFFFollow code standards (puppet-lint)
• BBBBBBBBBBBBBBBBBe future-proof
• SSSSSSSSSSSSSSSSSeparation between code and data
27. Your puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet treeYour puppet tree
• YYYYYYYYYYYYYYYYYour tree is next to your app code
• SSSSSSSSSSSSSSSSSubmodules of your app
• GGGGGGGGGGGGGGGGGets the same version number
• PPPPPPPPPPPPPPPPParameters matches your apps parameters
28. Distribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your treeDistribute your tree
• PPPPPPPPPPPPPPPPPackage the whole tree in a package
• UUUUUUUUUUUUUUUUUse package dependencies to pull puppet
• MMMMMMMMMMMMMMMMMaybe add a helper script for the first run
29. • YYYYYYYYYYYYYYYYYour tree is next to your app code
• SSSSSSSSSSSSSSSSSubmodules of your app
• GGGGGGGGGGGGGGGGGets the same version number
• CCCCCCCCCCCCCCCCContains the right parameters
30. Puppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterlessPuppet Agent or masterless
• PPPPPPPPPPPPPPPPPuppet has 2 modes
• PPPPPPPPPPPPPPPPPull your catalog
• AAAAAAAAAAAAAAAAApply it from files
• BBBBBBBBBBBBBBBBBoth have advantages
• DDDDDDDDDDDDDDDDDepends on what you want
31. Masterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless modeMasterless mode
• OOOOOOOOOOOOOOOOOne-time run
• NNNNNNNNNNNNNNNNNo daemon running
• NNNNNNNNNNNNNNNNNo need for a Puppet master
• NNNNNNNNNNNNNNNNNo exported resources
• NNNNNNNNNNNNNNNNNo PuppetDB
32. Agent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent modeAgent mode
• RRRRRRRRRRRRRRRRRun every X time (to be tuned)
• CCCCCCCCCCCCCCCCConsitency check
• RRRRRRRRRRRRRRRRRequires one master
• PPPPPPPPPPPPPPPPPuppet daemon running (as root)
• RRRRRRRRRRRRRRRRReports sent to the master
41. Deploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet treeDeploy your Puppet tree
• IIIIIIIIIIIIIIIIInstall your puppet tree package
• IIIIIIIIIIIIIIIIInstall the hiera files (versioned?)
• OOOOOOOOOOOOOOOOOne puppet apply to deploy a basic server
• TTTTTTTTTTTTTTTTThen the first agent run to deploy PuppetDB
and the rest
• TTTTTTTTTTTTTTTTThere is no puppetlabs-puppet module
43. Shipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet codeShipping with puppet code
• EEEEEEEEEEEEEEEEEveryone gets benefits
• FFFFFFFFFFFFFFFFFrom devs to QA to customers
• NNNNNNNNNNNNNNNNNeed to review how you release
• NNNNNNNNNNNNNNNNNeed to review how you deploy your OS
• PPPPPPPPPPPPPPPPPuppet code is part of your app
45. There is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is workThere is work
• BBBBBBBBBBBBBBBBBig cultural changes
▶ RRRRRRRRRRRRRRRRRoot access?
▶ TTTTTTTTTTTTTTTTThe shell script works…
▶ IIIIIIIIIIIIIIIII can't do X anymore…
• PPPPPPPPPPPPPPPPPurge old artifacts on updates
• DDDDDDDDDDDDDDDDDeal with your data
• KKKKKKKKKKKKKKKKKeep that infra up to date
46. Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!Open the pandora box!
• MMMMMMMMMMMMMMMMMonitoring
• BBBBBBBBBBBBBBBBBest practices enforcement
• RRRRRRRRRRRRRRRRRepositories management
• BBBBBBBBBBBBBBBBBring your own tools