Slide 1

Slide 1 text

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

Slide 31

Slide 31 text

MOLECULE.YML

Slide 32

Slide 32 text

WORKFLOW molecule: test: sequence: - destroy - syntax - create - converge - idempotence - verify

Slide 33

Slide 33 text

WORKFLOW (2)

Slide 34

Slide 34 text

.TRAVIS.YML

Slide 35

Slide 35 text

WE WANT TO TEST AGAINST DIFFERENT SCENARIOS

Slide 36

Slide 36 text

MOLECULE V2

Slide 37

Slide 37 text

MOLECULE V2 • SCENARIO BASED TESTING • ANSIBLE-BASED PROVIDERS • DOCKER • VAGRANT • OPENSTACK • AWS • … • NO BACK-WARD COMPATIBLE :-( • BUT, IT WILL NOT IMPACT YOUR ANSIBLE CODE, SO EASY UPGRADE! ;-)

Slide 38

Slide 38 text

SCENARIO DEFINITION

Slide 39

Slide 39 text

PER-SCENARIO MOLECULE.YML

Slide 40

Slide 40 text

SCENARIO-BASED WORKFLOW

Slide 41

Slide 41 text

TDD DEVOPS. SIMPLER BETTER FASTER STRONGER

Slide 42

Slide 42 text

THANK YOU PS: WE’RE HIRING - https://www.open-xchange.com/jobs/