Vagrant+Rouster at
Upcoming SlideShare
Loading in...5

Vagrant+Rouster at



Vagrant+Rouster at presented at PuppetConf 2013

Vagrant+Rouster at presented at PuppetConf 2013



Total Views
Views on SlideShare
Embed Views



4 Embeds 35 27 4 3 1



Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment
  • what is rouster? the missing piece in the puppet testing ecosystemrspec gets you a long way, but compiling a catalog and applying it are distinct operations – adding rouster to your testing infrastructure allows you to test the application portion of this equation what is vagrant?An abstraction layer for managing VMs – virtualbox and VMWare
  • Recorded link: examples/demo.rbLook at code (quickly)Walk through code in debugger  need to predetermine breakpointsRun test/puppet/test_roles.rb Look at code (longer)Run code  is it verbose enough?

Vagrant+Rouster at Vagrant+Rouster at Presentation Transcript

  • 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 = => 'app') # equivalent to `vagrant up app` app.up() # STD(OUT|ERR) of this is available in app.get_output()'cat /etc/hosts') app.put('new-foo', '/tmp/foo') app.get('/tmp/foo') app.destroy()
  • 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
  • puppet-y methods require 'rouster' require 'rouster/puppet' ppm = => '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 = => '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?
  • 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