SlideShare a Scribd company logo
1 of 17
Download to read offline
Vagrant + Rouster
at salesforce.com
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 we going?
•  Rouster
•  Porting existing Salesforce::piab tests
•  Resolve issues and TODOs in codebase
•  Moving from all Vagrant VMs to include physical
hardware environment
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_certs,	
  :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_use
r_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
github.com/chorankates/rouster
@chorankates

More Related Content

What's hot

Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.Workhorse Computing
 
Docker remote-api
Docker remote-apiDocker remote-api
Docker remote-apiEric Ahn
 
“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.Graham Dumpleton
 
Making environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeMaking environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeSoshi Nemoto
 
Ansible Network Automation session1
Ansible Network Automation session1Ansible Network Automation session1
Ansible Network Automation session1Dhruv Sharma
 
DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)Soshi Nemoto
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Puppet
 
Puppet control-repo 
to the next level
Puppet control-repo 
to the next levelPuppet control-repo 
to the next level
Puppet control-repo 
to the next levelAlessandro Franceschi
 
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014nvpuppet
 
Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014
Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014
Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014Puppet
 
Docker command
Docker commandDocker command
Docker commandEric Ahn
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)Soshi Nemoto
 
PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2Graham Dumpleton
 
DevOps(2) : Vagrant - (MOSG)
DevOps(2) : Vagrant  -  (MOSG)DevOps(2) : Vagrant  -  (MOSG)
DevOps(2) : Vagrant - (MOSG)Soshi Nemoto
 
Oliver hookins puppetcamp2011
Oliver hookins puppetcamp2011Oliver hookins puppetcamp2011
Oliver hookins puppetcamp2011Puppet
 
10 Million hits a day with WordPress using a $15 VPS
10 Million hits a day  with WordPress using a $15 VPS10 Million hits a day  with WordPress using a $15 VPS
10 Million hits a day with WordPress using a $15 VPSPaolo Tonin
 

What's hot (20)

Puppet
PuppetPuppet
Puppet
 
Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.Shared Object images in Docker: What you need is what you want.
Shared Object images in Docker: What you need is what you want.
 
Ex407
Ex407Ex407
Ex407
 
Docker remote-api
Docker remote-apiDocker remote-api
Docker remote-api
 
“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.“warpdrive”, making Python web application deployment magically easy.
“warpdrive”, making Python web application deployment magically easy.
 
Making environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeMaking environment for_infrastructure_as_code
Making environment for_infrastructure_as_code
 
Ansible Network Automation session1
Ansible Network Automation session1Ansible Network Automation session1
Ansible Network Automation session1
 
DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)DevOps(4) : Ansible(2) - (MOSG)
DevOps(4) : Ansible(2) - (MOSG)
 
Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014Test-Driven Puppet Development - PuppetConf 2014
Test-Driven Puppet Development - PuppetConf 2014
 
Puppet control-repo 
to the next level
Puppet control-repo 
to the next levelPuppet control-repo 
to the next level
Puppet control-repo 
to the next level
 
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014rake puppetexpert:create - Puppet Camp Silicon Valley 2014
rake puppetexpert:create - Puppet Camp Silicon Valley 2014
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014
Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014
Beaker: Automated, Cloud-Based Acceptance Testing - PuppetConf 2014
 
Docker command
Docker commandDocker command
Docker command
 
Preparation study of_docker - (MOSG)
Preparation study of_docker  - (MOSG)Preparation study of_docker  - (MOSG)
Preparation study of_docker - (MOSG)
 
PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2PyCon US 2012 - State of WSGI 2
PyCon US 2012 - State of WSGI 2
 
Puppet @ Seat
Puppet @ SeatPuppet @ Seat
Puppet @ Seat
 
DevOps(2) : Vagrant - (MOSG)
DevOps(2) : Vagrant  -  (MOSG)DevOps(2) : Vagrant  -  (MOSG)
DevOps(2) : Vagrant - (MOSG)
 
Oliver hookins puppetcamp2011
Oliver hookins puppetcamp2011Oliver hookins puppetcamp2011
Oliver hookins puppetcamp2011
 
10 Million hits a day with WordPress using a $15 VPS
10 Million hits a day  with WordPress using a $15 VPS10 Million hits a day  with WordPress using a $15 VPS
10 Million hits a day with WordPress using a $15 VPS
 

Similar to Vagrant + Rouster at salesforce.com - PuppetConf 2013

Vagrant+Rouster at salesforce.com
Vagrant+Rouster at salesforce.comVagrant+Rouster at salesforce.com
Vagrant+Rouster at salesforce.comchorankates
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Mark Niebergall
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Michelangelo van Dam
 
Large-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesHiroshi SHIBATA
 
Dynamic Tracing of your AMP web site
Dynamic Tracing of your AMP web siteDynamic Tracing of your AMP web site
Dynamic Tracing of your AMP web siteSriram Natarajan
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Michelangelo van Dam
 
Python在豆瓣的应用
Python在豆瓣的应用Python在豆瓣的应用
Python在豆瓣的应用Qiangning Hong
 
Performance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-MechanizePerformance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-Mechanizecoreygoldberg
 
Practical Chaos Engineering
Practical Chaos EngineeringPractical Chaos Engineering
Practical Chaos EngineeringSIGHUP
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"Daniel Bryant
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)DECK36
 
Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build PipelineSamuel Brown
 
Assurer - a pluggable server testing/monitoring framework
Assurer - a pluggable server testing/monitoring frameworkAssurer - a pluggable server testing/monitoring framework
Assurer - a pluggable server testing/monitoring frameworkGosuke Miyashita
 
Value stream mapping for DevOps
Value stream mapping for DevOpsValue stream mapping for DevOps
Value stream mapping for DevOpsMarc Hornbeek
 
Real World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsReal World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsBen Hall
 
Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022Mark Niebergall
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentMark Niebergall
 

Similar to Vagrant + Rouster at salesforce.com - PuppetConf 2013 (20)

Vagrant+Rouster at salesforce.com
Vagrant+Rouster at salesforce.comVagrant+Rouster at salesforce.com
Vagrant+Rouster at salesforce.com
 
Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023Leveling Up With Unit Testing - php[tek] 2023
Leveling Up With Unit Testing - php[tek] 2023
 
Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012Quality Assurance for PHP projects - ZendCon 2012
Quality Assurance for PHP projects - ZendCon 2012
 
Large-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 MinutesLarge-scaled Deploy Over 100 Servers in 3 Minutes
Large-scaled Deploy Over 100 Servers in 3 Minutes
 
Dynamic Tracing of your AMP web site
Dynamic Tracing of your AMP web siteDynamic Tracing of your AMP web site
Dynamic Tracing of your AMP web site
 
Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12Workshop quality assurance for php projects tek12
Workshop quality assurance for php projects tek12
 
Create, test, secure, repeat
Create, test, secure, repeatCreate, test, secure, repeat
Create, test, secure, repeat
 
Python在豆瓣的应用
Python在豆瓣的应用Python在豆瓣的应用
Python在豆瓣的应用
 
Performance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-MechanizePerformance and Scalability Testing with Python and Multi-Mechanize
Performance and Scalability Testing with Python and Multi-Mechanize
 
Beyond Unit Testing
Beyond Unit TestingBeyond Unit Testing
Beyond Unit Testing
 
Practical Chaos Engineering
Practical Chaos EngineeringPractical Chaos Engineering
Practical Chaos Engineering
 
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
J1 2015 "Debugging Java Apps in Containers: No Heavy Welding Gear Required"
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
 
Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build Pipeline
 
SmokeTests
SmokeTestsSmokeTests
SmokeTests
 
Assurer - a pluggable server testing/monitoring framework
Assurer - a pluggable server testing/monitoring frameworkAssurer - a pluggable server testing/monitoring framework
Assurer - a pluggable server testing/monitoring framework
 
Value stream mapping for DevOps
Value stream mapping for DevOpsValue stream mapping for DevOps
Value stream mapping for DevOps
 
Real World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsReal World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js Applications
 
Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022Leveling Up With Unit Testing - LonghornPHP 2022
Leveling Up With Unit Testing - LonghornPHP 2022
 
Unit Testing from Setup to Deployment
Unit Testing from Setup to DeploymentUnit Testing from Setup to Deployment
Unit Testing from Setup to Deployment
 

More from Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyamlPuppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)Puppet
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscodePuppet
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twentiesPuppet
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codePuppet
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approachPuppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationPuppet
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliancePuppet
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowPuppet
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Puppet
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppetPuppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkPuppet
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping groundPuppet
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy SoftwarePuppet
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User GroupPuppet
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsPuppet
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyPuppet
 

More from Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Vagrant + Rouster at salesforce.com - PuppetConf 2013

  • 1. Vagrant + Rouster at salesforce.com Conor Horan-Kates Senior Member of the Technical Staff, Quality Engineering @chorankates
  • 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
  • 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. 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. 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. 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. 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. Where are we going? •  Rouster •  Porting existing Salesforce::piab tests •  Resolve issues and TODOs in codebase •  Moving from all Vagrant VMs to include physical hardware environment http://www.hostgator.com/images/d8.jpg
  • 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_certs,  :run_puppet   ]              
  • 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_use r_in_group?,  :is_writeable?   ]  
  • 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. 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. 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.