Vagrant+Rouster at salesforce.com

433 views

Published on

Vagrant+Rouster at salesforce.com presented at PuppetConf 2013

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
433
On SlideShare
0
From Embeds
0
Number of Embeds
63
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • 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 salesforce.com

    1. 1. Vagrant + Rouster Conor Horan-Kates Senior Member of the Technical Staff, Quality Engineering @chorankates
    2. 2. /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
    3. 3. Rouster
    4. 4. 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
    5. 5. 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
    6. 6. 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
    7. 7. 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
    8. 8. 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
    9. 9. 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
    10. 10. 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 ]
    11. 11. 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? ]
    12. 12. Rouster - demo
    13. 13. 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
    14. 14. 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
    15. 15. 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?
    16. 16. Conor Horan-Kates SMTS, QE

    ×