mwalls velocity levelup

123

Click here to load reader

Upload: mandi-walls

Post on 08-May-2015

2.736 views

Category:

Technology


2 download

DESCRIPTION

Slides for Operations Level Up. Corresponding Gists Setup: https://gist.github.com/lnxchk/5791121 Notes: https://gist.github.com/lnxchk/5802014

TRANSCRIPT

Page 1: Mwalls velocity levelup

Operations Level UpMandi Walls

Velocity Santa ClaraJune 18, 2013

Tuesday, June 18, 13

Page 2: Mwalls velocity levelup

whoami

• Mandi Walls

• @lnxchk

• Consultant at Opscode

• My 6th Velocity

2

Tuesday, June 18, 13

Page 3: Mwalls velocity levelup

who are you?

• Ops?

• Devs?

• Management?

• Other functions:

• sales, marketing, foosball, TPS reporting?

3

Tuesday, June 18, 13

Page 4: Mwalls velocity levelup

What is this madness

• Part call-to-arms

• Part techie hands-on things

• Part revival meeting

4

Tuesday, June 18, 13

Page 5: Mwalls velocity levelup

Why Do I Care?

5

http://static6.businessinsider.com/image/4a64e07c4b5437860086a0c9/uh-oh-cond-nast-hires-mckinsey.jpg

Tuesday, June 18, 13

Page 6: Mwalls velocity levelup

Future of Operations

http://www.flickr.com/photos/x-ray_delta_one/5871906878/6

Tuesday, June 18, 13

Page 7: Mwalls velocity levelup

Evolution of a Practice

• Craft Stage

• Commercial Stage

• Engineering Stage

7 http://www.flickr.com/photos/thaisfraga182/5285413020/sizes/z/in/photostream/

Tuesday, June 18, 13

Page 8: Mwalls velocity levelup

Craft Stage

• Hand crafted artisanal organic free range bespoke systems

• Lots of personal heroics

• Land of the BOFHs

8

Tuesday, June 18, 13

Page 9: Mwalls velocity levelup

Commercial Stage

• Folklore written down

• Standard procedures emerge

• Training begins to occur

9

Tuesday, June 18, 13

Page 10: Mwalls velocity levelup

Engineering Stage

• Application of scientific principles

• Measurement

• Experimentation towards greater efficiency

10

Tuesday, June 18, 13

Page 11: Mwalls velocity levelup

New Workflows

• Visibility and planning

• Version control and code review

• Testing, testing, and more testing

• Metrics collection and interpretation

Basically, borrow some stuff from Dev

11 http://websites-development.com/sites/default/files/git_branch_strategy.png

Tuesday, June 18, 13

Page 12: Mwalls velocity levelup

New Goals

• Transparency - are we working on the right things

• Reliability - can we keep it running

• Resiliency - can we rebuild it? Do we have the technology?

• Correctness - are we sure it’s doing what we want it to do

12

Tuesday, June 18, 13

Page 13: Mwalls velocity levelup

New Goals

• Transparency - are we working on the right things

• Reliability - can we keep it running

• Resiliency - can we rebuild it? Do we have the technology?

• Correctness - are we sure it’s doing what we want it to do

12

Building Trust

Tuesday, June 18, 13

Page 14: Mwalls velocity levelup

More than keeping the lights on.

13

Tuesday, June 18, 13

Page 15: Mwalls velocity levelup

Ops Identity Crisis

http://www.flickr.com/photos/muffett68/7214428636/14

Tuesday, June 18, 13

Page 16: Mwalls velocity levelup

Ops Identity Crisis

http://www.flickr.com/photos/muffett68/7214428636/

I don’t write code, I’m a sysadmin

14

Tuesday, June 18, 13

Page 17: Mwalls velocity levelup

Ops Identity Crisis

http://www.flickr.com/photos/muffett68/7214428636/

I don’t write code, I’m a sysadmin

I have to spend all my time fixing dumb things

14

Tuesday, June 18, 13

Page 18: Mwalls velocity levelup

Ops Identity Crisis

http://www.flickr.com/photos/muffett68/7214428636/

I don’t write code, I’m a sysadmin

I have to spend all my time fixing dumb things

This takes too much time.

14

Tuesday, June 18, 13

Page 19: Mwalls velocity levelup

Ops Identity Crisis

http://www.flickr.com/photos/muffett68/7214428636/

I don’t write code, I’m a sysadmin

I have to spend all my time fixing dumb things

This takes too much time.

I’m faster if I don’t have to talk to anyone about what’s going on.

14

Tuesday, June 18, 13

Page 20: Mwalls velocity levelup

Ops Identity Crisis

http://www.flickr.com/photos/muffett68/7214428636/

I don’t write code, I’m a sysadmin

I have to spend all my time fixing dumb things

This takes too much time.

These tools are too hard to learn.

I will write my own thing.

I’m faster if I don’t have to talk to anyone about what’s going on.

14

Tuesday, June 18, 13

Page 21: Mwalls velocity levelup

So, some things to work on

• Some tools for mitigating risk

• Some processes and tips for making the right thing the easy thing

• Increase efficiency, learn some stuff, reevaluate your own work

• Don’t be afraid of borrowing from other disciplines

15

Tuesday, June 18, 13

Page 22: Mwalls velocity levelup

Eating Our Veggies

16 http://www.packriveryaks.com/

Tuesday, June 18, 13

Page 23: Mwalls velocity levelup

Opportunity Cost

The value of the things you could be doing while you were shaving that yak

17

Tuesday, June 18, 13

Page 24: Mwalls velocity levelup

Employability

18 http://www.flickr.com/photos/sourmash/74666764/

Tuesday, June 18, 13

Page 25: Mwalls velocity levelup

Risk Vectors

• What Ops thinks of as risk

• New code, releases, tasks

• Other sources of risk

• Old products and workflows

• Unrepeatable processes

• Personal heroics

http://www.flickr.com/photos/baresone/4473290629/sizes/z/in/photostream/19

Tuesday, June 18, 13

Page 26: Mwalls velocity levelup

Assessment of Risk

• Is your process:

• well documented

• repeatable

• reliable

• easy to do right?

http://www.flickr.com/photos/lemusgro/5494317161/sizes/z/in/photostream/20

Tuesday, June 18, 13

Page 27: Mwalls velocity levelup

EASY TO DO RIGHT

Seriously. I’m not kidding.

21

Tuesday, June 18, 13

Page 28: Mwalls velocity levelup

Hands On

• Git and hooks for Ops

• Packaging your stuff

• Borrowing sanity checks from other places

• Basic testing without doing a lot of zomgcoding

22

Tuesday, June 18, 13

Page 29: Mwalls velocity levelup

Hands On

• Git and hooks for Ops

• Packaging your stuff

• Borrowing sanity checks from other places

• Basic testing without doing a lot of zomgcoding

22

https://gist.github.com/lnxchk/5791121

Tuesday, June 18, 13

Page 30: Mwalls velocity levelup

Getting Started - Vagrant

• Login to your host using ssh

• The user is velocity

• The password is velocityconf

• Vagrant is port-forwarding ssh for you

$ ssh -p 2222 [email protected]

23

Tuesday, June 18, 13

Page 31: Mwalls velocity levelup

Getting Started - ec2

• Login to your host using ssh

• The user is velocity

• The password is velocityconf

• Make sure your AWS Security Group allows inbound ssh

• You can allow ssh from your EC2 console, under “Security Groups”

$ ssh [email protected]

24

Tuesday, June 18, 13

Page 32: Mwalls velocity levelup

Getting Started - vbox

• If you’re using local virtual box, log in when the guest is initialized

• The user is velocity

• The password is velocityconf

25

Tuesday, June 18, 13

Page 33: Mwalls velocity levelup

gist

http://bit.ly/14ffQXX

26

Tuesday, June 18, 13

Page 34: Mwalls velocity levelup

Task 1 - Working with git

http://mattbanks.me/wp-content/uploads/2012/07/Git-Logo.png27

Tuesday, June 18, 13

Page 35: Mwalls velocity levelup

Why git

• Distributed version control

• Everyone gets a copy

• Hub/spoke model for sharing

• Simple set up

• Easy to run a local git server

• Other offerings, like github, are pretty awesome too

28

Tuesday, June 18, 13

Page 36: Mwalls velocity levelup

Git server

• You have a git server on your lab box

• It’s root is in /srv/git

• There is one project, bindfiles.git

• velocity can use ssh:// to talk to the git server

29

Tuesday, June 18, 13

Page 37: Mwalls velocity levelup

bindfiles

• Directory ~velocity/bindfiles is already a git repo for you

• The remote origin is localhost

• It will use ssh to talk to the local git server

• It contains two trivial zonefiles

• db.192

• db.local

30

Tuesday, June 18, 13

Page 38: Mwalls velocity levelup

$ cd bindfiles$ cat .git/config

bindfiles/.git/config

[core]

! repositoryformatversion = 0

! filemode = true

! bare = false

! logallrefupdates = true

[remote "origin"]

! fetch = +refs/heads/*:refs/remotes/origin/*

! url = ssh://localhost/srv/git/bindfiles.git

[branch "master"]

! remote = origin

! merge = refs/heads/master

Remote origin!

31

Tuesday, June 18, 13

Page 39: Mwalls velocity levelup

$ vi db.192

Edit the db.192 zonefile

32

Tuesday, June 18, 13

Page 40: Mwalls velocity levelup

Add “wat.local” with final octet 24

Add a new host

33

Tuesday, June 18, 13

Page 41: Mwalls velocity levelup

$ git status

git status

# On branch master

# Changed but not updated:

# (use "git add <file>..." to update what will be committed)

# (use "git checkout -- <file>..." to discard changes in working directory)

#

#! modified: db.192

#

no changes added to commit (use "git add" and/or "git commit -a")

34

Tuesday, June 18, 13

Page 42: Mwalls velocity levelup

git tells you what it wants

# Changed but not updated:

# (use "git add <file>..." to update what will be committed)

# (use "git checkout -- <file>..." to discard changes in working directory)

#

# modified: db.192

35

Tuesday, June 18, 13

Page 43: Mwalls velocity levelup

$ git add db.192$ git status

git add

# On branch master

# Changes to be committed:

# (use "git reset HEAD <file>..." to unstage)

#

#!modified: db.192

#

36

Tuesday, June 18, 13

Page 44: Mwalls velocity levelup

git commit

• git add stages your changes locally

• git commit will write them to your local git repository

• add your comment either inline with “-m” or git commit will open a buffer for you

37

git commit -m “this commit is awesome”

Tuesday, June 18, 13

Page 45: Mwalls velocity levelup

$ git commit

git commit

38

Tuesday, June 18, 13

Page 46: Mwalls velocity levelup

[master 22371ab] Added wat.local to reverse file

1 files changed, 4 insertions(+), 0 deletions(-)

$ git status

# On branch master

# Your branch is ahead of 'origin/master' by 1 commit.

#

nothing to commit (working directory clean)

39

Tuesday, June 18, 13

Page 47: Mwalls velocity levelup

Making Good Comments

• At least explain what you did, Lucy

• If there is a ticket somewhere, add that in the comment

• If you made multiple changes, call them all out

40

Tuesday, June 18, 13

Page 48: Mwalls velocity levelup

$ git push

git push

Counting objects: 5, done.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 335 bytes, done.

Total 3 (delta 1), reused 0 (delta 0)

To ssh://localhost/srv/git/bindfiles.git

06fa560..22371ab master -> master

41

Tuesday, June 18, 13

Page 49: Mwalls velocity levelup

git push

• git push sends your changes to the central git server

• git pull brings everyone else’s changes into your local repo

• Don’t hoard changes; push and pull often

42

Tuesday, June 18, 13

Page 50: Mwalls velocity levelup

Ok?

• What did we forget to do?

43

Tuesday, June 18, 13

Page 51: Mwalls velocity levelup

Update the Serial!

• Lots of Operations tasks have tribal knowledge you need

• Zonefiles have a Serial that needs to be incremented when you make a change

• They are potentially outage-causing or hair-pulling problems that can be avoided

• Let’s let git remember to do that for us

44

Tuesday, June 18, 13

Page 52: Mwalls velocity levelup

commit hooks

• You can put hooks into your git repos

• Little tasks that happen at various steps in the process

• We can add a pre-commit hook to our bindfiles repo

• So you don’t have to remember! Saves time later! Helps junior staff!

45

Tuesday, June 18, 13

Page 53: Mwalls velocity levelup

$ cp /srv/velocity/pre-commit .git/hooks$ cat .git/hooks/pre-commit

pre-commit

#!/bin/bash

num=`git diff master db.192 | grep ^+ | wc | awk '{print $1}'`

if [ $num -gt 1 ] ; then

serial=`git diff master db.192 | grep -i serial`

if [ $? -ne 0 ] ; then

echo "You made a change to the zone file but didn't update the Serial value"

exit 1;

fi

fi

46

Tuesday, June 18, 13

Page 54: Mwalls velocity levelup

pre-commit• Rather messy, off-the-cuff example

• git diff master db.192

• Looks for changes between what’s in the current master on your local repo

• If the db.192 file has changed but the value for Serial is the same, it prints and error and exits with a non-zero return code

• git stops processing the commit, saving you headaches later

47

Tuesday, June 18, 13

Page 55: Mwalls velocity levelup

Generalized pre-commit

Want it? it’s in the gist!

48

Tuesday, June 18, 13

Page 56: Mwalls velocity levelup

Try it out• Make a change to your reverse file, db.192: move wat.local to .22

• don’t update the serial, see what git does for you

• git add db.192

• git commit

You made a change to the zone file but didn't update the Serial value

Well. That was handy!

Fix the zonefile, try it again! Your commit will go through. git push it

Feeling hardcore? Update db.local to match, check it in too49

Tuesday, June 18, 13

Page 57: Mwalls velocity levelup

What else to hook?

• Services with config checkers

• make a change to the config, run the checker in a hook

• nagios, named, apache, etc come with check tools

• Other syntax checking

• ruby, json, config management tools

50

Tuesday, June 18, 13

Page 58: Mwalls velocity levelup

What else to hook?

• Services with config checkers

• make a change to the config, run the checker in a hook

• nagios, named, apache, etc come with check tools

• Other syntax checking

• ruby, json, config management tools

Make it EASY to do RIGHT

50

Tuesday, June 18, 13

Page 59: Mwalls velocity levelup

Other git things

• git clone

• gives new team members a working copy of the repo

• git branch

• Lets you and other team members work on non-prod stuff

• Use sparingly; less complexity means more reliable results

51

Tuesday, June 18, 13

Page 60: Mwalls velocity levelup

Task 2: creating packages

• How do you get files, apps, stuff deployed on your hosts?

• scp -r?

• tarballs?

• build everything on every host, you gentoo fans?

• crash cart? (omg)

52

Tuesday, June 18, 13

Page 61: Mwalls velocity levelup

Packaging

• Reap the benefits of what’s built in to your package manager

• Versioning

• Dependencies

• Metadata

• Build-once, install-many

• File transfer built right into stuff like yum and apt repos!

53

Tuesday, June 18, 13

Page 62: Mwalls velocity levelup

Package. All. The. Things.

54 http://cdn.meme.li/instances/300x300/38833426.jpg

Tuesday, June 18, 13

Page 63: Mwalls velocity levelup

Make it easy: fpm

• Creating packages from scratch is tedious

• There’s some esoteric stuff in the package managers

• You really only need a few things

55

Tuesday, June 18, 13

Page 64: Mwalls velocity levelup

fpm

• fpm, “f’ing package managers”!

• Jordan Sissell

• Creates multiple kinds of packages from various resources

• https://github.com/jordansissel/fpm

56

It’s already installed on your lab box!

Tuesday, June 18, 13

Page 65: Mwalls velocity levelup

$ fpm -h

fpm

Intro:

This is fpm version 0.4.37

If you think something is wrong, it's probably a bug! :)

Please file these here: https://github.com/jordansissel/fpm/issues

You can find support on irc (#fpm on freenode irc) or via email with

[email protected]

Usage:

fpm [OPTIONS] [ARGS] ...

Parameters:

[ARGS] ... Inputs to the source package type. For the 'dir' type, this is the files and directories you want to include in the package. For others, like 'gem', it specifies the packages to download and use as the gem input

Options:

-t OUTPUT_TYPE the type of package you want to create (deb, rpm, solaris, etc)

-s INPUT_TYPE the package type to use as input (gem, rpm, python, etc)

-C CHDIR Change directory to here before searching for files

omg it just keeps going.... 57

Tuesday, June 18, 13

Page 66: Mwalls velocity levelup

Create a package

• rpm-ify our zonefiles

• They’re in our git repo right now

• Live in /var/named for reals

• If we package them, we get versioning and other data

58

Tuesday, June 18, 13

Page 67: Mwalls velocity levelup

fpm settings

• -s dir : we’re working with raw files rather than a gem, rpm, etc

• -t rpm : create an rpm package

• -v 1.0 : first version!

• --prefix=/var/named : where the files will be installed

• -n “zonefiles” : name of the package

• --after-install /srv/velocity/restart_named.sh : run this after installing

• db* : the files to be packaged

$ fpm -s dir -t rpm -v 1.0 --prefix=/var/named \ -n "zonefiles" --after-install \/srv/velocity/restart_named.sh db*

59

Tuesday, June 18, 13

Page 68: Mwalls velocity levelup

$ fpm -s dir -t rpm -v 1.0 --prefix=/var/named \ -n "zonefiles" --after-install \ /srv/velocity/restart_named.sh db*Created rpm {:path=>"zonefiles-1.0-1.x86_64.rpm"}

$ rpm -qpl zonefiles-1.0-1.x86_64.rpm

/var/named/db.192

/var/named/db.local

60

Tuesday, June 18, 13

Page 69: Mwalls velocity levelup

• Nice!

• Now we can install it

61

Tuesday, June 18, 13

Page 70: Mwalls velocity levelup

$ sudo rpm -ihv zonefiles-1.0-1.x86_64.rpm

Results!

Preparing... ########################################### [100%]

1:zonefiles ########################################### [100%]

Stopping named: .[ OK ]

Starting named: [ OK ]

$ dig @localhost -x 192.168.1.22

;; QUESTION SECTION:

;22.1.168.192.in-addr.arpa.!IN! PTR

;; ANSWER SECTION:

22.1.168.192.in-addr.arpa. 604800 IN! PTR!wat.local.

62

Tuesday, June 18, 13

Page 71: Mwalls velocity levelup

Put the bits together

• Your zonefiles are in a git repo

• The repo has syntax and error checking pre-commit hooks

• The repo can also have packaging and deploy post-commit hooks

• Smooth the process, make the right way the easiest way

http://www.flickr.com/photos/62904109@N00/2636859006/sizes/z/in/photostream/63

Tuesday, June 18, 13

Page 72: Mwalls velocity levelup

Task 3: Testing

• Lots of work in the dev space

• TDD, BDD, test, test

• Write tests first, prove they fail, write code to make them pass

• More risk reduction

• Looks scary

http://www.flickr.com/photos/nobleup/3995733415/sizes/z/in/photostream/64

Tuesday, June 18, 13

Page 73: Mwalls velocity levelup

basic tests

• So, there’s a DNS server on the lab box

• What else is here?

• Nagios server!

http://www.flickr.com/photos/richardmoross/490988453/sizes/z/in/photostream/65

Tuesday, June 18, 13

Page 74: Mwalls velocity levelup

What can we borrow?

• Nagios plugins!

• Extensive set of checks for all sorts of services

• Usable from the command line

66

Tuesday, June 18, 13

Page 75: Mwalls velocity levelup

$ ls /usr/lib64/nagios/plugins

nagios plugins

check_breeze check_game check_mrtgtraf check_overcr check_swap

check_by_ssh check_hpjd check_mysql check_pgsql check_tcp

check_clamd check_http check_mysql_query check_ping check_time

check_cluster check_icmp check_nagios check_pop check_udp

check_dhcp check_ide_smart check_nntp check_procs check_ups

check_dig check_imap check_nntps check_real check_users

check_disk check_ircd check_nrpe check_rpc check_wave

check_disk_smb check_jabber check_nt check_sensors eventhandlers

check_dns check_ldap check_ntp check_simap negate

check_dummy check_ldaps check_ntp_peer check_smtp urlize

check_file_age check_load check_ntp.pl check_snmp utils.pm

check_flexlm check_log check_ntp_time check_spop utils.sh

check_fping check_mailq check_nwstat check_ssh

check_ftp check_mrtg check_oracle check_ssmtp

67

Tuesday, June 18, 13

Page 76: Mwalls velocity levelup

$ ls /usr/lib64/nagios/plugins

nagios plugins

check_breeze check_game check_mrtgtraf check_overcr check_swap

check_by_ssh check_hpjd check_mysql check_pgsql check_tcp

check_clamd check_http check_mysql_query check_ping check_time

check_cluster check_icmp check_nagios check_pop check_udp

check_dhcp check_ide_smart check_nntp check_procs check_ups

check_dig check_imap check_nntps check_real check_users

check_disk check_ircd check_nrpe check_rpc check_wave

check_disk_smb check_jabber check_nt check_sensors eventhandlers

check_dns check_ldap check_ntp check_simap negate

check_dummy check_ldaps check_ntp_peer check_smtp urlize

check_file_age check_load check_ntp.pl check_snmp utils.pm

check_flexlm check_log check_ntp_time check_spop utils.sh

check_fping check_mailq check_nwstat check_ssh

check_ftp check_mrtg check_oracle check_ssmtp

67

Tuesday, June 18, 13

Page 77: Mwalls velocity levelup

$ ls /usr/lib64/nagios/plugins

nagios plugins

check_breeze check_game check_mrtgtraf check_overcr check_swap

check_by_ssh check_hpjd check_mysql check_pgsql check_tcp

check_clamd check_http check_mysql_query check_ping check_time

check_cluster check_icmp check_nagios check_pop check_udp

check_dhcp check_ide_smart check_nntp check_procs check_ups

check_dig check_imap check_nntps check_real check_users

check_disk check_ircd check_nrpe check_rpc check_wave

check_disk_smb check_jabber check_nt check_sensors eventhandlers

check_dns check_ldap check_ntp check_simap negate

check_dummy check_ldaps check_ntp_peer check_smtp urlize

check_file_age check_load check_ntp.pl check_snmp utils.pm

check_flexlm check_log check_ntp_time check_spop utils.sh

check_fping check_mailq check_nwstat check_ssh

check_ftp check_mrtg check_oracle check_ssmtp

Hey! A DNS Checker!

67

Tuesday, June 18, 13

Page 78: Mwalls velocity levelup

check_dns

• We can use these plugins to test out what we’re doing

• Don’t require any additional frameworks or scary things

• Many of them work just fine over the network, too

68

Tuesday, June 18, 13

Page 79: Mwalls velocity levelup

$ /usr/lib64/nagios/plugins/check_dns -h

Check DNS

check_dns v1.4.16 (nagios-plugins 1.4.16)

Copyright (c) 1999 Ethan Galstad <[email protected]>

Copyright (c) 2000-2008 Nagios Plugin Development Team

! <[email protected]>

This plugin uses the nslookup program to obtain the IP address for the given host/domain query.

An optional DNS server to use may be specified.

If no DNS server is specified, the default server(s) specified in /etc/resolv.conf will be used.

Usage:

check_dns -H host [-s server] [-a expected-address] [-A] [-t timeout] [-w warn] [-c crit]

69

Tuesday, June 18, 13

Page 80: Mwalls velocity levelup

$ check_dns -H box.local -s 127.0.0.1 -a 192.168.1.21

When check_dns is ok

DNS OK: 0.004 seconds response time. box.local returns 192.168.1.21|time=0.004142s;;;0.000000

$ echo $?

0

70

Tuesday, June 18, 13

Page 81: Mwalls velocity levelup

$ check_dns -H box.local -s 127.0.0.1 -a 192.168.1.22

check_dns errors

DNS CRITICAL - expected '192.168.1.22' but got '192.168.1.21'

$ echo $?

2

71

Tuesday, June 18, 13

Page 82: Mwalls velocity levelup

cool

• Now we have a way to test our changes

• Behaves in a predictable way

• Now let’s add one more component: a test harness

72

Tuesday, June 18, 13

Page 83: Mwalls velocity levelup

Task 4: testing with bats

• Bash Automated Testing System

• Like all good tools, bats is impossible to google

• https://github.com/sstephenson/bats

omg these are adorable. http://www.flickr.com/photos/37539972@N06/3980094382/sizes/z/in/photostream/

73http://www.etsy.com/shop/theitsybitsyspider

Tuesday, June 18, 13

Page 84: Mwalls velocity levelup

What the bats

• Allows you to test that UNIX programs do what you expect

• Write stuff in bash to test other system commands

• Easy to get hold of return codes, output

• Let’s see an example: checking the nagios configs

74

Tuesday, June 18, 13

Page 85: Mwalls velocity levelup

$ bats /srv/velocity/nagios.bats

Using bats

1..1

ok 1 nagios is all good

75

Tuesday, June 18, 13

Page 86: Mwalls velocity levelup

$ bats /srv/velocity/nagios.bats

Using bats

1..1

ok 1 nagios is all good

75

Tuesday, June 18, 13

Page 87: Mwalls velocity levelup

$ bats /srv/velocity/nagios.bats

Using bats

1..1

ok 1 nagios is all good

Ran one test

75

Tuesday, June 18, 13

Page 88: Mwalls velocity levelup

$ bats /srv/velocity/nagios.bats

Using bats

1..1

ok 1 nagios is all good

Ran one test

75

Tuesday, June 18, 13

Page 89: Mwalls velocity levelup

$ bats /srv/velocity/nagios.bats

Using bats

1..1

ok 1 nagios is all good

Ran one test

All good!

75

Tuesday, June 18, 13

Page 90: Mwalls velocity levelup

$ cat /srv/velocity/nagios.bats

#!/usr/bin/env bats

@test "nagios is all good" {

result="$(sudo service nagios checkconfig)"

[ "$?" -eq 0 ]

}

76

Tuesday, June 18, 13

Page 91: Mwalls velocity levelup

$ cat /srv/velocity/nagios.bats

#!/usr/bin/env bats

@test "nagios is all good" {

result="$(sudo service nagios checkconfig)"

[ "$?" -eq 0 ]

}

76

Tuesday, June 18, 13

Page 92: Mwalls velocity levelup

$ cat /srv/velocity/nagios.bats

#!/usr/bin/env bats

@test "nagios is all good" {

result="$(sudo service nagios checkconfig)"

[ "$?" -eq 0 ]

}

Run a system command!

76

Tuesday, June 18, 13

Page 93: Mwalls velocity levelup

$ cat /srv/velocity/nagios.bats

#!/usr/bin/env bats

@test "nagios is all good" {

result="$(sudo service nagios checkconfig)"

[ "$?" -eq 0 ]

}

Run a system command!

76

Tuesday, June 18, 13

Page 94: Mwalls velocity levelup

$ cat /srv/velocity/nagios.bats

#!/usr/bin/env bats

@test "nagios is all good" {

result="$(sudo service nagios checkconfig)"

[ "$?" -eq 0 ]

}

Run a system command!

Check the return code!

76

Tuesday, June 18, 13

Page 95: Mwalls velocity levelup

$ cat /srv/velocity/nagios.bats

#!/usr/bin/env bats

@test "nagios is all good" {

result="$(sudo service nagios checkconfig)"

[ "$?" -eq 0 ]

}

Run a system command!

Check the return code!

76

Tuesday, June 18, 13

Page 96: Mwalls velocity levelup

$ cat /srv/velocity/nagios.bats

#!/usr/bin/env bats

@test "nagios is all good" {

result="$(sudo service nagios checkconfig)"

[ "$?" -eq 0 ]

}

Run a system command!

Check the return code!

Also grabs output, but we don’t need that here

76

Tuesday, June 18, 13

Page 97: Mwalls velocity levelup

We can do this!

http://www.flickr.com/photos/usnationalarchives/3678696585/77

Tuesday, June 18, 13

Page 98: Mwalls velocity levelup

Task 5: All together

1. write a new bats test so it fails

2. make the changes to our zonefiles

1. check them in with git, build our package, install it

3. re-run our bats test to prove it passes

4. Win.

Let’s say we have a task to add velocity.local / 192.168.1.24 to our zone

78

Tuesday, June 18, 13

Page 99: Mwalls velocity levelup

$ cd ~/bindfiles$ mkdir tests$ vi tests/velocity.bats

1: bats test

• What to test?

• Forward lookup : velocity.bats

• Backwards lookup : 192.168.1.24

• Use the check_dns nagios plugin

79

Tuesday, June 18, 13

Page 100: Mwalls velocity levelup

velocity.bats#!/usr/bin/env bats

@test "velocity.local forward lookup is good" {

/usr/lib64/nagios/plugins/check_dns -H velocity.local -s 127.0.0.1 -a 192.168.1.24

[ "$?" -eq 0 ]

}

@test "velocity.local reverse lookup is good" {

/usr/lib64/nagios/plugins/check_dns -H 192.168.1.24 -s 127.0.0.1 -a velocity.local.

[ "$?" -eq 0 ]

}

80

Tuesday, June 18, 13

Page 101: Mwalls velocity levelup

$ bats testing/velocity.bats

Pre-test fails

1..2

not ok 1 velocity.local forward lookup is good

# /home/velocity/bindfiles/tests/velocity.bats:4

# Domain velocity.local was not found by the server

not ok 2 velocity.local reverse lookup is good

# /home/velocity/bindfiles/tests/velocity.bats:9

# Domain 192.168.1.24 was not found by the server

81

Tuesday, June 18, 13

Page 102: Mwalls velocity levelup

$ git add tests$ git commit -m "Adding bats testing"$ git push

Check the tests in

• Matter of preference, checking the new tests directory in first

82

Tuesday, June 18, 13

Page 103: Mwalls velocity levelup

$ vi db.192

2: Make your DNS changes

...

; also list other computers

21 IN PTR box.local.

22 IN PTR wat.local.

24 IN PTR velocity.local.

83

Tuesday, June 18, 13

Page 104: Mwalls velocity levelup

$ vi db.192

2: Make your DNS changes

...

; also list other computers

21 IN PTR box.local.

22 IN PTR wat.local.

24 IN PTR velocity.local.

Update your Serial too! Or don’t; pre-commit will

know!

83

Tuesday, June 18, 13

Page 105: Mwalls velocity levelup

$ vi db.local

....

;also list other computers

box IN A 192.168.1.21

wat IN A 192.168.1.22

velocity IN A 192.168.1.24

84

Tuesday, June 18, 13

Page 106: Mwalls velocity levelup

$ vi db.local

....

;also list other computers

box IN A 192.168.1.21

wat IN A 192.168.1.22

velocity IN A 192.168.1.24

Update your Serial too! Or don’t; pre-commit will

know!

84

Tuesday, June 18, 13

Page 107: Mwalls velocity levelup

$ git add db.*$ git commit -m “Adding velocity.local”$ git push

85

Tuesday, June 18, 13

Page 108: Mwalls velocity levelup

$ fpm -s dir -t rpm -v 1.2 --prefix=/var/named \ -n "zonefiles" --after-install \ /srv/velocity/restart_named.sh db*

3: Build the zonefiles rpm

Created rpm {:path=>"zonefiles-1.2-1.x86_64.rpm"}

$ sudo rpm -Uhv zonefiles-1.2-1.x86_64.rpmPreparing... ########################################### [100%]

1:zonefiles ########################################### [100%]

Stopping named: [ OK ]

Starting named: [ OK ]

86

Tuesday, June 18, 13

Page 109: Mwalls velocity levelup

$ bats tests/velocity.bats

4: Re-run your tests

1..2

ok 1 velocity.local forward lookup is good

ok 2 velocity.local reverse lookup is good

87

Tuesday, June 18, 13

Page 110: Mwalls velocity levelup

How about that

• We wrote a test first, before making changes

• The test fails before the changes are made!

• Make the changes

• Run the test again, it succeeds!

88 http://www.coolfbcovers.net/wp-content/uploads/2013/05/Success-Kid.jpg

Tuesday, June 18, 13

Page 111: Mwalls velocity levelup

Our Goals: Transparency

• Are we working on something that adds value?

89

Tuesday, June 18, 13

Page 112: Mwalls velocity levelup

Our Goals: Reliability

• Does our new process keep things running?

90

Tuesday, June 18, 13

Page 113: Mwalls velocity levelup

Our Goals: Resiliency

• Does our new process make it easy to rebuild, recover, scale?

91

Tuesday, June 18, 13

Page 114: Mwalls velocity levelup

Our Goals: Correctness

• Does our new process ensure that the work we’re doing is correct?

92

Tuesday, June 18, 13

Page 115: Mwalls velocity levelup

Building from here

93 http://www.flickr.com/photos/kalmyket/691478431/sizes/z/in/photostream/

Tuesday, June 18, 13

Page 116: Mwalls velocity levelup

Configuration Management

• USE IT

• Yes, there is a learning curve

• Yes, it will be worth it in the long run

94

Tuesday, June 18, 13

Page 117: Mwalls velocity levelup

Logging

• Big Data and Business Intelligence analytics are everywhere

• Logs have value to Ops, Dev, BizDev, Marketing, etc

• Tools like logstash help you put together better pipeline

• http://logstash.net

95

Tuesday, June 18, 13

Page 118: Mwalls velocity levelup

Metrics

• We’ve seen lots of talks about metrics at Velocity

• statsd

• graphite

• Learn you some R

• Metrics also have value to groups outside of Ops

96

Tuesday, June 18, 13

Page 119: Mwalls velocity levelup

Monitoring

• Monitor all, alert few

• Check out Monitorama, a conference and emerging community around monitoring

• http://monitorama.com

97

Tuesday, June 18, 13

Page 120: Mwalls velocity levelup

Get Virtual

• Do more real-world testing

• vagrant, vbox, cloud providers

• Make Dev and QA really look like prod

98

Tuesday, June 18, 13

Page 121: Mwalls velocity levelup

Next

Fostering innovation by making resources available

99

Tuesday, June 18, 13

Page 122: Mwalls velocity levelup

Takeaways

• Reliable, repeatable processes

• Make stuff easy to do right

• Reduce risk of mistakes, misunderstandings

• Reduce the need for personal heroics

http://www.flickr.com/photos/ginnerobot/2877212845/sizes/z/in/photostream/100

Tuesday, June 18, 13

Page 123: Mwalls velocity levelup

Thanks!

• Thanks for your kind attention

• Please keep the conversation going with your teams

101

Tuesday, June 18, 13