SlideShare a Scribd company logo
1 of 37
Download to read offline
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
INFRASTRUCTURE AASS SSOOFFTTWWAARREE 
Dustin J. Mitchell 
dustin@mozilla.com 
Sept 24, 2014 
1 of 37 09/24/2014 03:32 PM
Infrastructure as Software CCOODDEE http://people.v.igoro.us/~dustin/ias-slides/index.h... 
2 of 37 09/24/2014 03:32 PM
CCOODDEE == SSNNIIPPPPEETT 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
var width=150; // width of the eyes in pixels 
var colour="#06f"; // colour of the eye - bluey green in this case 
var iris="#000"; // colour of the iris (normally black); 
/*************************** 
* Moving Eyeballs Effect * 
*(c)2012-3 mf2fm web-design * 
* http://www.mf2fm.com/rv * 
* DON'T EDIT BELOW THIS BOX * 
***************************/ 
var swide=800; 
function addLoadEvent(funky) { 
var oldonload=window.onload; 
if (typeof(oldonload)!='function') window.onload=funky; 
else window.onload=function() { 
... 
3 of 37 09/24/2014 03:32 PM
CCOODDEE == SSNNIIPPPPEETT 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
# == Class: baseconfig 
## 
Performs initial configuration tasks for all Vagrant boxes. 
# class baseconfig { 
exec { 'apt-get update': 
command => '/usr/bin/apt-get update'; 
} 
host { 'hostmachine': 
ip => '192.168.0.1'; 
} 
file { 
'/home/vagrant/.bashrc': 
owner => 'vagrant', 
group => 'vagrant', 
mode => '0644', 
source => 'puppet:///modules/baseconfig/bashrc'; 
} 
} 
4 of 37 09/24/2014 03:32 PM
CCOODDEE == SSCCRRIIPPTT 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
#! /usr/bin/env python 
class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): 
def do_POST(self): 
content_length = int(self.headers['content-length']) 
data = self.rfile.read(content_length) 
self.send_response(200) 
self.end_headers() 
self.wfile.write("accepted.n") 
self.wfile.close() 
now = int(time.time()) 
filename = os.path.join(REPORT_DIR, "report-%s.yaml" % (now,)) 
fd = os.open(filename, os.O_EXCL|os.O_CREAT|os.O_WRONLY) 
os.fdopen(fd, "w").write(data) 
def main(): 
logging.basicConfig(format="%(asctime)s %(message)s", level=logging.DEBUG) 
SocketServer.TCPServer.allow_reuse_address = True 
httpd = SocketServer.TCPServer(("", PORT), RequestHandler) 
httpd.serve_forever() 
main() 
5 of 37 09/24/2014 03:32 PM
“My friend Clift Norris has identified a fundamental constant 
that I call Norris’ number, the average amount of code an 
untrained programmer can write before he or she hits a wall. Clift 
estimates this as 1,500 lines. Beyond that the code becomes so 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
tangled that the author cannot debug or modify it without 
herculean effort.” 
John D. Cook 
-- 
6 of 37 09/24/2014 03:32 PM
SSOOFFTTWWAARREE IINN PPUUPPPPEETT?? 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Let me tell you a story.. 
7 of 37 09/24/2014 03:32 PM
tinyurl.MMEEEETT PPUUPPPPEETTAAGGAAIINN com/puppetagain 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Open Source 
Written in Puppet 
Cross-Platform 
Highly Available 
Secure 
Designed to Manage Job-Runners 
8 of 37 09/24/2014 03:32 PM
SSOOFFTTWWAARREE 
Architectural models 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
9 of 37 09/24/2014 03:32 PM
OPENSTACK Infrastructure as Software AARRCCHHhttIIpTT://pEEeCoCplTTe.vUU.igRRoroEE.us/~dustin/ias-slides/index.h... 
10 of 37 09/24/2014 03:32 PM
AAPPPPRROOAACCHHAABBIILLIITTYY 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
If I change this, what will happen? 
Where should I start reading code? 
11 of 37 09/24/2014 03:32 PM
PUPPETAGAIN: TTOOPPLLEEVVEELL 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
class toplevel::base { 
include users::root 
} class toplevel::server inherits toplevel::base { 
include puppet::periodic 
include cron 
} class toplevel::server::mozpool inherits toplevel::server { 
include bmm 
include mozpool 
} 
12 of 37 09/24/2014 03:32 PM
PUPPETAGAIN: TTOOPPLLEEVVEELL 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
node "mobile-imaging1.p1.releng.scl3.mozilla.com" { 
include toplevel::server::mozpool 
} 
13 of 37 09/24/2014 03:32 PM
PUPPETAGAIN: CCOONNFFIIGGUURRAATTIIOONN 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
# modules/config/manifests/base.pp 
class config::base { 
$ntp_server = '' 
}# 
manifests/moco-config.pp 
class config inherits config::base { 
$ntp_server = 'time.mozilla.org' 
} 
14 of 37 09/24/2014 03:32 PM
PUPPETAGAIN: CCOONNFFIIGGUURRAATTIIOONN 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
class ntp::config { 
include ::config 
if ($::config::ntp_server) { 
.. 
} 
} 
15 of 37 09/24/2014 03:32 PM
SSOOFFTTWWAARREE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Architectural models 
Controlled Interdependencies 
16 of 37 09/24/2014 03:32 PM
Infrastructure as Software AAPPAACCHHEE:: MMOOhDDttUpU://LLpeEEopSSle.v.igoro.us/~dustin/ias-slides/index.h... 
17 of 37 09/24/2014 03:32 PM
PPUUPPPPEETTAAGGAAIINN:: DDIIRRSS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
class dirs::builds { 
file { "/builds": ensure => directory; } 
} class dirs::builds::slave { 
include dirs::builds 
file { "/builds/slave": ensure => directory; } 
} 
18 of 37 09/24/2014 03:32 PM
PPUUPPPPEETTAAGGAAIINN:: DDIIRRSS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
class talos { 
include dirs::builds::slave 
file { 
"/builds/slave/talos-slave": 
ensure => directory; 
} 
} 
19 of 37 09/24/2014 03:32 PM
SSOOFFTTWWAARREE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Architectural models 
Controlled Interdependencies 
Organizing Principles 
20 of 37 09/24/2014 03:32 PM
PA: PRINCIPLE OOFF LLEEAASSTT SSUURRPPRRIISSEE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
.. installs mig-agent .. or dies trying 
include mig_agent::install 
21 of 37 09/24/2014 03:32 PM
PA: PRINCIPLE OOFF LLEEAASSTT SSUURRPPRRIISSEE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
class mig_agent::install { 
case $operatingsystem { 
CentOS: { .. } 
default: { 
fail("Cannot install on $operatingsystem") 
} 
} 
} 
22 of 37 09/24/2014 03:32 PM
SSOOFFTTWWAARREE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Architectural models 
Controlled Interdependencies 
Organizing Principles 
Abstractions 
23 of 37 09/24/2014 03:32 PM
PPUUPPPPEETT:: PPAACCKKAAGGEESS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Write once, run everywhere, right? 
package { 
'httpd': 
ensure => '2.2.15'; 
} 
24 of 37 09/24/2014 03:32 PM
PUPPETAGAIN: PPAACCKKAAGGEESS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
include packages::httpd 
25 of 37 09/24/2014 03:32 PM
PUPPETAGAIN: PPAACCKKAAGGEESS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
class packages::httpd { 
case $::operatingsystem { 
CentOS: { 
package { "httpd": ensure => latest; } 
} 
Ubuntu: { 
package { "apache2": ensure => latest; } 
} 
Darwin: { 
# installed by default 
} 
default: { 
fail("cannot install on $::operatingsystem") 
} 
} 
} 
26 of 37 09/24/2014 03:32 PM
WWRRIITTIINNGG SSOOFFTTWWAARREE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
IISS HHAARRDD 
27 of 37 09/24/2014 03:32 PM
CCHHAALLLLEENNGGEESS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Package repositories are part of the code 
28 of 37 09/24/2014 03:32 PM
RREEPPOOSSIITTOORRIIEESS:: 
PPIINNNNIINNGG IISS HHAARRDD 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Un-specified prerequisite packages aren't pinned 
Can confuse package managers 
Modifying the repo makes production changes 
29 of 37 09/24/2014 03:32 PM
RREEPPOOSSIITTOORRIIEESS:: 
MMIIRRRROORRIINNGG IISS HHAARRDD 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
“Can we update mirrors now?” 
“No.” 
30 of 37 09/24/2014 03:32 PM
RREEPPOOSSIITTOORRIIEESS:: 
SSHHAARRIINNGG IISS HHAARRDD 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
31 of 37 09/24/2014 03:32 PM
RREEPPOOSSIITTOORRIIEESS:: 
TTHHEEYY''RREE HHUUGGEE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
[root@releng-puppet2.srv.releng.scl3.mozilla.com dmitchell]# df -h /data 
Filesystem Size Used Avail Use% Mounted on 
/dev/mapper/vg_relengpuppet2-lv_data 
414G 315G 78G 81% /data 
32 of 37 09/24/2014 03:32 PM
CCHHAALLLLEENNGGEESS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Package repositories are part of the code 
Interactions are hard to model 
33 of 37 09/24/2014 03:32 PM
MMOODDUULLEE IINNTTEERRAACCTTIIOONNSS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
'httpd' module installs Apache 
'rsyslog' module installs rsyslog 
When both are installed, we want to send access logs to rsyslog 
34 of 37 09/24/2014 03:32 PM
MMOODDUULLEE IINNTTEERRAACCTTIIOONNSS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Httpd has to know about rsyslog? 
class httpd::logging { 
include rsyslog::config_dir 
file { 
"${rsyslog::config_dir::dir}/httpd.conf": 
content => template("${module_name}/rsyslogd_httpd.conf.erb"); 
} 
} 
35 of 37 09/24/2014 03:32 PM
CCHHAALLLLEENNGGEESS 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
Package repositories are part of the code 
Interactions are hard to model 
Acceptance-level testing is hard 
36 of 37 09/24/2014 03:32 PM
GGOO FFOORRTTHH AANNDD 
WWRRIITTEE SSOOFFTTWWAARREE 
Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 
37 of 37 09/24/2014 03:32 PM

More Related Content

Similar to Infrastructure as Software - PuppetConf 2014

DevOpSec_DockerNPodMan-20230220.pdf
DevOpSec_DockerNPodMan-20230220.pdfDevOpSec_DockerNPodMan-20230220.pdf
DevOpSec_DockerNPodMan-20230220.pdfkanedafromparis
 
Project on Video Library management
Project on Video Library managementProject on Video Library management
Project on Video Library managementParv Poddar
 
Azure Container Services​
Azure Container Services​Azure Container Services​
Azure Container Services​Pedro Sousa
 
Be pinched by a cRUSTacean to prevent programming errors !
Be pinched by a cRUSTacean to prevent programming errors !Be pinched by a cRUSTacean to prevent programming errors !
Be pinched by a cRUSTacean to prevent programming errors !René Ribaud
 
deployer, deployment for TYPO3 CMS with ease and fun
deployer, deployment for TYPO3 CMS with ease and fundeployer, deployment for TYPO3 CMS with ease and fun
deployer, deployment for TYPO3 CMS with ease and funPeter Niederlag
 
Azure Container Services​
Azure Container Services​Azure Container Services​
Azure Container Services​Pedro Sousa
 
Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!Commit University
 
Chicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyChicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyMediafly
 
Developing and deploying applications with Spring Boot and Docker (@oakjug)
Developing and deploying applications with Spring Boot and Docker (@oakjug)Developing and deploying applications with Spring Boot and Docker (@oakjug)
Developing and deploying applications with Spring Boot and Docker (@oakjug)Chris Richardson
 
OpenChain AutomotiveWG(OSS license tools()
OpenChain AutomotiveWG(OSS license tools()OpenChain AutomotiveWG(OSS license tools()
OpenChain AutomotiveWG(OSS license tools()Yuichi Kusakabe
 
Research software and Dataverse
Research software and DataverseResearch software and Dataverse
Research software and Dataversephilipdurbin
 
containerit at useR!2017 conference, Brussels
containerit at useR!2017 conference, Brusselscontainerit at useR!2017 conference, Brussels
containerit at useR!2017 conference, BrusselsDaniel Nüst
 
Parrot Drones Hijacking
Parrot Drones HijackingParrot Drones Hijacking
Parrot Drones HijackingPriyanka Aash
 
Docker6anniversary
Docker6anniversaryDocker6anniversary
Docker6anniversaryRené Ribaud
 
Prototyping in the cloud
Prototyping in the cloudPrototyping in the cloud
Prototyping in the cloudKirsten Hunter
 
Lessons Learned in Automating Compliance for Containers
Lessons Learned in Automating Compliance for ContainersLessons Learned in Automating Compliance for Containers
Lessons Learned in Automating Compliance for ContainersAll Things Open
 
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
4Developers 2015: Continuous Security in DevOps - Maciej LasykPROIDEA
 
Continuous Security in DevOps
Continuous Security in DevOpsContinuous Security in DevOps
Continuous Security in DevOpsMaciej Lasyk
 
Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?msyukor
 
Docker @ Data Science Meetup
Docker @ Data Science MeetupDocker @ Data Science Meetup
Docker @ Data Science MeetupDaniel Nüst
 

Similar to Infrastructure as Software - PuppetConf 2014 (20)

DevOpSec_DockerNPodMan-20230220.pdf
DevOpSec_DockerNPodMan-20230220.pdfDevOpSec_DockerNPodMan-20230220.pdf
DevOpSec_DockerNPodMan-20230220.pdf
 
Project on Video Library management
Project on Video Library managementProject on Video Library management
Project on Video Library management
 
Azure Container Services​
Azure Container Services​Azure Container Services​
Azure Container Services​
 
Be pinched by a cRUSTacean to prevent programming errors !
Be pinched by a cRUSTacean to prevent programming errors !Be pinched by a cRUSTacean to prevent programming errors !
Be pinched by a cRUSTacean to prevent programming errors !
 
deployer, deployment for TYPO3 CMS with ease and fun
deployer, deployment for TYPO3 CMS with ease and fundeployer, deployment for TYPO3 CMS with ease and fun
deployer, deployment for TYPO3 CMS with ease and fun
 
Azure Container Services​
Azure Container Services​Azure Container Services​
Azure Container Services​
 
Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!Microservices, la risposta che (forse) cercavi!
Microservices, la risposta che (forse) cercavi!
 
Chicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - MediaflyChicago Docker Meetup Presentation - Mediafly
Chicago Docker Meetup Presentation - Mediafly
 
Developing and deploying applications with Spring Boot and Docker (@oakjug)
Developing and deploying applications with Spring Boot and Docker (@oakjug)Developing and deploying applications with Spring Boot and Docker (@oakjug)
Developing and deploying applications with Spring Boot and Docker (@oakjug)
 
OpenChain AutomotiveWG(OSS license tools()
OpenChain AutomotiveWG(OSS license tools()OpenChain AutomotiveWG(OSS license tools()
OpenChain AutomotiveWG(OSS license tools()
 
Research software and Dataverse
Research software and DataverseResearch software and Dataverse
Research software and Dataverse
 
containerit at useR!2017 conference, Brussels
containerit at useR!2017 conference, Brusselscontainerit at useR!2017 conference, Brussels
containerit at useR!2017 conference, Brussels
 
Parrot Drones Hijacking
Parrot Drones HijackingParrot Drones Hijacking
Parrot Drones Hijacking
 
Docker6anniversary
Docker6anniversaryDocker6anniversary
Docker6anniversary
 
Prototyping in the cloud
Prototyping in the cloudPrototyping in the cloud
Prototyping in the cloud
 
Lessons Learned in Automating Compliance for Containers
Lessons Learned in Automating Compliance for ContainersLessons Learned in Automating Compliance for Containers
Lessons Learned in Automating Compliance for Containers
 
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
4Developers 2015: Continuous Security in DevOps - Maciej Lasyk
 
Continuous Security in DevOps
Continuous Security in DevOpsContinuous Security in DevOps
Continuous Security in DevOps
 
Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?Programming IoT with Docker: How to Start?
Programming IoT with Docker: How to Start?
 
Docker @ Data Science Meetup
Docker @ Data Science MeetupDocker @ Data Science Meetup
Docker @ Data Science Meetup
 

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
 

Recently uploaded

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
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
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
🐬 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
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
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
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 

Recently uploaded (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
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?
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
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...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 

Infrastructure as Software - PuppetConf 2014

  • 1. Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... INFRASTRUCTURE AASS SSOOFFTTWWAARREE Dustin J. Mitchell dustin@mozilla.com Sept 24, 2014 1 of 37 09/24/2014 03:32 PM
  • 2. Infrastructure as Software CCOODDEE http://people.v.igoro.us/~dustin/ias-slides/index.h... 2 of 37 09/24/2014 03:32 PM
  • 3. CCOODDEE == SSNNIIPPPPEETT Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... var width=150; // width of the eyes in pixels var colour="#06f"; // colour of the eye - bluey green in this case var iris="#000"; // colour of the iris (normally black); /*************************** * Moving Eyeballs Effect * *(c)2012-3 mf2fm web-design * * http://www.mf2fm.com/rv * * DON'T EDIT BELOW THIS BOX * ***************************/ var swide=800; function addLoadEvent(funky) { var oldonload=window.onload; if (typeof(oldonload)!='function') window.onload=funky; else window.onload=function() { ... 3 of 37 09/24/2014 03:32 PM
  • 4. CCOODDEE == SSNNIIPPPPEETT Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... # == Class: baseconfig ## Performs initial configuration tasks for all Vagrant boxes. # class baseconfig { exec { 'apt-get update': command => '/usr/bin/apt-get update'; } host { 'hostmachine': ip => '192.168.0.1'; } file { '/home/vagrant/.bashrc': owner => 'vagrant', group => 'vagrant', mode => '0644', source => 'puppet:///modules/baseconfig/bashrc'; } } 4 of 37 09/24/2014 03:32 PM
  • 5. CCOODDEE == SSCCRRIIPPTT Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... #! /usr/bin/env python class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): def do_POST(self): content_length = int(self.headers['content-length']) data = self.rfile.read(content_length) self.send_response(200) self.end_headers() self.wfile.write("accepted.n") self.wfile.close() now = int(time.time()) filename = os.path.join(REPORT_DIR, "report-%s.yaml" % (now,)) fd = os.open(filename, os.O_EXCL|os.O_CREAT|os.O_WRONLY) os.fdopen(fd, "w").write(data) def main(): logging.basicConfig(format="%(asctime)s %(message)s", level=logging.DEBUG) SocketServer.TCPServer.allow_reuse_address = True httpd = SocketServer.TCPServer(("", PORT), RequestHandler) httpd.serve_forever() main() 5 of 37 09/24/2014 03:32 PM
  • 6. “My friend Clift Norris has identified a fundamental constant that I call Norris’ number, the average amount of code an untrained programmer can write before he or she hits a wall. Clift estimates this as 1,500 lines. Beyond that the code becomes so Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... tangled that the author cannot debug or modify it without herculean effort.” John D. Cook -- 6 of 37 09/24/2014 03:32 PM
  • 7. SSOOFFTTWWAARREE IINN PPUUPPPPEETT?? Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Let me tell you a story.. 7 of 37 09/24/2014 03:32 PM
  • 8. tinyurl.MMEEEETT PPUUPPPPEETTAAGGAAIINN com/puppetagain Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Open Source Written in Puppet Cross-Platform Highly Available Secure Designed to Manage Job-Runners 8 of 37 09/24/2014 03:32 PM
  • 9. SSOOFFTTWWAARREE Architectural models Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 9 of 37 09/24/2014 03:32 PM
  • 10. OPENSTACK Infrastructure as Software AARRCCHHhttIIpTT://pEEeCoCplTTe.vUU.igRRoroEE.us/~dustin/ias-slides/index.h... 10 of 37 09/24/2014 03:32 PM
  • 11. AAPPPPRROOAACCHHAABBIILLIITTYY Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... If I change this, what will happen? Where should I start reading code? 11 of 37 09/24/2014 03:32 PM
  • 12. PUPPETAGAIN: TTOOPPLLEEVVEELL Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... class toplevel::base { include users::root } class toplevel::server inherits toplevel::base { include puppet::periodic include cron } class toplevel::server::mozpool inherits toplevel::server { include bmm include mozpool } 12 of 37 09/24/2014 03:32 PM
  • 13. PUPPETAGAIN: TTOOPPLLEEVVEELL Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... node "mobile-imaging1.p1.releng.scl3.mozilla.com" { include toplevel::server::mozpool } 13 of 37 09/24/2014 03:32 PM
  • 14. PUPPETAGAIN: CCOONNFFIIGGUURRAATTIIOONN Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... # modules/config/manifests/base.pp class config::base { $ntp_server = '' }# manifests/moco-config.pp class config inherits config::base { $ntp_server = 'time.mozilla.org' } 14 of 37 09/24/2014 03:32 PM
  • 15. PUPPETAGAIN: CCOONNFFIIGGUURRAATTIIOONN Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... class ntp::config { include ::config if ($::config::ntp_server) { .. } } 15 of 37 09/24/2014 03:32 PM
  • 16. SSOOFFTTWWAARREE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Architectural models Controlled Interdependencies 16 of 37 09/24/2014 03:32 PM
  • 17. Infrastructure as Software AAPPAACCHHEE:: MMOOhDDttUpU://LLpeEEopSSle.v.igoro.us/~dustin/ias-slides/index.h... 17 of 37 09/24/2014 03:32 PM
  • 18. PPUUPPPPEETTAAGGAAIINN:: DDIIRRSS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... class dirs::builds { file { "/builds": ensure => directory; } } class dirs::builds::slave { include dirs::builds file { "/builds/slave": ensure => directory; } } 18 of 37 09/24/2014 03:32 PM
  • 19. PPUUPPPPEETTAAGGAAIINN:: DDIIRRSS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... class talos { include dirs::builds::slave file { "/builds/slave/talos-slave": ensure => directory; } } 19 of 37 09/24/2014 03:32 PM
  • 20. SSOOFFTTWWAARREE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Architectural models Controlled Interdependencies Organizing Principles 20 of 37 09/24/2014 03:32 PM
  • 21. PA: PRINCIPLE OOFF LLEEAASSTT SSUURRPPRRIISSEE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... .. installs mig-agent .. or dies trying include mig_agent::install 21 of 37 09/24/2014 03:32 PM
  • 22. PA: PRINCIPLE OOFF LLEEAASSTT SSUURRPPRRIISSEE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... class mig_agent::install { case $operatingsystem { CentOS: { .. } default: { fail("Cannot install on $operatingsystem") } } } 22 of 37 09/24/2014 03:32 PM
  • 23. SSOOFFTTWWAARREE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Architectural models Controlled Interdependencies Organizing Principles Abstractions 23 of 37 09/24/2014 03:32 PM
  • 24. PPUUPPPPEETT:: PPAACCKKAAGGEESS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Write once, run everywhere, right? package { 'httpd': ensure => '2.2.15'; } 24 of 37 09/24/2014 03:32 PM
  • 25. PUPPETAGAIN: PPAACCKKAAGGEESS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... include packages::httpd 25 of 37 09/24/2014 03:32 PM
  • 26. PUPPETAGAIN: PPAACCKKAAGGEESS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... class packages::httpd { case $::operatingsystem { CentOS: { package { "httpd": ensure => latest; } } Ubuntu: { package { "apache2": ensure => latest; } } Darwin: { # installed by default } default: { fail("cannot install on $::operatingsystem") } } } 26 of 37 09/24/2014 03:32 PM
  • 27. WWRRIITTIINNGG SSOOFFTTWWAARREE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... IISS HHAARRDD 27 of 37 09/24/2014 03:32 PM
  • 28. CCHHAALLLLEENNGGEESS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Package repositories are part of the code 28 of 37 09/24/2014 03:32 PM
  • 29. RREEPPOOSSIITTOORRIIEESS:: PPIINNNNIINNGG IISS HHAARRDD Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Un-specified prerequisite packages aren't pinned Can confuse package managers Modifying the repo makes production changes 29 of 37 09/24/2014 03:32 PM
  • 30. RREEPPOOSSIITTOORRIIEESS:: MMIIRRRROORRIINNGG IISS HHAARRDD Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... “Can we update mirrors now?” “No.” 30 of 37 09/24/2014 03:32 PM
  • 31. RREEPPOOSSIITTOORRIIEESS:: SSHHAARRIINNGG IISS HHAARRDD Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 31 of 37 09/24/2014 03:32 PM
  • 32. RREEPPOOSSIITTOORRIIEESS:: TTHHEEYY''RREE HHUUGGEE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... [root@releng-puppet2.srv.releng.scl3.mozilla.com dmitchell]# df -h /data Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_relengpuppet2-lv_data 414G 315G 78G 81% /data 32 of 37 09/24/2014 03:32 PM
  • 33. CCHHAALLLLEENNGGEESS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Package repositories are part of the code Interactions are hard to model 33 of 37 09/24/2014 03:32 PM
  • 34. MMOODDUULLEE IINNTTEERRAACCTTIIOONNSS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 'httpd' module installs Apache 'rsyslog' module installs rsyslog When both are installed, we want to send access logs to rsyslog 34 of 37 09/24/2014 03:32 PM
  • 35. MMOODDUULLEE IINNTTEERRAACCTTIIOONNSS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Httpd has to know about rsyslog? class httpd::logging { include rsyslog::config_dir file { "${rsyslog::config_dir::dir}/httpd.conf": content => template("${module_name}/rsyslogd_httpd.conf.erb"); } } 35 of 37 09/24/2014 03:32 PM
  • 36. CCHHAALLLLEENNGGEESS Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... Package repositories are part of the code Interactions are hard to model Acceptance-level testing is hard 36 of 37 09/24/2014 03:32 PM
  • 37. GGOO FFOORRTTHH AANNDD WWRRIITTEE SSOOFFTTWWAARREE Infrastructure as Software http://people.v.igoro.us/~dustin/ias-slides/index.h... 37 of 37 09/24/2014 03:32 PM