19. Simple tools keep us efficient
> createaserver.rb -a ami-e2af508b -n test1.janrain.com -S
Fog launches an Ubuntu base ami
server = compute.servers.create(:image_id => options[:ami], :flavor_id =>
options[:type], :groups => options[:groups], :user_data => '
puppet:
conf:
agent:
server: 'puppet.janrain.com'
certname: '"test1.janrain.com"'
environment: "development"
pluginsync: true
waitforcert: true
20. ● Ubuntu cloud-init installs puppet
○ https://help.ubuntu.com/community/CloudInit
○ also: work around for provider prerequisite problem
● Puppet starts up and waits for signing
○ our utility signs the cert over the REST api
■ http://docs.puppetlabs.com/guides/rest_api.html
curl -i --cert ~/.puppetcred/puppet.crt --key ~/.
puppetcred/puppet.key --cacert ~/.puppetcred/ca_crt.pem
https://puppet.janrain.com/development/certificate_status/
test1.janrain.com -H 'Content-Type: text/pson' -X PUT --data
'{"desired_state":"signed"}'
21. ● Puppet starts up and installs our base from
common modules
○ users
○ groups
○ ssh pubkeys
○ common apps
○ metrics and monitors
■ collectd
■ nagios
■ mcollective
22. ● Puppet sets up the DNS
○ via REST API
○ http://dyn.com/dns/dynect-managed-dns/
● Puppet manages our instance volumes with lvm
○ https://github.com/puppetlabs/puppet-lvm
● Puppet deploys application code with vcsrepo
○ https://github.com/puppetlabs/puppet-vcsrepo
25. Avoiding the Stampede
● It's hard to keep the PuppetMaster's load predictable
● Puppetcommander
● Initiates runs in an orderly fashion
● Can be globally disabled
https://github.com/puppetlabs/mcollective-plugins/tree/master/agent/puppetd/commander/
26. What's next?
● External Node classifier
● LXC Development Environment
● Build => Bundle => Scale
● Puppet and Zookeeper via Facter