SlideShare a Scribd company logo
1 of 70
Download to read offline
Puppet & Small 
Infrastructures 
Rachel Andrew 
@rachelandrew
edgeofmyseat.com
grabaperch.com
Why would a small business use 
Puppet?
• My background 
• Learning Puppet and initial challenges 
• Our current use of Puppet 
• Why Puppet for small businesses with a 
handful of servers?
This is my job. 
• writer 
• tech support person 
• bookkeeper 
• HR 
• filler in of baffling 
forms from the 
government 
• PHP developer 
• front-end web 
developer 
• marketer 
• sales person 
• public speaker 
• … ops person.
Back in my day …
Pre-Puppet 
• Infrastructure consisted of a bunch of VPS 
boxes hosted at Memset 
• Configured at different times 
• Some set up by me, some by Drew 
• Neither of us understood the setups done by 
the other 
• No real handle on what was installed where
Initial setup would be documented 
but configuration would drift over 
time as we updated, installed and 
fixed things.
“If it ain’t broke, don’t fix it”
Getting Started with Puppet
Puppet or Chef?
https://docs.puppetlabs.com/learning/
https://puppetlabs.com/learn
“By starting small and getting good at 
automating one discrete task, you can 
establish a foundation for bigger 
automation projects.” 
http://puppetlabs.com/blog/get-more-agile-learn-how-to-automate-one-small- 
thing-with-puppet-enterprise
Ideas for small tasks 
• cron jobs 
• users 
• ssh keys 
• vhosts 
• specific config files - 
for example a 
common php.ini 
• packages or settings 
you configure on all 
servers as standard
Installing 
packages 
package { "sudo": 
ensure => "installed" 
}
Using Puppet to 
create cron jobs. 
cron {‘my_cron_job’: 
command => "php /home/sites/mysite/public_html/ 
perch/core/scheduled/run.php secret", 
user => root, 
minute => [1,31], 
}
Adding standard 
files. 
file {'/etc/php5/apache2/php.ini': 
ensure => file, 
source => 'puppet:///modules/hosting/php.ini', 
notify => Service["apache2"], 
}
Don’t wait until you have time to 
rebuild everything. Who ever has 
time to rebuild everything?
Not Invented Here.
Is there an existing, well supported 
module that does this job?
https://forge.puppetlabs.com/supported
Managing Third Party Modules
Dependencies will bite you.
“Puppet describes the end-state of the 
machine, and NOT the order that it’s 
(Puppet) going to take you to that 
state” 
http://garylarizza.com/blog/2014/10/19/on-dependencies-and-order/
Where we are now.
• A Puppet Master, PuppetDB is on the same 
box 
• Three webservers 
• The “demo server”, also a webserver but of 
interesting configuration 
• PuppetBoard and Scout to see what is 
happening in Puppet and for monitoring
Webservers 
• Puppetlabs Apache, MySQL 
• modules/hosting = a module I’ve written than 
wraps up standard things used on webservers 
• make use of hiera for site, database and user 
values
Discovering Hiera made Puppet 
make sense to me.
A common.yaml 
file holds 
information 
common to all 
servers. For 
example user 
accounts. 
--- 
users: 
rachel: 
comment: "Rachel Andrew" 
shell: "/bin/bash" 
home: "/home/rachel" 
managehome: "true" 
groups: ['admin','www-admin'] 
drew: 
comment: "Drew McLellan" 
shell: "/bin/bash" 
home: "/home/drew" 
managehome: "true" 
groups: ['admin','www-admin'] 
ssh_keys: 
rachel_ssh: 
user: "rachel" 
type: "rsa" 
key: "AAAABB[...]" 
drew_ssh: 
user: "drew" 
type: "rsa" 
key: "AAAABB[...]"
Information 
specific to one 
server is held in 
node specific 
YAML files. 
eg: vhosts and 
MySQL 
databases. 
--- 
apache_vhosts: 
example.co.uk: 
port: '8080' 
docroot: '/home/sites/example/public_html' 
docroot_group: 'www-admin' 
servername: 'example.co.uk' 
serveraliases: ['example.com'] 
test.co.uk: 
port: '8080' 
docroot: '/home/sites/test/public_html' 
docroot_group: 'www-admin' 
servername: 'test.co.uk' 
serveraliases: ['test.com'] 
mysql_db: 
db_a: 
user: 'user_a' 
password: 'xxxxx' 
grant: ['all'] 
db_b: 
user: 'user_b' 
password: 'xxxxx' 
grant: ['all']
The hiera.yaml 
file. 
--- 
:backends: 
- yaml 
:logger: console 
:yaml: 
:datadir: /etc/puppet/hiera 
:hierarchy: 
- "%{::fqdn}" 
- common
hiera_hash gives 
an array of users, 
hosts and 
databases from 
the node specific 
YAML. 
I can use that in 
create_resources 
within manifests. 
$sites = hiera_hash('apache_vhosts') 
create_resources('apache::vhost',$sites) 
$db = hiera_hash('mysql_db') 
create_resources('mysql::db',$db)
“When you come up with a solution 
using create_resources(), I challenge 
you to draw up another solution using 
Puppet code in a Puppet manifest” 
http://garylarizza.com/blog/2014/10/24/puppet-workflows-4-using-hiera-in-anger/
Hiera and the demo server.
Standard CMS demos allow 
everyone access to one install 
which is “refreshed” periodically.
We wanted to give everyone a clean 
demo all of their own.
Hiera can have 
multiple 
backends 
defined. 
Hiera can use 
json as well as 
YAML. 
--- 
:backends: 
- yaml 
- json 
:logger: console 
:yaml: 
:datadir: /etc/puppet/hiera 
:json: 
:datadir: /etc/puppet/hiera 
:hierarchy: 
- '%{fqdn}' 
- common
deploy.pp 
• create a home directory 
• grab the site files tarball and untar into the home directory 
• get the relevant SQL dump 
• grab the config file and replace out db details 
• create a database using the import file 
• create a vhost 
• execute a script to notify Air Traffic Control the site is 
ready
• json Hiera backend is the source of truth for 
Puppet as to what sites should be running 
• could deploy to multiple servers by writing 
multiple json files one for each node 
• can deploy different versions of Perch - for 
example to allow someone to try out a beta 
• currently deploying and tearing down 50 or 60 
sites per day. It just works.
Start small with Puppet, but be 
aware of non-obvious problems 
that Puppet can help solve.
I use Vagrant and Puppet to test 
and build the site packages locally.
Why should small business and 
small infrastructures consider 
Puppet?
Disaster Recovery
Small companies 
• often don’t need hugely redundant 
infrastructures 
• having sites offline for a few hours not critical 
• … as long as everything can be restored.
Before Puppet 
• Rebuilding our infrastructure would have 
involved us “trying to remember” what went 
where. 
• Just getting servers reinstalled would have 
taken a long time. 
• Then we would have had to reconfigure every 
site, every SSH key, one at a time.
With Puppet 
• Configuration for each server is held in code, 
and in an external git repo 
• Checkout the modules onto a new Puppet 
Master 
• Spin up new servers and run Puppet which 
would create all resources - sites, keys etc. 
• We could then import any data such as MySQL 
backups
A good test - can you restore any 
of your servers into a local VM?
How do we do that thing again?
Puppet allows us to document 
processes by way of manifests.
The git commit history gives me 
additional information as to why 
something is configured that way.
Please look after this server.
Get an expert up to speed quickly
Ensure knowledge isn’t lost when 
someone leaves the company
Small businesses are often far 
more exposed than large ones to 
losing knowledge when a key 
person leaves.
Easier audits and compliance
“It is generally acceptable to show the 
Puppet modules to the auditor to 
demonstrate what settings are 
applied to the PCI servers.” 
http://blog.bluemalkin.net/pci-compliance-tips-for-sys-admins/
Speed of setting up new servers
Puppet means I don’t need to spend 
time and energy remembering how 
to do things on our servers.
Moving hosting or to new servers 
within a hosting company
Getting “stuck” on terrible hosting 
is a real issue for small businesses
Being Puppetized makes moving 
the entire infrastructure seem far 
less scary.
Modules from the Forge
Modules show best practice ways 
of achieving tasks.
The Puppet Community
“We like nice people way better than 
mean ones!” 
https://docs.puppetlabs.com/community/community_guidelines.html
Thank you 
http://rachelandrew.co.uk/presentations/puppet 
@rachelandrew

More Related Content

What's hot

Getting Started with Ansible
Getting Started with AnsibleGetting Started with Ansible
Getting Started with AnsibleAhmed AbouZaid
 
Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)DECK36
 
DevOps introduction with ansible, vagrant, and docker
DevOps introduction with ansible, vagrant, and dockerDevOps introduction with ansible, vagrant, and docker
DevOps introduction with ansible, vagrant, and dockerMark Stillwell
 
DevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleDevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleArnaud LEMAIRE
 
Deploying PHP Applications with Ansible
Deploying PHP Applications with AnsibleDeploying PHP Applications with Ansible
Deploying PHP Applications with AnsibleOrestes Carracedo
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerGeorge Miranda
 
Pro Puppet
Pro PuppetPro Puppet
Pro Puppetdsadas
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionJoshua Thijssen
 
Chasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and JenkinsChasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and JenkinsTomas Doran
 
Local Dev on Virtual Machines - Vagrant, VirtualBox and Ansible
Local Dev on Virtual Machines - Vagrant, VirtualBox and AnsibleLocal Dev on Virtual Machines - Vagrant, VirtualBox and Ansible
Local Dev on Virtual Machines - Vagrant, VirtualBox and AnsibleJeff Geerling
 
Drupal VM for Drupal 8 Dev - MidCamp 2017
Drupal VM for Drupal 8 Dev - MidCamp 2017Drupal VM for Drupal 8 Dev - MidCamp 2017
Drupal VM for Drupal 8 Dev - MidCamp 2017Jeff Geerling
 
Ansible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less CoffeeAnsible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less CoffeeSarah Z
 
Puppet Development Workflow
Puppet Development WorkflowPuppet Development Workflow
Puppet Development WorkflowJeffery Smith
 
How Ansible Makes Automation Easy
How Ansible Makes Automation EasyHow Ansible Makes Automation Easy
How Ansible Makes Automation EasyPeter Sankauskas
 
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...Puppet
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...Puppet
 
Docker puppetcamp london 2013
Docker puppetcamp london 2013Docker puppetcamp london 2013
Docker puppetcamp london 2013Tomas Doran
 
Toplog candy elves - HOCM Talk
Toplog candy elves - HOCM TalkToplog candy elves - HOCM Talk
Toplog candy elves - HOCM TalkPatrick LaRoche
 

What's hot (20)

Getting Started with Ansible
Getting Started with AnsibleGetting Started with Ansible
Getting Started with Ansible
 
Deployment automation
Deployment automationDeployment automation
Deployment automation
 
Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)Our Puppet Story (Linuxtag 2014)
Our Puppet Story (Linuxtag 2014)
 
DevOps introduction with ansible, vagrant, and docker
DevOps introduction with ansible, vagrant, and dockerDevOps introduction with ansible, vagrant, and docker
DevOps introduction with ansible, vagrant, and docker
 
DevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleDevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & Ansible
 
Deploying PHP Applications with Ansible
Deploying PHP Applications with AnsibleDeploying PHP Applications with Ansible
Deploying PHP Applications with Ansible
 
EC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and PackerEC2 AMI Factory with Chef, Berkshelf, and Packer
EC2 AMI Factory with Chef, Berkshelf, and Packer
 
Pro Puppet
Pro PuppetPro Puppet
Pro Puppet
 
Puppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 EditionPuppet for dummies - ZendCon 2011 Edition
Puppet for dummies - ZendCon 2011 Edition
 
Chasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and JenkinsChasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
Chasing AMI - Building Amazon machine images with Puppet, Packer and Jenkins
 
Local Dev on Virtual Machines - Vagrant, VirtualBox and Ansible
Local Dev on Virtual Machines - Vagrant, VirtualBox and AnsibleLocal Dev on Virtual Machines - Vagrant, VirtualBox and Ansible
Local Dev on Virtual Machines - Vagrant, VirtualBox and Ansible
 
Drupal VM for Drupal 8 Dev - MidCamp 2017
Drupal VM for Drupal 8 Dev - MidCamp 2017Drupal VM for Drupal 8 Dev - MidCamp 2017
Drupal VM for Drupal 8 Dev - MidCamp 2017
 
Ansible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less CoffeeAnsible: How to Get More Sleep and Require Less Coffee
Ansible: How to Get More Sleep and Require Less Coffee
 
Puppet Development Workflow
Puppet Development WorkflowPuppet Development Workflow
Puppet Development Workflow
 
How Ansible Makes Automation Easy
How Ansible Makes Automation EasyHow Ansible Makes Automation Easy
How Ansible Makes Automation Easy
 
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
Building and Testing from Scratch a Puppet Environment with Docker - PuppetCo...
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
 
Docker puppetcamp london 2013
Docker puppetcamp london 2013Docker puppetcamp london 2013
Docker puppetcamp london 2013
 
Toplog candy elves - HOCM Talk
Toplog candy elves - HOCM TalkToplog candy elves - HOCM Talk
Toplog candy elves - HOCM Talk
 
infra-as-code
infra-as-codeinfra-as-code
infra-as-code
 

Similar to Using Puppet in Small Infrastructures

V mware
V mwareV mware
V mwaredvmug1
 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwaresubtitle
 
Puppet Camp Boston 2014: Keynote
Puppet Camp Boston 2014: Keynote Puppet Camp Boston 2014: Keynote
Puppet Camp Boston 2014: Keynote Puppet
 
Puppet Camp Tokyo 2014: Keynote
Puppet Camp Tokyo 2014: KeynotePuppet Camp Tokyo 2014: Keynote
Puppet Camp Tokyo 2014: KeynotePuppet
 
Puppet Camp DC 2014: Keynote
Puppet Camp DC 2014: KeynotePuppet Camp DC 2014: Keynote
Puppet Camp DC 2014: KeynotePuppet
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013grim_radical
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with PuppetKris Buytaert
 
Puppet and Apache CloudStack
Puppet and Apache CloudStackPuppet and Apache CloudStack
Puppet and Apache CloudStackPuppet
 
Infrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStackInfrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStackke4qqq
 
Google Cloud Platform for DeVops, by Javier Ramirez @ teowaki
Google Cloud Platform for DeVops, by Javier Ramirez @ teowakiGoogle Cloud Platform for DeVops, by Javier Ramirez @ teowaki
Google Cloud Platform for DeVops, by Javier Ramirez @ teowakijavier ramirez
 
Puppetpreso
PuppetpresoPuppetpreso
Puppetpresoke4qqq
 
Puppet Camp London 2014: Keynote
Puppet Camp London 2014: KeynotePuppet Camp London 2014: Keynote
Puppet Camp London 2014: KeynotePuppet
 
Puppet and CloudStack
Puppet and CloudStackPuppet and CloudStack
Puppet and CloudStackke4qqq
 
Puppet Camp New York Keynote
Puppet Camp New York KeynotePuppet Camp New York Keynote
Puppet Camp New York KeynotePuppet
 
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014Miguel Zuniga
 
Capistrano, Puppet, and Chef
Capistrano, Puppet, and ChefCapistrano, Puppet, and Chef
Capistrano, Puppet, and ChefDavid Benjamin
 
Puppet slides for intelligrape
Puppet slides for intelligrapePuppet slides for intelligrape
Puppet slides for intelligrapeSharad Aggarwal
 
Configuring Your First Hadoop Cluster On EC2
Configuring Your First Hadoop Cluster On EC2Configuring Your First Hadoop Cluster On EC2
Configuring Your First Hadoop Cluster On EC2benjaminwootton
 
Puppet Camp Chicago 2014: Keynote
Puppet Camp Chicago 2014: KeynotePuppet Camp Chicago 2014: Keynote
Puppet Camp Chicago 2014: KeynotePuppet
 

Similar to Using Puppet in Small Infrastructures (20)

V mware
V mwareV mware
V mware
 
Puppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMwarePuppet Primer, Robbie Jerrom, Solution Architect VMware
Puppet Primer, Robbie Jerrom, Solution Architect VMware
 
Puppet Camp Boston 2014: Keynote
Puppet Camp Boston 2014: Keynote Puppet Camp Boston 2014: Keynote
Puppet Camp Boston 2014: Keynote
 
Puppet Camp Tokyo 2014: Keynote
Puppet Camp Tokyo 2014: KeynotePuppet Camp Tokyo 2014: Keynote
Puppet Camp Tokyo 2014: Keynote
 
Puppet Camp DC 2014: Keynote
Puppet Camp DC 2014: KeynotePuppet Camp DC 2014: Keynote
Puppet Camp DC 2014: Keynote
 
Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013Puppet: Eclipsecon ALM 2013
Puppet: Eclipsecon ALM 2013
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with Puppet
 
One-Man Ops
One-Man OpsOne-Man Ops
One-Man Ops
 
Puppet and Apache CloudStack
Puppet and Apache CloudStackPuppet and Apache CloudStack
Puppet and Apache CloudStack
 
Infrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStackInfrastructure as code with Puppet and Apache CloudStack
Infrastructure as code with Puppet and Apache CloudStack
 
Google Cloud Platform for DeVops, by Javier Ramirez @ teowaki
Google Cloud Platform for DeVops, by Javier Ramirez @ teowakiGoogle Cloud Platform for DeVops, by Javier Ramirez @ teowaki
Google Cloud Platform for DeVops, by Javier Ramirez @ teowaki
 
Puppetpreso
PuppetpresoPuppetpreso
Puppetpreso
 
Puppet Camp London 2014: Keynote
Puppet Camp London 2014: KeynotePuppet Camp London 2014: Keynote
Puppet Camp London 2014: Keynote
 
Puppet and CloudStack
Puppet and CloudStackPuppet and CloudStack
Puppet and CloudStack
 
Puppet Camp New York Keynote
Puppet Camp New York KeynotePuppet Camp New York Keynote
Puppet Camp New York Keynote
 
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
Configuration Management in the Cloud - Cloud Phoenix Meetup Feb 2014
 
Capistrano, Puppet, and Chef
Capistrano, Puppet, and ChefCapistrano, Puppet, and Chef
Capistrano, Puppet, and Chef
 
Puppet slides for intelligrape
Puppet slides for intelligrapePuppet slides for intelligrape
Puppet slides for intelligrape
 
Configuring Your First Hadoop Cluster On EC2
Configuring Your First Hadoop Cluster On EC2Configuring Your First Hadoop Cluster On EC2
Configuring Your First Hadoop Cluster On EC2
 
Puppet Camp Chicago 2014: Keynote
Puppet Camp Chicago 2014: KeynotePuppet Camp Chicago 2014: Keynote
Puppet Camp Chicago 2014: Keynote
 

More from Rachel Andrew

All Day Hey! Unlocking The Power of CSS Grid Layout
All Day Hey! Unlocking The Power of CSS Grid LayoutAll Day Hey! Unlocking The Power of CSS Grid Layout
All Day Hey! Unlocking The Power of CSS Grid LayoutRachel Andrew
 
SmashingConf SF: Unlocking the Power of CSS Grid Layout
SmashingConf SF: Unlocking the Power of CSS Grid LayoutSmashingConf SF: Unlocking the Power of CSS Grid Layout
SmashingConf SF: Unlocking the Power of CSS Grid LayoutRachel Andrew
 
Unlocking the Power of CSS Grid Layout
Unlocking the Power of CSS Grid LayoutUnlocking the Power of CSS Grid Layout
Unlocking the Power of CSS Grid LayoutRachel Andrew
 
The Creative New World of CSS
The Creative New World of CSSThe Creative New World of CSS
The Creative New World of CSSRachel Andrew
 
Into the Weeds of CSS Layout
Into the Weeds of CSS LayoutInto the Weeds of CSS Layout
Into the Weeds of CSS LayoutRachel Andrew
 
Solving Layout Problems with CSS Grid & Friends - DevFest17
Solving Layout Problems with CSS Grid & Friends - DevFest17Solving Layout Problems with CSS Grid & Friends - DevFest17
Solving Layout Problems with CSS Grid & Friends - DevFest17Rachel Andrew
 
View Source London: Solving Layout Problems with CSS Grid & Friends
View Source London: Solving Layout Problems with CSS Grid & FriendsView Source London: Solving Layout Problems with CSS Grid & Friends
View Source London: Solving Layout Problems with CSS Grid & FriendsRachel Andrew
 
DevFest Nantes - Start Using CSS Grid Layout today
DevFest Nantes - Start Using CSS Grid Layout todayDevFest Nantes - Start Using CSS Grid Layout today
DevFest Nantes - Start Using CSS Grid Layout todayRachel Andrew
 
Start Using CSS Grid Layout Today - RuhrJS
Start Using CSS Grid Layout Today - RuhrJSStart Using CSS Grid Layout Today - RuhrJS
Start Using CSS Grid Layout Today - RuhrJSRachel Andrew
 
404.ie: Solving Layout Problems with CSS Grid & Friends
404.ie: Solving Layout Problems with CSS Grid & Friends404.ie: Solving Layout Problems with CSS Grid & Friends
404.ie: Solving Layout Problems with CSS Grid & FriendsRachel Andrew
 
Solving Layout Problems with CSS Grid & Friends - WEBU17
Solving Layout Problems with CSS Grid & Friends - WEBU17Solving Layout Problems with CSS Grid & Friends - WEBU17
Solving Layout Problems with CSS Grid & Friends - WEBU17Rachel Andrew
 
Laying out the future with grid & flexbox - Smashing Conf Freiburg
Laying out the future with grid & flexbox - Smashing Conf FreiburgLaying out the future with grid & flexbox - Smashing Conf Freiburg
Laying out the future with grid & flexbox - Smashing Conf FreiburgRachel Andrew
 
Solving Layout Problems with CSS Grid & Friends - NordicJS
Solving Layout Problems with CSS Grid & Friends - NordicJSSolving Layout Problems with CSS Grid & Friends - NordicJS
Solving Layout Problems with CSS Grid & Friends - NordicJSRachel Andrew
 
Google Developers Experts Summit 2017 - CSS Layout
Google Developers Experts Summit 2017 - CSS Layout Google Developers Experts Summit 2017 - CSS Layout
Google Developers Experts Summit 2017 - CSS Layout Rachel Andrew
 
Web Summer Camp Keynote
Web Summer Camp KeynoteWeb Summer Camp Keynote
Web Summer Camp KeynoteRachel Andrew
 
New CSS Layout Meets the Real World
New CSS Layout Meets the Real WorldNew CSS Layout Meets the Real World
New CSS Layout Meets the Real WorldRachel Andrew
 
An Event Apart DC - New CSS Layout meets the Real World
An Event Apart DC - New CSS Layout meets the Real WorldAn Event Apart DC - New CSS Layout meets the Real World
An Event Apart DC - New CSS Layout meets the Real WorldRachel Andrew
 
Perch, Patterns and Old Browsers
Perch, Patterns and Old BrowsersPerch, Patterns and Old Browsers
Perch, Patterns and Old BrowsersRachel Andrew
 
Evergreen websites for Evergreen browsers
Evergreen websites for Evergreen browsersEvergreen websites for Evergreen browsers
Evergreen websites for Evergreen browsersRachel Andrew
 

More from Rachel Andrew (20)

All Day Hey! Unlocking The Power of CSS Grid Layout
All Day Hey! Unlocking The Power of CSS Grid LayoutAll Day Hey! Unlocking The Power of CSS Grid Layout
All Day Hey! Unlocking The Power of CSS Grid Layout
 
SmashingConf SF: Unlocking the Power of CSS Grid Layout
SmashingConf SF: Unlocking the Power of CSS Grid LayoutSmashingConf SF: Unlocking the Power of CSS Grid Layout
SmashingConf SF: Unlocking the Power of CSS Grid Layout
 
Unlocking the Power of CSS Grid Layout
Unlocking the Power of CSS Grid LayoutUnlocking the Power of CSS Grid Layout
Unlocking the Power of CSS Grid Layout
 
The Creative New World of CSS
The Creative New World of CSSThe Creative New World of CSS
The Creative New World of CSS
 
Into the Weeds of CSS Layout
Into the Weeds of CSS LayoutInto the Weeds of CSS Layout
Into the Weeds of CSS Layout
 
Solving Layout Problems with CSS Grid & Friends - DevFest17
Solving Layout Problems with CSS Grid & Friends - DevFest17Solving Layout Problems with CSS Grid & Friends - DevFest17
Solving Layout Problems with CSS Grid & Friends - DevFest17
 
Graduating to Grid
Graduating to GridGraduating to Grid
Graduating to Grid
 
View Source London: Solving Layout Problems with CSS Grid & Friends
View Source London: Solving Layout Problems with CSS Grid & FriendsView Source London: Solving Layout Problems with CSS Grid & Friends
View Source London: Solving Layout Problems with CSS Grid & Friends
 
DevFest Nantes - Start Using CSS Grid Layout today
DevFest Nantes - Start Using CSS Grid Layout todayDevFest Nantes - Start Using CSS Grid Layout today
DevFest Nantes - Start Using CSS Grid Layout today
 
Start Using CSS Grid Layout Today - RuhrJS
Start Using CSS Grid Layout Today - RuhrJSStart Using CSS Grid Layout Today - RuhrJS
Start Using CSS Grid Layout Today - RuhrJS
 
404.ie: Solving Layout Problems with CSS Grid & Friends
404.ie: Solving Layout Problems with CSS Grid & Friends404.ie: Solving Layout Problems with CSS Grid & Friends
404.ie: Solving Layout Problems with CSS Grid & Friends
 
Solving Layout Problems with CSS Grid & Friends - WEBU17
Solving Layout Problems with CSS Grid & Friends - WEBU17Solving Layout Problems with CSS Grid & Friends - WEBU17
Solving Layout Problems with CSS Grid & Friends - WEBU17
 
Laying out the future with grid & flexbox - Smashing Conf Freiburg
Laying out the future with grid & flexbox - Smashing Conf FreiburgLaying out the future with grid & flexbox - Smashing Conf Freiburg
Laying out the future with grid & flexbox - Smashing Conf Freiburg
 
Solving Layout Problems with CSS Grid & Friends - NordicJS
Solving Layout Problems with CSS Grid & Friends - NordicJSSolving Layout Problems with CSS Grid & Friends - NordicJS
Solving Layout Problems with CSS Grid & Friends - NordicJS
 
Google Developers Experts Summit 2017 - CSS Layout
Google Developers Experts Summit 2017 - CSS Layout Google Developers Experts Summit 2017 - CSS Layout
Google Developers Experts Summit 2017 - CSS Layout
 
Web Summer Camp Keynote
Web Summer Camp KeynoteWeb Summer Camp Keynote
Web Summer Camp Keynote
 
New CSS Layout Meets the Real World
New CSS Layout Meets the Real WorldNew CSS Layout Meets the Real World
New CSS Layout Meets the Real World
 
An Event Apart DC - New CSS Layout meets the Real World
An Event Apart DC - New CSS Layout meets the Real WorldAn Event Apart DC - New CSS Layout meets the Real World
An Event Apart DC - New CSS Layout meets the Real World
 
Perch, Patterns and Old Browsers
Perch, Patterns and Old BrowsersPerch, Patterns and Old Browsers
Perch, Patterns and Old Browsers
 
Evergreen websites for Evergreen browsers
Evergreen websites for Evergreen browsersEvergreen websites for Evergreen browsers
Evergreen websites for Evergreen browsers
 

Recently uploaded

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Recently uploaded (20)

Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

Using Puppet in Small Infrastructures

  • 1. Puppet & Small Infrastructures Rachel Andrew @rachelandrew
  • 4. Why would a small business use Puppet?
  • 5. • My background • Learning Puppet and initial challenges • Our current use of Puppet • Why Puppet for small businesses with a handful of servers?
  • 6. This is my job. • writer • tech support person • bookkeeper • HR • filler in of baffling forms from the government • PHP developer • front-end web developer • marketer • sales person • public speaker • … ops person.
  • 7. Back in my day …
  • 8. Pre-Puppet • Infrastructure consisted of a bunch of VPS boxes hosted at Memset • Configured at different times • Some set up by me, some by Drew • Neither of us understood the setups done by the other • No real handle on what was installed where
  • 9. Initial setup would be documented but configuration would drift over time as we updated, installed and fixed things.
  • 10. “If it ain’t broke, don’t fix it”
  • 11.
  • 16. “By starting small and getting good at automating one discrete task, you can establish a foundation for bigger automation projects.” http://puppetlabs.com/blog/get-more-agile-learn-how-to-automate-one-small- thing-with-puppet-enterprise
  • 17. Ideas for small tasks • cron jobs • users • ssh keys • vhosts • specific config files - for example a common php.ini • packages or settings you configure on all servers as standard
  • 18. Installing packages package { "sudo": ensure => "installed" }
  • 19. Using Puppet to create cron jobs. cron {‘my_cron_job’: command => "php /home/sites/mysite/public_html/ perch/core/scheduled/run.php secret", user => root, minute => [1,31], }
  • 20. Adding standard files. file {'/etc/php5/apache2/php.ini': ensure => file, source => 'puppet:///modules/hosting/php.ini', notify => Service["apache2"], }
  • 21. Don’t wait until you have time to rebuild everything. Who ever has time to rebuild everything?
  • 23. Is there an existing, well supported module that does this job?
  • 27. “Puppet describes the end-state of the machine, and NOT the order that it’s (Puppet) going to take you to that state” http://garylarizza.com/blog/2014/10/19/on-dependencies-and-order/
  • 28. Where we are now.
  • 29. • A Puppet Master, PuppetDB is on the same box • Three webservers • The “demo server”, also a webserver but of interesting configuration • PuppetBoard and Scout to see what is happening in Puppet and for monitoring
  • 30. Webservers • Puppetlabs Apache, MySQL • modules/hosting = a module I’ve written than wraps up standard things used on webservers • make use of hiera for site, database and user values
  • 31. Discovering Hiera made Puppet make sense to me.
  • 32. A common.yaml file holds information common to all servers. For example user accounts. --- users: rachel: comment: "Rachel Andrew" shell: "/bin/bash" home: "/home/rachel" managehome: "true" groups: ['admin','www-admin'] drew: comment: "Drew McLellan" shell: "/bin/bash" home: "/home/drew" managehome: "true" groups: ['admin','www-admin'] ssh_keys: rachel_ssh: user: "rachel" type: "rsa" key: "AAAABB[...]" drew_ssh: user: "drew" type: "rsa" key: "AAAABB[...]"
  • 33. Information specific to one server is held in node specific YAML files. eg: vhosts and MySQL databases. --- apache_vhosts: example.co.uk: port: '8080' docroot: '/home/sites/example/public_html' docroot_group: 'www-admin' servername: 'example.co.uk' serveraliases: ['example.com'] test.co.uk: port: '8080' docroot: '/home/sites/test/public_html' docroot_group: 'www-admin' servername: 'test.co.uk' serveraliases: ['test.com'] mysql_db: db_a: user: 'user_a' password: 'xxxxx' grant: ['all'] db_b: user: 'user_b' password: 'xxxxx' grant: ['all']
  • 34. The hiera.yaml file. --- :backends: - yaml :logger: console :yaml: :datadir: /etc/puppet/hiera :hierarchy: - "%{::fqdn}" - common
  • 35. hiera_hash gives an array of users, hosts and databases from the node specific YAML. I can use that in create_resources within manifests. $sites = hiera_hash('apache_vhosts') create_resources('apache::vhost',$sites) $db = hiera_hash('mysql_db') create_resources('mysql::db',$db)
  • 36. “When you come up with a solution using create_resources(), I challenge you to draw up another solution using Puppet code in a Puppet manifest” http://garylarizza.com/blog/2014/10/24/puppet-workflows-4-using-hiera-in-anger/
  • 37. Hiera and the demo server.
  • 38. Standard CMS demos allow everyone access to one install which is “refreshed” periodically.
  • 39. We wanted to give everyone a clean demo all of their own.
  • 40.
  • 41. Hiera can have multiple backends defined. Hiera can use json as well as YAML. --- :backends: - yaml - json :logger: console :yaml: :datadir: /etc/puppet/hiera :json: :datadir: /etc/puppet/hiera :hierarchy: - '%{fqdn}' - common
  • 42. deploy.pp • create a home directory • grab the site files tarball and untar into the home directory • get the relevant SQL dump • grab the config file and replace out db details • create a database using the import file • create a vhost • execute a script to notify Air Traffic Control the site is ready
  • 43. • json Hiera backend is the source of truth for Puppet as to what sites should be running • could deploy to multiple servers by writing multiple json files one for each node • can deploy different versions of Perch - for example to allow someone to try out a beta • currently deploying and tearing down 50 or 60 sites per day. It just works.
  • 44. Start small with Puppet, but be aware of non-obvious problems that Puppet can help solve.
  • 45. I use Vagrant and Puppet to test and build the site packages locally.
  • 46. Why should small business and small infrastructures consider Puppet?
  • 48. Small companies • often don’t need hugely redundant infrastructures • having sites offline for a few hours not critical • … as long as everything can be restored.
  • 49. Before Puppet • Rebuilding our infrastructure would have involved us “trying to remember” what went where. • Just getting servers reinstalled would have taken a long time. • Then we would have had to reconfigure every site, every SSH key, one at a time.
  • 50. With Puppet • Configuration for each server is held in code, and in an external git repo • Checkout the modules onto a new Puppet Master • Spin up new servers and run Puppet which would create all resources - sites, keys etc. • We could then import any data such as MySQL backups
  • 51. A good test - can you restore any of your servers into a local VM?
  • 52. How do we do that thing again?
  • 53. Puppet allows us to document processes by way of manifests.
  • 54. The git commit history gives me additional information as to why something is configured that way.
  • 55. Please look after this server.
  • 56. Get an expert up to speed quickly
  • 57. Ensure knowledge isn’t lost when someone leaves the company
  • 58. Small businesses are often far more exposed than large ones to losing knowledge when a key person leaves.
  • 59. Easier audits and compliance
  • 60. “It is generally acceptable to show the Puppet modules to the auditor to demonstrate what settings are applied to the PCI servers.” http://blog.bluemalkin.net/pci-compliance-tips-for-sys-admins/
  • 61. Speed of setting up new servers
  • 62. Puppet means I don’t need to spend time and energy remembering how to do things on our servers.
  • 63. Moving hosting or to new servers within a hosting company
  • 64. Getting “stuck” on terrible hosting is a real issue for small businesses
  • 65. Being Puppetized makes moving the entire infrastructure seem far less scary.
  • 67. Modules show best practice ways of achieving tasks.
  • 69. “We like nice people way better than mean ones!” https://docs.puppetlabs.com/community/community_guidelines.html