Upload
chorankates
View
263
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Vagrant+Rouster at salesforce.com presented at PuppetConf 2013
Citation preview
Vagrant + Rouster
Conor Horan-Kates
Senior Member of the Technical Staff,
Quality Engineering
@chorankates
/usr/bin/whoami
• most recently as a tester in quality
assurance for a Windows based antimalware solution
• started as a traditional quality engineer in a
Data Center Automation group, moved towards
developer and systems engineer, riding the DevOps
wave
Rouster
basic instantiation
require 'rouster'
# the value for the 'name' attribute should be a name in `vagrant status`
app = Rouster.new(:name => 'app')
# equivalent to `vagrant up app`
app.up()
# STD(OUT|ERR) of this is available in app.get_output()
app.run('cat /etc/hosts')
app.put('new-foo', '/tmp/foo')
app.get('/tmp/foo')
app.destroy()
http://tipmra.com/new_tipmra/new_cop_pic/old_cop_time_1a.gif
Where did we start?
• Team composition
• 6 engineers – 3 system engineers, 2 QE and 1 developer
• Very little Ruby experience, mostly Perl and Shell
• Education
• Pro Puppet, Puppet 2.7 Cookbook, Puppet Types and Providers
• Puppet Intro and Puppet Developers (now Advanced) classes
from PuppetLabs
• Tools
• RSpec, rspec-puppet
• puppet-lint
Where have we been?
• get out of perforce and into git
• local git-commit hooks
• puppet-lint
• RSpec, rspec-puppet
• Vagrantfile: 39 lines
• piab -> „Puppet in a box‟
• Supports base images for roles in SFDC stack
Where are we now?
• Jenkins – relatively small installation
• RSpec, rspec-puppet– for catalog validation of
manifests, some unit testing
• test-unit – for unit tests of custom functions
• Test::More – for unit/functional tests of ENC
• built mock racadm for type/provider testing
• Vagrantfile: 237 lines
• Supports base images for ~every host in production
Where are we now?(pt. 2)
• Salesforce::piab – for functional validation of catalogs –
the precursor to Rouster
• Perl abstraction layer to Vagrant machines, shelled out to
vagrant faces, created a new pseudo-TTY connection for each
run() command
• Relies on external project, deltas, to power the
get_(groups|packages|services|users)
• Supports a subset of is_* tests
• To accomplish isolation, large portions of code in role_*.t is
duplicated for each test
Where are wegoing?
• Rouster
• Porting existing Salesforce::piab tests
• Resolve issues and TODOs in codebase
• Moving from all Vagrant VMs to include physical
hardware environment
• For “real” validation
• For devices in the stack we can‟t
emulate in Vagrant
http://www.hostgator.com/images/d8.jpg
puppet-y methods
require 'rouster'
require 'rouster/puppet'
ppm = Rouster.new(:name => 'ppm')
p(ppm.methods –Object.methods).sort
[
:get_catalog, :get_puppet_errors,
:get_puppet_notices,:parse_catalog,:remove_existing_ce
rts, :run_puppet
]
testing methods
require 'rouster'
require 'rouster/testing'
ppm = Rouster.new(:name => 'ppm')
p(ppm.methods–Object.methods).sort
[
:is_dir?, :is_executable?, :is_file?, :is_group?,
:is_in_file?, :is_in_path?, :is_package?,
:is_port_active?, :is_port_open?,
:is_process_running?, :is_readable?, :is_service?,
:is_service_running?, :is_user?, :is_user_in_group?,
:is_writeable?
]
Rouster - demo
Where is Rouster going?
• SFDC is going all RHEL, most of our time will be
devoted to supporting that OS
• Object model – no more shelling out
• Vagrant
• Puppet
• Passthrough implementation
• Better/more
• Documentation
• Tests
• What does the community need?
http://www.skyanalytics.com/Portals/171866/images/roadmap.jpg
Want to help?
• Testing
• do our tests work in your environment? how can we make them
more generic?
• how does Rouster work with providers other than VirtualBox?
• Support for
• other system configuration tools – Chef? Ansible?
$whatevercomesnext?
• other operating systems
• TODO hunting – at last count, more than 30
• New tests/convenience methods
• Most importantly, need an awesome logo
Questions for the audience
• How are you accomplishing test isolation?
• How are you handling credential management?
• How are you testing code against non-server puppet
agents?
• How are you handling negative testing?
Conor Horan-Kates
SMTS, QE