Top Banner
TEST DRIVEN TEST DRIVEN INFRASTRUCTURE INFRASTRUCTURE COMPLIANCE AS CODE COMPLIANCE AS CODE by Joaquín Menchaca
61

T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

Feb 07, 2019

Download

Documents

trinhxuyen
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

TEST DRIVENTEST DRIVEN  INFRASTRUCTUREINFRASTRUCTURE

COMPLIANCE AS CODECOMPLIANCE AS CODEby 

Joaquín Menchaca

Page 2: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

À PROPOS DE MOIÀ PROPOS DE MOIABOUT MEABOUT ME

ROCKET LAWYERROCKET LAWYER

SENIOR DEVOPSBUILD/RELEASE ENGINEER

aka

Linux Ninja Pants Automation

Engineering Mutant

actual photo

Page 3: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

https://slides.com/devopsstudio/lisa18_tdi

Page 4: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

AGENDAAGENDA1. Setup2. Context3. Chef + InSpec4. Ansible + InSpec5. Bonus

Page 5: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

SETUPSETUP

Page 6: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE CODETHE CODE

https://github.com/darkn3rd/lisa18_test_driven_infra

Page 7: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

git clone \ https://github.com/darkn3rd/lisa18_test_driven_infra cd lisa18_test_driven_infra # Using Virtual Workstation vagrant up vagrant ssh cd lisa18_test_driven_infra # Using Host (MacOS X or Linux) #### Install Requirements # Using Host (Windows) #### Install Rrequiremnts #### Warning: Might not work, had success w/ Chef

CODECODE

Page 8: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

SETUPSETUP

THE HOSTTHE HOST

must be able to run Docker 

or Vagrant

Page 9: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

MINIMUM REQUIREDMINIMUM REQUIRED

ChefDK - bundles ruby, test kitchen, inspecDocker - fastest way to run stuff (virtual virtual machines)

Page 10: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

DOCKERDOCKER

Easiest Path is Docker Desktop

Page 11: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

choco install docker-for-windows

brew cask install docker

https://chocolatey.org/

https://brew.sh/

https://www.docker.com/products/docker-desktop

DIRECT DOWNLOADDIRECT DOWNLOAD

PACKAGE MANAGERSPACKAGE MANAGERS

DOCKERDOCKER

Page 12: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

sudo apt-get update -qq sudo apt-get install -y apt-transport-https \ curl ca-certificates software-properties-common DOCKER_REPO="https://download.docker.com/linux/ubuntu" curl -fsSL ${DOCKER_REPO}/gpg | \ sudo apt-key add - sudo add-apt-repository \ "deb [arch=amd64] ${DOCKER_REPO} \ $(lsb_release -cs) \ stable" sudo apt-get update -qq sudo apt-get install -y docker-ce sudo usermod -aG docker $USER

Debian Package on Ubuntu

DOCKERDOCKER

Page 13: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

CHEFDKCHEFDK

Easiest Way to Get Test Kitchen and InSpec

Page 14: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

choco install chefdk chef gem install kitchen-ansible chef gem install kitchen-docker

brew tap chef/chef brew cask install chefdk chef gem install kitchen-ansible chef gem install kitchen-docker

https://chocolatey.org/

https://brew.sh/

https://downloads.chef.io/chefdk/

DIRECT DOWNLOADDIRECT DOWNLOAD

PACKAGE MANAGERSPACKAGE MANAGERS

CHEFDKCHEFDK

Page 15: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

VER=3.2.30 PKG=chefdk_${VER}-1_amd64.deb PREFIX=https://packages.chef.io/files/stable/chefdk/ # Fetch and Install wget --quiet ${PREFIX}/${VER}/ubuntu/16.04/${PKG} sudo dpkg -i ${PKG} # Local ChefDK Ruby Gems chef gem install kitchen-ansible chef gem install kitchen-docker

Debian Package on Ubuntu

CHEFDKCHEFDK

Page 16: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

CONTEXTCONTEXT

Page 17: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHY?WHY?

Page 18: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHY?WHY?

Page 19: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WE CODEWE CODE  SYSTEMSSYSTEMS

Page 20: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WE CODEWE CODE  PLATFORMSPLATFORMS

Page 21: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WE CODEWE CODEINFRASTRUCTUREINFRASTRUCTURE

Page 22: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHY?WHY?

Page 23: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHY?WHY?

Disaster Recovery, RollbackMigrate/Replicate New EnvironmentsSwap out components, ExperimentRapid (Like Seriously) Development

Destroy and Recreate with Ease Because Tests…

Page 24: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHEN?WHEN?

Page 25: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHENWHEN  YOUYOUHAVEHAVE  ANAN  

ARTIFACTARTIFACT??

Page 26: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHAT?WHAT?

Page 27: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHATWHATTOTO

TEST?TEST?

Page 28: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

HOW?HOW?

Page 29: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual
Page 30: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual
Page 31: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

ABOUT THEABOUT THETOOLSTOOLS

Page 32: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

TEST KITCHENTEST KITCHEN

Create (Vagrant)→Converge(Chef)→Verify(InSpec)

Page 33: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

TEST KITCHEN: VAGRANTTEST KITCHEN: VAGRANT--- driver: name: vagrant provider: hyperv provisioner: name: chef_zero verifier: name: inspec platforms: - name: ubuntu-16.04 suites: - name: default

Page 34: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

Create (Docker)→Converge(Ansible)→Verify(InSpec)

TEST KITCHENTEST KITCHEN

Page 35: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

--- driver: name: docker provisioner: name: ansible_playbook verifier: name: inspec platforms: - name: ubuntu-16.04 suites: - name: default

TEST KITCHEN: DOCKERTEST KITCHEN: DOCKER

Page 36: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

control 'ez_apache-contract-01' do describe port(80) do it { should be_listening } end end control 'ez_mysql-security-conf-01' do describe file(mysql_data_path) do it { should be_directory } it { should be_owned_by 'mysql' } it { should be_grouped_into 'mysql' } end end

INSPECINSPEC

Page 37: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

package 'apache2' service 'apache2' do action %i(enable start) supports( status: true, restart: true, reload: true ) end cookbook_file "#{node['docroot']}/index.html" do source 'index.html' action :create end

CHEFCHEF

Page 38: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

- name: "Install Web Service" package: name: apache2 state: present - name: "Start Web Service" service: name: apache2 state: started enabled: yes - name: "Copy Content" copy: src: "{{ role_path }}/files/index.html" dest: "{{ docroot }}/index.html"

ANSIBLEANSIBLE

Page 39: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

INSPECINSPEC CHEFCHEF

Page 40: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

COOKBOOK STRUCTURECOOKBOOK STRUCTURE./chef/cookbooks/ez_mysql ├── attributes │   └── default.rb ├── Berksfile ├── kitchen.docker.yml ├── kitchen.hyperv.yml ├── kitchen.vbox.yml ├── metadata.rb ├── README.md ├── recipes │   ├── client.rb │   ├── database.rb │   ├── default.rb │   ├── harden.rb │   ├── install.rb │   └── service.rb ├── templates │   └── security.cnf.erb └── test -> ../../../inspec/ez_mysql/test

Page 41: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

TEST STRUCTURETEST STRUCTURE./inspec/ez_mysql └── test └── integration └── default ├── ansible.cfg ├── conform_test.rb ├── contract_test.rb ├── default.yml └── security_test.rb

Shared Test for ANY change configuration, e.g. CAPS (Chef, Ansible, Puppet, Salt Stack), or

other automation

Page 42: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE STEPSTHE STEPS

# Setup (tell kitchen to use docker) export KITCHEN_YAML=kitchen.docker.yml # Create Environment kitchen create # (optional) Login into environment kitchen login # Converge to Desired State kitchen converge # Verify Environment kitchen verify

Page 43: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WORKED FINE?WORKED FINE?

Page 44: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE STEPSTHE STEPS

include_recipe 'ez_mysql::install' include_recipe 'ez_mysql::service' # include_recipe 'ez_mysql::database' include_recipe 'ez_mysql::harden'

Page 45: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE STEPSTHE STEPS

include_recipe 'ez_mysql::install' include_recipe 'ez_mysql::service' include_recipe 'ez_mysql::database' include_recipe 'ez_mysql::harden'

Page 46: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHEN CODE WORKSWHEN CODE WORKS

Page 47: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

ANSIBLEANSIBLEINSPECINSPEC

Page 48: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

ROLE STRUCTUREROLE STRUCTURE./ansible/roles/ez_mysql ├── defaults │   └── main.yml ├── handlers │   └── main.yml ├── kitchen.docker.yml ├── kitchen.hyperv.yml ├── kitchen.vbox.yml ├── meta │   └── main.yml ├── tasks │   ├── client.yml │   ├── database.yml │   ├── harden.yml │   ├── install.yml │   ├── main.yml │   └── service.yml ├── templates │   └── security.cnf.j2 └─── test -> ../../../inspec/ez_mysql/test

Page 49: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

TEST STRUCTURETEST STRUCTURE./inspec/ez_mysql └── test └── integration └── default ├── ansible.cfg ├── conform_test.rb ├── contract_test.rb ├── default.yml └── security_test.rb

Shared Test for ANY change configuration, e.g. CAPS (Chef, Ansible, Puppet, Salt Stack), or

other automation

Page 50: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE STEPSTHE STEPS

# Setup (tell kitchen to use docker) export KITCHEN_YAML=kitchen.docker.yml # Create Environment kitchen create # (optional) Login into environment kitchen login # Converge to Desired State kitchen converge # Verify Environment kitchen verify

Page 51: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WORKED FINE?WORKED FINE?

Page 52: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE STEPSTHE STEPS

- include: install.yml - include: config.yml - include: service.yml # - include: harden.yml

Page 53: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE STEPSTHE STEPS

- include: install.yml - include: config.yml - include: service.yml - include: harden.yml

Page 54: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

WHEN CODE WORKSWHEN CODE WORKS

Page 55: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

EXTRA STUFFEXTRA STUFF

Page 56: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

(TBA)(TBA)(secret)

Page 57: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

FINAL NOTESFINAL NOTES(for reference)

Page 58: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

TESTED PLATFORMSTESTED PLATFORMSMAC OS HOSTMAC OS HOST

LINUX GUESTLINUX GUEST

WINDOWS HOSTWINDOWS HOST

☑ Mac/Vagrant (Virtualbox) / TestKitchen (Docker) / Chef 

☑ Mac/Vagrant (Virtualbox)/ TestKitchen (Docker) / Ansible 

☑ Win/Vagrant (HyperV) / TestKitchen (Docker) / Chef 

☐ Win/Vagrant (HyperV)/ TestKitchen (Docker) / Ansible

☑ TestKitchen (HyperV) / Chef 

☒ TestKitchen (HyperV) / Ansible 

☐ TestKitchen (Docker) / Chef 

☐ TestKitchen (Docker) / Ansible

☑ TestKitchen (Virtualbox) / Chef 

☑ TestKitchen (Virtualbox) / Ansible 

☑ TestKitchen (Docker) / Chef 

☑ TestKitchen (Docker) / Ansible

Page 59: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

FURTHER READINGFURTHER READING

TEST KITCHEN RESROUCESTEST KITCHEN RESROUCES

Test Kitchen: Ansible Provisioner: Vagrant Driver: Docker Driver: InSpec Verifier: GCP Driver: AWS Driver: Kubernetes Driver:   

https://kitchen.ci/https://github.com/neillturner/kitchen-ansible

https://github.com/test-kitchen/kitchen-vagranthttps://github.com/test-kitchen/kitchen-dockerhttps://github.com/inspec/kitchen-inspec

https://github.com/test-kitchen/kitchen-googlehttps://github.com/test-kitchen/kitchen-ec2

https://github.com/coderanger/kitchen-kubernetes

VAGRANTVAGRANTHashiCorp Vagrant: https://www.vagrantup.com/

DOCKERDOCKERDocker: https://www.docker.com/

Page 60: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

FURTHER READINGFURTHER READING

INSPECINSPEC

InSpec: inspec-gcp: inspec-gcp blog: 

https://www.inspec.io/https://github.com/inspec/inspec-gcp

https://blog.chef.io/2018/06/19/inspec-gcp-deep-dive/

KUBERNETESKUBERNETESSonobuoy:  https://github.com/heptio/sonobuoy

TERRAFORMTERRAFORMTerratest:  kitchen-terraform: 

https://github.com/gruntwork-io/terratesthttps://github.com/newcontext-oss/kitchen-

terraform

Page 61: T E S T D R I V E N I N F R A S T R U C T U R E · M I N I M U M R E Q U I R E D ChefDK - bundles ruby, test kitchen, inspec Docker - fastest way to run stuf f (vir tual vir tual

THE ENDTHE END