Presentation given at the Atlanta Puppet Camp in December 2014 about how MailChimp uses a combination of DSL tooling, editor plugins, peer review, and Jenkins to do continuous deployment of puppet modules to their infrastructure. Slide sources available at https://github.com/woneill/puppetcamp_atlanta_2014
4. EMAIL SERVICE PROVIDER
Deliver ~500 million emails daily
723 million emails delivered on Cyber Monday
of 97Sender Score
http://delivery.mailchimp.com/
7. CONFIGURATION MANAGEMENT IS HARD
"With Chef, Puppet, and CFEngine we found a
not-insigni cant learning curve on setting up
the different server daemons and learning the
DSL. This was particularly challenging when
we were con guring unique software not yet
given recipes by the existing community.
Given our cluster sizes, we also didn't really
need any of the advanced features those
systems provided."
- README from internally built tool
8. MOVE TO COLOCATION
Buy vs. Lease analogy
Grow our Operations team
Needed a tool with dry-run mode
10. HOW DO WE CATCH THESE MISTAKES AS EARLY
AS POSSIBLE?
AUTONOMATION
"automation with a human touch"
1. Detect the abnormality
2. Stop
3. Fix or correct the immediate condition
11. HOW DO WE CATCH THESE MISTAKES AS EARLY
AS POSSIBLE?
DSL tools
Editor Support
Source Code Management
Continuous Integration
15. $ puppet parser validate validate_1.pp
Error: Could not parse for environment production:
Syntax error at 'require'; expected '}' at validate_1.pp:12
20. ---
ntp::servers:
- 0.us.pool.ntp.org
- 1.us.pool.ntp.org
- 2.us.pool.ntp.org
- 3.us.pool.ntp.org
hp::ilo::settings:
ssh_status
type: global
value: true
ssh_port
type: global
value: '22'
http_port
type: global
value: '80'
https_port
type: global
value: '443'
21. $ js-yaml hiera.yaml
JS-YAML: bad indentation of a mapping entry at line 9, column 13:
type: global
^
$ ruby -e "require 'yaml'; YAML.load_file('hiera.yaml')"
yaml.rb:133:in `load':
syntax error on line 9, col 14: ` value: true' (ArgumentError)
from yaml.rb:133:in `load'
from yaml.rb:144:in `load_file'
from yaml.rb:143:in `open'
from yaml.rb:143:in `load_file'
from -e:1
24. $ puppet-lint validate_2.pp
WARNING: quoted boolean value found on line 16
WARNING: quoted boolean value found on line 17
WARNING: quoted boolean value found on line 18
WARNING: indentation of => is not properly aligned on line 6
WARNING: indentation of => is not properly aligned on line 7
WARNING: indentation of => is not properly aligned on line 8
WARNING: indentation of => is not properly aligned on line 9
WARNING: indentation of => is not properly aligned on line 10
WARNING: mode should be represented as a 4 digit octal value
or symbolic mode on line 9
WARNING: /* */ comment found on line 10
25. $ puppet-lint --fix validate_2.pp
FIXED: quoted boolean value found on line 16
FIXED: quoted boolean value found on line 17
FIXED: quoted boolean value found on line 18
FIXED: indentation of => is not properly aligned on line 6
FIXED: indentation of => is not properly aligned on line 7
FIXED: indentation of => is not properly aligned on line 8
FIXED: indentation of => is not properly aligned on line 9
FIXED: indentation of => is not properly aligned on line 10
FIXED: mode should be represented as a 4 digit octal value
or symbolic mode on line 9
FIXED: /* */ comment found on line 10