SlideShare una empresa de Scribd logo
1 de 58
Descargar para leer sin conexión
Hart Hoover
Making Test-Driven Development
[Somewhat] Bearable on OpenStack
@hhoover
#rackstackatl
#rackstackatl
RACKSPACE VISION
To be recognized as 

one of the world’s great 

service companies.
#rackstackatl
WELL TESTED = GOOD SERVICE
#rackstackatl
TEST-DRIVEN DEVELOPMENT (TRADITIONAL)
Test-driven development is a software development process that relies
on the repetition of a very short development cycle.
First the developer writes an (initially failing) automated test case that
defines a desired improvement or new function,
then produces the minimum amount of code to pass that test,
then finally refactors the new code to acceptable standards.
#rackstackatl
PLAN CODE BUILD TEST RELEASE DEPLOY OPS
THIS IS NOT TDD
THIS IS NOT “DEVOPS”
#rackstackatl
PLAN CODE BUILD TEST RELEASE DEPLOY OPS
TEST
THAT’S A BIT BETTER
(STILL NOT “DEVOPS”)
#rackstackatl
TESTING IS A GOOD IDEA
FIND MISTAKES
BEFORE
THEY HAPPEN
#rackstackatl
TESTING IS A GOOD IDEA
YOUR TEAM
WON’T HATE
YOU
#rackstackatl
TESTING IS A GOOD IDEA
YOUR
CUSTOMERS
WON’T HATE
YOU
#rackstackatl
THE PROBLEM…
#rackstackatl
Object Placeholder
HERO CULTURE
#rackstackatl
LAZINESS OR ARROGANCE
“I just want to write code, not tests.”
“My code works when I push it.”
“It works on my machine.”
“QA does the tests.”
#rackstackatl
LEADERSHIP PRESSURE
#rackstackatl
TIME IS MONEY
DEV TIME IS A LOT OF
MONEY
&
#rackstackatl
ONE SOLUTION:
BE THE CHANGE YOU WANT
TO SEE IN THE WORLD
#rackstackatl
ANOTHER SOLUTION:
CONTINUOUS TESTING
#rackstackatl
TOOLS OF THE TRADE…
#rackstackatl
http://hart.io
#rackstackatl
#rackstackatl
#rackstackatl
#rackstackatl
DEPLOY A CHEF SERVER WITH HEAT
https://github.com/rackspace-orchestration-templates/chef-server
#rackstackatl
CHEF DEVELOPMENT KIT
http://www.getchef.com/downloads/chef-dk/
#rackstackatl
chef
CHEF DEVELOPMENT KIT: CLI TOOLS
knife
chef-­‐client
Chef Zero
Ohai
#rackstackatl
CHEF DEVELOPMENT KIT
#rackstackatl
CHEF DEVELOPMENT KIT - BERKSHELF
source	
  ‘https://api.berkshelf.com'	
  
metadata	
  
!
cookbook	
  ‘apt’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘minitest-­‐handler’	
  
cookbook	
  ‘yum’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘build-­‐essential’,	
  github:	
  ‘opscode-­‐cookbooks/build-­‐essential’	
  
cookbook	
  ‘mysql_test’,	
  :path	
  =>	
  ‘test/cookbooks/mysql_test’
#rackstackatl
CHEF DEVELOPMENT KIT - BERKSHELF
source	
  ‘https://api.berkshelf.com'	
  
metadata	
  
!
cookbook	
  ‘apt’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘minitest-­‐handler’	
  
cookbook	
  ‘yum’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘build-­‐essential’,	
  github:	
  ‘opscode-­‐cookbooks/build-­‐essential’	
  
cookbook	
  ‘mysql_test’,	
  :path	
  =>	
  ‘test/cookbooks/mysql_test’
#rackstackatl
CHEF DEVELOPMENT KIT - BERKSHELF
source	
  ‘https://api.berkshelf.com'	
  
metadata	
  
!
cookbook	
  ‘apt’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘minitest-­‐handler’	
  
cookbook	
  ‘yum’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘build-­‐essential’,	
  github:	
  ‘opscode-­‐cookbooks/build-­‐essential’	
  
cookbook	
  ‘mysql_test’,	
  :path	
  =>	
  ‘test/cookbooks/mysql_test’
#rackstackatl
CHEF DEVELOPMENT KIT - BERKSHELF
source	
  ‘https://api.berkshelf.com'	
  
metadata	
  
!
cookbook	
  ‘apt’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘minitest-­‐handler’	
  
cookbook	
  ‘yum’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘build-­‐essential’,	
  github:	
  ‘opscode-­‐cookbooks/build-­‐essential’	
  
cookbook	
  ‘mysql_test’,	
  :path	
  =>	
  ‘test/cookbooks/mysql_test’
#rackstackatl
CHEF DEVELOPMENT KIT - BERKSHELF
source	
  ‘https://api.berkshelf.com'	
  
metadata	
  
!
cookbook	
  ‘apt’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘minitest-­‐handler’	
  
cookbook	
  ‘yum’,	
  ‘~>	
  2.0’	
  
cookbook	
  ‘build-­‐essential’,	
  github:	
  ‘opscode-­‐cookbooks/build-­‐essential’	
  
cookbook	
  ‘mysql_test’,	
  :path	
  =>	
  ‘test/cookbooks/mysql_test’
#rackstackatl
kitchen.ci/docs/guide
CHEF DEVELOPMENT KIT
Test Kitchen
#rackstackatl
-­‐-­‐-­‐	
  
provisioner:	
  
	
  	
  name:	
  chef_solo	
  
!
platforms:	
  
	
  	
  -­‐	
  name:	
  ubuntu-­‐14.04	
  
!
driver:	
  
	
  	
  name:	
  rackspace	
  
	
  	
  rackspace_region:	
  IAD	
  
	
  	
  server_name:	
  rackspace-­‐ubuntu1404	
  
	
  	
  image_id:	
  bb02b1a3-­‐bc77-­‐4d17-­‐ab5b-­‐421d89850fca	
  
	
  	
  flavor_id:	
  performance1-­‐1	
  
	
  	
  require_chef_omnibus:	
  latest	
  
!
suites:	
  
	
  	
  -­‐	
  name:	
  default	
  
	
  	
  	
  	
  run_list:	
  recipe[cookbook::default]	
  
	
  	
  	
  	
  attributes:
#rackstackatl
-­‐-­‐-­‐	
  
provisioner:	
  
	
  	
  name:	
  chef_solo	
  
!
platforms:	
  
	
  	
  -­‐	
  name:	
  ubuntu-­‐14.04	
  
!
driver:	
  
	
  	
  name:	
  rackspace	
  
	
  	
  rackspace_region:	
  IAD	
  
	
  	
  server_name:	
  rackspace-­‐ubuntu1404	
  
	
  	
  image_id:	
  bb02b1a3-­‐bc77-­‐4d17-­‐ab5b-­‐421d89850fca	
  
	
  	
  flavor_id:	
  performance1-­‐1	
  
	
  	
  require_chef_omnibus:	
  latest	
  
!
suites:	
  
	
  	
  -­‐	
  name:	
  default	
  
	
  	
  	
  	
  run_list:	
  recipe[cookbook::default]	
  
	
  	
  	
  	
  attributes:
#rackstackatl
-­‐-­‐-­‐	
  
provisioner:	
  
	
  	
  name:	
  chef_solo	
  
!
platforms:	
  
	
  	
  -­‐	
  name:	
  ubuntu-­‐14.04	
  
!
driver:	
  
	
  	
  name:	
  rackspace	
  
	
  	
  rackspace_region:	
  IAD	
  
	
  	
  server_name:	
  rackspace-­‐ubuntu1404	
  
	
  	
  image_id:	
  bb02b1a3-­‐bc77-­‐4d17-­‐ab5b-­‐421d89850fca	
  
	
  	
  flavor_id:	
  performance1-­‐1	
  
	
  	
  require_chef_omnibus:	
  latest	
  
!
suites:	
  
	
  	
  -­‐	
  name:	
  default	
  
	
  	
  	
  	
  run_list:	
  recipe[cookbook::default]	
  
	
  	
  	
  	
  attributes:
#rackstackatl
-­‐-­‐-­‐	
  
provisioner:	
  
	
  	
  name:	
  chef_solo	
  
!
platforms:	
  
	
  	
  -­‐	
  name:	
  ubuntu-­‐14.04	
  
!
driver:	
  
	
  	
  name:	
  rackspace	
  
	
  	
  rackspace_region:	
  IAD	
  
	
  	
  server_name:	
  rackspace-­‐ubuntu1404	
  
	
  	
  image_id:	
  bb02b1a3-­‐bc77-­‐4d17-­‐ab5b-­‐421d89850fca	
  
	
  	
  flavor_id:	
  performance1-­‐1	
  
	
  	
  require_chef_omnibus:	
  latest	
  
!
suites:	
  
	
  	
  -­‐	
  name:	
  default	
  
	
  	
  	
  	
  run_list:	
  recipe[cookbook::default]	
  
	
  	
  	
  	
  attributes:
#rackstackatl
-­‐-­‐-­‐	
  
provisioner:	
  
	
  	
  name:	
  chef_solo	
  
!
platforms:	
  
	
  	
  -­‐	
  name:	
  ubuntu-­‐14.04	
  
!
driver:	
  
	
  	
  name:	
  rackspace	
  
	
  	
  rackspace_region:	
  IAD	
  
	
  	
  server_name:	
  rackspace-­‐ubuntu1404	
  
	
  	
  image_id:	
  bb02b1a3-­‐bc77-­‐4d17-­‐ab5b-­‐421d89850fca	
  
	
  	
  flavor_id:	
  performance1-­‐1	
  
	
  	
  require_chef_omnibus:	
  latest	
  
!
suites:	
  
	
  	
  -­‐	
  name:	
  default	
  
	
  	
  	
  	
  run_list:	
  recipe[cookbook::default]	
  
	
  	
  	
  	
  attributes:
#rackstackatl
CHEF DEVELOPMENT KIT
#rackstackatl
CHEF DEVELOPMENT KIT
ChefSpec
• Built on RSpec
• Converges a Chef run in memory
• Overrides all providers to take no action
• Mock Ohai data with Fauxhai
#rackstackatl
CHEF DEVELOPMENT KIT: CHEFSPEC
https://github.com/sethvargo/chefspec/tree/master/examples
#rackstackatl
CHEF DEVELOPMENT KIT: CHEFSPEC
require	
  'chefspec'	
  
!
describe	
  'apt_package::install'	
  do	
  
	
  	
  let(:chef_run)	
  {	
  ChefSpec::Runner.new.converge(described_recipe)	
  }	
  
!
	
  	
  it	
  'installs	
  a	
  apt_package	
  with	
  the	
  default	
  action'	
  do	
  
	
  	
  	
  	
  expect(chef_run).to	
  install_apt_package('default_action')	
  
	
  	
  	
  	
  expect(chef_run).to_not	
  install_apt_package('not_default_action')	
  
	
  	
  end	
  
end
#rackstackatl
CHEF DEVELOPMENT KIT: CHEFSPEC
require	
  'chefspec'	
  
!
describe	
  'apt_package::install'	
  do	
  
	
  	
  let(:chef_run)	
  {	
  ChefSpec::Runner.new.converge(described_recipe)	
  }	
  
!
	
  	
  it	
  'installs	
  a	
  apt_package	
  with	
  the	
  default	
  action'	
  do	
  
	
  	
  	
  	
  expect(chef_run).to	
  install_apt_package('default_action')	
  
	
  	
  	
  	
  expect(chef_run).to_not	
  install_apt_package('not_default_action')	
  
	
  	
  end	
  
end
#rackstackatl
CHEF DEVELOPMENT KIT: CHEFSPEC
require	
  'chefspec'	
  
!
describe	
  'apt_package::install'	
  do	
  
	
  	
  let(:chef_run)	
  {	
  ChefSpec::Runner.new.converge(described_recipe)	
  }	
  
!
	
  	
  it	
  'installs	
  a	
  apt_package	
  with	
  the	
  default	
  action'	
  do	
  
	
  	
  	
  	
  expect(chef_run).to	
  install_apt_package('default_action')	
  
	
  	
  	
  	
  expect(chef_run).to_not	
  install_apt_package('not_default_action')	
  
	
  	
  end	
  
end
#rackstackatl
HONORABLE MENTIONS
#rackstackatl
SERVERSPEC
• Built on RSpec
• Uses SSH to test your servers’ state
#rackstackatl
SERVERSPEC
describe	
  package('httpd')	
  do	
  
	
  	
  it	
  {	
  should	
  be_installed	
  }	
  
end	
  
!
describe	
  service('httpd')	
  do	
  
	
  	
  it	
  {	
  should	
  be_enabled	
  	
  	
  }	
  
	
  	
  it	
  {	
  should	
  be_running	
  	
  	
  }	
  
end	
  
!
describe	
  port(80)	
  do	
  
	
  	
  it	
  {	
  should	
  be_listening	
  }	
  
end
#rackstackatl
meez
https://github.com/paulczar/meez
#rackstackatl
RUBOCOP: STYLE
RUBY STYLE GUIDE
• code layout
• strings
• syntax
• regex
• more
#rackstackatl
GUARD: TEST WHILE YOU WORK
#rackstackatl
#rackstackatl
source	
  'https://rubygems.org'	
  
!
gem	
  'berkshelf'	
  
gem	
  'chef'	
  
gem	
  'meez'	
  
gem	
  'guard'	
  
gem	
  'guard-­‐kitchen'	
  
gem	
  'rubocop'	
  
gem	
  'foodcritic'	
  
gem	
  'chefspec'	
  
gem	
  'test-­‐kitchen'	
  
gem	
  'kitchen-­‐rackspace'	
  
gem	
  'kitchen-­‐openstack'
#rackstackatl
GET TO THE OPENSTACK STUFF
#rackstackatl
source	
  'https://rubygems.org'	
  
!
gem	
  'berkshelf'	
  
gem	
  'chef'	
  
gem	
  'meez'	
  
gem	
  'guard'	
  
gem	
  'guard-­‐kitchen'	
  
gem	
  'rubocop'	
  
gem	
  'foodcritic'	
  
gem	
  'chefspec'	
  
gem	
  'test-­‐kitchen'	
  
gem	
  'kitchen-­‐rackspace'	
  
gem	
  'kitchen-­‐openstack'
#rackstackatl
DEMO TIME!
#rackstackatl54
#rackstackatl55
#rackstackatl
162.242.253.111
LET’S PLAY ON THE CLOUD
#rackstackatl
WE’RE HIRING
http://rackertalent.com
#rackstackatl
RACKSPACE® HOSTING | 5000 WALZEM ROAD | SAN ANTONIO, TX 78218
US SALES: 1-800-961-2888 | US SUPPORT: 1-800-961-4454 | WWW.RACKSPACE.COM
RACKSPACE® HOSTING | © RACKSPACE US, INC. | RACKSPACE® AND FANATICAL SUPPORT® ARE SERVICE MARKS OF RACKSPACE US, INC. REGISTERED IN THE UNITED STATES AND OTHER COUNTRIES. | WWW.RACKSPACE.COMRACKSPACE® HOSTING | © RACKSPACE US, INC. | RACKSPACE® AND FANATICAL SUPPORT® ARE SERVICE MARKS OF RACKSPACE US, INC. REGISTERED IN THE UNITED STATES AND OTHER COUNTRIES. | WWW.RACKSPACE.COM
Hart Hoover
@hhoover

Más contenido relacionado

La actualidad más candente

Testing Your Automation Code (Docker Version)
Testing Your Automation Code (Docker Version)Testing Your Automation Code (Docker Version)
Testing Your Automation Code (Docker Version)Mischa Taylor
 
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Patrick McDonnell
 
Cookbook testing with KitcenCI and Serverrspec
Cookbook testing with KitcenCI and ServerrspecCookbook testing with KitcenCI and Serverrspec
Cookbook testing with KitcenCI and ServerrspecDaniel Paulus
 
Chef basics - write infrastructure as code
Chef basics - write infrastructure as codeChef basics - write infrastructure as code
Chef basics - write infrastructure as codestevaaa
 
Compliance Automation Workshop
Compliance Automation WorkshopCompliance Automation Workshop
Compliance Automation WorkshopChef
 
Continuous infrastructure testing
Continuous infrastructure testingContinuous infrastructure testing
Continuous infrastructure testingDaniel Paulus
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Chef
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Chef
 
Chef for beginners module 4
Chef for beginners   module 4Chef for beginners   module 4
Chef for beginners module 4Chef
 
Test Driven Development with Chef
Test Driven Development with ChefTest Driven Development with Chef
Test Driven Development with ChefSimone Soldateschi
 
Chef 0.10 Overview
Chef 0.10 OverviewChef 0.10 Overview
Chef 0.10 OverviewMatt Ray
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Chef
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Chef
 
Chef for beginners module 3
Chef for beginners   module 3Chef for beginners   module 3
Chef for beginners module 3Chef
 
Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Puppet
 
Admins: Smoke Test Your Hadoop Cluster!
Admins: Smoke Test Your Hadoop Cluster!Admins: Smoke Test Your Hadoop Cluster!
Admins: Smoke Test Your Hadoop Cluster!Michael Arnold
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Chef
 

La actualidad más candente (20)

Chef training Day5
Chef training Day5Chef training Day5
Chef training Day5
 
Testing Your Automation Code (Docker Version)
Testing Your Automation Code (Docker Version)Testing Your Automation Code (Docker Version)
Testing Your Automation Code (Docker Version)
 
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
Lessons from Etsy: Avoiding Kitchen Nightmares - #ChefConf 2012
 
Chef training - Day3
Chef training - Day3Chef training - Day3
Chef training - Day3
 
Cookbook testing with KitcenCI and Serverrspec
Cookbook testing with KitcenCI and ServerrspecCookbook testing with KitcenCI and Serverrspec
Cookbook testing with KitcenCI and Serverrspec
 
Chef basics - write infrastructure as code
Chef basics - write infrastructure as codeChef basics - write infrastructure as code
Chef basics - write infrastructure as code
 
Compliance Automation Workshop
Compliance Automation WorkshopCompliance Automation Workshop
Compliance Automation Workshop
 
Continuous infrastructure testing
Continuous infrastructure testingContinuous infrastructure testing
Continuous infrastructure testing
 
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4Common configuration with Data Bags - Fundamentals Webinar Series Part 4
Common configuration with Data Bags - Fundamentals Webinar Series Part 4
 
Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5Environments - Fundamentals Webinar Series Week 5
Environments - Fundamentals Webinar Series Week 5
 
Chef for beginners module 4
Chef for beginners   module 4Chef for beginners   module 4
Chef for beginners module 4
 
Test Driven Development with Chef
Test Driven Development with ChefTest Driven Development with Chef
Test Driven Development with Chef
 
Chef 0.10 Overview
Chef 0.10 OverviewChef 0.10 Overview
Chef 0.10 Overview
 
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
Node setup, resource, and recipes - Fundamentals Webinar Series Part 2
 
Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3Node object and roles - Fundamentals Webinar Series Part 3
Node object and roles - Fundamentals Webinar Series Part 3
 
Chef for beginners module 3
Chef for beginners   module 3Chef for beginners   module 3
Chef for beginners module 3
 
Lucene application
Lucene applicationLucene application
Lucene application
 
Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014
 
Admins: Smoke Test Your Hadoop Cluster!
Admins: Smoke Test Your Hadoop Cluster!Admins: Smoke Test Your Hadoop Cluster!
Admins: Smoke Test Your Hadoop Cluster!
 
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
Community Cookbooks & further resources - Fundamentals Webinar Series Part 6
 

Similar a Making TDD [Somewhat] Bearable on OpenStack

Cloud Automation with Opscode Chef
Cloud Automation with Opscode ChefCloud Automation with Opscode Chef
Cloud Automation with Opscode ChefSri Ram
 
Deploying OpenStack with Chef
Deploying OpenStack with ChefDeploying OpenStack with Chef
Deploying OpenStack with ChefMatt Ray
 
Docker for Ruby Developers
Docker for Ruby DevelopersDocker for Ruby Developers
Docker for Ruby DevelopersAptible
 
DevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven InfrastructureDevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven InfrastructureAntons Kranga
 
Antons Kranga Building Agile Infrastructures
Antons Kranga   Building Agile InfrastructuresAntons Kranga   Building Agile Infrastructures
Antons Kranga Building Agile InfrastructuresAntons Kranga
 
Test Kitchen and Infrastructure as Code
Test Kitchen and Infrastructure as CodeTest Kitchen and Infrastructure as Code
Test Kitchen and Infrastructure as CodeCybera Inc.
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierCarlos Sanchez
 
London Community Summit 2016 - Fresh New Chef Stuff
London Community Summit 2016 - Fresh New Chef StuffLondon Community Summit 2016 - Fresh New Chef Stuff
London Community Summit 2016 - Fresh New Chef StuffChef
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to ChefKnoldus Inc.
 
Linecook - A Chef Alternative
Linecook - A Chef AlternativeLinecook - A Chef Alternative
Linecook - A Chef Alternativethinkerbot
 
Instrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con GitlabInstrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con GitlabSoftware Guru
 
Installing and updating software packages [autosaved]
Installing and updating software packages [autosaved]Installing and updating software packages [autosaved]
Installing and updating software packages [autosaved]ANIMESHKUMARSINHA2
 
DevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefDevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefAntons Kranga
 
Cook Infrastructure with chef -- Justeat.IN
Cook Infrastructure with chef  -- Justeat.INCook Infrastructure with chef  -- Justeat.IN
Cook Infrastructure with chef -- Justeat.INRajesh Hegde
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?Tushar Sharma
 

Similar a Making TDD [Somewhat] Bearable on OpenStack (20)

Cloud Automation with Opscode Chef
Cloud Automation with Opscode ChefCloud Automation with Opscode Chef
Cloud Automation with Opscode Chef
 
IT Automation with Chef
IT Automation with ChefIT Automation with Chef
IT Automation with Chef
 
Autotesting rails app
Autotesting rails appAutotesting rails app
Autotesting rails app
 
infra-as-code
infra-as-codeinfra-as-code
infra-as-code
 
Deploying OpenStack with Chef
Deploying OpenStack with ChefDeploying OpenStack with Chef
Deploying OpenStack with Chef
 
Docker for Ruby Developers
Docker for Ruby DevelopersDocker for Ruby Developers
Docker for Ruby Developers
 
DevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven InfrastructureDevOps Hackathon: Session 3 - Test Driven Infrastructure
DevOps Hackathon: Session 3 - Test Driven Infrastructure
 
Antons Kranga Building Agile Infrastructures
Antons Kranga   Building Agile InfrastructuresAntons Kranga   Building Agile Infrastructures
Antons Kranga Building Agile Infrastructures
 
Test Kitchen and Infrastructure as Code
Test Kitchen and Infrastructure as CodeTest Kitchen and Infrastructure as Code
Test Kitchen and Infrastructure as Code
 
Continuous Delivery: The Next Frontier
Continuous Delivery: The Next FrontierContinuous Delivery: The Next Frontier
Continuous Delivery: The Next Frontier
 
Chef advance
Chef advanceChef advance
Chef advance
 
Chef advance
Chef advanceChef advance
Chef advance
 
London Community Summit 2016 - Fresh New Chef Stuff
London Community Summit 2016 - Fresh New Chef StuffLondon Community Summit 2016 - Fresh New Chef Stuff
London Community Summit 2016 - Fresh New Chef Stuff
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Linecook - A Chef Alternative
Linecook - A Chef AlternativeLinecook - A Chef Alternative
Linecook - A Chef Alternative
 
Instrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con GitlabInstrumentación de entrega continua con Gitlab
Instrumentación de entrega continua con Gitlab
 
Installing and updating software packages [autosaved]
Installing and updating software packages [autosaved]Installing and updating software packages [autosaved]
Installing and updating software packages [autosaved]
 
DevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of ChefDevOps hackathon Session 2: Basics of Chef
DevOps hackathon Session 2: Basics of Chef
 
Cook Infrastructure with chef -- Justeat.IN
Cook Infrastructure with chef  -- Justeat.INCook Infrastructure with chef  -- Justeat.IN
Cook Infrastructure with chef -- Justeat.IN
 
Does your configuration code smell?
Does your configuration code smell?Does your configuration code smell?
Does your configuration code smell?
 

Más de Hart Hoover

CI/CD with Kubernetes
CI/CD with KubernetesCI/CD with Kubernetes
CI/CD with KubernetesHart Hoover
 
CI/CD with Docker on AWS
CI/CD with Docker on AWSCI/CD with Docker on AWS
CI/CD with Docker on AWSHart Hoover
 
Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015
Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015
Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015Hart Hoover
 
San Antonio DevOps: Fluentd
San Antonio DevOps: FluentdSan Antonio DevOps: Fluentd
San Antonio DevOps: FluentdHart Hoover
 
San Antonio Chef Users Meetup, Jun 2014 - Chef Metal
San Antonio Chef Users Meetup, Jun 2014 - Chef MetalSan Antonio Chef Users Meetup, Jun 2014 - Chef Metal
San Antonio Chef Users Meetup, Jun 2014 - Chef MetalHart Hoover
 
Deploying a Chef Server
Deploying a Chef ServerDeploying a Chef Server
Deploying a Chef ServerHart Hoover
 
Rapid Chef Development with Berkshelf, Test-Kitchen and Foodcritic
Rapid Chef Development with Berkshelf, Test-Kitchen and FoodcriticRapid Chef Development with Berkshelf, Test-Kitchen and Foodcritic
Rapid Chef Development with Berkshelf, Test-Kitchen and FoodcriticHart Hoover
 
"Unlocked: The Hybrid Cloud" Business Track
"Unlocked: The Hybrid Cloud" Business Track"Unlocked: The Hybrid Cloud" Business Track
"Unlocked: The Hybrid Cloud" Business TrackHart Hoover
 
Isolated Networks in the Cloud
Isolated Networks in the CloudIsolated Networks in the Cloud
Isolated Networks in the CloudHart Hoover
 
Why Open Matters
Why Open MattersWhy Open Matters
Why Open MattersHart Hoover
 

Más de Hart Hoover (11)

CI/CD with Kubernetes
CI/CD with KubernetesCI/CD with Kubernetes
CI/CD with Kubernetes
 
CI/CD with Docker on AWS
CI/CD with Docker on AWSCI/CD with Docker on AWS
CI/CD with Docker on AWS
 
Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015
Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015
Ignite Talk: "Building a DevOps Community" / DevOps Days Austin 2015
 
San Antonio DevOps: Fluentd
San Antonio DevOps: FluentdSan Antonio DevOps: Fluentd
San Antonio DevOps: Fluentd
 
San Antonio Chef Users Meetup, Jun 2014 - Chef Metal
San Antonio Chef Users Meetup, Jun 2014 - Chef MetalSan Antonio Chef Users Meetup, Jun 2014 - Chef Metal
San Antonio Chef Users Meetup, Jun 2014 - Chef Metal
 
Deploying a Chef Server
Deploying a Chef ServerDeploying a Chef Server
Deploying a Chef Server
 
Rapid Chef Development with Berkshelf, Test-Kitchen and Foodcritic
Rapid Chef Development with Berkshelf, Test-Kitchen and FoodcriticRapid Chef Development with Berkshelf, Test-Kitchen and Foodcritic
Rapid Chef Development with Berkshelf, Test-Kitchen and Foodcritic
 
Vagrant Intro
Vagrant IntroVagrant Intro
Vagrant Intro
 
"Unlocked: The Hybrid Cloud" Business Track
"Unlocked: The Hybrid Cloud" Business Track"Unlocked: The Hybrid Cloud" Business Track
"Unlocked: The Hybrid Cloud" Business Track
 
Isolated Networks in the Cloud
Isolated Networks in the CloudIsolated Networks in the Cloud
Isolated Networks in the Cloud
 
Why Open Matters
Why Open MattersWhy Open Matters
Why Open Matters
 

Último

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 

Último (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Making TDD [Somewhat] Bearable on OpenStack