17
Vagrant + Rouster Conor Horan-Kates Senior Member of the Technical Staff, Quality Engineering @chorankates

Vagrant+Rouster at salesforce.com

Embed Size (px)

DESCRIPTION

Vagrant+Rouster at salesforce.com presented at PuppetConf 2013

Citation preview

Page 1: Vagrant+Rouster at salesforce.com

Vagrant + Rouster

Conor Horan-Kates

Senior Member of the Technical Staff,

Quality Engineering

@chorankates

Page 2: Vagrant+Rouster at salesforce.com

/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

Page 3: Vagrant+Rouster at salesforce.com

Rouster

Page 4: Vagrant+Rouster at salesforce.com

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

Page 5: Vagrant+Rouster at salesforce.com

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

Page 6: Vagrant+Rouster at salesforce.com

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

Page 7: Vagrant+Rouster at salesforce.com

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

Page 8: Vagrant+Rouster at salesforce.com

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

Page 9: Vagrant+Rouster at salesforce.com

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

Page 10: Vagrant+Rouster at salesforce.com

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

]

Page 11: Vagrant+Rouster at salesforce.com

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?

]

Page 12: Vagrant+Rouster at salesforce.com

Rouster - demo

Page 13: Vagrant+Rouster at salesforce.com

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

Page 14: Vagrant+Rouster at salesforce.com

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

Page 15: Vagrant+Rouster at salesforce.com

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?

Page 16: Vagrant+Rouster at salesforce.com
Page 17: Vagrant+Rouster at salesforce.com

Conor Horan-Kates

SMTS, QE