Systems Building Systems
A Puppet Story
What is Puppet?
Language Parser
Client/Server
Resource Abstraction
A few other things...
Luke
Kanies
Recovering Sysadmin
One Goal:
Revolutionize
System
Administration
What is a sysadmin?
Not Exactly Modern
Do tools have
to suck?
Say What?!??
Everything the Same
Everything Distinct
“Best Practices”
Don’t look at me...
I wasn’t the last one to touch it...
SSH   Cfengine   ?
Bad product,
hungry Luke
SSH   Cfengine   ?
SSH   Cfengine   ?
You can either easily manage
 complex systems at scale...
You can either easily manage
 complex systems at scale...

       Or you can’t...
Who’s using Puppet?

        “...at Google we're
     currently using Puppet
        to manage close to
       6,000 Macs, and it's
      likely our deployment
             will expand
       dramatically beyond
               that....”
Competitive Advantage
People are finally figuring out
 puppet and how it gets you
to the pub by 4pm. Note that
  I've been at this pub since
             2pm.
        -- Jorge Castro
Enter Puppet...
                  Configuration Is
                  Declarative Code
                  Semantics Matter
                  Reproducible
                  Shareable
                  Maintainable
                  Extensible
Developer   Sysadmin
Three
   people




Developer   Sysadmin
An Analogy

                         Programming   SysAdmin


 Low-level,                            commands
                          Assembly
non-portable                            and files

  Abstract,
                             C*        Resources
  portable

 * For small values of
       abstract
Portable Resources
This:
Portable Resources
This:



Becomes:
Portable Resources
This:



Becomes:
Portable Resources
This:



Becomes:
Portable Resources
This:



Becomes:
Portable Resources
This:



Becomes:
Portable
           23 package types
           Users in NetInfo,
           useradd, pw
           Support for Debian,
           Ubuntu, Red Hat,
           Solaris, OS X,
           Gentoo, SuSE,
           FreeBSD, and more
Debian
Debian



Red Hat
Debian



Red Hat
Package
Configuration should
Package    get modified after
          package installation


             Configuration
Configuration should
Package    get modified after
          package installation
                             Service should restart
             Configuration             when
                             configuration changes


                                   Service
Idempotence...
Idempotence...
Idempotence...

 Describes the property of operations in mathematics
and computer science which yield the same result after
        the operation is applied multiple times.
Network Effects
Code




          Puppetmasterd




puppetd                   puppetd
 OS X                      in the
            puppetd
                           cloud
             Linux
Every Client:
Every Client:
     Retrieve resource catalog from central
     server
Every Client:
     Retrieve resource catalog from central
     server
     Determine resource order
Every Client:
     Retrieve resource catalog from central
     server
     Determine resource order
     Check each resource in turn, fixing if
     necessary
Every Client:
     Retrieve resource catalog from central
     server
     Determine resource order
     Check each resource in turn, fixing if
     necessary
     Rinse and repeat, every 30 minutes
Every Resource:
Every Resource:
    Retrieve current state (e.g., by querying dpkg
    db or doing a stat)
Every Resource:
    Retrieve current state (e.g., by querying dpkg
    db or doing a stat)
    Compare to desired state
Every Resource:
    Retrieve current state (e.g., by querying dpkg
    db or doing a stat)
    Compare to desired state
    Fix, if necessary (or just log)
Image from http://flickr.com/photos/pingnews/132543603/
Questions?
andrew@reductivelabs
twitter.com/littleidea

Systems building-systems-a-puppet-story-19133