Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Setup: Managing an Army of Laptops with Puppet

The Setup: Managing an Army of Laptops with Puppet

As a rapidly growing company, GitHub's faced some challenges in how to make sure that everyone can get up and running on projects or continue to work on one of the dozens of existing projects if they've never set it up before. What a nightmare! That's what prompted @jbarnette and @wfarr to develop The Setup. The Setup aims to solve all the problems that used to plague on-boarding GitHubbers onto projects with a lot of automation and a case of the "It Just Works". This presentation talks about the history of The Setup, how it works, and some of the lessons learned along the way.

Will Farrington

September 12, 2012
Tweet

More Decks by Will Farrington

Other Decks in Technology

Transcript

  1. why

  2. oh man, this new macbook pro is sweet! let me

    run a bunch of stuff by hand so I can get some work done in about 6 to 8 hours, maybe. - some perfectly normal people
  3. oh man, this new macbook pro is sweet! let me

    run a bunch of stuff by hand so I can get some work done in about 6 to 8 hours, maybe. ~ crazy people
  4. about 6000 about 3600 1186 26 lines of Ruby (not

    incl. tests) lines of Puppet (not incl. tests) commits contributors some numbers
  5. chrome, colloquy, dropbox, elasticsearch, emacs, erlang, git, homebrew, hub, iterm2,

    java, macvim, memcache, mongodb, mysql, nginx, nodejs, nvm, 1passwd, personalization, postgresql, projects, python, qt, rbenv, rdio, redis, ruby, solr, sparrow, textmate, virtualbox, viscosity, wget, xcode, xquartz, zeromq, zsh, and more daily.
  6. before require subscribe notify this resource must run before this

    resource must run after this resource runs after and watches this resource runs before and tells
  7. define git::config::local($key, $value) { $safekey = shellquote($key) $safevalue = shellquote($value)

    $command = "git config --local ${safekey} ${safevalue}" exec { "${command} in ${name}": command => $command, cwd => $name, onlyif => 'test -d .git', unless => "git config --local ${safekey}", require => Package['git'] } }
  8. 2. puppet has semantics about execution that would be confusing

    and unintuitive in ruby or python or most other languages
  9. class github::people::wfarr { setup::osx_defaults { 'require password always': ensure =>

    present, domain => 'com.apple.screensaver', key => 'askForPassword', value => 1, user => 'wfarr' } }
  10. =(

  11. love ops? come work with us puppet, erlang, ruby, shell,

    c and all the graphs you can shake a stick at