Test-Driven Infrastructure
Development
MANAGE OPS COMPLEXITY WITH TDD AND DEVOPS
Andrea Tosatto
@Open-Xchange
IDI2017
@_hilbert_
atosatto
[email protected]
Slide 2
Slide 2 text
WHOAMI
Slide 3
Slide 3 text
POWERDNS
Started in 1999
Open-Source since 2007
Part of Open-Xchange since 2015
Powering more than
30% of the internet hosted domains in the world
75% of the DNSSEC domains in the world
150mln of internet users
A piece of blazing fast C++ code powering the Internet.
Sometimes we also use Python. ;-)
@PowerDNS powerdns/pdns
Slide 4
Slide 4 text
WHY
Slide 5
Slide 5 text
MY #ANSI-MOOD
Slide 6
Slide 6 text
MY #ANSI-MOOD
The moment in which my boss told me
”you have 2 weeks to deploy that things for
that huuuuge customer running Oracle
Linux 6, but maybe it was Debian… I don’t
know!”
Slide 7
Slide 7 text
PANIC
Slide 8
Slide 8 text
CODING LIKE
HELL
Slide 9
Slide 9 text
CODING LIKE HELL
Slide 10
Slide 10 text
ANSIBLE AT SCALE IT’S HARD
• CODE QUALITY CAN EASILY BECOME REALLY BAD
• IT’S HARD TO ENFORCE STANDARDS ACROSS THE TEAM
• SOMETIMES IT’S TO VERIFY YOUR WORK
• NO TESTS
• NO WORKFLOW
• NO DOC
• NOT REALLY DEVOPS
• SOMETIMES THINGS JUST DON’T GO AS EXPECTED
Slide 11
Slide 11 text
ANSIBLE AT SCALE IT’S HARD (2)
Slide 12
Slide 12 text
ANSIBLE AT SCALE IT’S HARD (3)
Slide 13
Slide 13 text
REAL WORLD IS
ALWAYS
DIFFERENT
Slide 14
Slide 14 text
REAL WORLD IS
ALWAYS MUCH
MORE COMPLEX
Slide 15
Slide 15 text
TEST-DRIVEN
DEVOPS
Slide 16
Slide 16 text
TEST-DRIVEN DEVOPS
• BUSINESS REQUIREMENTS AS TESTS
• ENCODE OPS KNOWLEDGE AS TEST
• VALIDATE YOUR ASSUMPTIONS
• EASILY DEAL WITH DIFFERENT OS PLATFORMS
• BE SURE TO CATCH ALL THE EDGE CASES
• PREDICTABLE AUTOMATION
• IDEMPOTENCY
• NO SIDE EFFECTS
Slide 17
Slide 17 text
TESTINFRA
Slide 18
Slide 18 text
TESTINFRA
Slide 19
Slide 19 text
TESTINFRA (2)
• PYTEST FOR THE INFRASTRUCTURE
• NO SERVERSPEC
• NO KITCHEN-CI
• NO RUBY
• PURE PYTHON
• EASY CI
Slide 20
Slide 20 text
MODULES
Command
LocalCommand
TestinfraBackend
Sudo
File
User
Group
Interface
Package
PipPackage
Process
Service
Supervisor
Socket
SystemInfo
Salt
Ansible
PuppetResource
Facter
Sysctl
MountPoint
Slide 21
Slide 21 text
PACKAGES & SERVICES
Slide 22
Slide 22 text
FILES
Slide 23
Slide 23 text
PARAMETRIZED ASSERTIONS
Slide 24
Slide 24 text
SHELL COMMANDS
Slide 25
Slide 25 text
SHELL COMMANDS (2)
Slide 26
Slide 26 text
RUN THE TESTS
Slide 27
Slide 27 text
TESTS ARE COOL
BUT WE WANT
PEOPLE TO RUN
THEM
Slide 28
Slide 28 text
MOLECULE
Slide 29
Slide 29 text
MOLECULE
Slide 30
Slide 30 text
MOLECULE (2)
• ANSIBLE ROLES DEVELOPMENT WORKFLOW TOOL
• DEVELOPED BY SOME CISCO’S PYTHON NINJAS TO HELP
CISCO DEVOPS TO DEVELOP OPENSTACK ROLES
https://www.youtube.com/watch?v=5vKblNaD3fI&t=81s
• OUT OF THE BOX
• BOILERPLATING molecule init
• LINTING molecule verify
• VALIDATION molecule converge
• TESTING molecule test