verifying your ansible roles using docker, test kitchen and serverspec

21
Verifying your Ansible Roles Feat: Docker, Test Kitchen, Serverspec

Upload: edmund-dipple

Post on 21-Jan-2018

493 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Verifying your Ansible

RolesFeat: Docker, Test Kitchen, Serverspec

Page 2: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

About me

Edmund Dipple

[email protected]

@elmundio87

Page 3: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Coming up…

• Test Kitchen

• Serverspec

• Ansible

• Docker

• Demo Time!

Page 4: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Test Driven Development

Write Failing Test

Write CodeMake Test Pass

Write tests

one at a time

Add code in small

increments

Commit often No refactoring until tests pass

Page 5: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Test Kitchen

• Originally designed for Chef

• Test Harness with simple

workflow

• Pluggable architecture!

Page 6: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Key Concepts

• Drivers <<

• Provisioners

• Platforms

Where to run your code:

Cloud infrastructure

Azure, EC2, Rackspace

Local environment

Vagrant, Docker

Page 7: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Key Concepts

• Drivers

• Provisioners <<

• Platforms

How to configure your environment:

Ansible, Chef, Puppet, CFEngine

Page 8: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Key Concepts

• Drivers

• Provisioners

• Platforms <<

Which OS to spin up:

Can be Linux or Windows if using a

VM

Page 9: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Test Kitchen Workflow

Create

Environments

Config

ManagementRun Tests

VerifyConverge

Page 10: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Ansible 101

• SSH-based configuration management

• Idempotent - Test & repair to achieve desired

state

• YML files with loops, conditionals and variables

Page 11: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Example Ansible role

- template:

src: foo.j2

dest: /tmp/foo.sh

- user:

name: “{{item}}”

group: admin

with_items: {{new_user}}

tasks/main.ymldefaults/main.yml

templates/foo.j2

test_var: “Hello world”

new_user: [foo,bar]

#!/bin/bash

echo {{ test_var}}Tasks

Variables

File Template

Page 12: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Serverspec

RSpec for your infrastructure

describe file('/etc/passwd') do

it { should be_file }

it { should exist }

end

describe package('httpd') do

it { should be_installed }

end

describe user('foo') do

it { should exist }

it { should belong_to_group ‘bar’ }

end

Resource

Matcher

Page 13: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Docker 101

• Image = Readonly template of a filesystem

• Container = Isolated filesystem and processes

based on an image

• Image filesystem is made up of 1 or more cached

layers

• A container is not a VM!

• Host kernel is shared with containers

Page 14: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Virtual Machine Docker Container

Page 15: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Why does this matter?

• Spinning up a new container takes very little time

• Faster feedback when testing

• Containers can run inside VMs on hardware that

doesn’t support virtualisation inside VMs

• Images take seconds to update due to caching

'In our world, fast feedback is essential' - @martinfowler

Page 16: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Creating a new docker image

Example Dockerfile

FROM ubuntu:15.04

RUN apt-get update

RUN apt-get install sudo openssh-server curl lsb-release -y

From Docker registry

Page 17: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Why test at all?

“You are already describing the

desired state of the system in

Ansible, why do it another time?”

Page 18: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Refactoring

Uncoupling testing

from Ansible

People get it wrong!

Page 19: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Installed Software

• Docker 1.8.2 (from package)

• Ansible 1.9.3 (from package)

• test-kitchen (rubygem)

• kitchen-ansible (rubygem)

• serverspec (rubygem)

Page 20: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Demo time!

Page 21: Verifying your Ansible Roles using Docker, Test Kitchen and Serverspec

Questions?